database.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. """Database module"""
  2. from datetime import datetime
  3. from app import SESSION
  4. from app.models import State, Region, Factory, FactoryTrack, FactoryStat, FactoryLocation
  5. def get_state(state_id):
  6. """Get regions from state"""
  7. session = SESSION()
  8. state = session.query(State).get(state_id)
  9. session.close()
  10. return state
  11. def get_regions(state_id):
  12. """Get region from state"""
  13. session = SESSION()
  14. state = session.query(State).get(state_id)
  15. regions = state.regions
  16. session.close()
  17. return regions
  18. def save_factories(state_id, factories):
  19. """Save factories to database"""
  20. session = SESSION()
  21. session.close()
  22. factory_track = FactoryTrack()
  23. factory_track.state_id = state_id
  24. factory_track.date_time = datetime.now()
  25. session.add(factory_track)
  26. for factory_dict in factories:
  27. factory = session.query(Factory).get(factory_dict['id'])
  28. if factory is None:
  29. factory = save_factory(session, factory_dict)
  30. factory_stat = FactoryStat()
  31. factory_stat.level = factory_dict['level']
  32. factory_stat.experience = factory_dict['experience']
  33. factory_stat.wage = factory_dict['wage']
  34. factory_stat.workers = factory_dict['workers']
  35. factory_stat.factory_id = factory.id
  36. factory_stat.factory_track_id = factory_track.id
  37. session.add(factory_stat)
  38. current_location = session.query(FactoryLocation) \
  39. .filter(FactoryLocation.factory_id == factory.id) \
  40. .filter(FactoryLocation.until_date_time == None).first()
  41. if not current_location or current_location.region.name != factory_dict['region_name']:
  42. region = session.query(Region) \
  43. .filter(Region.name == factory_dict['region_name']).first()
  44. factory_location = FactoryLocation()
  45. factory_location.factory_id = factory.id
  46. factory_location.region_id = region.id
  47. factory_location.from_date_time = datetime.now()
  48. session.add(factory_location)
  49. if current_location:
  50. current_location.until_date_time = datetime.now()
  51. session.commit()
  52. session.close()
  53. def save_factory(session, factory_dict):
  54. """Save factory to database"""
  55. factory = Factory()
  56. factory.id = factory_dict['id']
  57. factory.name = factory_dict['name']
  58. factory.resource_type = factory_dict['resource_type']
  59. session.add(factory)
  60. return factory