-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathmodels.py
89 lines (81 loc) · 2.7 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from typing import Optional, List
from datetime import datetime
import reflex as rx
from reflex_local_auth.user import LocalUser
import sqlalchemy
from sqlmodel import Field, Relationship
from . import utils
class UserInfo(rx.Model, table=True):
email: str
user_id: int = Field(foreign_key='localuser.id')
user: LocalUser | None = Relationship() # LocalUser instance
posts: List['BlogPostModel'] = Relationship(
back_populates='userinfo'
)
contact_entries: List['ContactEntryModel'] = Relationship(
back_populates='userinfo'
)
created_at: datetime = Field(
default_factory=utils.timing.get_utc_now,
sa_type=sqlalchemy.DateTime(timezone=True),
sa_column_kwargs={
'server_default': sqlalchemy.func.now()
},
nullable=False
)
updated_at: datetime = Field(
default_factory=utils.timing.get_utc_now,
sa_type=sqlalchemy.DateTime(timezone=True),
sa_column_kwargs={
'onupdate': sqlalchemy.func.now(),
'server_default': sqlalchemy.func.now()
},
nullable=False
)
class BlogPostModel(rx.Model, table=True):
# user
# id: int -> primary key
userinfo_id: int = Field(default=None, foreign_key="userinfo.id")
userinfo: Optional['UserInfo'] = Relationship(back_populates="posts")
title: str
content: str
created_at: datetime = Field(
default_factory=utils.timing.get_utc_now,
sa_type=sqlalchemy.DateTime(timezone=True),
sa_column_kwargs={
'server_default': sqlalchemy.func.now()
},
nullable=False
)
updated_at: datetime = Field(
default_factory=utils.timing.get_utc_now,
sa_type=sqlalchemy.DateTime(timezone=True),
sa_column_kwargs={
'onupdate': sqlalchemy.func.now(),
'server_default': sqlalchemy.func.now()
},
nullable=False
)
publish_active: bool = False
publish_date: datetime = Field(
default=None,
sa_type=sqlalchemy.DateTime(timezone=True),
sa_column_kwargs={},
nullable=True
)
class ContactEntryModel(rx.Model, table=True):
user_id: int | None = None
userinfo_id: int = Field(default=None, foreign_key="userinfo.id")
userinfo: Optional['UserInfo'] = Relationship(back_populates="contact_entries")
first_name: str
last_name: str | None = None
email: str | None = None # = Field(nullable=True)
message: str
created_at: datetime = Field(
default_factory=utils.timing.get_utc_now,
sa_type=sqlalchemy.DateTime(timezone=True),
sa_column_kwargs={
'server_default': sqlalchemy.func.now()
},
nullable=False
)