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

153
app/api/v1/transaction.py Normal file
View File

@ -0,0 +1,153 @@
from time import time
from fastapi import APIRouter
from starlette.requests import Request
from app import mongo
from app.utils.response_util import response
router = APIRouter()
@router.post("/get-all", tags=[""])
async def get_all_transactions(params: dict, page: int = 1, items_per_page: int = 10):
start_time = time()
is_income = params.get("isIncome")
query = {"isIncome": is_income} if is_income is not None else {}
total = await mongo.transactions_collection.count_documents(query)
transactions = await mongo.transactions_collection.find(
query, {"_id": False}
).sort("id", mongo.desc).skip((page - 1) * items_per_page).limit(items_per_page).to_list(length=None)
for transaction in transactions:
user = await mongo.users_collection.find_one({"id": transaction["createdByUser"]["id"]}, {"_id": False})
if user:
transaction["createdByUser"] = user
tag_ids = [tag["id"] for tag in transaction["tags"]]
transaction["tags"] = await mongo.transaction_tags_collection.find({"id": {"$in": tag_ids}}, {"_id": False}).to_list(length=None)
return response({
"transactions": transactions,
"total": total,
}, start_time=start_time)
@router.post("/update", tags=[""])
async def update_transaction(params: dict, request: Request):
start_time = time()
data = params["transaction"]
user_id = request.state.user["id"]
tags = []
for tag_name in data.get("tags", []):
tag = await mongo.transaction_tags_collection.find_one({"name": tag_name}, {"_id": False})
if not tag:
tag_id = await mongo.get_next_id(mongo.transaction_tags_collection)
tag = {
"id": tag_id,
"name": tag_name,
"isIncome": data.get("isIncome", False)
}
await mongo.transaction_tags_collection.insert_one(tag)
tags.append({"id": tag["id"]})
data["tags"] = tags
if "id" in data:
existing = await mongo.transactions_collection.find_one({"id": data["id"]})
if not existing:
return response({"message": "Транзакция не найдена", "ok": False}, start_time=start_time)
await mongo.transactions_collection.update_one({"id": data["id"]}, {"$set": data})
message = "Транзакция обновлена"
else:
data["id"] = await mongo.get_next_id(mongo.transactions_collection)
data["createdByUser"] = {"id": user_id}
await mongo.transactions_collection.insert_one(data)
message = "Транзакция создана"
return response({
"message": message,
"ok": True
}, start_time=start_time)
@router.delete("/delete/{transaction_id}", tags=[""])
async def delete_transaction(transaction_id: int):
start_time = time()
await mongo.transactions_collection.delete_one({"id": transaction_id})
return response({
"message": "Транзакция удалена",
"ok": True
}, start_time=start_time)
@router.get("/get-all-tags", tags=[""])
async def get_all_transaction_tags():
start_time = time()
tags = await mongo.transaction_tags_collection.find(
{}, {"_id": False}
).sort("id", mongo.asc).to_list(length=None)
return response({
"tags": tags
}, start_time=start_time)
@router.get("/get-tags/{is_income}", tags=[""])
async def get_transaction_tags(is_income: bool):
start_time = time()
tags = await mongo.transaction_tags_collection.find(
{"isIncome": is_income}, {"_id": False}
).sort("id", mongo.asc).to_list(length=None)
return response({"tags": tags}, start_time=start_time)
@router.post("/create-tag", tags=[""])
async def create_transaction_tag(params: dict):
start_time = time()
data = params["tag"]
data["id"] = await mongo.get_next_id(mongo.transaction_tags_collection)
await mongo.transaction_tags_collection.insert_one(data)
return response({
"message": "Тег транзакции создан",
"ok": True
}, start_time=start_time)
@router.post("/update-tag", tags=[""])
async def update_transaction_tag(params: dict):
start_time = time()
data = params["tag"]
await mongo.transaction_tags_collection.update_one(
{"id": data["id"]},
{"$set": data}
)
return response({
"message": "Тег транзакции обновлен",
"ok": True
}, start_time=start_time)
@router.delete("/delete-tag/{tag_id}", tags=[""])
async def delete_transaction_tag(tag_id: int):
start_time = time()
await mongo.transaction_tags_collection.delete_one({"id": tag_id})
return response({
"message": "Тег транзакции удалён",
"ok": True
}, start_time=start_time)