models.py 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. """Database models"""
  2. import datetime
  3. from sqlalchemy import MetaData, Column, ForeignKey, Integer, String, SmallInteger, DateTime, BigInteger
  4. from sqlalchemy.orm import relationship, backref
  5. from sqlalchemy.ext.declarative import declarative_base
  6. meta = MetaData(naming_convention={
  7. 'ix': 'ix_%(column_0_label)s',
  8. 'uq': 'uq_%(table_name)s_%(column_0_name)s',
  9. 'ck': 'ck_%(table_name)s_%(constraint_name)s',
  10. 'fk': 'fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s',
  11. 'pk': 'pk_%(table_name)s'
  12. })
  13. Base = declarative_base(metadata=meta)
  14. class Region(Base):
  15. """Model for region"""
  16. __tablename__ = 'region'
  17. id = Column(Integer, primary_key=True)
  18. name = Column(String)
  19. gold_limit = Column(SmallInteger)
  20. oil_limit = Column(SmallInteger)
  21. ore_limit = Column(SmallInteger)
  22. uranium_limit = Column(SmallInteger)
  23. diamond_limit = Column(SmallInteger)
  24. class DeepExploration(Base):
  25. """Model for deep exploration"""
  26. __tablename__ = 'deep_exploration'
  27. id = Column(Integer, primary_key=True)
  28. date_time_end = Column(DateTime)
  29. region_id = Column(Integer)
  30. resource_type = Column(SmallInteger)
  31. region_id = Column(Integer, ForeignKey('region.id'))
  32. region_track = relationship(
  33. 'Region',
  34. backref=backref('deep_explorations', lazy='dynamic')
  35. )
  36. class ResourceTrack(Base):
  37. """Model for resource track"""
  38. __tablename__ = 'resource_track'
  39. id = Column(Integer, primary_key=True)
  40. resource_type = Column(SmallInteger)
  41. date_time = Column(DateTime, default=datetime.datetime.utcnow)
  42. state_id = Column(Integer, ForeignKey('state.id'))
  43. state = relationship(
  44. 'State',
  45. backref=backref('resource_tracks', lazy='dynamic')
  46. )
  47. class ResourceStat(Base):
  48. """Model for resource stat"""
  49. __tablename__ = 'resource_stat'
  50. id = Column(Integer, primary_key=True)
  51. explored = Column(SmallInteger)
  52. deep_exploration = Column(SmallInteger)
  53. limit_left = Column(SmallInteger)
  54. resource_track_id = Column(Integer, ForeignKey('resource_track.id'))
  55. resource_track = relationship(
  56. 'ResourceTrack',
  57. backref=backref('resource_stats', lazy='dynamic')
  58. )
  59. region_id = Column(Integer, ForeignKey('region.id'))
  60. region = relationship(
  61. 'Region',
  62. backref=backref('resource_stats', lazy='dynamic')
  63. )
  64. class StateRegion(Base):
  65. """Model for state region"""
  66. __tablename__ = 'state_region'
  67. state_id = Column(Integer, ForeignKey('state.id'), primary_key=True)
  68. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  69. from_date_time = Column(DateTime)
  70. until_date_time = Column(DateTime)
  71. class State(Base):
  72. """Model for state"""
  73. __tablename__ = 'state'
  74. id = Column(Integer, primary_key=True)
  75. name = Column(String)
  76. regions = relationship('Region', secondary='state_region')
  77. capital_id = Column(Integer, ForeignKey('region.id'))
  78. capital = relationship(
  79. 'Region',
  80. backref=backref('state_capital', lazy='dynamic')
  81. )
  82. class Department(Base):
  83. """Model for department"""
  84. __tablename__ = 'department'
  85. id = Column(Integer, primary_key=True)
  86. name = Column(String)
  87. department_type = Column(Integer)
  88. state_id = Column(Integer, ForeignKey('state.id'))
  89. state = relationship(
  90. 'State',
  91. backref=backref('elections', lazy='dynamic')
  92. )
  93. class DepartmentStat(Base):
  94. """Model for departent stat"""
  95. __tablename__ = 'department_stat'
  96. id = Column(Integer, primary_key=True)
  97. date_time = Column(DateTime)
  98. points = Column(SmallInteger)
  99. player_id = Column(BigInteger, ForeignKey('player.id'))
  100. player = relationship(
  101. 'Player',
  102. backref=backref('department_stats', lazy='dynamic')
  103. )
  104. department_id = Column(Integer, ForeignKey('department.id'))
  105. department = relationship(
  106. 'Department',
  107. backref=backref('stats', lazy='dynamic')
  108. )
  109. class PlayerParty(Base):
  110. """Model fro player party"""
  111. __tablename__ = 'player_party'
  112. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  113. party_id = Column(Integer, ForeignKey('party.id'), primary_key=True)
  114. from_date_time = Column(DateTime)
  115. until_date_time = Column(DateTime)
  116. class PlayerLocation(Base):
  117. """Model for player location"""
  118. __tablename__ = 'player_location'
  119. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  120. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  121. from_date_time = Column(DateTime)
  122. until_date_time = Column(DateTime)
  123. class PlayerResidency(Base):
  124. """Model for player residency"""
  125. __tablename__ = 'player_residency'
  126. player_id = Column(BigInteger, ForeignKey('player.id'), primary_key=True)
  127. region_id = Column(Integer, ForeignKey('region.id'), primary_key=True)
  128. from_date_time = Column(DateTime)
  129. until_date_time = Column(DateTime)
  130. class StateWorkPermit(Base):
  131. """Model for state work permit"""
  132. __tablename__ = 'state_work_permit'
  133. state_id = Column(Integer, ForeignKey('state.id'), primary_key=True)
  134. player_id = Column(Integer, ForeignKey('player.id'), primary_key=True)
  135. from_date_time = Column(DateTime)
  136. until_date_time = Column(DateTime)
  137. class Player(Base):
  138. """Model for player"""
  139. __tablename__ = 'player'
  140. id = Column(BigInteger, primary_key=True)
  141. name = Column(String)
  142. nation = Column(String)
  143. residencies = relationship('Region', secondary='player_residency')
  144. locations = relationship('Region', secondary='player_location')
  145. parties = relationship('Region', secondary='player_party')
  146. state_work_permits = relationship('State', secondary='state_work_permit')
  147. class Party(Base):
  148. """Model for party"""
  149. __tablename__ = 'party'
  150. id = Column(Integer, primary_key=True)
  151. name = Column(String)
  152. description = Column(String(512))
  153. from_date_time = Column(DateTime)
  154. until_date_time = Column(DateTime)
  155. class Election(Base):
  156. """Model for election"""
  157. __tablename__ = 'election'
  158. id = Column(Integer, primary_key=True)
  159. convocation_date_time = Column(DateTime)
  160. state_id = Column(Integer, ForeignKey('state.id'))
  161. state = relationship(
  162. 'State',
  163. backref=backref('elections', lazy='dynamic')
  164. )
  165. class ElectionStat(Base):
  166. """Model for election stat"""
  167. __tablename__ = 'election_stat'
  168. id = Column(Integer, primary_key=True)
  169. percentage = Column(SmallInteger)
  170. seats = Column(SmallInteger)
  171. election_id = Column(Integer, ForeignKey('election.id'))
  172. election = relationship(
  173. 'Election',
  174. backref=backref('election_stats', lazy='dynamic')
  175. )
  176. party_id = Column(Integer, ForeignKey('party.id'))
  177. party = relationship(
  178. 'Party',
  179. backref=backref('election_stats', lazy='dynamic')
  180. )
  181. class MilitaryAcademy(Base):
  182. """Model for military academy"""
  183. __tablename__ = 'military_academy'
  184. id = Column(Integer, primary_key=True)
  185. date_time = Column(DateTime)
  186. player_id = Column(BigInteger, ForeignKey('player.id'))
  187. player = relationship(
  188. 'User',
  189. backref=backref('military_academies', lazy='dynamic')
  190. )
  191. region_id = Column(Integer, ForeignKey('region.id'))
  192. region = relationship(
  193. 'Region',
  194. backref=backref('military_academies', lazy='dynamic')
  195. )
  196. class Factory(Base):
  197. """Model for factory"""
  198. __tablename__ = 'factory'
  199. id = Column(Integer, primary_key=True)
  200. name = Column(String)
  201. player_id = Column(BigInteger, ForeignKey('player.id'))
  202. player = relationship(
  203. 'User',
  204. backref=backref('factories', lazy='dynamic')
  205. )
  206. class FactoryTrack(Base):
  207. """Model for facctory track"""
  208. __tablename__ = 'factory_track'
  209. id = Column(Integer, primary_key=True)
  210. date_time = Column(DateTime)
  211. state_id = Column(Integer, ForeignKey('state.id'))
  212. state = relationship(
  213. 'State',
  214. backref=backref('factory_tracks', lazy='dynamic')
  215. )
  216. class FactoryStat(Base):
  217. """Model for factory"""
  218. __tablename__ = 'factory_stat'
  219. id = Column(Integer, primary_key=True)
  220. level = Column(SmallInteger)
  221. workers = Column(SmallInteger)
  222. experience = Column(Integer)
  223. wage = Column(Integer)
  224. factory_id = Column(Integer, ForeignKey('factory.id'))
  225. factory = relationship(
  226. 'FactoryTrack',
  227. backref=backref('factory_stats', lazy='dynamic')
  228. )
  229. factory_track_id = Column(Integer, ForeignKey('factory_track.id'))
  230. factory_track = relationship(
  231. 'FactoryTrack',
  232. backref=backref('factory_stats', lazy='dynamic')
  233. )
  234. region_id = Column(Integer, ForeignKey('region.id'))
  235. region = relationship(
  236. 'Region',
  237. backref=backref('factory_stats', lazy='dynamic')
  238. )
  239. class MarketTrack(Base):
  240. """Model for market track"""
  241. __tablename__ = 'market_track'
  242. id = Column(Integer, primary_key=True)
  243. date_time = Column(DateTime)
  244. class PersonalMarketStat(Base):
  245. """Model for market stat"""
  246. __tablename__ = 'personal_market_stat'
  247. id = Column(Integer, primary_key=True)
  248. item_type = Column(SmallInteger)
  249. price = Column(Integer)
  250. market_track_id = Column(Integer, ForeignKey('market_track.id'))
  251. market_track = relationship(
  252. 'MarketTrack',
  253. backref=backref('personal_market_stats', lazy='dynamic')
  254. )
  255. class StateMarketStat(Base):
  256. """Model for market stat"""
  257. __tablename__ = 'state_market_stat'
  258. id = Column(Integer, primary_key=True)
  259. item_type = Column(SmallInteger)
  260. price = Column(Integer)
  261. market_track_id = Column(Integer, ForeignKey('market_track.id'))
  262. market_track = relationship(
  263. 'MarketTrack',
  264. backref=backref('state_market_stats', lazy='dynamic')
  265. )