|
5 | 5 | from sqlalchemy import select, update, desc, and_ |
6 | 6 | from sqlalchemy.ext.asyncio import AsyncSession |
7 | 7 | from sqlalchemy.sql import Select |
| 8 | +from sqlalchemy_crud_plus import CRUDPlus |
8 | 9 |
|
9 | 10 | from backend.app.admin.model import User |
10 | 11 | from backend.common import jwt |
11 | | -from backend.common.msd.crud import CRUDBase |
12 | 12 | from backend.app.admin.schema.user import CreateUser, UpdateUser, Avatar |
13 | 13 |
|
14 | 14 |
|
15 | | -class CRUDUser(CRUDBase[User, CreateUser, UpdateUser]): |
| 15 | +class CRUDUser(CRUDPlus[User]): |
16 | 16 | async def get_user_by_id(self, db: AsyncSession, user_id: int) -> User | None: |
17 | | - user = await super().get(db, pk=user_id) |
18 | | - return user |
| 17 | + return await self.select_model_by_id(db, user_id) |
19 | 18 |
|
20 | 19 | async def get_user_by_username(self, db: AsyncSession, username: str) -> User | None: |
21 | | - user = await db.execute(select(self.model).where(self.model.username == username)) |
22 | | - return user.scalars().first() |
| 20 | + return await self.select_model_by_column(db, 'username', username) |
23 | 21 |
|
24 | 22 | async def update_user_login_time(self, db: AsyncSession, username: str, login_time: datetime) -> int: |
25 | 23 | user = await db.execute( |
26 | 24 | update(self.model).where(self.model.username == username).values(last_login_time=login_time) |
27 | 25 | ) |
28 | 26 | return user.rowcount |
29 | 27 |
|
30 | | - @staticmethod |
31 | | - async def create_user(db: AsyncSession, create: CreateUser) -> None: |
| 28 | + async def create_user(self, db: AsyncSession, create: CreateUser) -> None: |
32 | 29 | create.password = await jwt.get_hash_password(create.password) |
33 | | - new_user = User(**create.model_dump()) |
| 30 | + new_user = self.model(**create.model_dump()) |
34 | 31 | db.add(new_user) |
35 | 32 |
|
36 | 33 | async def update_userinfo(self, db: AsyncSession, current_user: User, obj: UpdateUser) -> int: |
37 | | - return await super().update(db, current_user.id, obj) |
| 34 | + return await self.update_model(db, current_user.id, obj) |
38 | 35 |
|
39 | 36 | async def update_avatar(self, db: AsyncSession, current_user: User, avatar: Avatar) -> int: |
40 | | - user = await db.execute(update(self.model).where(self.model.id == current_user.id).values(avatar=avatar.url)) |
41 | | - return user.rowcount |
| 37 | + return await self.update_model(db, current_user.id, {'avatar': avatar.url}) |
42 | 38 |
|
43 | 39 | async def delete_user(self, db: AsyncSession, user_id: int) -> int: |
44 | | - return await super().delete(db, user_id) |
| 40 | + return await self.delete_model(db, user_id) |
45 | 41 |
|
46 | 42 | async def check_email(self, db: AsyncSession, email: str) -> User: |
47 | | - mail = await db.execute(select(self.model).where(self.model.email == email)) |
48 | | - return mail.scalars().first() |
| 43 | + return await self.select_model_by_column(db, 'email', email) |
49 | 44 |
|
50 | 45 | async def reset_password(self, db: AsyncSession, username: str, password: str) -> int: |
51 | 46 | user = await db.execute( |
@@ -78,17 +73,11 @@ async def get_user_status(self, db: AsyncSession, user_id: int) -> bool: |
78 | 73 |
|
79 | 74 | async def super_set(self, db: AsyncSession, user_id: int) -> int: |
80 | 75 | super_status = await self.get_user_super(db, user_id) |
81 | | - user = await db.execute( |
82 | | - update(self.model).where(self.model.id == user_id).values(is_superuser=False if super_status else True) |
83 | | - ) |
84 | | - return user.rowcount |
| 76 | + return await self.update_model(db, user_id, {'is_superuser': False if super_status else True}) |
85 | 77 |
|
86 | 78 | async def status_set(self, db: AsyncSession, user_id: int) -> int: |
87 | 79 | status = await self.get_user_status(db, user_id) |
88 | | - user = await db.execute( |
89 | | - update(self.model).where(self.model.id == user_id).values(status=False if status else True) |
90 | | - ) |
91 | | - return user.rowcount |
| 80 | + return await self.update_model(db, user_id, {'status': False if status else True}) |
92 | 81 |
|
93 | 82 |
|
94 | 83 | UserDao: CRUDUser = CRUDUser(User) |
0 commit comments