Skip to content

Commit 230ad44

Browse files
committed
Refactor services, tests, and mappers to align with the updated application-layer DTOs and mappers
1 parent 3e2ce14 commit 230ad44

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+619
-517
lines changed

conduit/api/mappers/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"""API mappers for request/response conversions."""
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from conduit.api.schemas.requests.article import (
2+
CreateArticleRequest,
3+
UpdateArticleRequest,
4+
)
5+
from conduit.application.dtos.article import CreateArticleDTO, UpdateArticleDTO
6+
7+
8+
def request_to_create_article_dto(request: CreateArticleRequest) -> CreateArticleDTO:
9+
return CreateArticleDTO(
10+
title=request.article.title,
11+
description=request.article.description,
12+
body=request.article.body,
13+
tags=request.article.tags,
14+
)
15+
16+
17+
def request_to_update_article_dto(request: UpdateArticleRequest) -> UpdateArticleDTO:
18+
return UpdateArticleDTO(
19+
title=request.article.title,
20+
description=request.article.description,
21+
body=request.article.body,
22+
)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from conduit.api.schemas.requests.comment import CreateCommentRequest
2+
from conduit.application.dtos.comment import CreateCommentDTO
3+
4+
5+
def request_to_create_comment_dto(request: CreateCommentRequest) -> CreateCommentDTO:
6+
return CreateCommentDTO(body=request.comment.body)

conduit/api/mappers/user_mapper.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from conduit.api.schemas.requests.user import (
2+
UserLoginRequest,
3+
UserRegistrationRequest,
4+
UserUpdateRequest,
5+
)
6+
from conduit.application.dtos.user import CreateUserDTO, LoginUserDTO, UpdateUserDTO
7+
8+
9+
def request_to_create_user_dto(request: UserRegistrationRequest) -> CreateUserDTO:
10+
return CreateUserDTO(
11+
username=request.user.username,
12+
email=request.user.email,
13+
password=request.user.password,
14+
)
15+
16+
17+
def request_to_login_user_dto(request: UserLoginRequest) -> LoginUserDTO:
18+
return LoginUserDTO(email=request.user.email, password=request.user.password)
19+
20+
21+
def request_to_update_user_dto(request: UserUpdateRequest) -> UpdateUserDTO:
22+
return UpdateUserDTO(
23+
email=request.user.email,
24+
password=request.user.password,
25+
username=request.user.username,
26+
bio=request.user.bio,
27+
image_url=request.user.image,
28+
)

conduit/api/routes/article.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
from fastapi import APIRouter
22
from starlette import status
33

4+
from conduit.api.mappers.article_mapper import (
5+
request_to_create_article_dto,
6+
request_to_update_article_dto,
7+
)
48
from conduit.api.schemas.requests.article import (
59
CreateArticleRequest,
610
UpdateArticleRequest,
@@ -87,7 +91,9 @@ async def create_article(
8791
Create new article.
8892
"""
8993
article_dto = await article_service.create_new_article(
90-
uow=uow, author_id=current_user.id, article_to_create=payload.to_dto()
94+
uow=uow,
95+
author_id=current_user.id,
96+
article_to_create=request_to_create_article_dto(payload),
9197
)
9298
return ArticleResponse.from_dto(dto=article_dto)
9399

@@ -106,7 +112,7 @@ async def update_article(
106112
article_dto = await article_service.update_article_by_slug(
107113
uow=uow,
108114
slug=slug,
109-
article_to_update=payload.to_dto(),
115+
article_to_update=request_to_update_article_dto(payload),
110116
current_user=current_user,
111117
)
112118
return ArticleResponse.from_dto(dto=article_dto)

conduit/api/routes/authentication.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
from fastapi import APIRouter
22

3+
from conduit.api.mappers.user_mapper import (
4+
request_to_create_user_dto,
5+
request_to_login_user_dto,
6+
)
37
from conduit.api.schemas.requests.user import UserLoginRequest, UserRegistrationRequest
48
from conduit.api.schemas.responses.user import (
59
UserLoginResponse,
@@ -20,7 +24,7 @@ async def register_user(
2024
Process user registration.
2125
"""
2226
user_dto = await user_auth_service.sign_up_user(
23-
uow=uow, user_to_create=payload.to_dto()
27+
uow=uow, user_to_create=request_to_create_user_dto(payload)
2428
)
2529
return UserRegistrationResponse.from_dto(dto=user_dto)
2630

@@ -33,6 +37,6 @@ async def login_user(
3337
Process user login.
3438
"""
3539
user_dto = await user_auth_service.sign_in_user(
36-
uow=uow, user_to_login=payload.to_dto()
40+
uow=uow, user_to_login=request_to_login_user_dto(payload)
3741
)
3842
return UserLoginResponse.from_dto(dto=user_dto)

conduit/api/routes/comment.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from fastapi import APIRouter, Path
22
from starlette import status
33

4+
from conduit.api.mappers.comment_mapper import request_to_create_comment_dto
45
from conduit.api.schemas.requests.comment import CreateCommentRequest
56
from conduit.api.schemas.responses.comment import CommentResponse, CommentsListResponse
67
from conduit.core.dependencies import (
@@ -43,7 +44,7 @@ async def create_comment(
4344
comment_dto = await comment_service.create_article_comment(
4445
uow=uow,
4546
slug=slug,
46-
comment_to_create=payload.to_dto(),
47+
comment_to_create=request_to_create_comment_dto(payload),
4748
current_user=current_user,
4849
)
4950
return CommentResponse.from_dto(dto=comment_dto)

conduit/api/routes/users.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from fastapi import APIRouter
22

3+
from conduit.api.mappers.user_mapper import request_to_update_user_dto
34
from conduit.api.schemas.requests.user import UserUpdateRequest
45
from conduit.api.schemas.responses.user import CurrentUserResponse, UpdatedUserResponse
56
from conduit.core.dependencies import CurrentUser, IUserService, JWTToken, UnitOfWork
@@ -29,6 +30,8 @@ async def update_current_user(
2930
Update current user.
3031
"""
3132
updated_user_dto = await user_service.update_user(
32-
uow=uow, current_user=current_user, user_to_update=payload.to_dto()
33+
uow=uow,
34+
current_user=current_user,
35+
user_to_update=request_to_update_user_dto(payload),
3336
)
3437
return UpdatedUserResponse.from_dto(dto=updated_user_dto, token=token)

conduit/api/schemas/requests/article.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
from pydantic import BaseModel, Field
22

3-
from conduit.domain.dtos.article import CreateArticleDTO, UpdateArticleDTO
4-
53

64
class ArticlesPagination(BaseModel):
75
limit: int = Field(ge=1)
@@ -30,21 +28,6 @@ class UpdateArticleData(BaseModel):
3028
class UpdateArticleRequest(BaseModel):
3129
article: UpdateArticleData
3230

33-
def to_dto(self) -> UpdateArticleDTO:
34-
return UpdateArticleDTO(
35-
title=self.article.title,
36-
description=self.article.description,
37-
body=self.article.body,
38-
)
39-
4031

4132
class CreateArticleRequest(BaseModel):
4233
article: CreateArticleData
43-
44-
def to_dto(self) -> CreateArticleDTO:
45-
return CreateArticleDTO(
46-
title=self.article.title,
47-
description=self.article.description,
48-
body=self.article.body,
49-
tags=self.article.tags,
50-
)
Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
from pydantic import BaseModel, Field
22

3-
from conduit.domain.dtos.comment import CreateCommentDTO
4-
53

64
class CreateCommentData(BaseModel):
75
body: str = Field(..., min_length=1)
86

97

108
class CreateCommentRequest(BaseModel):
119
comment: CreateCommentData
12-
13-
def to_dto(self) -> CreateCommentDTO:
14-
return CreateCommentDTO(body=self.comment.body)

0 commit comments

Comments
 (0)