Skip to content

Commit ad47394

Browse files
committed
✨ feat(service): 新增用户与物品服务层实现
- 添加UserService类实现用户创建、更新及认证功能 - 添加ItemService类实现物品创建逻辑 - 引入服务层隔离业务逻辑与数据库操作 ♻️ refactor(test): 重构测试用例结构 - 删除旧版CRUD测试文件test_user.py - 更新测试工具模块导入路径 - 调整模型引用路径至新的model目录结构
1 parent 821d83b commit ad47394

File tree

6 files changed

+49
-99
lines changed

6 files changed

+49
-99
lines changed

backend/app/service/__init__.py

Whitespace-only changes.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import uuid
2+
from sqlmodel import Session
3+
4+
from app.model.items import Item, ItemCreate
5+
6+
7+
class ItemService:
8+
def __init__(self, session: Session):
9+
self.session = session
10+
11+
def create_item(self, item_in: ItemCreate, owner_id: uuid.UUID) -> Item:
12+
return Item.create(self.session, item_in, owner_id)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from typing import Any
2+
from sqlmodel import Session
3+
4+
from app.model.users import User, UserCreate, UserUpdate
5+
from app.core.security import verify_password
6+
7+
8+
class UserService:
9+
def __init__(self, session: Session):
10+
self.session = session
11+
12+
def create_user(self, user_create: UserCreate) -> User:
13+
return User.create(self.session, user_create)
14+
15+
def update_user(self, db_user: User, user_in: UserUpdate) -> Any:
16+
return User.update(self.session, db_user, user_in)
17+
18+
def get_user_by_email(self, email: str) -> User | None:
19+
return User.get_by_email(self.session, email)
20+
21+
def authenticate(self, email: str, password: str) -> User | None:
22+
db_user = self.get_user_by_email(email)
23+
if not db_user:
24+
return None
25+
if not verify_password(password, db_user.hashed_password):
26+
return None
27+
return db_user

backend/app/tests/crud/test_user.py

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

backend/app/tests/utils/item.py

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

33
from app import crud
4-
from app.models import Item, ItemCreate
4+
from app.model.items import Item, ItemCreate
55
from app.tests.utils.user import create_random_user
66
from app.tests.utils.utils import random_lower_string
77

backend/app/tests/utils/user.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from fastapi.testclient import TestClient
22
from sqlmodel import Session
33

4-
from app import crud
4+
from app.service.user_service import UserService
55
from app.core.config import settings
6-
from app.models import User, UserCreate, UserUpdate
6+
from app.model.users import User, UserCreate, UserUpdate
77
from app.tests.utils.utils import random_email, random_lower_string
88

99

@@ -23,7 +23,8 @@ def create_random_user(db: Session) -> User:
2323
email = random_email()
2424
password = random_lower_string()
2525
user_in = UserCreate(email=email, password=password)
26-
user = crud.create_user(session=db, user_create=user_in)
26+
user_service = UserService(db)
27+
user = user_service.create_user(user_in)
2728
return user
2829

2930

@@ -36,14 +37,15 @@ def authentication_token_from_email(
3637
If the user doesn't exist it is created first.
3738
"""
3839
password = random_lower_string()
39-
user = crud.get_user_by_email(session=db, email=email)
40+
user_service = UserService(db)
41+
user = user_service.get_user_by_email(email=email)
4042
if not user:
4143
user_in_create = UserCreate(email=email, password=password)
42-
user = crud.create_user(session=db, user_create=user_in_create)
44+
user = user_service.create_user(user_in_create)
4345
else:
4446
user_in_update = UserUpdate(password=password)
4547
if not user.id:
4648
raise Exception("User id not set")
47-
user = crud.update_user(session=db, db_user=user, user_in=user_in_update)
48-
49+
user_service = UserService(db)
50+
user = user_service.update_user(user, user_in_update)
4951
return user_authentication_headers(client=client, email=email, password=password)

0 commit comments

Comments
 (0)