Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
d7af294e8b
|
@@ -1,6 +1,7 @@
|
|||||||
from sqlmodel import Field, Relationship, Session, SQLModel
|
from sqlmodel import Field, Relationship, Session, SQLModel
|
||||||
from typing import List
|
from typing import List, Literal, Union
|
||||||
from datetime import time
|
from datetime import datetime, time
|
||||||
|
from pydantic import model_validator
|
||||||
|
|
||||||
class Base(SQLModel):
|
class Base(SQLModel):
|
||||||
pass
|
pass
|
||||||
@@ -60,19 +61,49 @@ class GroupResponse(GroupBase):
|
|||||||
#### AccessAuthorization
|
#### AccessAuthorization
|
||||||
class AccessAuthorizationBase(Base):
|
class AccessAuthorizationBase(Base):
|
||||||
name: str = Field(index=True)
|
name: str = Field(index=True)
|
||||||
|
type: Literal["timetable", "oneshot", "somefuturespec"]
|
||||||
is_active: bool
|
is_active: bool
|
||||||
|
|
||||||
class AccessAuthorizationDB(AccessAuthorizationBase, table=True):
|
class AccessAuthorizationDB(AccessAuthorizationBase, table=True):
|
||||||
id: int | None = Field(default=None, primary_key=True)
|
id: int | None = Field(default=None, primary_key=True)
|
||||||
|
type: str
|
||||||
groups: List["GroupDB"] = Relationship(back_populates="accessauths", link_model=AaGroupLink)
|
groups: List["GroupDB"] = Relationship(back_populates="accessauths", link_model=AaGroupLink)
|
||||||
timetables: List["Timetable"] = Relationship(back_populates="accessauth", cascade_delete=True)
|
timetables: List["Timetable"] = Relationship(back_populates="accessauth", cascade_delete=True)
|
||||||
|
oneshot: "OneShotAccess" = Relationship(back_populates="accessauth", cascade_delete=True)
|
||||||
|
|
||||||
|
class OneShotAccessBase(Base):
|
||||||
|
uses: int = 1
|
||||||
|
ends_at: datetime
|
||||||
|
|
||||||
|
class OneShotAccess(OneShotAccessBase, table=True):
|
||||||
|
id: int | None = Field(default=None, primary_key=True)
|
||||||
|
accessauth_id: int = Field(default=None, foreign_key="accessauthorizationdb.id")
|
||||||
|
accessauth: AccessAuthorizationDB = Relationship(back_populates="oneshot")
|
||||||
|
|
||||||
class AccessAuthorizationCreate(AccessAuthorizationBase):
|
class AccessAuthorizationCreate(AccessAuthorizationBase):
|
||||||
timetables: List["TimetableCreate"]
|
timetables: List["TimetableCreate"] = []
|
||||||
|
oneshot: OneShotAccessBase | None = None
|
||||||
|
|
||||||
|
@model_validator(mode="after")
|
||||||
|
def check_type(self):
|
||||||
|
if self.type == "timetable":
|
||||||
|
if not self.timetables:
|
||||||
|
raise ValueError("timetable auths require at least one timetable object")
|
||||||
|
if self.oneshot is not None:
|
||||||
|
raise ValueError("timetable auths are not allowed oneshot objects")
|
||||||
|
elif self.type == "oneshot":
|
||||||
|
if not self.oneshot:
|
||||||
|
raise ValueError("oneshot auths require a oneshot object")
|
||||||
|
if self.timetables:
|
||||||
|
raise ValueError("oneshot auths are not allowed timetable objects")
|
||||||
|
elif self.type == "somefuturespec":
|
||||||
|
raise ValueError("somefuturespec is not jet implemented. Please do not use")
|
||||||
|
return self
|
||||||
|
|
||||||
class AccessAuthorizationResponse(AccessAuthorizationBase):
|
class AccessAuthorizationResponse(AccessAuthorizationBase):
|
||||||
id: int
|
id: int
|
||||||
timetables: List["Timetable"]
|
timetables: List["Timetable"] = []
|
||||||
|
oneshot: OneShotAccessBase | None = None
|
||||||
groups: List["GroupDB"]
|
groups: List["GroupDB"]
|
||||||
|
|
||||||
class AccessAuthorizationUpdate(Base):
|
class AccessAuthorizationUpdate(Base):
|
||||||
|
|||||||
Reference in New Issue
Block a user