model.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import sqlite3 as db
  2. import sys
  3. import uuid
  4. from game import money_amount
  5. connection = None
  6. cursor = None
  7. def connect():
  8. global connection
  9. global cursor
  10. if connection is None or cursor is None:
  11. try:
  12. connection = db.connect('boerse.db')
  13. cursor = connection.cursor()
  14. except db.Error as e:
  15. print("Database error %s:" % e.args[0])
  16. sys.exit(1)
  17. # finally:
  18. # if con is not None:
  19. # con.close()
  20. def setup():
  21. connect()
  22. print('Database setup...')
  23. replace = True
  24. if replace:
  25. print(' Dropping old tables...')
  26. cursor.execute("DROP TABLE IF EXISTS users")
  27. cursor.execute("DROP TABLE IF EXISTS ownables")
  28. cursor.execute("DROP TABLE IF EXISTS ownership")
  29. cursor.execute("DROP TABLE IF EXISTS sessions")
  30. print(' Creating tables...')
  31. cursor.execute('''
  32. CREATE TABLE IF NOT EXISTS users(
  33. username VARCHAR(10) UNIQUE NOT NULL,
  34. password VARCHAR(6) NOT NULL)
  35. ''')
  36. cursor.execute('''
  37. CREATE TABLE IF NOT EXISTS ownables(
  38. name VARCHAR(10) UNIQUE NOT NULL,
  39. total_amount INTEGER NOT NULL)
  40. ''')
  41. cursor.execute('''
  42. CREATE TABLE IF NOT EXISTS ownership(
  43. user_id INTEGER NOT NULL,
  44. stock_id INTEGER NOT NULL,
  45. amount INTEGER NOT NULL DEFAULT 0,
  46. FOREIGN KEY (user_id) REFERENCES users(rowid),
  47. FOREIGN KEY (stock_id) REFERENCES ownables(rowid),
  48. UNIQUE (user_id, stock_id)
  49. )
  50. ''')
  51. cursor.execute('''
  52. CREATE TABLE IF NOT EXISTS sessions(
  53. user_id INTEGER NOT NULL,
  54. session_id STRING NOT NULL,
  55. FOREIGN KEY (user_id) REFERENCES users(rowid)
  56. )
  57. ''')
  58. print(' Adding initial data...')
  59. cursor.execute('''
  60. INSERT INTO users
  61. (username, password)
  62. VALUES ("bank", "")
  63. ''')
  64. cursor.execute('''
  65. SELECT rowid
  66. FROM users
  67. WHERE username = "bank"
  68. ''')
  69. bank_id = cursor.fetchone()[0]
  70. cursor.execute('''
  71. INSERT INTO ownables
  72. (name, total_amount)
  73. VALUES ("Kollar", ?)
  74. ''', (money_amount,))
  75. cursor.execute('''
  76. SELECT rowid
  77. FROM users
  78. WHERE username = "bank"
  79. ''')
  80. kollar_id = cursor.fetchone()[0]
  81. cursor.execute('''
  82. INSERT INTO ownership
  83. (user_id, stock_id, amount)
  84. VALUES (?, ?, ?)
  85. ''', (bank_id, kollar_id, money_amount))
  86. def login(username, password):
  87. connect()
  88. # do not allow login as bank
  89. if password == '':
  90. return None
  91. cursor.execute('''
  92. SELECT rowid
  93. FROM users
  94. WHERE username = ?
  95. AND password = ?
  96. ''', (username, password))
  97. user_id = cursor.fetchone()
  98. if user_id:
  99. return new_session(user_id)
  100. else:
  101. return None
  102. def register(username, password):
  103. connect()
  104. if username == '':
  105. return False
  106. if password == '':
  107. return False
  108. cursor.execute('''
  109. INSERT INTO users
  110. (username, password)
  111. VALUES (? , ?)
  112. ''', (username, password))
  113. return True
  114. def new_session(user_id):
  115. connect()
  116. session_id = str(uuid.uuid4())
  117. cursor.execute('''
  118. INSERT INTO SESSIONS
  119. (user_id, session_id)
  120. VALUES (? , ?)
  121. ''', (user_id[0], session_id))
  122. return session_id
  123. def drop_old_sessions():
  124. connect()
  125. # TODO: test
  126. cursor.execute('''
  127. DELETE FROM sessions s1
  128. WHERE
  129. (SELECT COUNT(*) as newer
  130. FROM sessions s2
  131. WHERE s1.user_id = s2.user_id
  132. AND s1.rowid < s2.rowid) >= 10
  133. ''')
  134. def user_exists(username):
  135. connect()
  136. cursor.execute('''
  137. SELECT rowid
  138. FROM users
  139. WHERE username = ?
  140. ''', (username,))
  141. if cursor.fetchone():
  142. return True
  143. else:
  144. return False
  145. def move_money(username):
  146. connect()
  147. cursor.execute()