feat: assembly additional statistics

This commit is contained in:
2024-03-05 07:16:24 +03:00
parent 7e853c48e7
commit 7512b3347e

View File

@@ -1,7 +1,7 @@
import datetime import datetime
from enum import StrEnum from enum import StrEnum
from flask import Blueprint, request, jsonify from flask import Blueprint, request, jsonify
from sqlalchemy import func from sqlalchemy import func, cast, String, Numeric, Float
import auxiliary import auxiliary
import database import database
@@ -136,14 +136,17 @@ def get_users_statistics():
user_id = int(data['userId']) user_id = int(data['userId'])
date_from = datetime.datetime.fromisoformat(data['dateFrom']) date_from = datetime.datetime.fromisoformat(data['dateFrom'])
date_to = datetime.datetime.fromisoformat(data['dateTo']) + datetime.timedelta(hours=24, minutes=59, seconds=59) date_to = datetime.datetime.fromisoformat(data['dateTo']) + datetime.timedelta(hours=24, minutes=59, seconds=59)
query = (database.BalanceTransaction.query query = (database.BalanceTransaction.query
.filter(database.BalanceTransaction.user_id == user_id, .filter(database.BalanceTransaction.user_id == user_id,
database.BalanceTransaction.created_at.between(date_from, date_to)) database.BalanceTransaction.created_at.between(date_from, date_to))
.order_by(func.date_trunc('day', database.BalanceTransaction.created_at)) .order_by(func.date_trunc('day', database.BalanceTransaction.created_at))
.group_by(func.date_trunc('day', database.BalanceTransaction.created_at)) .group_by(func.date_trunc('day', database.BalanceTransaction.created_at))
.with_entities(func.date_trunc('day', database.BalanceTransaction.created_at).label('date'), .with_entities(func.date_trunc('day', database.BalanceTransaction.created_at).label('date'),
func.sum(database.BalanceTransaction.amount).label('value')) func.cast(func.round(func.cast(func.sum(database.BalanceTransaction.amount), Numeric), 2),
Float).label(
'value'),
func.string_agg(cast(database.BalanceTransaction.json_data['order_id'], String), ',').label(
'order_ids'))
.all()) .all())
result = [{'date': row.date.isoformat(), 'value': row.value} for row in query] result = [{'date': row.date.isoformat(), 'value': row.value, 'order_ids': row.order_ids} for row in query]
return jsonify(result) return jsonify(result)