Skip to content

Commit

Permalink
Merge pull request #954 from theijhay/fix/duplicate-Time-Zone
Browse files Browse the repository at this point in the history
feat: fixed duplicate timezones
  • Loading branch information
johnson-oragui authored Aug 24, 2024
2 parents c58deb8 + 5de8cb9 commit 92a336e
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 13 deletions.
38 changes: 28 additions & 10 deletions api/v1/routes/regions.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,33 @@ def create_region(region: RegionCreate, db: Session = Depends(get_db),
)

@regions.get("", response_model=List[RegionOut])
def get_regions(db: Session = Depends(get_db)):
"""Get All Regions"""
regions = region_service.fetch_all(db)

return success_response(
status_code=200,
message='Regions retrieved successfully',
data=jsonable_encoder(regions)
)
def get_regions_or_timezones(
db: Session = Depends(get_db),
timezones: Optional[bool] = Query(False, description="Set to true to fetch unique time zones")
):
"""
Fetch all regions or unique time zones based on the timezones query parameter.
"""
if timezones:
unique_timezones = region_service.fetch_unique_timezones(db)
if not unique_timezones:
raise HTTPException(
status_code=404,
detail="No time zones found."
)
return success_response(
status_code=200,
message='Time zones retrieved successfully',
data=unique_timezones
)
else:
regions = region_service.fetch_all(db)
return success_response(
status_code=200,
message='Regions retrieved successfully',
data=regions
)


@regions.get("/{region_id}", response_model=RegionOut)
def get_region_by_user(region_id: str, db: Session = Depends(get_db)):
Expand All @@ -60,4 +78,4 @@ def update_region(region_id: str, region: RegionUpdate, db: Session = Depends(ge
@regions.delete("/{region_id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_region(region_id: str, db: Session = Depends(get_db)):
region = region_service.delete(db, region_id)
return
return
15 changes: 12 additions & 3 deletions api/v1/services/regions.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from typing import Any, Optional
from typing import Any, Optional, List
from sqlalchemy.orm import Session
from api.core.base.services import Service
from api.v1.models.regions import Region
from api.v1.schemas.regions import RegionUpdate, RegionCreate
from api.utils.db_validators import check_model_existence


from sqlalchemy import distinct
from fastapi import HTTPException
class RegionService(Service):
"""Region Services"""

Expand Down Expand Up @@ -64,6 +64,15 @@ def delete(self, db: Session, region_id: str):
region = self.fetch(db=db, region_id=region_id)
db.delete(region)
db.commit()


def fetch_unique_timezones(self, db: Session):
'''Fetch unique time zones without duplicates'''
timezones = db.query(distinct(Region.timezone)).filter(Region.timezone.isnot(None)).all()
"""Extract unique time zones as a list"""
unique_timezones = sorted([tz[0] for tz in timezones if tz[0]])
"""Return unique timezones"""
return unique_timezones


region_service = RegionService()

0 comments on commit 92a336e

Please sign in to comment.