db_setup.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. from game import money_amount
  2. from model import cursor
  3. def setup():
  4. print('Database setup...')
  5. replace = True
  6. if replace:
  7. print(' - Dropping old tables...')
  8. cursor.execute("DROP TABLE IF EXISTS users")
  9. cursor.execute("DROP TABLE IF EXISTS ownables")
  10. cursor.execute("DROP TABLE IF EXISTS ownership")
  11. cursor.execute("DROP TABLE IF EXISTS sessions")
  12. cursor.execute("DROP TABLE IF EXISTS orders")
  13. cursor.execute("DROP TABLE IF EXISTS transactions")
  14. print(' - Creating tables...')
  15. cursor.execute('''
  16. CREATE TABLE IF NOT EXISTS users(
  17. username VARCHAR(10) UNIQUE NOT NULL,
  18. password VARCHAR(6) NOT NULL)
  19. ''')
  20. cursor.execute('''
  21. CREATE TABLE IF NOT EXISTS ownables(
  22. name VARCHAR(10) UNIQUE NOT NULL,
  23. total_amount CURRENCY NOT NULL)
  24. ''')
  25. cursor.execute('''
  26. CREATE TABLE IF NOT EXISTS ownership(
  27. user_id INTEGER NOT NULL,
  28. ownable_id INTEGER NOT NULL,
  29. amount CURRENCY NOT NULL DEFAULT 0,
  30. FOREIGN KEY (user_id) REFERENCES users(rowid),
  31. FOREIGN KEY (ownable_id) REFERENCES ownables(rowid),
  32. UNIQUE (user_id, ownable_id)
  33. )
  34. ''')
  35. cursor.execute('''
  36. CREATE TABLE IF NOT EXISTS sessions(
  37. user_id INTEGER NOT NULL,
  38. session_id STRING NOT NULL,
  39. FOREIGN KEY (user_id) REFERENCES users(rowid)
  40. )
  41. ''')
  42. cursor.execute('''
  43. CREATE TABLE IF NOT EXISTS orders(
  44. ownership_id INTEGER NOT NULL,
  45. buy BOOLEAN NOT NULL,
  46. "limit" CURRENCY,
  47. stop_loss BOOLEAN,
  48. ordered_amount CURRENCY,
  49. executed_amount CURRENCY,
  50. FOREIGN KEY (ownership_id) REFERENCES ownership(rowid)
  51. )
  52. ''')
  53. cursor.execute('''
  54. CREATE TABLE IF NOT EXISTS transactions(
  55. dt DATETIME NOT NULL,
  56. price CURRENCY NOT NULL,
  57. ownable_id INTEGER NOT NULL,
  58. FOREIGN KEY (ownable_id) REFERENCES ownable(rowid)
  59. )
  60. ''')
  61. cursor.execute('''
  62. CREATE TABLE IF NOT EXISTS keys(
  63. key STRING UNIQUE NOT NULL,
  64. used_by_user_id INTEGER UNIQUE,
  65. FOREIGN KEY (used_by_user_id) REFERENCES user(rowid)
  66. )
  67. ''')
  68. if replace: # TODO also seed new databases
  69. print(' - Seeding initial data...')
  70. cursor.execute('''
  71. INSERT INTO users
  72. (username, password)
  73. VALUES ("bank", "")
  74. ''')
  75. cursor.execute('''
  76. SELECT rowid
  77. FROM users
  78. WHERE username = "bank"
  79. ''')
  80. bank_id = cursor.fetchone()[0]
  81. cursor.execute('''
  82. INSERT INTO ownables
  83. (name, total_amount)
  84. VALUES ("Kollar", ?)
  85. ''', (money_amount,))
  86. cursor.execute('''
  87. SELECT rowid
  88. FROM users
  89. WHERE username = "bank"
  90. ''')
  91. kollar_id = cursor.fetchone()[0]
  92. cursor.execute('''
  93. INSERT INTO ownership
  94. (user_id, ownable_id, amount)
  95. VALUES (?, ?, ?)
  96. ''', (bank_id, kollar_id, money_amount))