web sttarting
This commit is contained in:
@@ -3,49 +3,43 @@ 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 import make_engine
|
||||
|
||||
from bd.tables.group import Group
|
||||
from bd.tables.users import User
|
||||
from route.auth_utils import get_current_user
|
||||
from route.auth_utils import require_admin_key
|
||||
|
||||
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]
|
||||
name_group: Optional[str] = None
|
||||
|
||||
|
||||
def get_session():
|
||||
settings = Settings()
|
||||
engine = create_engine(settings.DATABASE_URL_syncpg, future=True)
|
||||
return sessionmaker(bind=engine, future=True)
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
return sessionmaker(bind=make_engine(), future=True)
|
||||
|
||||
|
||||
@router.post("/", status_code=201)
|
||||
def create_group(payload: GroupCreate, _: object = Depends(get_current_user)):
|
||||
def _group_dict(grp: Group) -> dict:
|
||||
return {"id": str(grp.id), "name_group": grp.name_group}
|
||||
|
||||
|
||||
@router.post("/", status_code=201, dependencies=[Depends(require_admin_key)])
|
||||
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)
|
||||
existing = session.query(Group).filter(Group.name_group == payload.name_group).first()
|
||||
if existing:
|
||||
raise HTTPException(status_code=400, detail="Group name already exists")
|
||||
grp = Group(name_group=payload.name_group)
|
||||
session.add(grp)
|
||||
session.commit()
|
||||
session.refresh(grp)
|
||||
return {"id": str(grp.id), "name_group": grp.name_group, "user_id": str(grp.user_id)}
|
||||
return _group_dict(grp)
|
||||
|
||||
|
||||
@router.get("/")
|
||||
@@ -53,7 +47,7 @@ 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]
|
||||
return [_group_dict(g) for g in rows]
|
||||
|
||||
|
||||
@router.get("/{group_id}")
|
||||
@@ -67,11 +61,11 @@ def get_group(group_id: str):
|
||||
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)}
|
||||
return _group_dict(grp)
|
||||
|
||||
|
||||
@router.put("/{group_id}")
|
||||
def update_group(group_id: str, payload: GroupUpdate, _: object = Depends(get_current_user)):
|
||||
@router.put("/{group_id}", dependencies=[Depends(require_admin_key)])
|
||||
def update_group(group_id: str, payload: GroupUpdate):
|
||||
Session = get_session()
|
||||
try:
|
||||
gid = uuid.UUID(group_id)
|
||||
@@ -83,23 +77,14 @@ def update_group(group_id: str, payload: GroupUpdate, _: object = Depends(get_cu
|
||||
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)}
|
||||
return _group_dict(grp)
|
||||
|
||||
|
||||
@router.delete("/{group_id}", status_code=204)
|
||||
def delete_group(group_id: str, _: object = Depends(get_current_user)):
|
||||
@router.delete("/{group_id}", status_code=204, dependencies=[Depends(require_admin_key)])
|
||||
def delete_group(group_id: str):
|
||||
Session = get_session()
|
||||
try:
|
||||
gid = uuid.UUID(group_id)
|
||||
|
||||
Reference in New Issue
Block a user