feat: Implement project management with new models, repositories, and API endpoints, and enhance character management with project association and DTOs.

This commit is contained in:
xds
2026-02-09 16:06:54 +03:00
parent 668aadcdc9
commit 458b6ebfc3
42 changed files with 728 additions and 60 deletions

View File

@@ -19,10 +19,14 @@ class UsersRepo:
self.collection = client[db_name]["users"]
async def get_user(self, user_id: int):
return await self.collection.find_one({"user_id": user_id})
user = await self.collection.find_one({"user_id": user_id})
user["id"] = str(user["_id"])
return user
async def get_user_by_username(self, username: str):
return await self.collection.find_one({"username": username})
user = await self.collection.find_one({"username": username})
user["id"] = str(user["_id"])
return user
async def create_user(self, username: str, password: str, full_name: Optional[str] = None):
"""Создает нового пользователя с username/паролем"""
@@ -38,15 +42,22 @@ class UsersRepo:
"created_at": datetime.now(),
"is_email_user": False, # Теперь это просто "обычный" юзер, не телеграм (хотя поле можно переименовать)
"is_web_user": True,
"is_admin": False
"is_admin": False,
"project_ids": [],
"current_project_id": None
}
result = await self.collection.insert_one(user_doc)
return await self.collection.find_one({"_id": result.inserted_id})
user = await self.collection.find_one({"_id": result.inserted_id})
user["id"] = str(user["_id"])
return user
async def get_pending_users(self):
"""Возвращает список пользователей со статусом PENDING"""
cursor = self.collection.find({"status": UserStatus.PENDING})
return await cursor.to_list(length=100)
users = await cursor.to_list(length=100)
for user in users:
user["id"] = str(user["_id"])
return users
async def approve_user(self, username: str):
await self.collection.update_one(