database.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. """Database module"""
  2. from datetime import datetime
  3. from app import session
  4. from app.models import State, Player, StateRegion, \
  5. PlayerLocation, PlayerResidency, StateWorkPermit
  6. def get_state_regions(state_id):
  7. """Get regions from state"""
  8. state = session.query(State).get(state_id)
  9. return state.regions.filter(StateRegion.until_date_time == None).all()
  10. def save_citizens(region_id, citizens):
  11. """Save citizens to database"""
  12. player_ids = []
  13. for player_dict in citizens:
  14. player = session.query(Player).get(player_dict['id'])
  15. if player is None:
  16. player = save_player(player_dict)
  17. player_ids.append(player.id)
  18. last_region = player.locations.first()
  19. if not last_region or last_region.id != region_id:
  20. player_location = PlayerLocation()
  21. player_location.player_id = player.id
  22. player_location.region_id = region_id
  23. player_location.from_date_time = datetime.now()
  24. session.add(player_location)
  25. session.commit()
  26. current_citizens = session.query(PlayerLocation) \
  27. .filter(PlayerLocation.region_id == region_id) \
  28. .filter(PlayerLocation.until_date_time == None).all()
  29. for current_citizen in current_citizens:
  30. if current_citizen.player_id not in player_ids:
  31. current_citizen.until_date_time = datetime.now()
  32. session.commit()
  33. def save_residents(region_id, residents):
  34. """Save residents to database"""
  35. player_ids = []
  36. for player_dict in residents:
  37. player = session.query(Player).get(player_dict['id'])
  38. if player is None:
  39. player = save_player(player_dict)
  40. player_ids.append(player.id)
  41. last_residency = player.residencies.first()
  42. if not last_residency or last_residency.id != region_id:
  43. player_location = PlayerResidency()
  44. player_location.player_id = player.id
  45. player_location.region_id = region_id
  46. player_location.from_date_time = datetime.now()
  47. session.add(player_location)
  48. session.commit()
  49. current_residents = session.query(PlayerResidency) \
  50. .filter(PlayerResidency.region_id == region_id) \
  51. .filter(PlayerResidency.until_date_time == None).all()
  52. for current_resident in current_residents:
  53. if current_resident.player_id not in player_ids:
  54. current_resident.until_date_time = datetime.now()
  55. session.commit()
  56. def save_work_permits(state_id, work_permits):
  57. """Save residents to database"""
  58. player_ids = []
  59. for player_dict in work_permits:
  60. player = session.query(Player).get(player_dict['id'])
  61. if player is None:
  62. player = save_player(player_dict)
  63. player_ids.append(player.id)
  64. last_work_permit = player.state_work_permits.first()
  65. if not last_work_permit or last_work_permit.id != state_id:
  66. state_work_permit = StateWorkPermit()
  67. state_work_permit.player_id = player.id
  68. state_work_permit.state_id = state_id
  69. state_work_permit.from_date_time = player_dict['from']
  70. session.add(state_work_permit)
  71. session.commit()
  72. current_work_permits = session.query(StateWorkPermit) \
  73. .filter(StateWorkPermit.state_id == state_id) \
  74. .filter(StateWorkPermit.until_date_time == None).all()
  75. for current_work_permit in current_work_permits:
  76. if current_work_permit.player_id not in player_ids:
  77. current_work_permit.until_date_time = datetime.now()
  78. session.commit()
  79. def save_player(player_dict):
  80. """Save player to database"""
  81. player = Player()
  82. player.id = player_dict['id']
  83. player.name = player_dict['name']
  84. player.nation = player_dict['nation']
  85. if 'registration_date' in player_dict:
  86. player.registration_date = player_dict['registration_date']
  87. session.add(player)
  88. session.commit()
  89. return player