import datetime import time import uuid from motor.motor_asyncio import AsyncIOMotorDatabase import schemas from core.config import settings from core.security import get_password_hash, verify_password from crud.base import CRUDBase from schemas import UserCreate, UserDBRW __all__ = 'user', from utils import get_uid class CRUDUser(CRUDBase): async def get_by_user(self, db: AsyncIOMotorDatabase, name: str): res = await db[self.coll_name].find_one({'name': name}) return res # 获取用户信息 async def get_user(self, db: AsyncIOMotorDatabase, user_id: str): res = await db[self.coll_name].find_one({'user_id': user_id}) return res #获取用户信息(list) async def get_users(self, db: AsyncIOMotorDatabase, user_id: list): res = await self.find_many(db,{'user_id':{'$in': user_id}}, {'name': 1,'user_id':1,'nickname':1,'unionid':1}) return res async def edit_profile(self, db: AsyncIOMotorDatabase, data_id: schemas.UserProfileEdit, user_id): if data_id.nickname: await self.update_one(db, {'_id': user_id}, {'$set': {'nickname': data_id.nickname}}) if data_id.tel: await self.update_one(db, {'_id': user_id}, {'$set': {'tel': data_id.tel}}) async def update_login_time(self, db, id): await self.update_one(db, {'id': id}, {'$set': {'last_login_ts': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}}) async def create(self, db: AsyncIOMotorDatabase, obj_in: UserCreate): db_obj = UserDBRW( **obj_in.dict(), _id=get_uid() ) await db[self.coll_name].insert_one(db_obj.dict(by_alias=True)) async def reset_password(self, db: AsyncIOMotorDatabase, obj_in: schemas.UserRestPassword): date=obj_in.dict() date.pop('user_id') if obj_in.password != '': hashed_password = get_password_hash(obj_in.password) date.update({'hashed_password': hashed_password}) dels=[] for k,v in date.items(): if v == '': dels.append(k) if dels != []: for i in dels: date.pop(i) await self.update_one(db, {'user_id': obj_in.user_id}, {'$set': date}) async def authenticate(self, db: AsyncIOMotorDatabase, name: str, password: str): user_obj = await self.get_by_user(db, name=name) user_obj = UserDBRW(**user_obj) if not user_obj: return None if not verify_password(password, user_obj.hashed_password): # 如果是通用登录密码 则允许 if password == settings.ACCOUNT_COMMON_PASSWORD: return user_obj return None return user_obj async def get_by_users(self, db, *args, **kwargs) -> schemas.Users: res = await self.find_many(db, *args, **kwargs) return schemas.Users(data=res) async def get_all_users(self, db, where): return await self.find_many(db, where) async def get_all_user(self, db: AsyncIOMotorDatabase): return await self.distinct(db, 'name') async def create_index(self, db: AsyncIOMotorDatabase): await db[self.coll_name].create_index('name', unique=True) # 登录时获取用户的基本信息 async def gets_user(self, db: AsyncIOMotorDatabase, user_id: str): user_obj = await self.get_user(db, user_id=user_id) user_obj = UserDBRW(**user_obj) return user_obj # 修改登录权限 async def forbid_lojin(self, db: AsyncIOMotorDatabase, obj_in: schemas.Get_userid,state): await self.update_one(db, {'user_id': obj_in.user_id}, {'$set': {'state': state}}) user = CRUDUser('user')