database.py 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. for player_dict in citizens:
  13. player = session.query(Player).get(player_dict['id'])
  14. if player is None:
  15. player = save_player(player_dict)
  16. last_region = player.locations.first()
  17. if not last_region or last_region.id != region_id:
  18. player_location = PlayerLocation()
  19. player_location.player_id = player.id
  20. player_location.region_id = region_id
  21. player_location.from_date_time = datetime.now()
  22. session.add(player_location)
  23. session.commit()
  24. if last_region:
  25. old_player_location = session.query(PlayerLocation) \
  26. .filter(PlayerLocation.player_id == player.id) \
  27. .filter(PlayerLocation.region_id == last_region.id) \
  28. .order_by(PlayerLocation.from_date_time.desc()).first()
  29. old_player_location.until_date_time = datetime.now()
  30. session.commit()
  31. def save_residents(region_id, residents):
  32. """Save residents to database"""
  33. for player_dict in residents:
  34. player = session.query(Player).get(player_dict['id'])
  35. if player is None:
  36. player = save_player(player_dict)
  37. last_residency = player.residencies.first()
  38. if not last_residency or last_residency.id != region_id:
  39. player_location = PlayerResidency()
  40. player_location.player_id = player.id
  41. player_location.region_id = region_id
  42. player_location.from_date_time = datetime.now()
  43. session.add(player_location)
  44. session.commit()
  45. if last_residency:
  46. old_player_residency = session.query(PlayerResidency) \
  47. .filter(PlayerResidency.player_id == player.id) \
  48. .filter(PlayerResidency.region_id == last_residency.id) \
  49. .order_by(PlayerResidency.from_date_time.desc()).first()
  50. old_player_residency.until_date_time = datetime.now()
  51. session.commit()
  52. def save_work_permits(state_id, work_permits):
  53. """Save residents to database"""
  54. for player_dict in work_permits:
  55. player = session.query(Player).get(player_dict['id'])
  56. if player is None:
  57. player = save_player(player_dict)
  58. last_work_permit = player.state_work_permits.first()
  59. if not last_work_permit or last_work_permit.id != state_id:
  60. state_work_permit = StateWorkPermit()
  61. state_work_permit.player_id = player.id
  62. state_work_permit.state_id = state_id
  63. state_work_permit.from_date_time = datetime.now()
  64. session.add(state_work_permit)
  65. session.commit()
  66. if last_work_permit:
  67. old_state_work_permit = session.query(StateWorkPermit) \
  68. .filter(StateWorkPermit.player_id == player.id) \
  69. .filter(StateWorkPermit.state_id == last_work_permit.id) \
  70. .order_by(StateWorkPermit.from_date_time.desc()).first()
  71. old_state_work_permit.until_date_time = datetime.now()
  72. session.commit()
  73. def save_player(player_dict):
  74. """Save player to database"""
  75. player = Player()
  76. player.id = player_dict['id']
  77. player.name = player_dict['name']
  78. player.nation = player_dict['nation']
  79. player.registration_date = player_dict['registration_date']
  80. session.add(player)
  81. session.commit()
  82. return player