From fd0e521186ad84ad1fc44c87bfca94b9a98906ad Mon Sep 17 00:00:00 2001 From: James Pattinson Date: Mon, 23 Mar 2026 13:09:49 -0400 Subject: [PATCH] List and edit user aircraft --- backend/app/api/endpoints/aircraft.py | 67 ++++++- docker-compose.prod.yml | 2 +- web/admin.html | 276 +++++++++++++++++++++++++- 3 files changed, 338 insertions(+), 7 deletions(-) diff --git a/backend/app/api/endpoints/aircraft.py b/backend/app/api/endpoints/aircraft.py index 7cbadfe..6216712 100644 --- a/backend/app/api/endpoints/aircraft.py +++ b/backend/app/api/endpoints/aircraft.py @@ -1,9 +1,10 @@ from typing import List, Optional from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy.orm import Session +from sqlalchemy import func from app.api.deps import get_db, get_current_active_user from app.models.ppr import Aircraft, UserAircraft -from app.schemas.ppr import Aircraft as AircraftSchema, UserAircraftCreate +from app.schemas.ppr import Aircraft as AircraftSchema, UserAircraftCreate, UserAircraft as UserAircraftSchema from app.models.ppr import User router = APIRouter() @@ -161,4 +162,66 @@ async def save_user_aircraft( db.commit() db.refresh(user_aircraft) - return {"message": "Aircraft saved successfully", "id": user_aircraft.id} \ No newline at end of file + return {"message": "Aircraft saved successfully", "id": user_aircraft.id} + + +@router.get("/user-aircraft", response_model=List[UserAircraftSchema]) +async def get_user_aircraft( + db: Session = Depends(get_db), + current_user: User = Depends(get_current_active_user) +): + """ + Get all user-defined aircraft types. + """ + user_aircraft = db.query(UserAircraft).order_by(UserAircraft.created_at.desc()).all() + return user_aircraft + + +@router.put("/user-aircraft/{registration}", response_model=dict) +async def update_user_aircraft( + registration: str, + aircraft: UserAircraftCreate, + db: Session = Depends(get_db), + current_user: User = Depends(get_current_active_user) +): + """ + Update a user-defined aircraft type. + """ + # Find the existing user aircraft + existing = db.query(UserAircraft).filter( + UserAircraft.registration == registration.upper() + ).first() + + if not existing: + raise HTTPException(status_code=404, detail="User aircraft not found") + + # Update the type + existing.type_code = aircraft.type_code.upper() + existing.updated_at = func.current_timestamp() + + db.commit() + + return {"message": "Aircraft updated successfully"} + + +@router.delete("/user-aircraft/{registration}", response_model=dict) +async def delete_user_aircraft( + registration: str, + db: Session = Depends(get_db), + current_user: User = Depends(get_current_active_user) +): + """ + Delete a user-defined aircraft type. + """ + # Find the existing user aircraft + existing = db.query(UserAircraft).filter( + UserAircraft.registration == registration.upper() + ).first() + + if not existing: + raise HTTPException(status_code=404, detail="User aircraft not found") + + db.delete(existing) + db.commit() + + return {"message": "Aircraft deleted successfully"} \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 94d04e8..22d162a 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -50,7 +50,7 @@ services: cpus: '1' memory: 1G healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:8000/health"] + test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"] interval: 30s timeout: 10s retries: 3 diff --git a/web/admin.html b/web/admin.html index f75941a..e284f49 100644 --- a/web/admin.html +++ b/web/admin.html @@ -30,6 +30,7 @@ @@ -1048,6 +1049,86 @@
+ + + + + +