Skip to content

Commit 070f25c

Browse files
committed
✨ ✨ Add created_at field to User and Item models; update read_items and read_users to order by created_at
1 parent 2720308 commit 070f25c

3 files changed

Lines changed: 16 additions & 3 deletions

File tree

backend/app/api/routes/items.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from typing import Any
33

44
from fastapi import APIRouter, HTTPException
5-
from sqlmodel import func, select
5+
from sqlmodel import col, func, select
66

77
from app.api.deps import CurrentUser, SessionDep
88
from app.models import Item, ItemCreate, ItemPublic, ItemsPublic, ItemUpdate, Message
@@ -21,7 +21,9 @@ 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 = (
25+
select(Item).order_by(col(Item.created_at).desc()).offset(skip).limit(limit)
26+
)
2527
items = session.exec(statement).all()
2628
else:
2729
count_statement = (
@@ -33,6 +35,7 @@ def read_items(
3335
statement = (
3436
select(Item)
3537
.where(Item.owner_id == current_user.id)
38+
.order_by(col(Item.created_at).desc())
3639
.offset(skip)
3740
.limit(limit)
3841
)

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(col(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: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
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

@@ -43,6 +45,10 @@ class UpdatePassword(SQLModel):
4345
class User(UserBase, table=True):
4446
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
4547
hashed_password: str
48+
created_at: datetime = Field(
49+
default_factory=lambda: datetime.now(timezone.utc),
50+
sa_type=DateTime(timezone=True), # type: ignore
51+
)
4652
items: list["Item"] = Relationship(back_populates="owner", cascade_delete=True)
4753

4854

@@ -75,6 +81,10 @@ class ItemUpdate(ItemBase):
7581
# Database model, database table inferred from class name
7682
class Item(ItemBase, table=True):
7783
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
84+
created_at: datetime = Field(
85+
default_factory=lambda: datetime.now(timezone.utc),
86+
sa_type=DateTime(timezone=True), # type: ignore
87+
)
7888
owner_id: uuid.UUID = Field(
7989
foreign_key="user.id", nullable=False, ondelete="CASCADE"
8090
)

0 commit comments

Comments
 (0)