rlt_salary/app/database/methods.py

41 lines
1.1 KiB
Python
Raw Normal View History

2024-02-27 20:21:36 +01:00
from typing import List, Tuple
from motor.motor_asyncio import AsyncIOMotorCollection
import datetime as dt
2024-02-27 20:21:36 +01:00
async def aggregate_salaries(collection: AsyncIOMotorCollection, dt_from: str, dt_upto: str, group_type: str) -> Tuple[List[int], List[str]]: # type: ignore
2024-02-27 20:21:36 +01:00
pipeline = [
{
"$match": {
"dt": {
"$gt": iso(dt_from),
"$lt": iso(dt_upto)
}
}
},
{
"$group": {
"_id": {
"$dateToString":
{
"format": "%Y-%m-%dT00:00:00",
"date": "$dt"
}
},
"sum": {
"$sum": "$value"
},
}
}
2024-02-27 20:21:36 +01:00
]
dataset = []
labels = []
async for document in collection.aggregate(pipeline):
dataset.append(document["sum"])
labels.append(document["_id"] )
return {"dataset": dataset, "labels": labels}
def iso(date: str) -> dt.datetime:
return dt.datetime.fromisoformat(date)