web sttarting

This commit is contained in:
2026-03-31 13:25:14 +05:00
parent 9cd6d83428
commit 59b3bcd0f4
30 changed files with 720 additions and 242 deletions

View File

@@ -3,49 +3,48 @@ 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.organization import Organization
from bd.tables.group import Group
from route.auth_utils import get_current_user
from route.auth_utils import require_admin_key
router = APIRouter(tags=["organizations"], prefix="/organizations")
class OrganizationCreate(BaseModel):
name_organization: str
group_id: str
class OrganizationUpdate(BaseModel):
name_organization: Optional[str]
group_id: Optional[str]
name_organization: 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_organization(payload: OrganizationCreate, _: object = Depends(get_current_user)):
def _org_dict(org: Organization) -> dict:
return {
"id": str(org.id),
"name_organization": org.name_organization,
}
@router.post("/", status_code=201, dependencies=[Depends(require_admin_key)])
def create_organization(payload: OrganizationCreate):
Session = get_session()
try:
gid = uuid.UUID(payload.group_id)
except Exception:
raise HTTPException(status_code=400, detail="Invalid group_id UUID")
with Session() as session:
grp = session.get(Group, gid)
if not grp:
raise HTTPException(status_code=404, detail="Group not found")
org = Organization(name_organization=payload.name_organization, group_id=gid)
existing = session.query(Organization).filter(
Organization.name_organization == payload.name_organization
).first()
if existing:
raise HTTPException(status_code=400, detail="Organization name already exists")
org = Organization(name_organization=payload.name_organization)
session.add(org)
session.commit()
session.refresh(org)
return {"id": str(org.id), "name_organization": org.name_organization, "group_id": str(org.group_id)}
return _org_dict(org)
@router.get("/")
@@ -53,7 +52,7 @@ def list_organizations():
Session = get_session()
with Session() as session:
rows = session.query(Organization).all()
return [{"id": str(o.id), "name_organization": o.name_organization, "group_id": str(o.group_id)} for o in rows]
return [_org_dict(o) for o in rows]
@router.get("/{org_id}")
@@ -67,11 +66,11 @@ def get_organization(org_id: str):
org = session.get(Organization, oid)
if not org:
raise HTTPException(status_code=404, detail="Organization not found")
return {"id": str(org.id), "name_organization": org.name_organization, "group_id": str(org.group_id)}
return _org_dict(org)
@router.put("/{org_id}")
def update_organization(org_id: str, payload: OrganizationUpdate, _: object = Depends(get_current_user)):
@router.put("/{org_id}", dependencies=[Depends(require_admin_key)])
def update_organization(org_id: str, payload: OrganizationUpdate):
Session = get_session()
try:
oid = uuid.UUID(org_id)
@@ -83,23 +82,14 @@ def update_organization(org_id: str, payload: OrganizationUpdate, _: object = De
raise HTTPException(status_code=404, detail="Organization not found")
if payload.name_organization is not None:
org.name_organization = payload.name_organization
if payload.group_id is not None:
try:
new_gid = uuid.UUID(payload.group_id)
except Exception:
raise HTTPException(status_code=400, detail="Invalid group_id UUID")
grp = session.get(Group, new_gid)
if not grp:
raise HTTPException(status_code=404, detail="Group not found")
org.group_id = new_gid
session.add(org)
session.commit()
session.refresh(org)
return {"id": str(org.id), "name_organization": org.name_organization, "group_id": str(org.group_id)}
return _org_dict(org)
@router.delete("/{org_id}", status_code=204)
def delete_organization(org_id: str, _: object = Depends(get_current_user)):
@router.delete("/{org_id}", status_code=204, dependencies=[Depends(require_admin_key)])
def delete_organization(org_id: str):
Session = get_session()
try:
oid = uuid.UUID(org_id)