prs_server/crud/crud_user.py

101 lines
3.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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')