add crud for forms, templates, shipment, users and auth with keycloak

This commit is contained in:
2026-02-09 23:38:22 +01:00
parent 145f3f632e
commit be7ca58513
45 changed files with 949 additions and 226 deletions

View File

@@ -1,19 +1,37 @@
from fastapi import APIRouter
from fastapi import APIRouter, HTTPException, Depends
import src.messages as messages
import src.models as models
from src.database import get_session
from sqlmodel import Session
import src.forms.service as service
router = APIRouter(prefix='/forms')
@router.get('/')
def get_forms():
return []
@router.get('/', response_model=list[models.FormPublic])
def get_forms(session: Session = Depends(get_session)):
return service.get_all(session)
@router.post('/')
def create_form():
return {}
@router.get('/{id}', response_model=models.FormPublic)
def get_forms(id: int, session: Session = Depends(get_session)):
result = service.get_one(session, id)
if result is None:
raise HTTPException(status_code=404, detail=messages.notfound)
return result
@router.put('/')
def update_form():
return {}
@router.post('/', response_model=models.FormPublic)
def create_form(form: models.FormCreate, session: Session = Depends(get_session)):
return service.create_one(session, form)
@router.delete('/')
def delete_form():
return {}
@router.put('/{id}', response_model=models.FormPublic)
def update_form(id: int, form: models.FormUpdate, session: Session = Depends(get_session)):
result = service.update_one(session, id, form)
if result is None:
raise HTTPException(status_code=404, detail=messages.notfound)
return result
@router.delete('/{id}', response_model=models.FormPublic)
def delete_form(id: int, session: Session = Depends(get_session)):
result = service.delete_one(session, id)
if result is None:
raise HTTPException(status_code=404, detail=messages.notfound)
return result

View File

@@ -1,10 +0,0 @@
from sqlmodel import Field, SQLModel
form src.productors.model import Productor
class Form(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
productor_id: int | None = Field(default=None, foreign_key="productor.id")
shipment_number: int
season: str

View File

@@ -0,0 +1,42 @@
from sqlmodel import Session, select
import src.models as models
def get_all(session: Session) -> list[models.FormPublic]:
statement = select(models.Form)
return session.exec(statement).all()
def get_one(session: Session, form_id: int) -> models.FormPublic:
return session.get(models.Form, form_id)
def create_one(session: Session, form: models.FormCreate) -> models.FormPublic:
form_create = form.model_dump(exclude_unset=True)
new_form = models.Form(**form_create)
session.add(new_form)
session.commit()
session.refresh(new_form)
return new_form
def update_one(session: Session, id: int, form: models.FormUpdate) -> models.FormPublic:
statement = select(models.Form).where(models.Form.id == id)
result = session.exec(statement)
new_form = result.first()
if not new_form:
return None
form_updates = form.model_dump(exclude_unset=True)
for key, value in form_updates.items():
setattr(new_form, key, value)
session.add(new_form)
session.commit()
session.refresh(new_form)
return new_form
def delete_one(session: Session, id: int) -> models.FormPublic:
statement = select(models.Form).where(models.Form.id == id)
result = session.exec(statement)
form = result.first()
if not form:
return None
result = models.FormPublic.model_validate(form)
session.delete(form)
session.commit()
return result