55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
from piccolo.table import Table, Column
|
|
from piccolo.columns import (
|
|
BigSerial,
|
|
UUID,
|
|
Boolean,
|
|
Timestamptz,
|
|
OnDelete,
|
|
OnUpdate,
|
|
ForeignKey,
|
|
Varchar,
|
|
)
|
|
from piccolo.columns.defaults.timestamptz import TimestamptzNow
|
|
from piccolo.utils.pydantic import create_pydantic_model
|
|
from orm.users import User, PublicUserModel
|
|
from orm.media import Media, PublicMediaModel
|
|
from config import MAX_CAPTION_LENGTH
|
|
|
|
|
|
class Post(Table, tablename="posts"):
|
|
internal_id = BigSerial()
|
|
public_id = UUID(primary_key=True)
|
|
created_by = ForeignKey(
|
|
references=User,
|
|
on_update=OnUpdate.cascade,
|
|
on_delete=OnDelete.cascade,
|
|
null=False,
|
|
)
|
|
creation_date = Timestamptz(default=TimestamptzNow(), null=False)
|
|
media = ForeignKey(
|
|
references=Media,
|
|
on_update=OnUpdate.cascade,
|
|
on_delete=OnDelete.cascade,
|
|
null=False,
|
|
)
|
|
caption = Varchar(length=MAX_CAPTION_LENGTH)
|
|
flagged = Boolean(default=False)
|
|
deleted = Boolean(default=False)
|
|
|
|
|
|
PostModel = create_pydantic_model(Post, nested=True)
|
|
PrivatePostModelInternal = create_pydantic_model(Post, nested=True, exclude_columns=(Post.flagged, Post.internal_id))
|
|
PublicPostModelInternal = create_pydantic_model(
|
|
Post, nested=True, exclude_columns=(Post.flagged, Post.deleted, Post.internal_id)
|
|
)
|
|
|
|
|
|
class PrivatePostModel(PrivatePostModelInternal):
|
|
created_by: PublicUserModel
|
|
content: PublicMediaModel
|
|
|
|
|
|
class PublicPostModel(PublicPostModelInternal):
|
|
created_by: PublicUserModel
|
|
content: PublicMediaModel
|