fix data base
This commit is contained in:
113
route/organizations_crud.py
Normal file
113
route/organizations_crud.py
Normal 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.organization import Organization
|
||||
from bd.tables.group import Group
|
||||
|
||||
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]
|
||||
|
||||
|
||||
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_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)
|
||||
session.add(org)
|
||||
session.commit()
|
||||
session.refresh(org)
|
||||
return {"id": str(org.id), "name_organization": org.name_organization, "group_id": str(org.group_id)}
|
||||
|
||||
|
||||
@router.get("/")
|
||||
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]
|
||||
|
||||
|
||||
@router.get("/{org_id}")
|
||||
def get_organization(org_id: str):
|
||||
Session = get_session()
|
||||
try:
|
||||
oid = uuid.UUID(org_id)
|
||||
except Exception:
|
||||
raise HTTPException(status_code=400, detail="Invalid UUID")
|
||||
with Session() as session:
|
||||
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)}
|
||||
|
||||
|
||||
@router.put("/{org_id}")
|
||||
def update_organization(org_id: str, payload: OrganizationUpdate):
|
||||
Session = get_session()
|
||||
try:
|
||||
oid = uuid.UUID(org_id)
|
||||
except Exception:
|
||||
raise HTTPException(status_code=400, detail="Invalid UUID")
|
||||
with Session() as session:
|
||||
org = session.get(Organization, oid)
|
||||
if not org:
|
||||
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)}
|
||||
|
||||
|
||||
@router.delete("/{org_id}", status_code=204)
|
||||
def delete_organization(org_id: str):
|
||||
Session = get_session()
|
||||
try:
|
||||
oid = uuid.UUID(org_id)
|
||||
except Exception:
|
||||
raise HTTPException(status_code=400, detail="Invalid UUID")
|
||||
with Session() as session:
|
||||
org = session.get(Organization, oid)
|
||||
if not org:
|
||||
raise HTTPException(status_code=404, detail="Organization not found")
|
||||
session.delete(org)
|
||||
session.commit()
|
||||
return {}
|
||||
Reference in New Issue
Block a user