PySimpleSocial/orm/posts.py

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