add logout logic and wip recap
This commit is contained in:
@@ -12,9 +12,10 @@ router = APIRouter(prefix='/forms')
|
||||
async def get_forms(
|
||||
seasons: list[str] = Query([]),
|
||||
productors: list[str] = Query([]),
|
||||
current_season: bool = False,
|
||||
session: Session = Depends(get_session)
|
||||
):
|
||||
return service.get_all(session, seasons, productors)
|
||||
return service.get_all(session, seasons, productors, current_season)
|
||||
|
||||
@router.get('/{id}', response_model=models.FormPublic)
|
||||
async def get_form(id: int, session: Session = Depends(get_session)):
|
||||
|
||||
@@ -1,16 +1,35 @@
|
||||
from sqlmodel import Session, select
|
||||
import src.models as models
|
||||
from sqlalchemy import func
|
||||
|
||||
def get_all(
|
||||
session: Session,
|
||||
seasons: list[str],
|
||||
productors: list[str]
|
||||
productors: list[str],
|
||||
current_season: bool,
|
||||
) -> list[models.FormPublic]:
|
||||
statement = select(models.Form)
|
||||
if len(seasons) > 0:
|
||||
statement = statement.where(models.Form.season.in_(seasons))
|
||||
if len(productors) > 0:
|
||||
statement = statement.join(models.Productor).where(models.Productor.name.in_(productors))
|
||||
if current_season:
|
||||
subquery = (
|
||||
select(
|
||||
models.Productor.type,
|
||||
func.max(models.Form.start).label("max_start")
|
||||
)
|
||||
.join(models.Form)\
|
||||
.group_by(models.Productor.type)\
|
||||
.subquery()
|
||||
)
|
||||
statement = select(models.Form)\
|
||||
.join(models.Productor)\
|
||||
.join(subquery,
|
||||
(models.Productor.type == subquery.c.type) &
|
||||
(models.Form.start == subquery.c.max_start)
|
||||
)
|
||||
return session.exec(statement.order_by(models.Form.name)).all()
|
||||
return session.exec(statement.order_by(models.Form.name)).all()
|
||||
|
||||
def get_one(session: Session, form_id: int) -> models.FormPublic:
|
||||
@@ -48,3 +67,11 @@ def delete_one(session: Session, id: int) -> models.FormPublic:
|
||||
session.delete(form)
|
||||
session.commit()
|
||||
return result
|
||||
|
||||
def is_allowed(session: Session, user: models.User, id: int) -> bool:
|
||||
statement = select(models.Form)\
|
||||
.join(models.Productor, models.Form.productor_id == models.Productor.id)\
|
||||
.where(models.Form.id == id)\
|
||||
.where(models.Productor.type.in_([r.name for r in user.roles]))\
|
||||
.distinct()
|
||||
return len(session.exec(statement).all()) > 0
|
||||
Reference in New Issue
Block a user