From 6b3075cda2be95f3f806e62a341d49b8243ccbed Mon Sep 17 00:00:00 2001 From: theijhay Date: Sat, 24 Aug 2024 00:49:42 +0100 Subject: [PATCH 1/2] fix duplicate timezones --- api/v1/routes/regions.py | 15 ++++++++++++++- api/v1/services/regions.py | 15 ++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/api/v1/routes/regions.py b/api/v1/routes/regions.py index 30d206c1d..97f0c206d 100644 --- a/api/v1/routes/regions.py +++ b/api/v1/routes/regions.py @@ -60,4 +60,17 @@ 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 + + +@regions.get( + '/', response_model=List[str]) +def get_unique_timezones(db: Session = Depends(get_db)): + + '''Get unique time zones''' + timezones = region_service.fetch_unique_timezones(db) + return success_response( + status_code=200, + message='Timezones retrieved successfully', + data=jsonable_encoder(timezones) + ) diff --git a/api/v1/services/regions.py b/api/v1/services/regions.py index c81e2fae1..57f7b91a0 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() From c12f3c1c65a5e4534fc900c07ddceae0f31b57b8 Mon Sep 17 00:00:00 2001 From: theijhay Date: Sat, 24 Aug 2024 12:38:25 +0100 Subject: [PATCH 2/2] made changes --- api/v1/routes/regions.py | 49 ++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/api/v1/routes/regions.py b/api/v1/routes/regions.py index 97f0c206d..cd4c08167 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)): @@ -61,16 +79,3 @@ def update_region(region_id: str, region: RegionUpdate, db: Session = Depends(ge def delete_region(region_id: str, db: Session = Depends(get_db)): region = region_service.delete(db, region_id) return - - -@regions.get( - '/', response_model=List[str]) -def get_unique_timezones(db: Session = Depends(get_db)): - - '''Get unique time zones''' - timezones = region_service.fetch_unique_timezones(db) - return success_response( - status_code=200, - message='Timezones retrieved successfully', - data=jsonable_encoder(timezones) - )