database.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. """Database module"""
  2. from datetime import datetime
  3. from app import session
  4. from app.models import State, Region, Player, StateRegion, PlayerLocation, PlayerResidency
  5. def get_state_regions(state_id):
  6. """Get regions from state"""
  7. state = session.query(State).get(state_id)
  8. regions = state.regions.filter(StateRegion.until_date_time == None).all()
  9. return regions
  10. def save_citizens(region_id, citizens):
  11. """Save citizens to database"""
  12. for player_dict in citizens:
  13. player = session.query(Player).get(player_dict['id'])
  14. if player is None:
  15. player = Player()
  16. player.id = player_dict['id']
  17. player.name = player_dict['name']
  18. session.add(player)
  19. session.commit()
  20. last_region = player.locations.first()
  21. if not last_region or last_region.id != region_id:
  22. player_location = PlayerLocation()
  23. player_location.player_id = player.id
  24. player_location.region_id = region_id
  25. player_location.from_date_time = datetime.now()
  26. session.add(player_location)
  27. session.commit()
  28. if last_region:
  29. old_player_location = session.query(PlayerLocation) \
  30. .filter(PlayerLocation.player_id == player.id) \
  31. .filter(PlayerLocation.region_id == last_region.id).first()
  32. old_player_location.until_date_time = datetime.now()
  33. session.commit()
  34. def save_residents(region_id, residents):
  35. """Save residents to database"""
  36. for player_dict in residents:
  37. player = session.query(Player).get(player_dict['id'])
  38. if player is None:
  39. player = Player()
  40. player.id = player_dict['id']
  41. player.name = player_dict['name']
  42. session.add(player)
  43. session.commit()
  44. last_residency = player.residencies.first()
  45. if not last_residency or last_residency.id != region_id:
  46. player_location = PlayerResidency()
  47. player_location.player_id = player.id
  48. player_location.region_id = region_id
  49. player_location.from_date_time = datetime.now()
  50. session.add(player_location)
  51. session.commit()
  52. if last_residency:
  53. old_player_residency = session.query(PlayerResidency) \
  54. .filter(PlayerResidency.player_id == player.id) \
  55. .filter(PlayerResidency.region_id == last_residency.id).first()
  56. old_player_residency.until_date_time = datetime.now()
  57. session.commit()