fix data base

This commit is contained in:
2026-02-27 15:37:15 +05:00
parent 335db59c9c
commit d37c255994
27 changed files with 1372 additions and 11 deletions

113
route/groups_crud.py Normal file
View File

@@ -0,0 +1,113 @@
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from typing import Optional
import uuid
from bd import Settings
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from bd.tables.group import Group
from bd.tables.users import User
router = APIRouter(tags=["groups"], prefix="/groups")
class GroupCreate(BaseModel):
name_group: str
user_id: str
class GroupUpdate(BaseModel):
name_group: Optional[str]
user_id: Optional[str]
def get_session():
settings = Settings()
engine = create_engine(settings.DATABASE_URL_syncpg, future=True)
return sessionmaker(bind=engine, future=True)
@router.post("/", status_code=201)
def create_group(payload: GroupCreate):
Session = get_session()
try:
uid = uuid.UUID(payload.user_id)
except Exception:
raise HTTPException(status_code=400, detail="Invalid user_id UUID")
with Session() as session:
user = session.get(User, uid)
if not user:
raise HTTPException(status_code=404, detail="User not found")
grp = Group(name_group=payload.name_group, user_id=uid)
session.add(grp)
session.commit()
session.refresh(grp)
return {"id": str(grp.id), "name_group": grp.name_group, "user_id": str(grp.user_id)}
@router.get("/")
def list_groups():
Session = get_session()
with Session() as session:
rows = session.query(Group).all()
return [{"id": str(g.id), "name_group": g.name_group, "user_id": str(g.user_id)} for g in rows]
@router.get("/{group_id}")
def get_group(group_id: str):
Session = get_session()
try:
gid = uuid.UUID(group_id)
except Exception:
raise HTTPException(status_code=400, detail="Invalid UUID")
with Session() as session:
grp = session.get(Group, gid)
if not grp:
raise HTTPException(status_code=404, detail="Group not found")
return {"id": str(grp.id), "name_group": grp.name_group, "user_id": str(grp.user_id)}
@router.put("/{group_id}")
def update_group(group_id: str, payload: GroupUpdate):
Session = get_session()
try:
gid = uuid.UUID(group_id)
except Exception:
raise HTTPException(status_code=400, detail="Invalid UUID")
with Session() as session:
grp = session.get(Group, gid)
if not grp:
raise HTTPException(status_code=404, detail="Group not found")
if payload.name_group is not None:
grp.name_group = payload.name_group
if payload.user_id is not None:
try:
new_uid = uuid.UUID(payload.user_id)
except Exception:
raise HTTPException(status_code=400, detail="Invalid user_id UUID")
user = session.get(User, new_uid)
if not user:
raise HTTPException(status_code=404, detail="User not found")
grp.user_id = new_uid
session.add(grp)
session.commit()
session.refresh(grp)
return {"id": str(grp.id), "name_group": grp.name_group, "user_id": str(grp.user_id)}
@router.delete("/{group_id}", status_code=204)
def delete_group(group_id: str):
Session = get_session()
try:
gid = uuid.UUID(group_id)
except Exception:
raise HTTPException(status_code=400, detail="Invalid UUID")
with Session() as session:
grp = session.get(Group, gid)
if not grp:
raise HTTPException(status_code=404, detail="Group not found")
session.delete(grp)
session.commit()
return {}