|
1 | 1 | import uuid |
| 2 | +from datetime import datetime, timezone |
2 | 3 |
|
3 | 4 | from pydantic import EmailStr |
| 5 | +from sqlalchemy import DateTime |
4 | 6 | from sqlmodel import Field, Relationship, SQLModel |
5 | 7 |
|
6 | 8 |
|
| 9 | +def get_datetime_utc() -> datetime: |
| 10 | + return datetime.now(timezone.utc) |
| 11 | + |
| 12 | + |
7 | 13 | # Shared properties |
8 | 14 | class UserBase(SQLModel): |
9 | 15 | email: EmailStr = Field(unique=True, index=True, max_length=255) |
@@ -43,6 +49,10 @@ class UpdatePassword(SQLModel): |
43 | 49 | class User(UserBase, table=True): |
44 | 50 | id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) |
45 | 51 | hashed_password: str |
| 52 | + created_at: datetime = Field( |
| 53 | + default_factory=get_datetime_utc, |
| 54 | + sa_type=DateTime(timezone=True), # type: ignore |
| 55 | + ) |
46 | 56 | items: list["Item"] = Relationship(back_populates="owner", cascade_delete=True) |
47 | 57 |
|
48 | 58 |
|
@@ -75,6 +85,10 @@ class ItemUpdate(ItemBase): |
75 | 85 | # Database model, database table inferred from class name |
76 | 86 | class Item(ItemBase, table=True): |
77 | 87 | id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) |
| 88 | + created_at: datetime = Field( |
| 89 | + default_factory=get_datetime_utc, |
| 90 | + sa_type=DateTime(timezone=True), # type: ignore |
| 91 | + ) |
78 | 92 | owner_id: uuid.UUID = Field( |
79 | 93 | foreign_key="user.id", nullable=False, ondelete="CASCADE" |
80 | 94 | ) |
|
0 commit comments