diff --git a/gs/backend/api/v1/aro/endpoints/user.py b/gs/backend/api/v1/aro/endpoints/user.py index be8400978..aedb948cf 100644 --- a/gs/backend/api/v1/aro/endpoints/user.py +++ b/gs/backend/api/v1/aro/endpoints/user.py @@ -1,3 +1,56 @@ -from fastapi import APIRouter +from fastapi import APIRouter, Depends, HTTPException +from sqlmodel import Session, select + +from gs.backend.api.v1.aro.models.requests import AROUsersRequest +from gs.backend.data.tables.aro_user_tables import AROUsers +from gs.backend.api.v1.aro.models.responses import AROUsersListResponse, AROUsersSingleResponse +from gs.backend.data.database.engine import get_db_session + aro_user_router = APIRouter(tags=["ARO", "User Information"]) + +@aro_user_router.get("/", response_model=AROUsersListResponse) +def get_users(db: Session = Depends(get_db_session)): + """ + Gets user data + + :return: Returns user list under the data field + """ + query = select(AROUsers) + users = db.exec(query).all() + return {"data": users} + +@aro_user_router.post("/", response_model=AROUsersSingleResponse) +def create_user(payload: AROUsersRequest, db: Session = Depends(get_db_session)): + """ + Creates a user with the given payload in the database and returns this payload after pulling it from the database + + :param payload: The data used to create a user + :return: returns a json object with field of "data" under which there is the payload now pulled from the database + """ + user = AROUsers(**payload.dict()) + db.add(user) + db.commit() + db.refresh(user) + + return {"data": user} + +@aro_user_router.put("/{id}", response_model=AROUsersSingleResponse) +def edit_user(id: str, payload: AROUsersRequest, db: Session = Depends(get_db_session)): + """ + Modifies the current user’s info based on the payload + + :param payload: The data used to update a user + :return: returns a json object with field of "data" under which there is the payload now pulled from the database + """ + user = db.get(AROUsers, id) + if not user: + raise HTTPException(status_code=404, detail=f"User with id {id} not found") + + for key, value in payload.dict().items(): + setattr(user, key, value) + + db.commit() + db.refresh(user) # refresh to get updated values + + return {"data": user} \ No newline at end of file diff --git a/gs/backend/api/v1/aro/models/requests.py b/gs/backend/api/v1/aro/models/requests.py index e69de29bb..9a62e9370 100644 --- a/gs/backend/api/v1/aro/models/requests.py +++ b/gs/backend/api/v1/aro/models/requests.py @@ -0,0 +1,12 @@ +from pydantic import BaseModel, EmailStr + +class AROUsersRequest(BaseModel): + """ + Model representing the user to be created + """ + + call_sign: str + email: EmailStr + first_name: str + last_name: str | None + phone_number: str diff --git a/gs/backend/api/v1/aro/models/responses.py b/gs/backend/api/v1/aro/models/responses.py index e69de29bb..ca614b589 100644 --- a/gs/backend/api/v1/aro/models/responses.py +++ b/gs/backend/api/v1/aro/models/responses.py @@ -0,0 +1,18 @@ +from pydantic import BaseModel + +from gs.backend.data.tables.aro_user_tables import AROUsers + + +class AROUsersListResponse(BaseModel): + """ + List of all commands + """ + + data: list[AROUsers] + + +class AROUsersSingleResponse(BaseModel): + """ + Single command + """ + data: AROUsers