From 5d443876ab266f939827dc09802e7b19b8b1f73d Mon Sep 17 00:00:00 2001 From: ahtlon Date: Sat, 25 Apr 2026 18:30:16 +0200 Subject: [PATCH] AccessAuthManager: add getting [all|one] accessauth, patching, deleting, unassigning from group --- app/controllers/aaManager.py | 65 +++++++++++++++++++++++++++--------- app/model/models.py | 9 +++-- 2 files changed, 56 insertions(+), 18 deletions(-) diff --git a/app/controllers/aaManager.py b/app/controllers/aaManager.py index 031c3a9..4e1f5ab 100644 --- a/app/controllers/aaManager.py +++ b/app/controllers/aaManager.py @@ -9,13 +9,8 @@ import uuid as gen_uuid aa_router = APIRouter(prefix="/aa", tags=["AccessAuth"]) -#Needs -#create AA (with linked timetable) -#Assign AA to group -#Modify timetable - -@aa_router.post("/add", response_model=AccessAuthorizationResponse) -def add_aa(*, db: Session = Depends(get_session), aa: AccessAuthorizationCreate): +@aa_router.post("/", response_model=AccessAuthorizationResponse) +def add_accessauth(*, db: Session = Depends(get_session), aa: AccessAuthorizationCreate): print("Creating accessauth with data: ", aa) timetables = [Timetable.model_validate(t) for t in aa.timetables] db_aa = AccessAuthorizationDB( @@ -24,9 +19,23 @@ def add_aa(*, db: Session = Depends(get_session), aa: AccessAuthorizationCreate) timetables=timetables ) return add_and_refresh(db, db_aa) - + +@aa_router.get("/", response_model=List[AccessAuthorizationResponse]) +def get_all_accessauths(db: Session = Depends(get_session)): + return db.exec( + select(AccessAuthorizationDB) + .options(selectinload(AccessAuthorizationDB.timetables)) + ).all() + +@aa_router.get("/{aa_id}", response_model=AccessAuthorizationResponse) +def get_one_accessauth(*, db: Session = Depends(get_session), aa_id: int): + db_aa = db.get(AccessAuthorizationDB, aa_id) + if db_aa is None: + raise HTTPException(status_code=404, detail="AA not found") + return db_aa + @aa_router.put("/assign/{group_id}/{aa_id}", response_model=GroupResponse) -def assign_aa(*, db: Session = Depends(get_session), group_id: int, aa_id: int): +def assign_accessauth(*, db: Session = Depends(get_session), group_id: int, aa_id: int): db_group = db.get(GroupDB, group_id) if db_group is None: raise HTTPException(status_code=404, detail="Group not found") @@ -34,13 +43,37 @@ def assign_aa(*, db: Session = Depends(get_session), group_id: int, aa_id: int): if db_aa is None: raise HTTPException(status_code=404, detail="AA not found") if db_aa in db_group.accessauths: - raise HTTPException(status_code=400, detail="AA already assigned to group") + raise HTTPException(status_code=200, detail="AA already assigned to group") db_group.accessauths.append(db_aa) return add_and_refresh(db, db_group) -@aa_router.get("/", response_model=List[AccessAuthorizationResponse]) -def get_all_aa(db: Session = Depends(get_session)): - return db.exec( - select(AccessAuthorizationDB) - .options(selectinload(AccessAuthorizationDB.timetables)) - ).all() \ No newline at end of file +@aa_router.put("/unassign/{group_id}/{aa_id}", response_model=GroupResponse) +def unassign_accessauth(*, db: Session = Depends(get_session), group_id: int, aa_id: int): + db_group = db.get(GroupDB, group_id) + if db_group is None: + raise HTTPException(status_code=404, detail="Group not found") + db_aa = db.get(AccessAuthorizationDB, aa_id) + if db_aa is None: + raise HTTPException(status_code=404, detail="AA not found") + if db_aa not in db_group.accessauths: + raise HTTPException(status_code=200, detail="AA not assigned to group") + db_group.accessauths.remove(db_aa) + return add_and_refresh(db, db_group) + +@aa_router.patch("/{aa_id}", response_model=AccessAuthorizationResponse) +def change_accessauth(*, db: Session = Depends(get_session), aa_id: int, aa: AccessAuthorizationUpdate): + db_aa = db.get(AccessAuthorizationDB, aa_id) + if db_aa is None: + raise HTTPException(status_code=404, detail="AccessAuthorization not found") + aa_data = aa.dict(exclude_unset=True) + db_aa.sqlmodel_update(aa_data) + return add_and_refresh(db, db_aa) + +@aa_router.delete("/{aa_id}") +def delete_accessauth(*, db: Session = Depends(get_session), aa_id: int): + db_aa = db.get(AccessAuthorizationDB, aa_id) + if db_aa is None: + raise HTTPException(status_code=404, detail="AccessAuthorization not found") + db.delete(db_aa) + db.commit() + return {"message": "AccessAuthorization deleted successfully"} \ No newline at end of file diff --git a/app/model/models.py b/app/model/models.py index 3288118..9abd820 100644 --- a/app/model/models.py +++ b/app/model/models.py @@ -56,7 +56,7 @@ class AccessAuthorizationBase(Base): class AccessAuthorizationDB(AccessAuthorizationBase, table=True): id: int | None = Field(default=None, primary_key=True) groups: List["GroupDB"] = Relationship(back_populates="accessauths", link_model=AaGroupLink) - timetables: List["Timetable"] = Relationship(back_populates="accessauth") + timetables: List["Timetable"] = Relationship(back_populates="accessauth", cascade_delete=True) class AccessAuthorizationCreate(AccessAuthorizationBase): timetables: List["TimetableCreate"] @@ -66,6 +66,12 @@ class AccessAuthorizationResponse(AccessAuthorizationBase): timetables: List["Timetable"] groups: List["GroupDB"] +class AccessAuthorizationUpdate(Base): + name: str | None = None + is_active: bool | None = None + timetables: List["TimetableCreate"] | None = None + + #### Card class Card(Base, table=True): id: int | None = Field(default=None, primary_key=True) @@ -85,4 +91,3 @@ class Timetable(TimetableBase, table=True): class TimetableCreate(TimetableBase): pass -