models.py 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709
  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. from sqlalchemy.sql import func
  8. meta = MetaData(naming_convention={
  9. 'ix': 'ix_%(column_0_label)s',
  10. 'uq': 'uq_%(table_name)s_%(column_0_name)s',
  11. 'ck': 'ck_%(table_name)s_%(constraint_name)s',
  12. 'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
  13. 'pk': 'pk_%(table_name)s'
  14. })
  15. Base = declarative_base(metadata=meta)
  16. class Region(Base):
  17. """Model for region"""
  18. __tablename__ = 'region'
  19. id = Column(Integer, primary_key=True)
  20. name = Column(String)
  21. gold_limit = Column(SmallInteger)
  22. oil_limit = Column(SmallInteger)
  23. ore_limit = Column(SmallInteger)
  24. uranium_limit = Column(SmallInteger)
  25. diamond_limit = Column(SmallInteger)
  26. class DeepExploration(Base):
  27. """Model for deep exploration"""
  28. __tablename__ = 'deep_exploration'
  29. id = Column(Integer, primary_key=True)
  30. until_date_time = Column(DateTime)
  31. points = Column(Integer)
  32. resource_type = Column(SmallInteger)
  33. region_id = Column(Integer, ForeignKey('region.id'))
  34. region = relationship(
  35. 'Region',
  36. backref=backref('deep_explorations', lazy='dynamic')
  37. )
  38. class DeepExplorationOrder(Base):
  39. """Model for deep exploration order"""
  40. __tablename__ = 'deep_exploration_order'
  41. id = Column(Integer, primary_key=True)
  42. resource_type = Column(SmallInteger, nullable=False)
  43. order_type = Column(SmallInteger, nullable=False)
  44. amount = Column(Integer)
  45. from_date_time = Column(DateTime)
  46. until_date_time = Column(DateTime)
  47. region_id = Column(Integer, ForeignKey('region.id'))
  48. region = relationship(
  49. 'Region',
  50. backref=backref('resource_stats', lazy='dynamic')
  51. )
  52. order_types = {
  53. 0: 'max',
  54. 1: 'fixed',
  55. 2: 'percentage',
  56. 3: 'auto',
  57. }
  58. def order_type_name(self):
  59. """Type name"""
  60. if self.order_type in self.order_types:
  61. return self.order_types[self.type]
  62. return 'unknown'
  63. class ResourceTrack(Base):
  64. """Model for resource track"""
  65. __tablename__ = 'resource_track'
  66. id = Column(Integer, primary_key=True)
  67. resource_type = Column(SmallInteger)
  68. date_time = Column(DateTime)
  69. state_id = Column(Integer, ForeignKey('state.id'))
  70. state = relationship(
  71. 'State',
  72. backref=backref('resource_tracks', lazy='dynamic')
  73. )
  74. class ResourceStat(Base):
  75. """Model for resource stat"""
  76. __tablename__ = 'resource_stat'
  77. id = Column(Integer, primary_key=True)
  78. explored = Column(SmallInteger)
  79. deep_exploration = Column(SmallInteger)
  80. limit_left = Column(SmallInteger)
  81. resource_track_id = Column(Integer, ForeignKey('resource_track.id'))
  82. resource_track = relationship(
  83. 'ResourceTrack',
  84. backref=backref('resource_stats', lazy='dynamic')
  85. )
  86. region_id = Column(Integer, ForeignKey('region.id'))
  87. region = relationship(
  88. 'Region',
  89. backref=backref('resource_stats', lazy='dynamic')
  90. )
  91. class StateRegion(Base):
  92. """Model for state region"""
  93. __tablename__ = 'state_region'
  94. state_id = Column(Integer, ForeignKey('state.id'), primary_key=True)
  95. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  96. from_date_time = Column(DateTime, primary_key=True)
  97. until_date_time = Column(DateTime)
  98. class State(Base):
  99. """Model for state"""
  100. __tablename__ = 'state'
  101. id = Column(Integer, primary_key=True)
  102. name = Column(String)
  103. regions = relationship('Region', secondary='state_region')
  104. capital_id = Column(Integer, ForeignKey('region.id'))
  105. capital = relationship(
  106. 'Region',
  107. backref=backref('state_capital', lazy='dynamic')
  108. )
  109. class Department(Base):
  110. """Model for department"""
  111. __tablename__ = 'department'
  112. id = Column(Integer, primary_key=True)
  113. name = Column(String)
  114. department_type = Column(Integer)
  115. state_id = Column(Integer, ForeignKey('state.id'))
  116. state = relationship(
  117. 'State',
  118. backref=backref('elections', lazy='dynamic')
  119. )
  120. class DepartmentStat(Base):
  121. """Model for departent stat"""
  122. __tablename__ = 'department_stat'
  123. id = Column(Integer, primary_key=True)
  124. date_time = Column(DateTime)
  125. points = Column(SmallInteger)
  126. player_id = Column(BigInteger, ForeignKey('player.id'))
  127. player = relationship(
  128. 'Player',
  129. backref=backref('department_stats', lazy='dynamic')
  130. )
  131. department_id = Column(Integer, ForeignKey('department.id'))
  132. department = relationship(
  133. 'Department',
  134. backref=backref('stats', lazy='dynamic')
  135. )
  136. class PlayerParty(Base):
  137. """Model fro player party"""
  138. __tablename__ = 'player_party'
  139. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  140. party_id = Column(Integer, ForeignKey('party.id'), primary_key=True)
  141. from_date_time = Column(DateTime, primary_key=True)
  142. until_date_time = Column(DateTime)
  143. class PlayerLocation(Base):
  144. """Model for player location"""
  145. __tablename__ = 'player_location'
  146. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  147. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  148. from_date_time = Column(DateTime, primary_key=True)
  149. until_date_time = Column(DateTime)
  150. class PlayerResidency(Base):
  151. """Model for player residency"""
  152. __tablename__ = 'player_residency'
  153. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  154. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  155. from_date_time = Column(DateTime, primary_key=True)
  156. until_date_time = Column(DateTime)
  157. class StateWorkPermit(Base):
  158. """Model for state work permit"""
  159. __tablename__ = 'state_work_permit'
  160. state_id = Column(Integer, ForeignKey('state.id'), primary_key=True)
  161. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  162. from_date_time = Column(DateTime, primary_key=True)
  163. until_date_time = Column(DateTime)
  164. class Player(Base):
  165. """Model for player"""
  166. __tablename__ = 'player'
  167. id = Column(BigInteger, primary_key=True)
  168. name = Column(String)
  169. nation = Column(String)
  170. registration_date = Column(Date)
  171. residencies = relationship('Region', secondary='player_residency')
  172. locations = relationship('Region', secondary='player_location')
  173. parties = relationship('Region', secondary='player_party')
  174. state_work_permits = relationship('State', secondary='state_work_permit')
  175. class Party(Base):
  176. """Model for party"""
  177. __tablename__ = 'party'
  178. id = Column(Integer, primary_key=True)
  179. name = Column(String)
  180. description = Column(String(512))
  181. from_date_time = Column(DateTime)
  182. until_date_time = Column(DateTime)
  183. class Election(Base):
  184. """Model for election"""
  185. __tablename__ = 'election'
  186. id = Column(Integer, primary_key=True)
  187. convocation_date_time = Column(DateTime)
  188. state_id = Column(Integer, ForeignKey('state.id'))
  189. state = relationship(
  190. 'State',
  191. backref=backref('elections', lazy='dynamic')
  192. )
  193. class ElectionStat(Base):
  194. """Model for election stat"""
  195. __tablename__ = 'election_stat'
  196. id = Column(Integer, primary_key=True)
  197. percentage = Column(SmallInteger)
  198. seats = Column(SmallInteger)
  199. election_id = Column(Integer, ForeignKey('election.id'))
  200. election = relationship(
  201. 'Election',
  202. backref=backref('election_stats', lazy='dynamic')
  203. )
  204. party_id = Column(Integer, ForeignKey('party.id'))
  205. party = relationship(
  206. 'Party',
  207. backref=backref('election_stats', lazy='dynamic')
  208. )
  209. class MilitaryAcademy(Base):
  210. """Model for military academy"""
  211. __tablename__ = 'military_academy'
  212. id = Column(Integer, primary_key=True)
  213. date_time = Column(DateTime)
  214. player_id = Column(BigInteger, ForeignKey('player.id'))
  215. player = relationship(
  216. 'User',
  217. backref=backref('military_academies', lazy='dynamic')
  218. )
  219. region_id = Column(Integer, ForeignKey('region.id'))
  220. region = relationship(
  221. 'Region',
  222. backref=backref('military_academies', lazy='dynamic')
  223. )
  224. class Factory(Base):
  225. """Model for factory"""
  226. __tablename__ = 'factory'
  227. id = Column(Integer, primary_key=True)
  228. name = Column(String)
  229. resource_type = Column(SmallInteger)
  230. player_id = Column(BigInteger, ForeignKey('player.id'))
  231. player = relationship(
  232. 'User',
  233. backref=backref('factories', lazy='dynamic')
  234. )
  235. class FactoryTrack(Base):
  236. """Model for facctory track"""
  237. __tablename__ = 'factory_track'
  238. id = Column(Integer, primary_key=True)
  239. date_time = Column(DateTime)
  240. state_id = Column(Integer, ForeignKey('state.id'))
  241. state = relationship(
  242. 'State',
  243. backref=backref('factory_tracks', lazy='dynamic')
  244. )
  245. class FactoryLocation(Base):
  246. """Model for factory location"""
  247. __tablename__ = 'factory_location'
  248. factory_id = Column(Integer, ForeignKey('factory.id'), primary_key=True)
  249. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  250. from_date_time = Column(DateTime, primary_key=True)
  251. until_date_time = Column(DateTime)
  252. class FactoryStat(Base):
  253. """Model for factory"""
  254. __tablename__ = 'factory_stat'
  255. id = Column(Integer, primary_key=True)
  256. level = Column(SmallInteger)
  257. workers = Column(SmallInteger)
  258. experience = Column(Integer)
  259. wage = Column(Integer)
  260. factory_id = Column(Integer, ForeignKey('factory.id'))
  261. factory = relationship(
  262. 'FactoryTrack',
  263. backref=backref('factory_stats', lazy='dynamic')
  264. )
  265. factory_track_id = Column(Integer, ForeignKey('factory_track.id'))
  266. factory_track = relationship(
  267. 'FactoryTrack',
  268. backref=backref('factory_stats', lazy='dynamic')
  269. )
  270. class FactoryOwner(Base):
  271. """Model for factory owner"""
  272. __tablename__ = 'factory_owner'
  273. factory_id = Column(Integer, ForeignKey('factory.id'), primary_key=True)
  274. owner = relationship(
  275. 'Factory',
  276. backref=backref('owners', lazy='dynamic')
  277. )
  278. owner_id = Column(Integer, ForeignKey('player.id'), primary_key=True)
  279. owner = relationship(
  280. 'Player',
  281. backref=backref('owned_factories', lazy='dynamic')
  282. )
  283. from_date_time = Column(DateTime, primary_key=True)
  284. until_date_time = Column(DateTime)
  285. class Auction(Base):
  286. """Model for auction"""
  287. __tablename__ = 'auction'
  288. id = Column(Integer, primary_key=True)
  289. lot = Column(String)
  290. factory_id = Column(Integer, ForeignKey('factory.id'))
  291. player = relationship(
  292. 'Factory',
  293. backref=backref('won_auctions', lazy='dynamic')
  294. )
  295. end_date_time = Column(DateTime)
  296. bet = Column(BigInteger)
  297. money = Column(Boolean, server_default='f', default=False)
  298. class MarketTrack(Base):
  299. """Model for market track"""
  300. __tablename__ = 'market_track'
  301. id = Column(Integer, primary_key=True)
  302. date_time = Column(DateTime)
  303. player_resources = Column(Boolean, server_default='f', default=False)
  304. state_resources = Column(Boolean, server_default='f', default=False)
  305. items = Column(Boolean, server_default='f', default=False)
  306. class PlayerMarketStat(Base):
  307. """Model for market stat"""
  308. __tablename__ = 'player_market_stat'
  309. id = Column(Integer, primary_key=True)
  310. item_type = Column(SmallInteger)
  311. price = Column(Integer)
  312. amount = Column(BigInteger)
  313. half_t_average = Column(Integer)
  314. one_t_average = Column(Integer)
  315. two_t_average = Column(Integer)
  316. five_t_average = Column(Integer)
  317. total_offers = Column(Integer)
  318. player_id = Column(BigInteger, ForeignKey('player.id'))
  319. player = relationship(
  320. 'Player',
  321. backref=backref('player_market_stats', lazy='dynamic')
  322. )
  323. market_track_id = Column(Integer, ForeignKey('market_track.id'))
  324. market_track = relationship(
  325. 'MarketTrack',
  326. backref=backref('player_market_stats', lazy='dynamic')
  327. )
  328. class StateMarketStat(Base):
  329. """Model for market stat"""
  330. __tablename__ = 'state_market_stat'
  331. id = Column(Integer, primary_key=True)
  332. item_type = Column(SmallInteger)
  333. price = Column(Integer)
  334. amount = Column(BigInteger)
  335. region_id = Column(Integer, ForeignKey('region.id'))
  336. region = relationship(
  337. 'Region',
  338. backref=backref('region_market_stats', lazy='dynamic')
  339. )
  340. market_track_id = Column(Integer, ForeignKey('market_track.id'))
  341. market_track = relationship(
  342. 'MarketTrack',
  343. backref=backref('state_market_stats', lazy='dynamic')
  344. )
  345. class TelegramAccount(Base):
  346. """Model for Telegram account"""
  347. __tablename__ = 'telegram_account'
  348. id = Column(BigInteger, primary_key=True)
  349. name = Column(String)
  350. registration_date = Column(DateTime)
  351. class TelegramHandle(Base):
  352. """Model for Telegram handle"""
  353. __tablename__ = 'telegram_handle'
  354. id = Column(Integer, primary_key=True)
  355. handle = Column(String)
  356. registration_date = Column(DateTime)
  357. telegram_account_id = Column(BigInteger, ForeignKey('telegram_account.id'))
  358. telegram_account = relationship(
  359. 'TelegramAccount',
  360. backref=backref('account_handles', lazy='dynamic')
  361. )
  362. class PlayerTelegram(Base):
  363. """Model for belongs to"""
  364. __tablename__ = 'player_telegram'
  365. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  366. telegram_id = Column(BigInteger, ForeignKey('telegram_account.id'), primary_key=True)
  367. from_date_time = Column(DateTime, primary_key=True)
  368. until_date_time = Column(DateTime)
  369. class TelegramVerification(Base):
  370. """Model for Telegram verification"""
  371. __tablename__ = 'telegram_verification'
  372. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  373. telegram_id = Column(BigInteger, ForeignKey('telegram_account.id'), primary_key=True)
  374. code = Column(String)
  375. date_time = Column(DateTime)
  376. confirmed = Column(Boolean, server_default='f', default=False)
  377. #class WorkerTrack(Base):
  378. # """Model for worker track"""
  379. # __tablename__ = 'worker_track'
  380. # id = Column(Integer, primary_key=True)
  381. # player_id = Column(BigInteger, ForeignKey('player.id'))
  382. # factory_id = Column(Integer, ForeignKey('factory.id'))
  383. # from_date_time = Column(DateTime)
  384. # energy = Column(Integer)
  385. #
  386. # player = relationship(
  387. # 'Player',
  388. # backref=backref('work_tracks', lazy='dynamic')
  389. # )
  390. # factory = relationship(
  391. # 'FactoryTrack',
  392. # backref=backref('worker_tracks', lazy='dynamic')
  393. # )
  394. #class Wage(Base):
  395. # """Model for wage"""
  396. # __tablename__ = 'wage'
  397. # id = Column(Integer, primary_key=True)
  398. # balance_id = Column(BigInteger, ForeignKey('balance.id'))
  399. # factory_id = Column(Integer, ForeignKey('factory.id'))
  400. # date_time = Column(DateTime)
  401. #
  402. # balance = relationship(
  403. # 'Balance',
  404. # backref=backref('wages', lazy='dynamic')
  405. # )
  406. # factory = relationship(
  407. # 'FactoryTrack',
  408. # backref=backref('wages', lazy='dynamic')
  409. # )
  410. # balance = relationship(
  411. # 'Balance',
  412. # backref=backref('wages', lazy='dynamic')
  413. # )
  414. class Account(Base):
  415. """Model for account"""
  416. __tablename__ = 'account'
  417. id = Column(Integer, primary_key=True)
  418. name = Column(String)
  419. player_id = Column(BigInteger, ForeignKey('player.id'))
  420. create_date_time = Column(DateTime, server_default=func.utcnow())
  421. update_date_time = Column(DateTime, onupdate=func.utcnow())
  422. delete_date_time = Column(DateTime)
  423. player = relationship(
  424. 'Player',
  425. backref=backref('cash_balances', lazy='dynamic')
  426. )
  427. class CashBalance(Base):
  428. """Model for cash balance"""
  429. __tablename__ = 'cash_balance'
  430. id = Column(Integer, primary_key=True)
  431. account_id = Column(Integer, ForeignKey('account.id'))
  432. player_id = Column(BigInteger, ForeignKey('player.id'))
  433. amount = Column(BigInteger)
  434. create_date_time = Column(DateTime, server_default=func.utcnow())
  435. update_date_time = Column(DateTime, onupdate=func.utcnow())
  436. delete_date_time = Column(DateTime)
  437. account = relationship(
  438. 'Account',
  439. backref=backref('cash_balances', lazy='dynamic')
  440. )
  441. player = relationship(
  442. 'Player',
  443. backref=backref('cash_balances', lazy='dynamic')
  444. )
  445. class CashMutation(Base):
  446. """Model for cash mutation"""
  447. __tablename__ = 'cash_mutation'
  448. id = Column(Integer, primary_key=True)
  449. from_cash_balance = Column(Integer, ForeignKey('cash_balance.id'))
  450. to_cash_balance = Column(Integer, ForeignKey('cash_balance.id'))
  451. date_time = Column(DateTime, server_default=func.utcnow())
  452. amount = Column(BigInteger)
  453. description = Column(String(255))
  454. invoice_rule_id = Column(Integer, ForeignKey('invoice_rule'))
  455. invoice_rule = relationship(
  456. 'InvoiceRule',
  457. backref=backref('cash_mutations', lazy='dynamic')
  458. )
  459. class BalanceHistory(Base):
  460. """Model for balance history"""
  461. __tablename__ = 'balance_history'
  462. id = Column(Integer, primary_key=True)
  463. current_balance = Column(BigInteger)
  464. amount = Column(BigInteger)
  465. player_id = Column(BigInteger, ForeignKey('player.id'))
  466. resource_type = Column(SmallInteger)
  467. resource_amount = Column(BigInteger)
  468. cash_mutation_id = Column(Integer, ForeignKey('cash_mutation.id'))
  469. player = relationship(
  470. 'Player',
  471. backref=backref('balance_histories', lazy='dynamic')
  472. )
  473. cash_mutation = relationship(
  474. 'CashMutation',
  475. backref=backref('balance_history', uselist=False, lazy='dynamic')
  476. )
  477. class ResourceBalance(Base):
  478. """Model for resource balance"""
  479. __tablename__ = 'resource_balance'
  480. id = Column(Integer, primary_key=True)
  481. account_id = Column(Integer, ForeignKey('account.id'))
  482. player_id = Column(BigInteger, ForeignKey('player.id'))
  483. resource_type = Column(SmallInteger)
  484. amount = Column(BigInteger)
  485. update_date_time = Column(DateTime, server_default=func.utcnow(), onupdate=func.utcnow())
  486. minimum_price = Column(Integer)
  487. player = relationship(
  488. 'Player',
  489. backref=backref('resource_balances', lazy='dynamic')
  490. )
  491. account = relationship(
  492. 'Account',
  493. backref=backref('resource_balances', lazy='dynamic')
  494. )
  495. class ResourceTransfer(Base):
  496. """Model for resource transfer"""
  497. __tablename__ = 'resource_transfer'
  498. id = Column(Integer, primary_key=True)
  499. from_region_id = Column(Integer, ForeignKey('region.id'))
  500. to_region_id = Column(Integer, ForeignKey('region.id'))
  501. date_time = Column(DateTime, server_default=func.utcnow())
  502. resource_type = Column(SmallInteger)
  503. amount = Column(BigInteger)
  504. resource_mutation_id = Column(Integer, ForeignKey('resource_mutation.id'))
  505. resource_mutation = relationship(
  506. 'ResourceMutation',
  507. backref=backref('resource_mutation', uselist=False, lazy='dynamic')
  508. )
  509. class ResourceMutation(Base):
  510. """Model for resource mutation"""
  511. __tablename__ = 'resource_mutation'
  512. id = Column(Integer, primary_key=True)
  513. from_resource_balance_id = Column(Integer, ForeignKey('resource_balance.id'))
  514. to_resource_balance_id = Column(Integer, ForeignKey('resource_balance.id'))
  515. amount = Column(BigInteger)
  516. class Withdraw(Base):
  517. """Model for withdraw"""
  518. __tablename__ = 'withdraw'
  519. id = Column(Integer, primary_key=True)
  520. balance_id = Column(BigInteger, ForeignKey('balance.id'))
  521. class Donation(Base):
  522. """Model for donation"""
  523. __tablename__ = 'donation'
  524. id = Column(Integer, primary_key=True)
  525. amount = Column(BigInteger)
  526. resources = Column(SmallInteger)
  527. date_time = Column(DateTime)
  528. player_id = Column(BigInteger, ForeignKey('player.id'))
  529. player = relationship(
  530. 'Player',
  531. backref=backref('donations', lazy='dynamic')
  532. )
  533. fund_id = Column(BigInteger, ForeignKey('fund.id'))
  534. fund = relationship(
  535. 'Fund',
  536. backref=backref('donations', lazy='dynamic')
  537. )
  538. class DonationTrigger(Base):
  539. """Donation trigger"""
  540. __tablename__ = 'table_name'
  541. id = Column(Integer, primary_key=True)
  542. resource_type = Column(SmallInteger)
  543. from_date_time = Column(DateTime)
  544. until_date_time = Column(DateTime)
  545. class Fund(Base):
  546. """Model for fund"""
  547. __tablename__ = 'fund'
  548. id = Column(Integer, primary_key=True)
  549. name = Column(String)
  550. player_id = Column(BigInteger, ForeignKey('player.id'))
  551. player = relationship(
  552. 'Player',
  553. backref=backref('funds', lazy='dynamic')
  554. )
  555. region_id = Column(Integer, ForeignKey('region.id'))
  556. region_track = relationship(
  557. 'Region',
  558. backref=backref('funds', lazy='dynamic')
  559. )
  560. class Balance(Base):
  561. """Model for balance"""
  562. __tablename__ = 'balance'
  563. fund_id = Column(Integer, ForeignKey('fund.id'))
  564. fund_track = relationship(
  565. 'Fund',
  566. backref=backref('funds', lazy='dynamic')
  567. )
  568. amount = Column(Integer)
  569. resource = Column(SmallInteger)
  570. class Transfer(Base):
  571. """Model for transfer"""
  572. __tablename__ = 'transfer'
  573. from_region_id = Column(Integer, ForeignKey('region.id'))
  574. from_region_track = relationship(
  575. 'Region',
  576. backref=backref('export_transfer', lazy='dynamic')
  577. )
  578. to_region_id = Column(Integer, ForeignKey('region.id'))
  579. to_region_track = relationship(
  580. 'Region',
  581. backref=backref('import_transfer', lazy='dynamic')
  582. )