bbs-backend/models/services/post.py
2023-04-15 21:58:25 +08:00

83 lines
2.7 KiB
Python

import time
from typing import cast, Optional, List
from sqlalchemy import select
from sqlmodel.ext.asyncio.session import AsyncSession
from defs import sqlite
from models.models.post import Post
class PostAction:
@staticmethod
async def add_post(post: Post):
async with sqlite.session() as session:
session = cast(AsyncSession, session)
session.add(post)
await session.commit()
@staticmethod
async def update_post(old_post: Post, new_post: Post = None):
if new_post:
old_post.tid = new_post.tid
old_post.uid = new_post.uid
old_post.title = new_post.title
old_post.content = new_post.content
old_post.create_time = new_post.create_time
old_post.update_time = new_post.update_time
old_post.is_hidden = new_post.is_hidden
old_post.is_delete = new_post.is_delete
async with sqlite.session() as session:
session = cast(AsyncSession, session)
session.add(old_post)
await session.commit()
await session.refresh(old_post)
@staticmethod
async def get_post_by_pid(pid: int) -> Post:
async with sqlite.session() as session:
session = cast(AsyncSession, session)
query = select(Post).where(Post.pid == pid)
results = await session.execute(query)
return post[0] if (post := results.first()) else None
@staticmethod
async def get_posts_by_tid(tid: int = None, admin: bool = False) -> List[Post]:
async with sqlite.session() as session:
session = cast(AsyncSession, session)
query = select(Post)
if tid:
query = query.where(Post.tid == tid)
if not admin:
query = query.where(
Post.is_delete == False
).where(
Post.is_hidden == False
)
results = await session.execute(query)
return results.scalars().all()
@staticmethod
def gen_new_post(
tid: int,
uid: int,
title: str,
content: str,
create_time: Optional[int] = None,
update_time: Optional[int] = None,
is_hidden: Optional[bool] = False,
is_delete: Optional[bool] = False,
) -> Post:
if not create_time:
create_time = int(time.time())
return Post(
tid=tid,
uid=uid,
title=title,
content=content,
create_time=create_time,
update_time=update_time,
is_hidden=is_hidden,
is_delete=is_delete,
)