fix: use onCascade for foreignkeys

This commit is contained in:
swve 2024-02-04 20:27:56 +01:00
parent 925276dc7a
commit 4245e61df8
12 changed files with 68 additions and 33 deletions

View file

@ -1,5 +1,5 @@
from typing import Optional from typing import Optional
from sqlalchemy import JSON, BigInteger, Column, ForeignKey from sqlalchemy import JSON, Column, ForeignKey, Integer
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
from enum import Enum from enum import Enum
@ -38,12 +38,12 @@ class ActivityBase(SQLModel):
class Activity(ActivityBase, table=True): class Activity(ActivityBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True) id: Optional[int] = Field(default=None, primary_key=True)
org_id: int = Field(default=None, foreign_key="organization.id") org_id: int = Field(
sa_column=Column(Integer, ForeignKey("organization.id", ondelete="CASCADE"))
)
course_id: int = Field( course_id: int = Field(
default=None, default=None,
sa_column=Column( sa_column=Column(Integer, ForeignKey("course.id", ondelete="CASCADE")),
BigInteger, ForeignKey("course.id", ondelete="CASCADE")
),
) )
activity_uuid: str = "" activity_uuid: str = ""
creation_date: str = "" creation_date: str = ""

View file

@ -21,7 +21,7 @@ class BlockBase(SQLModel):
class Block(BlockBase, table=True): class Block(BlockBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True) id: Optional[int] = Field(default=None, primary_key=True)
content: dict = Field(default={}, sa_column=Column(JSON)) content: dict = Field(default={}, sa_column=Column(JSON))
org_id: int = Field(default=None, foreign_key="organization.id") org_id: int = Field(sa_column= Column("org_id", ForeignKey("organization.id", ondelete="CASCADE")))
course_id: int = Field(sa_column= Column("course_id", ForeignKey("course.id", ondelete="CASCADE"))) course_id: int = Field(sa_column= Column("course_id", ForeignKey("course.id", ondelete="CASCADE")))
chapter_id: int = Field(sa_column= Column("chapter_id", ForeignKey("chapter.id", ondelete="CASCADE"))) chapter_id: int = Field(sa_column= Column("chapter_id", ForeignKey("chapter.id", ondelete="CASCADE")))
activity_id: int = Field(sa_column= Column("activity_id", ForeignKey("activity.id", ondelete="CASCADE"))) activity_id: int = Field(sa_column= Column("activity_id", ForeignKey("activity.id", ondelete="CASCADE")))

View file

@ -1,4 +1,5 @@
from typing import Optional from typing import Optional
from sqlalchemy import BigInteger, Column, ForeignKey
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
@ -10,7 +11,9 @@ class CollectionBase(SQLModel):
class Collection(CollectionBase, table=True): class Collection(CollectionBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True) id: Optional[int] = Field(default=None, primary_key=True)
org_id: int = Field(default=None, foreign_key="organization.id") org_id: int = Field(
sa_column=Column(BigInteger, ForeignKey("organization.id", ondelete="CASCADE"))
)
collection_uuid: str = "" collection_uuid: str = ""
creation_date: str = "" creation_date: str = ""
update_date: str = "" update_date: str = ""

View file

@ -1,12 +1,12 @@
from typing import Optional from typing import Optional
from sqlalchemy import BigInteger, Column, ForeignKey from sqlalchemy import Column, ForeignKey, Integer
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
class CollectionCourse(SQLModel, table=True): class CollectionCourse(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True) id: Optional[int] = Field(default=None, primary_key=True)
collection_id: int = Field(sa_column=Column(BigInteger, ForeignKey("collection.id", ondelete="CASCADE"))) collection_id: int = Field(sa_column=Column(Integer, ForeignKey("collection.id", ondelete="CASCADE")))
course_id: int = Field(sa_column=Column(BigInteger, ForeignKey("course.id", ondelete="CASCADE"))) course_id: int = Field(sa_column=Column(Integer, ForeignKey("course.id", ondelete="CASCADE")))
org_id: int = Field(default=None, foreign_key="organization.id") org_id: int = Field(default=None, foreign_key="organization.id")
creation_date: str creation_date: str
update_date: str update_date: str

View file

@ -1,5 +1,5 @@
from typing import Optional from typing import Optional
from sqlalchemy import BigInteger, Column, ForeignKey from sqlalchemy import Column, ForeignKey, Integer
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
@ -7,10 +7,10 @@ class CourseChapter(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True) id: Optional[int] = Field(default=None, primary_key=True)
order: int order: int
course_id: int = Field( course_id: int = Field(
sa_column=Column(BigInteger, ForeignKey("course.id", ondelete="CASCADE")) sa_column=Column(Integer, ForeignKey("course.id", ondelete="CASCADE"))
) )
chapter_id: int = Field( chapter_id: int = Field(
sa_column=Column(BigInteger, ForeignKey("chapter.id", ondelete="CASCADE")) sa_column=Column(Integer, ForeignKey("chapter.id", ondelete="CASCADE"))
) )
org_id: int = Field(default=None, foreign_key="organization.id") org_id: int = Field(default=None, foreign_key="organization.id")
creation_date: str creation_date: str

View file

@ -1,4 +1,5 @@
from typing import List, Optional from typing import List, Optional
from sqlalchemy import Column, ForeignKey, Integer
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
from src.db.users import UserRead from src.db.users import UserRead
from src.db.trails import TrailRead from src.db.trails import TrailRead
@ -17,7 +18,9 @@ class CourseBase(SQLModel):
class Course(CourseBase, table=True): class Course(CourseBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True) id: Optional[int] = Field(default=None, primary_key=True)
org_id: int = Field(default=None, foreign_key="organization.id") org_id: int = Field(
sa_column=Column(Integer, ForeignKey("organization.id", ondelete="CASCADE"))
)
course_uuid: str = "" course_uuid: str = ""
creation_date: str = "" creation_date: str = ""
update_date: str = "" update_date: str = ""

View file

@ -1,5 +1,6 @@
from enum import Enum from enum import Enum
from typing import Optional from typing import Optional
from sqlalchemy import Column, ForeignKey, Integer
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
@ -12,7 +13,9 @@ class ResourceAuthorshipEnum(str, Enum):
class ResourceAuthor(SQLModel, table=True): class ResourceAuthor(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True) id: Optional[int] = Field(default=None, primary_key=True)
resource_uuid: str resource_uuid: str
user_id: int = Field(default=None, foreign_key="user.id") user_id: int = Field(
sa_column=Column(Integer, ForeignKey("user.id", ondelete="CASCADE"))
)
authorship: ResourceAuthorshipEnum = ResourceAuthorshipEnum.CREATOR authorship: ResourceAuthorshipEnum = ResourceAuthorshipEnum.CREATOR
creation_date: str = "" creation_date: str = ""
update_date: str = "" update_date: str = ""

View file

@ -1,7 +1,7 @@
from enum import Enum from enum import Enum
from typing import Optional, Union from typing import Optional, Union
from pydantic import BaseModel from pydantic import BaseModel
from sqlalchemy import JSON, Column from sqlalchemy import JSON, Column, ForeignKey, Integer
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
@ -45,7 +45,10 @@ class RoleBase(SQLModel):
class Role(RoleBase, table=True): class Role(RoleBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True) id: Optional[int] = Field(default=None, primary_key=True)
org_id: int = Field(default=None, foreign_key="organization.id") org_id: Optional[int] = Field(
default=None,
sa_column=Column(Integer, ForeignKey("organization.id", ondelete="CASCADE"))
)
role_type: RoleTypeEnum = RoleTypeEnum.TYPE_GLOBAL role_type: RoleTypeEnum = RoleTypeEnum.TYPE_GLOBAL
role_uuid: str = "" role_uuid: str = ""
creation_date: str = "" creation_date: str = ""

View file

@ -1,6 +1,6 @@
from typing import Optional from typing import Optional
from pydantic import BaseModel from pydantic import BaseModel
from sqlalchemy import JSON, Column from sqlalchemy import JSON, Column, ForeignKey, Integer
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
from enum import Enum from enum import Enum
@ -23,10 +23,18 @@ class TrailRun(SQLModel, table=True):
data: dict = Field(default={}, sa_column=Column(JSON)) data: dict = Field(default={}, sa_column=Column(JSON))
status: StatusEnum = StatusEnum.STATUS_IN_PROGRESS status: StatusEnum = StatusEnum.STATUS_IN_PROGRESS
# foreign keys # foreign keys
trail_id: int = Field(default=None, foreign_key="trail.id") trail_id: int = Field(
course_id: int = Field(default=None, foreign_key="course.id") sa_column=Column(Integer, ForeignKey("trail.id", ondelete="CASCADE"))
org_id: int = Field(default=None, foreign_key="organization.id") )
user_id: int = Field(default=None, foreign_key="user.id") course_id: int = Field(
sa_column=Column(Integer, ForeignKey("course.id", ondelete="CASCADE"))
)
org_id: int = Field(
sa_column=Column(Integer, ForeignKey("organization.id", ondelete="CASCADE"))
)
user_id: int = Field(
sa_column=Column(Integer, ForeignKey("user.id", ondelete="CASCADE"))
)
# timestamps # timestamps
creation_date: str creation_date: str
update_date: str update_date: str

View file

@ -1,7 +1,7 @@
from enum import Enum from enum import Enum
from typing import Optional from typing import Optional
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
from sqlalchemy import BigInteger, ForeignKey, JSON, Column from sqlalchemy import ForeignKey, JSON, Column, Integer
class TrailStepTypeEnum(str, Enum): class TrailStepTypeEnum(str, Enum):
@ -18,13 +18,23 @@ class TrailStep(SQLModel, table=True):
data: dict = Field(default={}, sa_column=Column(JSON)) data: dict = Field(default={}, sa_column=Column(JSON))
# foreign keys # foreign keys
trailrun_id: int = Field( trailrun_id: int = Field(
sa_column=Column(BigInteger, ForeignKey("trailrun.id", ondelete="CASCADE")) sa_column=Column(Integer, ForeignKey("trailrun.id", ondelete="CASCADE"))
)
trail_id: int = Field(
sa_column=Column(Integer, ForeignKey("trail.id", ondelete="CASCADE"))
)
activity_id: int = Field(
sa_column=Column(Integer, ForeignKey("activity.id", ondelete="CASCADE"))
)
course_id: int = Field(
sa_column=Column(Integer, ForeignKey("course.id", ondelete="CASCADE"))
)
org_id: int = Field(
sa_column=Column(Integer, ForeignKey("organization.id", ondelete="CASCADE"))
)
user_id: int = Field(
sa_column=Column(Integer, ForeignKey("user.id", ondelete="CASCADE"))
) )
trail_id: int = Field(default=None, foreign_key="trail.id")
activity_id: int = Field(default=None, foreign_key="activity.id")
course_id: int = Field(default=None, foreign_key="course.id")
org_id: int = Field(default=None, foreign_key="organization.id")
user_id: int = Field(default=None, foreign_key="user.id")
# timestamps # timestamps
creation_date: str creation_date: str
update_date: str update_date: str

View file

@ -1,5 +1,6 @@
from typing import Optional from typing import Optional
from pydantic import BaseModel from pydantic import BaseModel
from sqlalchemy import Column, ForeignKey, Integer
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
from src.db.trail_runs import TrailRunRead from src.db.trail_runs import TrailRunRead
@ -24,8 +25,12 @@ class TrailCreate(TrailBase):
class TrailRead(BaseModel): class TrailRead(BaseModel):
id: Optional[int] = Field(default=None, primary_key=True) id: Optional[int] = Field(default=None, primary_key=True)
trail_uuid: Optional[str] trail_uuid: Optional[str]
org_id: int = Field(default=None, foreign_key="organization.id") org_id: int = Field(
user_id: int = Field(default=None, foreign_key="user.id") sa_column=Column(Integer, ForeignKey("organization.id", ondelete="CASCADE"))
)
user_id: int = Field(
sa_column=Column(Integer, ForeignKey("user.id", ondelete="CASCADE"))
)
creation_date: Optional[str] creation_date: Optional[str]
update_date: Optional[str] update_date: Optional[str]
runs: list[TrailRunRead] runs: list[TrailRunRead]

View file

@ -1,5 +1,5 @@
from typing import Optional from typing import Optional
from sqlalchemy import BigInteger, Column, ForeignKey from sqlalchemy import Column, ForeignKey, Integer
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel
@ -7,7 +7,7 @@ class UserOrganization(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True) id: Optional[int] = Field(default=None, primary_key=True)
user_id: int = Field(default=None, foreign_key="user.id") user_id: int = Field(default=None, foreign_key="user.id")
org_id: int = Field( org_id: int = Field(
sa_column=Column(BigInteger, ForeignKey("organization.id", ondelete="CASCADE")) sa_column=Column(Integer, ForeignKey("organization.id", ondelete="CASCADE"))
) )
role_id: int = Field(default=None, foreign_key="role.id") role_id: int = Field(default=None, foreign_key="role.id")
creation_date: str creation_date: str