83 lines
2.7 KiB
Python
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,
|
|
)
|