101 lines
3.7 KiB
Python
101 lines
3.7 KiB
Python
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')
|