Skip to content

Commit cdcd355

Browse files
committed
add models and schemas
1 parent 9d0e212 commit cdcd355

24 files changed

Lines changed: 833 additions & 487 deletions

src/api/v1/user.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
from fastapi import APIRouter, Depends
22

3-
from schemas.user import UserCreate, UserLogin, UserOut, UserResponse
3+
from schemas.auth import (
4+
LoginOutScheme,
5+
LoginScheme,
6+
RegisterOutScheme,
7+
RegistrationScheme,
8+
)
9+
from schemas.user import UserCreateScheme
410
from services.user_service import UserService
511

612
router = APIRouter()
713

814

9-
@router.post("/register", response_model=UserOut)
15+
@router.post("/register", response_model=UserCreateScheme)
1016
async def register_user(
11-
data: UserCreate,
17+
data: RegistrationScheme,
1218
user_service: UserService = Depends(),
13-
) -> UserOut:
19+
) -> RegisterOutScheme:
1420
return await user_service.register(data)
1521

1622

17-
@router.post("/login", response_model=UserResponse)
23+
@router.post("/login", response_model=LoginOutScheme)
1824
async def login_user(
19-
data: UserLogin,
25+
data: LoginScheme,
2026
user_service: UserService = Depends(),
21-
) -> UserResponse:
27+
) -> LoginOutScheme:
2228
return await user_service.login(data)
2329

2430

src/app.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from api.routers import api_router
66
from core.config import settings
7-
from core.exceptions import register_exception_handlers
7+
from core.exceptions import register_error_handler
88
from core.lifespan import lifespan
99
from core.logger import configure_logger
1010

@@ -26,7 +26,7 @@ def create_app() -> FastAPI:
2626
configure_logger()
2727

2828
# Register exception handlers
29-
register_exception_handlers(app)
29+
register_error_handler(app)
3030

3131
# Include API router
3232
app.include_router(api_router, prefix="/api/v1")

src/core/exceptions.py

Lines changed: 14 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,25 @@
1-
from typing import Any
2-
3-
from fastapi import FastAPI, Request
1+
from fastapi import FastAPI, status
42
from fastapi.responses import JSONResponse
53

64

75
class APIException(Exception):
8-
status_code: int = 500
9-
default_code: str = "error"
10-
default_detail: str = "Something went wrong."
11-
126
def __init__(
137
self,
14-
detail: str | None = None,
15-
code: str | None = None,
16-
values: dict[str, Any] | None = None,
17-
status_code: int | None = None,
8+
message: str,
9+
*,
10+
status_code: int = status.HTTP_400_BAD_REQUEST,
11+
details: dict | None = None,
1812
):
19-
self.detail = detail or self.default_detail
20-
self.code = code or self.default_code
21-
self.values = values or {}
22-
self.status_code = status_code or self.status_code
23-
24-
super().__init__(self.detail)
25-
13+
self.message = message
14+
self.status_code = status_code
15+
self.details = details or {}
2616

27-
async def api_exception_handler(request: Request, exc: Exception) -> JSONResponse:
28-
"""
29-
Обработчик для FastAPI, принимает Exception (требование Starlette),
30-
проверяет на APIException и возвращает JSONResponse.
31-
"""
32-
if isinstance(exc, APIException):
33-
content = {
34-
"code": exc.code,
35-
"detail": exc.detail,
36-
"values": exc.values,
37-
}
38-
return JSONResponse(status_code=exc.status_code, content=content)
17+
def to_dict(self):
18+
return {"message": self.message, "details": self.details}
3919

40-
# fallback для остальных исключений
41-
return JSONResponse(status_code=500, content={"code": "error", "detail": str(exc)})
4220

21+
def register_error_handler(app: FastAPI):
4322

44-
def register_exception_handlers(app: FastAPI) -> None:
45-
app.add_exception_handler(Exception, api_exception_handler)
23+
@app.exception_handler(APIException)
24+
async def api_exception_handler(_, exc: APIException):
25+
return JSONResponse(status_code=exc.status_code, content=exc.to_dict())

src/db/crud/user.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from db.dependencies import get_db_session
66
from db.models.users import User
7-
from schemas.user import UserCreate
7+
from schemas.auth import RegistrationScheme
88

99

1010
class UserCRUD:
@@ -21,10 +21,11 @@ async def get_by_username(self, username: str) -> User | None:
2121
result = await self.session.execute(stmt)
2222
return result.scalars().first()
2323

24-
async def create(self, data: UserCreate, hashed_password: str) -> User:
24+
async def create(self, data: RegistrationScheme, hashed_password: str) -> User:
25+
user_data = data.dict()
26+
user_data.pop("password", None)
2527
user = User(
26-
email=data.email,
27-
username=data.username,
28+
**user_data,
2829
hashed_password=hashed_password,
2930
)
3031
self.session.add(user)

src/db/migrations/versions/233a64b35448_create_marketplace_models.py

Lines changed: 0 additions & 257 deletions
This file was deleted.

0 commit comments

Comments
 (0)