From 3fc8f0e1494bf264efa2130f2a8062333a7dd48f Mon Sep 17 00:00:00 2001 From: pmoharana-cmd Date: Wed, 24 Apr 2024 19:57:44 -0400 Subject: [PATCH] Implement service api method --- backend/api/service.py | 26 +++++++++++++++++++++++++ backend/main.py | 6 +++--- backend/script/reset_demo.py | 5 ++++- backend/services/service.py | 8 +++++--- backend/test/services/service_test.py | 2 +- backend/test/services/user_test_data.py | 2 +- 6 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 backend/api/service.py diff --git a/backend/api/service.py b/backend/api/service.py new file mode 100644 index 0000000..97508a9 --- /dev/null +++ b/backend/api/service.py @@ -0,0 +1,26 @@ +from fastapi import APIRouter, Depends +from ..services import ServiceService, UserService +from ..models.service_model import Service + +from typing import List + +api = APIRouter(prefix="/api/service") + +openapi_tags = { + "name": "Service", + "description": "Service search and related operations.", +} + + +# TODO: Add security using HTTP Bearer Tokens +# TODO: Enable authorization by passing user uuid to API +# TODO: Create custom exceptions +@api.get("", response_model=List[Service], tags=["Service"]) +def get_all( + user_id: str, + service_svc: ServiceService = Depends(), + user_svc: UserService = Depends(), +): + subject = user_svc.get_user_by_uuid(user_id) + + return service_svc.get_service_by_user(subject) diff --git a/backend/main.py b/backend/main.py index 8bd689f..4c9c6e0 100644 --- a/backend/main.py +++ b/backend/main.py @@ -2,7 +2,7 @@ from fastapi import FastAPI, Request from fastapi.responses import JSONResponse from fastapi.middleware.gzip import GZipMiddleware -from .api import user, health +from .api import user, health, service description = """ Welcome to the **COMPASS** RESTful Application Programming Interface. @@ -12,12 +12,12 @@ app = FastAPI( title="Compass API", version="0.0.1", description=description, - openapi_tags=[user.openapi_tags, health.openapi_tags], + openapi_tags=[user.openapi_tags, health.openapi_tags, service.openapi_tags], ) app.add_middleware(GZipMiddleware) -feature_apis = [user, health] +feature_apis = [user, health, service] for feature_api in feature_apis: app.include_router(feature_api.api) diff --git a/backend/script/reset_demo.py b/backend/script/reset_demo.py index ac316c4..16f3871 100644 --- a/backend/script/reset_demo.py +++ b/backend/script/reset_demo.py @@ -6,7 +6,7 @@ from ..database import engine, _engine_str from ..env import getenv from .. import entities -from ..test.services import user_test_data +from ..test.services import user_test_data, service_test_data database = getenv("POSTGRES_DATABASE") @@ -22,3 +22,6 @@ entities.EntityBase.metadata.create_all(engine) with Session(engine) as session: user_test_data.insert_test_data(session) + service_test_data.insert_fake_data(session) + + session.commit() diff --git a/backend/services/service.py b/backend/services/service.py index 4a4f4c7..f8afe2e 100644 --- a/backend/services/service.py +++ b/backend/services/service.py @@ -58,9 +58,11 @@ class ServiceService: services = [] for program in programs: query = select(ServiceEntity).filter(ServiceEntity.program == program) - entities = self._session.scalars(query) - services.append(entities) - return [service.to_model() for service in entities] + entities = self._session.scalars(query).all() + for entity in entities: + services.append(entity) + + return [service.to_model() for service in services] def get_all(self, subject: User) -> list[Service]: """Service method retrieving all of the services in the table.""" diff --git a/backend/test/services/service_test.py b/backend/test/services/service_test.py index 06c44a8..f0b4131 100644 --- a/backend/test/services/service_test.py +++ b/backend/test/services/service_test.py @@ -35,7 +35,7 @@ def test_get_service_by_user_admin(service_svc: ServiceService): def test_get_service_by_user_volun(service_svc: ServiceService): service = service_svc.get_service_by_user(user_test_data.volunteer) - assert len(service) == 3 + assert len(service) == 4 def test_get_by_program(service_svc: ServiceService): diff --git a/backend/test/services/user_test_data.py b/backend/test/services/user_test_data.py index 21063a9..fb54ae9 100644 --- a/backend/test/services/user_test_data.py +++ b/backend/test/services/user_test_data.py @@ -18,7 +18,7 @@ volunteer = User( email="volunteer@compass.com", experience=1, group="volunteers", - program=[programs.COMMUNITY], + program=[programs.COMMUNITY, programs.ECONOMIC], created_at=datetime.now(), role=UserTypeEnum.VOLUNTEER, )