models.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. """Database models"""
  2. import datetime
  3. from sqlalchemy import MetaData, Column, ForeignKey, Integer, String, SmallInteger, DateTime, Table
  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. state_region = Table(
  65. 'state_region',
  66. Base.metadata,
  67. Column('state_id', Integer, ForeignKey('state.id')),
  68. Column('region_id', Integer, ForeignKey('region.id')),
  69. Column('from_date_time', DateTime),
  70. Column('until_date_time', DateTime),
  71. )
  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. class Department(Base):
  79. """Model for department"""
  80. __tablename__ = 'department'
  81. id = Column(Integer, primary_key=True)
  82. name = Column(String)
  83. department_type = Column(Integer)
  84. class DepartmentStat(Base):
  85. """Model for departent stat"""
  86. __tablename__ = 'department_stat'
  87. id = Column(Integer, primary_key=True)
  88. date_time = Column(DateTime)
  89. points = Column(SmallInteger)
  90. player_id = Column(Integer, ForeignKey('player.id'))
  91. player = relationship(
  92. 'Player',
  93. backref=backref('department_stats', lazy='dynamic')
  94. )
  95. department_id = Column(Integer, ForeignKey('department.id'))
  96. department = relationship(
  97. 'Department',
  98. backref=backref('stats', lazy='dynamic')
  99. )
  100. player_party = Table(
  101. 'player_party',
  102. Base.metadata,
  103. Column('player_id', Integer, ForeignKey('player.id')),
  104. Column('party_id', Integer, ForeignKey('party.id')),
  105. Column('from_date_time', DateTime),
  106. Column('until_date_time', DateTime),
  107. )
  108. player_residency = Table(
  109. 'player_residency',
  110. Base.metadata,
  111. Column('player_id', Integer, ForeignKey('player.id')),
  112. Column('region_id', Integer, ForeignKey('region.id')),
  113. Column('from_date_time', DateTime),
  114. Column('until_date_time', DateTime),
  115. )
  116. player_location = Table(
  117. 'player_location',
  118. Base.metadata,
  119. Column('player_id', Integer, ForeignKey('player.id')),
  120. Column('region_id', Integer, ForeignKey('region.id')),
  121. Column('from_date_time', DateTime),
  122. Column('until_date_time', DateTime),
  123. )
  124. class Player(Base):
  125. """Model for player"""
  126. __tablename__ = 'player'
  127. id = Column(Integer, primary_key=True)
  128. name = Column(String)
  129. nation = Column(String)
  130. residencies = relationship('Region', secondary=player_residency)
  131. locations = relationship('Region', secondary=player_location)
  132. parties = relationship('Region', secondary=player_party)
  133. class Party(Base):
  134. """Model for party"""
  135. __tablename__ = 'party'
  136. id = Column(Integer, primary_key=True)
  137. name = Column(String)
  138. description = Column(String(512))
  139. from_date_time = Column(DateTime)
  140. until_date_time = Column(DateTime)
  141. class Election(Base):
  142. """Model for election"""
  143. __tablename__ = 'election'
  144. id = Column(Integer, primary_key=True)
  145. state_id = Column(Integer, ForeignKey('state.id'))
  146. convocation_date_time = Column(DateTime)
  147. state = relationship(
  148. 'State',
  149. backref=backref('elections', lazy='dynamic')
  150. )
  151. class ElectionStat(Base):
  152. """Model for election stat"""
  153. __tablename__ = 'election_stat'
  154. id = Column(Integer, primary_key=True)
  155. percentage = Column(SmallInteger)
  156. seats = Column(SmallInteger)
  157. election_id = Column(Integer, ForeignKey('election.id'))
  158. election = relationship(
  159. 'Election',
  160. backref=backref('election_stats', lazy='dynamic')
  161. )
  162. party_id = Column(Integer, ForeignKey('party.id'))
  163. party = relationship(
  164. 'Party',
  165. backref=backref('election_stats', lazy='dynamic')
  166. )
  167. class MilitaryAcademy(Base):
  168. """Model for military academy"""
  169. __tablename__ = 'military_academy'
  170. id = Column(Integer, primary_key=True)
  171. date_time = Column(DateTime)
  172. player_id = Column(Integer, ForeignKey('player.id'))
  173. player = relationship(
  174. 'User',
  175. backref=backref('military_academies', lazy='dynamic')
  176. )
  177. region_id = Column(Integer, ForeignKey('region.id'))
  178. region = relationship(
  179. 'Region',
  180. backref=backref('military_academies', lazy='dynamic')
  181. )
  182. class Factory(Base):
  183. """Model for factory"""
  184. __tablename__ = 'factory'
  185. id = Column(Integer, primary_key=True)
  186. name = Column(String)
  187. player_id = Column(Integer, ForeignKey('player.id'))
  188. player = relationship(
  189. 'User',
  190. backref=backref('factories', lazy='dynamic')
  191. )
  192. class FactoryTrack(Base):
  193. """Model for facctory track"""
  194. __tablename__ = 'factory_track'
  195. id = Column(Integer, primary_key=True)
  196. date_time = Column(DateTime)
  197. state_id = Column(Integer, ForeignKey('state.id'))
  198. state = relationship(
  199. 'State',
  200. backref=backref('factory_tracks', lazy='dynamic')
  201. )
  202. class FactoryStat(Base):
  203. """Model for factory"""
  204. __tablename__ = 'factory_stat'
  205. id = Column(Integer, primary_key=True)
  206. level = Column(SmallInteger)
  207. workers = Column(SmallInteger)
  208. experience = Column(Integer)
  209. wage = Column(Integer)
  210. factory_id = Column(Integer, ForeignKey('factory.id'))
  211. factory = relationship(
  212. 'FactoryTrack',
  213. backref=backref('factory_stats', lazy='dynamic')
  214. )
  215. factory_track_id = Column(Integer, ForeignKey('factory_track.id'))
  216. factory_track = relationship(
  217. 'FactoryTrack',
  218. backref=backref('factory_stats', lazy='dynamic')
  219. )
  220. region_id = Column(Integer, ForeignKey('region.id'))
  221. region = relationship(
  222. 'Region',
  223. backref=backref('factory_stats', lazy='dynamic')
  224. )
  225. class MarketTrack(Base):
  226. """Model for market track"""
  227. __tablename__ = 'market_track'
  228. id = Column(Integer, primary_key=True)
  229. date_time = Column(DateTime)
  230. class PersonalMarketStat(Base):
  231. """Model for market stat"""
  232. __tablename__ = 'personal_market_stat'
  233. id = Column(Integer, primary_key=True)
  234. item_type = Column(SmallInteger)
  235. price = Column(Integer)
  236. market_track_id = Column(Integer, ForeignKey('market_track.id'))
  237. market_track = relationship(
  238. 'MarketTrack',
  239. backref=backref('personal_market_stats', lazy='dynamic')
  240. )
  241. class StateMarketStat(Base):
  242. """Model for market stat"""
  243. __tablename__ = 'state_market_stat'
  244. id = Column(Integer, primary_key=True)
  245. item_type = Column(SmallInteger)
  246. price = Column(Integer)
  247. market_track_id = Column(Integer, ForeignKey('market_track.id'))
  248. market_track = relationship(
  249. 'MarketTrack',
  250. backref=backref('state_market_stats', lazy='dynamic')
  251. )