first commit

This commit is contained in:
2025-07-24 20:13:47 +03:00
commit 94b7585f8b
175 changed files with 85264 additions and 0 deletions

125
app/api/v1/user.py Normal file
View File

@ -0,0 +1,125 @@
import re
from time import time
from fastapi import APIRouter
from app import mongo
from app.utils.response_util import response
router = APIRouter()
@router.get("/get-all", tags=[""])
async def get_all():
start_time = time()
users = await mongo.users_collection.find({
"isDeleted": {"$ne": True}
}, {
"_id": False
}).sort("id", mongo.asc).to_list()
return response({
"users": users
}, start_time=start_time)
@router.get("/get-managers", tags=[""])
async def get_all_managers():
start_time = time()
managers = await mongo.users_collection.find({
"position.key": "sales_manager",
"isDeleted": {"$ne": True}
}, {
"_id": False
}).sort("id", mongo.asc).to_list()
return response({
"managers": managers
}, start_time=start_time)
@router.post("/create", tags=[""])
async def create(params: dict):
start_time = time()
data = params["data"]
telegram_id = extract_telegram_id(data.get("comment", ""))
if telegram_id:
data["telegramId"] = telegram_id
role = data.get("role")
if not role:
return response({
"message": "Необходимо выбрать роль",
"ok": False
}, start_time=start_time)
data["id"] = await mongo.get_next_id(mongo.users_collection)
await mongo.users_collection.insert_one(data)
return response({
"message": "Пользователь создан",
"ok": True
}, start_time=start_time)
@router.post("/update", tags=[""])
async def update(params: dict):
start_time = time()
data = params["data"]
telegram_id = extract_telegram_id(data.get("comment", ""))
if telegram_id:
data["telegramId"] = telegram_id
role = data.get("role")
if not role:
return response({
"message": "Необходимо выбрать роль",
"ok": False
}, start_time=start_time)
await mongo.users_collection.update_one({
"id": data["id"]
}, {
"$set": data
})
return response({
"message": "Пользователь удален" if "isDeleted" in data else "Пользователь обновлен",
"ok": True
}, start_time=start_time)
@router.post("/update/department-sections/{user_id}", tags=[""])
async def update_departments_sections(user_id: int, params: dict):
start_time = time()
data = params["departmentSections"]
await mongo.users_collection.update_one({
"id": user_id
}, {
"$set": {
"departmentSections": data
}
})
return response({
"message": "Отделы пользователя обновлены",
"ok": True
}, start_time=start_time)
def extract_telegram_id(comment: str) -> int | None:
if not comment:
return None
first_line = comment.splitlines()[0]
match = re.search(r"^[^\n:]+:\s*(\d{7,})", first_line)
if match:
num = int(match.group(1))
if num > 1_000_000:
return num
return None