first commit
This commit is contained in:
153
app/api/v1/transaction.py
Normal file
153
app/api/v1/transaction.py
Normal 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)
|
||||
Reference in New Issue
Block a user