models.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. """Database models"""
  2. import datetime
  3. from sqlalchemy import MetaData, Column, ForeignKey, Integer, String, \
  4. SmallInteger, DateTime, BigInteger, Date, Boolean
  5. from sqlalchemy.orm import relationship, backref
  6. from sqlalchemy.ext.declarative import declarative_base
  7. meta = MetaData(naming_convention={
  8. 'ix': 'ix_%(column_0_label)s',
  9. 'uq': 'uq_%(table_name)s_%(column_0_name)s',
  10. 'ck': 'ck_%(table_name)s_%(constraint_name)s',
  11. 'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
  12. 'pk': 'pk_%(table_name)s'
  13. })
  14. Base = declarative_base(metadata=meta)
  15. class Region(Base):
  16. """Model for region"""
  17. __tablename__ = 'region'
  18. id = Column(Integer, primary_key=True)
  19. name = Column(String)
  20. gold_limit = Column(SmallInteger)
  21. oil_limit = Column(SmallInteger)
  22. ore_limit = Column(SmallInteger)
  23. uranium_limit = Column(SmallInteger)
  24. diamond_limit = Column(SmallInteger)
  25. class DeepExploration(Base):
  26. """Model for deep exploration"""
  27. __tablename__ = 'deep_exploration'
  28. id = Column(Integer, primary_key=True)
  29. date_time_end = Column(DateTime)
  30. region_id = Column(Integer)
  31. resource_type = Column(SmallInteger)
  32. region_id = Column(Integer, ForeignKey('region.id'))
  33. region_track = relationship(
  34. 'Region',
  35. backref=backref('deep_explorations', lazy='dynamic')
  36. )
  37. class ResourceTrack(Base):
  38. """Model for resource track"""
  39. __tablename__ = 'resource_track'
  40. id = Column(Integer, primary_key=True)
  41. resource_type = Column(SmallInteger)
  42. date_time = Column(DateTime)
  43. state_id = Column(Integer, ForeignKey('state.id'))
  44. state = relationship(
  45. 'State',
  46. backref=backref('resource_tracks', lazy='dynamic')
  47. )
  48. class ResourceStat(Base):
  49. """Model for resource stat"""
  50. __tablename__ = 'resource_stat'
  51. id = Column(Integer, primary_key=True)
  52. explored = Column(SmallInteger)
  53. deep_exploration = Column(SmallInteger)
  54. limit_left = Column(SmallInteger)
  55. resource_track_id = Column(Integer, ForeignKey('resource_track.id'))
  56. resource_track = relationship(
  57. 'ResourceTrack',
  58. backref=backref('resource_stats', lazy='dynamic')
  59. )
  60. region_id = Column(Integer, ForeignKey('region.id'))
  61. region = relationship(
  62. 'Region',
  63. backref=backref('resource_stats', lazy='dynamic')
  64. )
  65. class StateRegion(Base):
  66. """Model for state region"""
  67. __tablename__ = 'state_region'
  68. state_id = Column(Integer, ForeignKey('state.id'), primary_key=True)
  69. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  70. from_date_time = Column(DateTime, primary_key=True)
  71. until_date_time = Column(DateTime)
  72. class State(Base):
  73. """Model for state"""
  74. __tablename__ = 'state'
  75. id = Column(Integer, primary_key=True)
  76. name = Column(String)
  77. regions = relationship('Region', secondary='state_region')
  78. capital_id = Column(Integer, ForeignKey('region.id'))
  79. capital = relationship(
  80. 'Region',
  81. backref=backref('state_capital', lazy='dynamic')
  82. )
  83. class Department(Base):
  84. """Model for department"""
  85. __tablename__ = 'department'
  86. id = Column(Integer, primary_key=True)
  87. name = Column(String)
  88. department_type = Column(Integer)
  89. state_id = Column(Integer, ForeignKey('state.id'))
  90. state = relationship(
  91. 'State',
  92. backref=backref('elections', lazy='dynamic')
  93. )
  94. class DepartmentStat(Base):
  95. """Model for departent stat"""
  96. __tablename__ = 'department_stat'
  97. id = Column(Integer, primary_key=True)
  98. date_time = Column(DateTime)
  99. points = Column(SmallInteger)
  100. player_id = Column(BigInteger, ForeignKey('player.id'))
  101. player = relationship(
  102. 'Player',
  103. backref=backref('department_stats', lazy='dynamic')
  104. )
  105. department_id = Column(Integer, ForeignKey('department.id'))
  106. department = relationship(
  107. 'Department',
  108. backref=backref('stats', lazy='dynamic')
  109. )
  110. class PlayerParty(Base):
  111. """Model fro player party"""
  112. __tablename__ = 'player_party'
  113. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  114. party_id = Column(Integer, ForeignKey('party.id'), primary_key=True)
  115. from_date_time = Column(DateTime, primary_key=True)
  116. until_date_time = Column(DateTime)
  117. class PlayerLocation(Base):
  118. """Model for player location"""
  119. __tablename__ = 'player_location'
  120. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  121. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  122. from_date_time = Column(DateTime, primary_key=True)
  123. until_date_time = Column(DateTime)
  124. class PlayerResidency(Base):
  125. """Model for player residency"""
  126. __tablename__ = 'player_residency'
  127. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  128. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  129. from_date_time = Column(DateTime, primary_key=True)
  130. until_date_time = Column(DateTime)
  131. class StateWorkPermit(Base):
  132. """Model for state work permit"""
  133. __tablename__ = 'state_work_permit'
  134. state_id = Column(Integer, ForeignKey('state.id'), primary_key=True)
  135. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  136. from_date_time = Column(DateTime, primary_key=True)
  137. until_date_time = Column(DateTime)
  138. class Player(Base):
  139. """Model for player"""
  140. __tablename__ = 'player'
  141. id = Column(BigInteger, primary_key=True)
  142. name = Column(String)
  143. nation = Column(String)
  144. registration_date = Column(Date)
  145. residencies = relationship('Region', secondary='player_residency')
  146. locations = relationship('Region', secondary='player_location')
  147. parties = relationship('Region', secondary='player_party')
  148. state_work_permits = relationship('State', secondary='state_work_permit')
  149. class Party(Base):
  150. """Model for party"""
  151. __tablename__ = 'party'
  152. id = Column(Integer, primary_key=True)
  153. name = Column(String)
  154. description = Column(String(512))
  155. from_date_time = Column(DateTime)
  156. until_date_time = Column(DateTime)
  157. class Election(Base):
  158. """Model for election"""
  159. __tablename__ = 'election'
  160. id = Column(Integer, primary_key=True)
  161. convocation_date_time = Column(DateTime)
  162. state_id = Column(Integer, ForeignKey('state.id'))
  163. state = relationship(
  164. 'State',
  165. backref=backref('elections', lazy='dynamic')
  166. )
  167. class ElectionStat(Base):
  168. """Model for election stat"""
  169. __tablename__ = 'election_stat'
  170. id = Column(Integer, primary_key=True)
  171. percentage = Column(SmallInteger)
  172. seats = Column(SmallInteger)
  173. election_id = Column(Integer, ForeignKey('election.id'))
  174. election = relationship(
  175. 'Election',
  176. backref=backref('election_stats', lazy='dynamic')
  177. )
  178. party_id = Column(Integer, ForeignKey('party.id'))
  179. party = relationship(
  180. 'Party',
  181. backref=backref('election_stats', lazy='dynamic')
  182. )
  183. class MilitaryAcademy(Base):
  184. """Model for military academy"""
  185. __tablename__ = 'military_academy'
  186. id = Column(Integer, primary_key=True)
  187. date_time = Column(DateTime)
  188. player_id = Column(BigInteger, ForeignKey('player.id'))
  189. player = relationship(
  190. 'User',
  191. backref=backref('military_academies', lazy='dynamic')
  192. )
  193. region_id = Column(Integer, ForeignKey('region.id'))
  194. region = relationship(
  195. 'Region',
  196. backref=backref('military_academies', lazy='dynamic')
  197. )
  198. class Factory(Base):
  199. """Model for factory"""
  200. __tablename__ = 'factory'
  201. id = Column(Integer, primary_key=True)
  202. name = Column(String)
  203. resource_type = Column(SmallInteger)
  204. player_id = Column(BigInteger, ForeignKey('player.id'))
  205. player = relationship(
  206. 'User',
  207. backref=backref('factories', lazy='dynamic')
  208. )
  209. class FactoryTrack(Base):
  210. """Model for facctory track"""
  211. __tablename__ = 'factory_track'
  212. id = Column(Integer, primary_key=True)
  213. date_time = Column(DateTime)
  214. state_id = Column(Integer, ForeignKey('state.id'))
  215. state = relationship(
  216. 'State',
  217. backref=backref('factory_tracks', lazy='dynamic')
  218. )
  219. class FactoryLocation(Base):
  220. """Model for factory location"""
  221. __tablename__ = 'factory_location'
  222. factory_id = Column(Integer, ForeignKey('factory.id'), primary_key=True)
  223. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  224. from_date_time = Column(DateTime, primary_key=True)
  225. until_date_time = Column(DateTime)
  226. class FactoryStat(Base):
  227. """Model for factory"""
  228. __tablename__ = 'factory_stat'
  229. id = Column(Integer, primary_key=True)
  230. level = Column(SmallInteger)
  231. workers = Column(SmallInteger)
  232. experience = Column(Integer)
  233. wage = Column(Integer)
  234. factory_id = Column(Integer, ForeignKey('factory.id'))
  235. factory = relationship(
  236. 'FactoryTrack',
  237. backref=backref('factory_stats', lazy='dynamic')
  238. )
  239. factory_track_id = Column(Integer, ForeignKey('factory_track.id'))
  240. factory_track = relationship(
  241. 'FactoryTrack',
  242. backref=backref('factory_stats', lazy='dynamic')
  243. )
  244. class FactoryOwner(Base):
  245. """Model for factory owner"""
  246. __tablename__ = 'factory_owner'
  247. factory_id = Column(Integer, ForeignKey('factory.id'), primary_key=True)
  248. owner = relationship(
  249. 'Factory',
  250. backref=backref('owners', lazy='dynamic')
  251. )
  252. owner_id = Column(Integer, ForeignKey('player.id'), primary_key=True)
  253. owner = relationship(
  254. 'Player',
  255. backref=backref('owned_factories', lazy='dynamic')
  256. )
  257. from_date_time = Column(DateTime, primary_key=True)
  258. until_date_time = Column(DateTime)
  259. class Auction(Base):
  260. """Model for auction"""
  261. __tablename__ = 'auction'
  262. id = Column(Integer, primary_key=True)
  263. lot = Column(String)
  264. factory_id = Column(Integer, ForeignKey('factory.id'))
  265. player = relationship(
  266. 'Factory',
  267. backref=backref('won_auctions', lazy='dynamic')
  268. )
  269. end_date_time = Column(DateTime)
  270. bet = Column(BigInteger)
  271. money = Column(Boolean, server_default='f', default=False)
  272. class MarketTrack(Base):
  273. """Model for market track"""
  274. __tablename__ = 'market_track'
  275. id = Column(Integer, primary_key=True)
  276. date_time = Column(DateTime)
  277. player_resources = Column(Boolean, server_default='f', default=False)
  278. state_resources = Column(Boolean, server_default='f', default=False)
  279. items = Column(Boolean, server_default='f', default=False)
  280. class PlayerMarketStat(Base):
  281. """Model for market stat"""
  282. __tablename__ = 'player_market_stat'
  283. id = Column(Integer, primary_key=True)
  284. item_type = Column(SmallInteger)
  285. price = Column(Integer)
  286. amount = Column(BigInteger)
  287. half_t_average = Column(Integer)
  288. one_t_average = Column(Integer)
  289. two_t_average = Column(Integer)
  290. five_t_average = Column(Integer)
  291. total_offers = Column(Integer)
  292. player_id = Column(BigInteger, ForeignKey('player.id'))
  293. player = relationship(
  294. 'Player',
  295. backref=backref('player_market_stats', lazy='dynamic')
  296. )
  297. market_track_id = Column(Integer, ForeignKey('market_track.id'))
  298. market_track = relationship(
  299. 'MarketTrack',
  300. backref=backref('player_market_stats', lazy='dynamic')
  301. )
  302. class StateMarketStat(Base):
  303. """Model for market stat"""
  304. __tablename__ = 'state_market_stat'
  305. id = Column(Integer, primary_key=True)
  306. item_type = Column(SmallInteger)
  307. price = Column(Integer)
  308. amount = Column(BigInteger)
  309. region_id = Column(Integer, ForeignKey('region.id'))
  310. region = relationship(
  311. 'Region',
  312. backref=backref('region_market_stats', lazy='dynamic')
  313. )
  314. market_track_id = Column(Integer, ForeignKey('market_track.id'))
  315. market_track = relationship(
  316. 'MarketTrack',
  317. backref=backref('state_market_stats', lazy='dynamic')
  318. )
  319. class TelegramAccount(Base):
  320. """Model for Telegram account"""
  321. __tablename__ = 'telegram_account'
  322. id = Column(BigInteger, primary_key=True)
  323. name = Column(String)
  324. registration_date = Column(DateTime)
  325. class TelegramHandle(Base):
  326. """Model for Telegram handle"""
  327. __tablename__ = 'telegram_handle'
  328. id = Column(Integer, primary_key=True)
  329. handle = Column(String)
  330. registration_date = Column(DateTime)
  331. telegram_account_id = Column(BigInteger, ForeignKey('telegram_account.id'))
  332. telegram_account = relationship(
  333. 'TelegramAccount',
  334. backref=backref('account_handles', lazy='dynamic')
  335. )
  336. class PlayerTelegram(Base):
  337. """Model for belongs to"""
  338. __tablename__ = 'player_telegram'
  339. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  340. telegram_id = Column(BigInteger, ForeignKey('telegram_account.id'), primary_key=True)
  341. from_date_time = Column(DateTime, primary_key=True)
  342. until_date_time = Column(DateTime)
  343. class TelegramVerification(Base):
  344. """Model for Telegram verification"""
  345. __tablename__ = 'telegram_verification'
  346. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  347. telegram_id = Column(BigInteger, ForeignKey('telegram_account.id'), primary_key=True)
  348. code = Column(String)
  349. date_time = Column(DateTime)
  350. confirmed = Column(Boolean, server_default='f', default=False)
  351. class Donation(Base):
  352. """Model for donation"""
  353. __tablename__ = 'donation'
  354. id = Column(Integer, primary_key=True)
  355. amount = Column(BigInteger)
  356. resources = Column(SmallInteger)
  357. date_time = Column(DateTime)
  358. player_id = Column(BigInteger, ForeignKey('player.id'))
  359. player = relationship(
  360. 'Player',
  361. backref=backref('donations', lazy='dynamic')
  362. )
  363. fund_id = Column(BigInteger, ForeignKey('fund.id'))
  364. fund = relationship(
  365. 'Fund',
  366. backref=backref('donations', lazy='dynamic')
  367. )
  368. class DonationTrigger(Base):
  369. """Donation trigger"""
  370. __tablename__ = 'table_name'
  371. id = Column(Integer, primary_key=True)
  372. resource_type = Column(Integer)
  373. from_date_time = Column(DateTime)
  374. until_date_time = Column(DateTime)
  375. class Fund(Base):
  376. """Model for fund"""
  377. __tablename__ = 'fund'
  378. id = Column(Integer, primary_key=True)
  379. name = Column(String)
  380. player_id = Column(BigInteger, ForeignKey('player.id'))
  381. player = relationship(
  382. 'Player',
  383. backref=backref('funds', lazy='dynamic')
  384. )
  385. region_id = Column(Integer, ForeignKey('region.id'))
  386. region_track = relationship(
  387. 'Region',
  388. backref=backref('funds', lazy='dynamic')
  389. )
  390. class Balance(Base):
  391. """Model for balance"""
  392. __tablename__ = 'balance'
  393. fund_id = Column(Integer, ForeignKey('fund.id'))
  394. fund_track = relationship(
  395. 'Fund',
  396. backref=backref('funds', lazy='dynamic')
  397. )
  398. amount = Column(Integer)
  399. resource = Column(SmallInteger)
  400. class Transfer(Base):
  401. """Model for transfer"""
  402. __tablename__ = 'transfer'
  403. from_region_id = Column(Integer, ForeignKey('region.id'))
  404. from_region_track = relationship(
  405. 'Region',
  406. backref=backref('export_transfer', lazy='dynamic')
  407. )
  408. to_region_id = Column(Integer, ForeignKey('region.id'))
  409. to_region_track = relationship(
  410. 'Region',
  411. backref=backref('import_transfer', lazy='dynamic')
  412. )