mirror of
https://github.com/kurbezz/discord-bot.git
synced 2025-12-06 15:15:37 +01:00
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
from domain.users import CreateUser, User
|
|
|
|
from .base import BaseRepository
|
|
|
|
|
|
class UserRepository(BaseRepository):
|
|
COLLECTION_NAME = "users"
|
|
|
|
@classmethod
|
|
async def get(cls, user_id: str) -> User:
|
|
async with cls.connect() as collection:
|
|
user = await collection.find_one({"_id": user_id})
|
|
|
|
return User(
|
|
id=str(user["_id"]),
|
|
oauths=user["oauths"],
|
|
is_admin=user["is_admin"],
|
|
)
|
|
|
|
@classmethod
|
|
async def get_or_create_user(cls, newUser: CreateUser) -> User:
|
|
filter_data = {}
|
|
|
|
for provider, data in newUser.oauths.items():
|
|
filter_data[f"oauths.{provider}.id"] = data.id
|
|
|
|
async with cls.connect() as collection:
|
|
await collection.update_one(
|
|
filter_data,
|
|
{
|
|
"$setOnInsert": {
|
|
**newUser.model_dump(),
|
|
}
|
|
},
|
|
upsert=True,
|
|
)
|
|
|
|
user = await collection.find_one(filter_data)
|
|
|
|
return User(
|
|
id=str(user["_id"]),
|
|
oauths=user["oauths"],
|
|
is_admin=user["is_admin"],
|
|
)
|