database.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. """Main application"""
  2. from datetime import datetime, timedelta, timezone
  3. from sqlalchemy import or_, and_
  4. from sqlalchemy.orm import joinedload
  5. from app import SESSION
  6. from app.models import ResourceTrack, ResourceStat, Region
  7. def save_resources(state_id, regions, resource_id):
  8. """Save resources to database"""
  9. session = SESSION()
  10. resource_track = ResourceTrack()
  11. resource_track.state_id = state_id
  12. resource_track.resource_type = resource_id
  13. resource_track.date_time = datetime.now()
  14. session.add(resource_track)
  15. session.commit()
  16. for region_id, region_dict in regions.items():
  17. region = session.query(Region).get(region_id)
  18. if not region:
  19. region = save_region(session, region_id, region_dict)
  20. resource_stat = ResourceStat()
  21. resource_stat.resource_track_id = resource_track.id
  22. resource_stat.region_id = region.id
  23. resource_stat.explored = region_dict['explored']
  24. resource_stat.deep_exploration = region_dict['deep_exploration']
  25. resource_stat.limit_left = region_dict['limit_left']
  26. session.add(resource_stat)
  27. session.commit()
  28. session.close()
  29. def save_region(session, region_id, region_dict):
  30. """Save player to database"""
  31. region = Region()
  32. region.id = region_id
  33. region.name = region_dict['region_name']
  34. session.add(region)
  35. return region
  36. def get_resources(region_id, date, resource_type):
  37. """Get resources on a date"""
  38. end_date_time = date.replace(hour=18, minute=0, second=0, microsecond=0)
  39. start_date_time = end_date_time - timedelta(1)
  40. session = SESSION()
  41. resource = {}
  42. resource_stats = session.query(ResourceStat) \
  43. .options(joinedload(ResourceStat.resource_track)) \
  44. .join(ResourceStat.resource_track) \
  45. .filter(ResourceStat.region_id == region_id) \
  46. .filter(ResourceTrack.resource_type == resource_type) \
  47. .filter(ResourceTrack.date_time >= start_date_time) \
  48. .filter(ResourceTrack.date_time <= end_date_time) \
  49. .all()
  50. start_limit = resource_stats[0].explored
  51. for resource_stat in resource_stats:
  52. time = resource_stat.resource_track.date_time
  53. resource[time] = resource_stat.explored + resource_stat.limit_left
  54. session.close()
  55. new_resource = {}
  56. for time, amount in resource.items():
  57. new_time = time.replace(tzinfo=timezone.utc).astimezone(tz=None) + timedelta(hours=1)
  58. new_resource[new_time] = amount - start_limit
  59. return new_resource
  60. def get_state_regions(state_id):
  61. """Get regions from state"""
  62. session = SESSION()
  63. state_regions = session.query(StateRegion) \
  64. .filter(and_(StateRegion.state_id == state_id, StateRegion.until_date_time == None)) \
  65. .all()
  66. regions = []
  67. for state_region in state_regions:
  68. regions.append(state_region.region)
  69. session.close()
  70. return regions