diff --git a/api/v1/routes/regions.py b/api/v1/routes/regions.py index 30d206c1..cd4c0816 100644 --- a/api/v1/routes/regions.py +++ b/api/v1/routes/regions.py @@ -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)): @@ -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 \ No newline at end of file + return diff --git a/api/v1/services/regions.py b/api/v1/services/regions.py index c81e2fae..57f7b91a 100644 --- a/api/v1/services/regions.py +++ b/api/v1/services/regions.py @@ -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""" @@ -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()