76 lines
1.3 KiB
Python
76 lines
1.3 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pypika import Parameter as CommonParameter, Query, Table
|
|
|
|
|
|
class Parameter(CommonParameter):
|
|
def __init__(self, count: int) -> None:
|
|
super().__init__("${0}".format(count))
|
|
|
|
|
|
class TypedTable(Table):
|
|
__table__ = ""
|
|
|
|
def __init__(
|
|
self,
|
|
name: Optional[str] = None,
|
|
schema: Optional[str] = None,
|
|
alias: Optional[str] = None,
|
|
query_cls: Optional[Query] = None,
|
|
) -> None:
|
|
if name is None:
|
|
if self.__table__:
|
|
name = self.__table__
|
|
else:
|
|
name = self.__class__.__name__
|
|
|
|
super().__init__(name, schema, alias, query_cls)
|
|
|
|
|
|
class Users(TypedTable):
|
|
__table__ = "users"
|
|
|
|
id: int
|
|
username: str
|
|
|
|
|
|
class Articles(TypedTable):
|
|
__table__ = "articles"
|
|
|
|
id: int
|
|
slug: str
|
|
title: str
|
|
description: str
|
|
body: str
|
|
author_id: int
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class Tags(TypedTable):
|
|
__table__ = "tags"
|
|
|
|
tag: str
|
|
|
|
|
|
class ArticlesToTags(TypedTable):
|
|
__table__ = "articles_to_tags"
|
|
|
|
article_id: int
|
|
tag: str
|
|
|
|
|
|
class Favorites(TypedTable):
|
|
__table__ = "favorites"
|
|
|
|
article_id: int
|
|
user_id: int
|
|
|
|
|
|
users = Users()
|
|
articles = Articles()
|
|
tags = Tags()
|
|
articles_to_tags = ArticlesToTags()
|
|
favorites = Favorites()
|