40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
from database.mongodb import get_collection
|
|
from typing import Optional
|
|
from pydantic import BaseModel
|
|
from utils.crypto import generate_combo_token
|
|
|
|
class AccountModel(BaseModel):
|
|
id: int
|
|
username: str
|
|
token: str
|
|
|
|
account_collection = get_collection("accounts")
|
|
|
|
def find_account_by_uid(uid: int) -> Optional[AccountModel]:
|
|
account_data = account_collection.find_one({"_id": uid})
|
|
if account_data:
|
|
account_data["id"] = int(account_data["_id"])
|
|
del account_data["_id"]
|
|
return AccountModel(**account_data)
|
|
return None
|
|
|
|
def find_account_by_name(name: str) -> Optional[AccountModel]:
|
|
account_data = account_collection.find_one({"username": name})
|
|
if account_data:
|
|
account_data["id"] = int(account_data["_id"])
|
|
del account_data["_id"]
|
|
return AccountModel(**account_data)
|
|
return None
|
|
|
|
def create_new_account(username: str) -> AccountModel:
|
|
last_account = account_collection.find_one(sort=[("_id", -1)])
|
|
uid = (last_account["_id"] + 1) if last_account else 1001
|
|
token = generate_combo_token(str(uid))
|
|
new_account = {
|
|
"_id": uid,
|
|
"username": username,
|
|
"token": token
|
|
}
|
|
account_collection.insert_one(new_account)
|
|
return AccountModel(id=uid, username=username, token=new_account["token"])
|