Skip to content

Commit b5ab272

Browse files
committed
Rename image_url to image across services, DTOs, repositories, models, and schemas for consistency.
1 parent bd6b3f6 commit b5ab272

File tree

18 files changed

+92
-99
lines changed

18 files changed

+92
-99
lines changed

conduit/api/routes/authentication.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ async def register_user(
1919
"""
2020
Process user registration.
2121
"""
22-
user_dto = await user_auth_service.sign_up_user(
22+
user_dto, token = await user_auth_service.sign_up_user(
2323
session=session, user_to_create=payload.to_dto()
2424
)
25-
return UserRegistrationResponse.from_dto(dto=user_dto)
25+
return UserRegistrationResponse.from_user(dto=user_dto, token=token)
2626

2727

2828
@router.post("/login", response_model=UserLoginResponse)
@@ -32,7 +32,7 @@ async def login_user(
3232
"""
3333
Process user login.
3434
"""
35-
user_dto = await user_auth_service.sign_in_user(
35+
user_dto, token = await user_auth_service.sign_in_user(
3636
session=session, user_to_login=payload.to_dto()
3737
)
38-
return UserLoginResponse.from_dto(dto=user_dto)
38+
return UserLoginResponse.from_user(dto=user_dto, token=token)

conduit/api/schemas/requests/user.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,5 @@ def to_dto(self) -> UpdateUserDTO:
5656
password=self.user.password,
5757
username=self.user.username,
5858
bio=self.user.bio,
59-
image_url=self.user.image,
59+
image=self.user.image,
6060
)

conduit/api/schemas/responses/user.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from pydantic import BaseModel
22

3-
from conduit.dtos.user import CreatedUserDTO, LoggedInUserDTO, UpdatedUserDTO, UserDTO
3+
from conduit.dtos.user import UpdatedUserDTO, UserDTO
44

55

66
class UserIDData(BaseModel):
@@ -35,15 +35,15 @@ class UserRegistrationResponse(BaseModel):
3535
user: RegisteredUserData
3636

3737
@classmethod
38-
def from_dto(cls, dto: CreatedUserDTO) -> "UserRegistrationResponse":
38+
def from_user(cls, dto: UserDTO, token: str) -> "UserRegistrationResponse":
3939
return UserRegistrationResponse(
4040
user=RegisteredUserData(
4141
id=dto.id,
4242
email=dto.email,
4343
username=dto.username,
4444
bio=dto.bio,
4545
image=dto.image,
46-
token=dto.token,
46+
token=token,
4747
)
4848
)
4949

@@ -52,14 +52,14 @@ class UserLoginResponse(BaseModel):
5252
user: LoggedInUserData
5353

5454
@classmethod
55-
def from_dto(cls, dto: LoggedInUserDTO) -> "UserLoginResponse":
55+
def from_user(cls, dto: UserDTO, token: str) -> "UserLoginResponse":
5656
return UserLoginResponse(
5757
user=LoggedInUserData(
5858
email=dto.email,
5959
username=dto.username,
6060
bio=dto.bio,
6161
image=dto.image,
62-
token=dto.token,
62+
token=token,
6363
)
6464
)
6565

@@ -75,7 +75,7 @@ def from_dto(cls, dto: UserDTO, token: str) -> "CurrentUserResponse":
7575
email=dto.email,
7676
username=dto.username,
7777
bio=dto.bio,
78-
image=dto.image_url,
78+
image=dto.image,
7979
token=token,
8080
)
8181
)

conduit/dtos/article.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class ArticleFeedRecordDTO:
2525
tags: list[str]
2626
author_username: str
2727
author_bio: str | None
28-
author_image_url: str | None
28+
author_image: str | None
2929
author_following: bool
3030
created_at: datetime.datetime
3131
updated_at: datetime.datetime

conduit/dtos/profile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from dataclasses import dataclass
22

33

4-
@dataclass
4+
@dataclass(frozen=True)
55
class ProfileDTO:
66
user_id: int
77
username: str

conduit/dtos/user.py

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,8 @@ class UserDTO:
99
email: str
1010
password_hash: str
1111
bio: str
12-
image_url: str
13-
created_at: datetime.datetime
14-
15-
16-
@dataclass(frozen=True)
17-
class CreatedUserDTO:
18-
id: int
19-
email: str
20-
username: str
21-
bio: str
2212
image: str
23-
token: str
24-
25-
26-
@dataclass(frozen=True)
27-
class LoggedInUserDTO:
28-
email: str
29-
username: str
30-
bio: str
31-
image: str
32-
token: str
13+
created_at: datetime.datetime
3314

3415

3516
@dataclass(frozen=True)
@@ -67,7 +48,7 @@ class UpdateUserDTO:
6748
email: str | None = None
6849
password: str | None = None
6950
bio: str | None = None
70-
image_url: str | None = None
51+
image: str | None = None
7152

7253

7354
@dataclass(frozen=True)
@@ -76,4 +57,4 @@ class UpdateUserRecordDTO:
7657
email: str | None = None
7758
password_hash: str | None = None
7859
bio: str | None = None
79-
image_url: str | None = None
60+
image: str | None = None
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""rename user image_url to image
2+
3+
Revision ID: c3b4f44a9f22
4+
Revises: 666cc53a93be
5+
Create Date: 2026-01-26 00:00:00.000000
6+
7+
"""
8+
9+
from collections.abc import Sequence
10+
11+
import sqlalchemy as sa
12+
from alembic import op
13+
14+
revision: str = "c3b4f44a9f22"
15+
down_revision: str | None = "666cc53a93be"
16+
branch_labels: str | Sequence[str] | None = None
17+
depends_on: str | Sequence[str] | None = None
18+
19+
20+
def upgrade() -> None:
21+
op.alter_column(
22+
"user", "image_url", new_column_name="image", existing_type=sa.String()
23+
)
24+
25+
26+
def downgrade() -> None:
27+
op.alter_column(
28+
"user", "image", new_column_name="image_url", existing_type=sa.String()
29+
)

conduit/infrastructure/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class User(Base):
2020
email: Mapped[str] = mapped_column(unique=True)
2121
password_hash: Mapped[str]
2222
bio: Mapped[str]
23-
image_url: Mapped[str] = mapped_column(nullable=True)
23+
image: Mapped[str] = mapped_column(nullable=True)
2424
created_at: Mapped[datetime]
2525
updated_at: Mapped[datetime] = mapped_column(nullable=True)
2626

conduit/infrastructure/repositories/article.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def _to_article_feed_record_dto(res: Any) -> ArticleFeedRecordDTO:
5959
tags=tags,
6060
author_username=res.username,
6161
author_bio=res.bio,
62-
author_image_url=res.image_url,
62+
author_image=res.image,
6363
author_following=res.following,
6464
created_at=res.created_at,
6565
updated_at=res.updated_at,
@@ -148,7 +148,7 @@ async def list_by_followings(
148148
Article.updated_at.label("updated_at"),
149149
User.username.label("username"),
150150
User.bio.label("bio"),
151-
User.image_url.label("image_url"),
151+
User.image.label("image"),
152152
true().label("following"),
153153
# Subquery for favorites count.
154154
select(func.count(Favorite.article_id))
@@ -187,7 +187,7 @@ async def list_by_followings(
187187
User.username,
188188
User.bio,
189189
User.email,
190-
User.image_url,
190+
User.image,
191191
)
192192
)
193193
query = query.limit(limit).offset(offset)
@@ -218,7 +218,7 @@ async def list_by_filters(
218218
Article.updated_at.label("updated_at"),
219219
User.username.label("username"),
220220
User.bio.label("bio"),
221-
User.image_url.label("image_url"),
221+
User.image.label("image"),
222222
exists()
223223
.where(
224224
(Follower.follower_id == user_id)
@@ -256,7 +256,7 @@ async def list_by_filters(
256256
User.username,
257257
User.bio,
258258
User.email,
259-
User.image_url,
259+
User.image,
260260
)
261261
# fmt: on
262262
)

conduit/infrastructure/repositories/user.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ async def add(
2222
username=create_item.username,
2323
email=create_item.email,
2424
password_hash=create_item.password_hash,
25-
image_url="https://api.realworld.io/images/smiley-cyrus.jpeg",
25+
image="https://api.realworld.io/images/smiley-cyrus.jpeg",
2626
bio="",
2727
created_at=datetime.now(),
2828
)
@@ -95,8 +95,8 @@ async def update(
9595
query = query.values(password_hash=update_item.password_hash)
9696
if update_item.bio is not None:
9797
query = query.values(bio=update_item.bio)
98-
if update_item.image_url is not None:
99-
query = query.values(image_url=update_item.image_url)
98+
if update_item.image is not None:
99+
query = query.values(image=update_item.image)
100100

101101
result = await session.execute(query)
102102
return self._to_user_dto(result.scalar_one())
@@ -108,7 +108,7 @@ def _to_user_dto(model: User) -> UserDTO:
108108
email=model.email,
109109
password_hash=model.password_hash,
110110
bio=model.bio,
111-
image_url=model.image_url,
111+
image=model.image,
112112
created_at=model.created_at,
113113
)
114114
dto.id = model.id

0 commit comments

Comments
 (0)