models.py 8.6 KB

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