Skip to content

Commit 47cd7b1

Browse files
committed
✨ Add created_at field to User and Item models
1 parent 6c33235 commit 47cd7b1

File tree

4 files changed

+48
-2
lines changed

4 files changed

+48
-2
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
"""Add created_at to User and Item
2+
3+
Revision ID: 44fc2bbcc925
4+
Revises: 1a31ce608336
5+
Create Date: 2026-01-23 15:42:52.493895
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
import sqlmodel.sql.sqltypes
11+
12+
13+
# revision identifiers, used by Alembic.
14+
revision = '44fc2bbcc925'
15+
down_revision = '1a31ce608336'
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
# ### commands auto generated by Alembic - please adjust! ###
22+
op.add_column('item', sa.Column('created_at', sa.DateTime(timezone=True), nullable=False))
23+
op.add_column('user', sa.Column('created_at', sa.DateTime(timezone=True), nullable=False))
24+
# ### end Alembic commands ###
25+
26+
27+
def downgrade():
28+
# ### commands auto generated by Alembic - please adjust! ###
29+
op.drop_column('user', 'created_at')
30+
op.drop_column('item', 'created_at')
31+
# ### end Alembic commands ###

backend/app/api/routes/items.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def read_items(
2121
if current_user.is_superuser:
2222
count_statement = select(func.count()).select_from(Item)
2323
count = session.exec(count_statement).one()
24-
statement = select(Item).offset(skip).limit(limit)
24+
statement = select(Item).order_by(Item.created_at.desc()).offset(skip).limit(limit)
2525
items = session.exec(statement).all()
2626
else:
2727
count_statement = (
@@ -33,6 +33,7 @@ def read_items(
3333
statement = (
3434
select(Item)
3535
.where(Item.owner_id == current_user.id)
36+
.order_by(Item.created_at.desc())
3637
.offset(skip)
3738
.limit(limit)
3839
)

backend/app/api/routes/users.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def read_users(session: SessionDep, skip: int = 0, limit: int = 100) -> Any:
4242
count_statement = select(func.count()).select_from(User)
4343
count = session.exec(count_statement).one()
4444

45-
statement = select(User).offset(skip).limit(limit)
45+
statement = select(User).order_by(User.created_at.desc()).offset(skip).limit(limit)
4646
users = session.exec(statement).all()
4747

4848
return UsersPublic(data=users, count=count)

backend/app/models.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import uuid
2+
from datetime import datetime, timezone
23

34
from pydantic import EmailStr
5+
from sqlalchemy import DateTime
46
from sqlmodel import Field, Relationship, SQLModel
57

68

9+
def get_datetime_utc() -> datetime:
10+
return datetime.now(timezone.utc)
11+
12+
713
# Shared properties
814
class UserBase(SQLModel):
915
email: EmailStr = Field(unique=True, index=True, max_length=255)
@@ -43,6 +49,10 @@ class UpdatePassword(SQLModel):
4349
class User(UserBase, table=True):
4450
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
4551
hashed_password: str
52+
created_at: datetime = Field(
53+
default_factory=get_datetime_utc,
54+
sa_type=DateTime(timezone=True), # type: ignore
55+
)
4656
items: list["Item"] = Relationship(back_populates="owner", cascade_delete=True)
4757

4858

@@ -75,6 +85,10 @@ class ItemUpdate(ItemBase):
7585
# Database model, database table inferred from class name
7686
class Item(ItemBase, table=True):
7787
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+
)
7892
owner_id: uuid.UUID = Field(
7993
foreign_key="user.id", nullable=False, ondelete="CASCADE"
8094
)

0 commit comments

Comments
 (0)