first commit
This commit is contained in:
commit
7a72438fd1
74 changed files with 7548 additions and 0 deletions
98
backend/app/routers/requirements.py
Normal file
98
backend/app/routers/requirements.py
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from bson import ObjectId
|
||||
from datetime import datetime, timezone
|
||||
from typing import List
|
||||
|
||||
from app.database import get_db
|
||||
from app.dependencies import get_current_user
|
||||
from app.models.requirements import RequirementsIn, RequirementsOut
|
||||
|
||||
router = APIRouter(prefix="/api/requirements", tags=["requirements"])
|
||||
|
||||
@router.post("/", response_model=RequirementsOut, status_code=status.HTTP_201_CREATED)
|
||||
async def create_requirements(
|
||||
req: RequirementsIn,
|
||||
db=Depends(get_db),
|
||||
current_user: dict = Depends(get_current_user),
|
||||
):
|
||||
now = datetime.now(timezone.utc)
|
||||
doc = req.model_dump()
|
||||
doc["user_id"] = current_user["google_id"]
|
||||
doc["created_at"] = now
|
||||
doc["updated_at"] = now
|
||||
|
||||
result = await db["requirements"].insert_one(doc)
|
||||
doc["id"] = str(result.inserted_id)
|
||||
return doc
|
||||
|
||||
@router.get("/", response_model=List[RequirementsOut])
|
||||
async def list_requirements(
|
||||
db=Depends(get_db),
|
||||
current_user: dict = Depends(get_current_user),
|
||||
):
|
||||
cursor = db["requirements"].find({"user_id": current_user["google_id"]}).sort("updated_at", -1)
|
||||
reqs = []
|
||||
async for doc in cursor:
|
||||
doc["id"] = str(doc.pop("_id"))
|
||||
reqs.append(doc)
|
||||
return reqs
|
||||
|
||||
@router.get("/{req_id}", response_model=RequirementsOut)
|
||||
async def get_requirement(
|
||||
req_id: str,
|
||||
db=Depends(get_db),
|
||||
current_user: dict = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
oid = ObjectId(req_id)
|
||||
except:
|
||||
raise HTTPException(status_code=400, detail="Invalid ID")
|
||||
|
||||
doc = await db["requirements"].find_one({"_id": oid, "user_id": current_user["google_id"]})
|
||||
if not doc:
|
||||
raise HTTPException(status_code=404, detail="Requirement not found")
|
||||
|
||||
doc["id"] = str(doc.pop("_id"))
|
||||
return doc
|
||||
|
||||
@router.put("/{req_id}", response_model=RequirementsOut)
|
||||
async def update_requirement(
|
||||
req_id: str,
|
||||
req: RequirementsIn,
|
||||
db=Depends(get_db),
|
||||
current_user: dict = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
oid = ObjectId(req_id)
|
||||
except:
|
||||
raise HTTPException(status_code=400, detail="Invalid ID")
|
||||
|
||||
update_data = req.model_dump()
|
||||
update_data["updated_at"] = datetime.now(timezone.utc)
|
||||
|
||||
result = await db["requirements"].find_one_and_update(
|
||||
{"_id": oid, "user_id": current_user["google_id"]},
|
||||
{"$set": update_data},
|
||||
return_document=True
|
||||
)
|
||||
|
||||
if not result:
|
||||
raise HTTPException(status_code=404, detail="Requirement not found")
|
||||
|
||||
result["id"] = str(result.pop("_id"))
|
||||
return result
|
||||
|
||||
@router.delete("/{req_id}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
async def delete_requirement(
|
||||
req_id: str,
|
||||
db=Depends(get_db),
|
||||
current_user: dict = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
oid = ObjectId(req_id)
|
||||
except:
|
||||
raise HTTPException(status_code=400, detail="Invalid ID")
|
||||
|
||||
result = await db["requirements"].delete_one({"_id": oid, "user_id": current_user["google_id"]})
|
||||
if result.deleted_count == 0:
|
||||
raise HTTPException(status_code=404, detail="Requirement not found")
|
||||
Loading…
Add table
Add a link
Reference in a new issue