feat: various improvements

wip: frontend

feat: enable cascade on foreign keys

wip1

wip2

fix chapters issues

wip4
This commit is contained in:
swve 2023-11-29 22:29:48 +01:00
parent 2bf80030d7
commit 187f75e583
71 changed files with 879 additions and 568 deletions

View file

@ -1,5 +1,5 @@
from typing import Optional
from sqlalchemy import JSON, Column
from sqlalchemy import JSON, BigInteger, Column, ForeignKey
from sqlmodel import Field, SQLModel
from enum import Enum
@ -34,20 +34,32 @@ class ActivityBase(SQLModel):
content: dict = Field(default={}, sa_column=Column(JSON))
published_version: int
version: int
course_id: int = Field(default=None, foreign_key="course.id")
course_id: int = Field(
default=None,
sa_column=Column(
BigInteger, ForeignKey("course.id", ondelete="CASCADE")
),
)
class Activity(ActivityBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
org_id: int = Field(default=None, foreign_key="organization.id")
course_id: int = Field(
default=None,
sa_column=Column(
BigInteger, ForeignKey("course.id", ondelete="CASCADE")
),
)
activity_uuid: str = ""
creation_date: str = ""
update_date: str = ""
class ActivityCreate(ActivityBase):
org_id: int = Field(default=None, foreign_key="organization.id")
course_id: int = Field(default=None, foreign_key="course.id")
course_id: int = Field(
sa_column=Column("course_id", ForeignKey("course.id", ondelete="CASCADE"))
)
chapter_id: int
pass

View file

@ -1,5 +1,5 @@
from typing import Optional
from sqlalchemy import JSON, Column
from sqlalchemy import JSON, Column, ForeignKey
from sqlmodel import Field, SQLModel
from enum import Enum
@ -22,9 +22,9 @@ class Block(BlockBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
content: dict = Field(default={}, sa_column=Column(JSON))
org_id: int = Field(default=None, foreign_key="organization.id")
course_id: int = Field(default=None, foreign_key="course.id")
chapter_id: int = Field(default=None, foreign_key="chapter.id")
activity_id: int = Field(default=None, foreign_key="activity.id")
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")))
activity_id: int = Field(sa_column= Column("activity_id", ForeignKey("activity.id", ondelete="CASCADE")))
block_uuid: str
creation_date: str
update_date: str

View file

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

View file

@ -1,5 +1,6 @@
from typing import List, Optional
from typing import Any, List, Optional
from pydantic import BaseModel
from sqlalchemy import Column, ForeignKey
from sqlmodel import Field, SQLModel
from src.db.activities import ActivityRead
@ -9,19 +10,21 @@ class ChapterBase(SQLModel):
description: Optional[str] = ""
thumbnail_image: Optional[str] = ""
org_id: int = Field(default=None, foreign_key="organization.id")
course_id: int = Field(default=None, foreign_key="course.id")
creation_date: str
update_date: str
course_id: int = Field(
sa_column=Column("course_id", ForeignKey("course.id", ondelete="CASCADE"))
)
class Chapter(ChapterBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
course_id: int = Field(
sa_column=Column("course_id", ForeignKey("course.id", ondelete="CASCADE"))
)
chapter_uuid: str = ""
creation_date: str = ""
update_date: str = ""
class ChapterCreate(ChapterBase):
# referenced order here will be ignored and just used for validation
# used order will be the next available.
@ -32,6 +35,8 @@ class ChapterUpdate(ChapterBase):
name: Optional[str]
description: Optional[str]
thumbnail_image: Optional[str]
course_id: Optional[int]
org_id: Optional[int]
class ChapterRead(ChapterBase):
@ -57,7 +62,7 @@ class ChapterUpdateOrder(BaseModel):
class DepreceatedChaptersRead(BaseModel):
chapter_order: list[str]
chapters: List[ChapterRead]
activities: List[ActivityRead]
chapterOrder: Any
chapters: Any
activities: Any
pass

View file

@ -24,7 +24,6 @@ class CollectionCreate(CollectionBase):
class CollectionUpdate(CollectionBase):
collection_id: int
courses: Optional[list]
name: Optional[str]
public: Optional[bool]

View file

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

View file

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

View file

@ -1,5 +1,6 @@
from typing import List, Optional
from sqlmodel import Field, SQLModel
from src.db.users import User, UserRead
from src.db.trails import TrailRead
from src.db.chapters import ChapterRead
@ -22,7 +23,6 @@ class Course(CourseBase, table=True):
update_date: str = ""
class CourseCreate(CourseBase):
org_id: int = Field(default=None, foreign_key="organization.id")
pass
@ -40,6 +40,7 @@ class CourseUpdate(CourseBase):
class CourseRead(CourseBase):
id: int
org_id: int = Field(default=None, foreign_key="organization.id")
authors: List[UserRead]
course_uuid: str
creation_date: str
update_date: str
@ -53,6 +54,7 @@ class FullCourseRead(CourseBase):
update_date: str
# Chapters, Activities
chapters: List[ChapterRead]
authors: List[UserRead]
pass
@ -61,8 +63,9 @@ class FullCourseReadWithTrail(CourseBase):
course_uuid: str
creation_date: str
update_date: str
authors: List[UserRead]
# Chapters, Activities
chapters: List[ChapterRead]
# Trail
trail: TrailRead
trail: TrailRead | None
pass

View file

@ -1,7 +1,9 @@
from typing import Optional
from sqlalchemy import BigInteger, Column, ForeignKey
from sqlmodel import Field, SQLModel
from enum import Enum
class HeaderTypeEnum(str, Enum):
LOGO_MENU_SETTINGS = "LOGO_MENU_SETTINGS"
MENU_LOGO_SETTINGS = "MENU_LOGO_SETTINGS"
@ -9,7 +11,9 @@ class HeaderTypeEnum(str, Enum):
class OrganizationSettings(SQLModel, table=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"))
)
logo_image: Optional[str] = ""
header_type: HeaderTypeEnum = HeaderTypeEnum.LOGO_MENU_SETTINGS
color: str = ""

View file

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