assembly statistics

This commit is contained in:
2023-12-11 01:50:49 +04:00
parent c508a3ee33
commit 34be5a198d
2 changed files with 70 additions and 2 deletions

View File

@@ -9,3 +9,9 @@ def to_nested_dict(row):
current_level = current_level[part] current_level = current_level[part]
current_level[keys[-1]] = value current_level[keys[-1]] = value
return result return result
def compile_query_to_plain_sql(query) -> str:
return query.statement.compile(compile_kwargs={
'literal_binds': True
})

View File

@@ -1,10 +1,10 @@
from enum import StrEnum from enum import StrEnum
from flask import Blueprint, request, jsonify
from flask import Blueprint, request
from sqlalchemy import func from sqlalchemy import func
import auxiliary import auxiliary
import database import database
import database.enums
sipro_blueprint = Blueprint('sipro', __name__) sipro_blueprint = Blueprint('sipro', __name__)
@@ -51,3 +51,65 @@ def assembly_info():
result = query.all() result = query.all()
json_result = [auxiliary.to_nested_dict(row) for row in result] json_result = [auxiliary.to_nested_dict(row) for row in result]
return json_result return json_result
@sipro_blueprint.post('/tableAssemblyStats')
def table_assembly_stats():
filters = request.json
date_from = filters.get('from')
date_to = filters.get('to')
dated_query = (
database.Assembly.query
.join(database.User)
.filter(
database.Assembly.state == database.enums.AssemblyState.CONFIRMED,
database.Assembly.ended_at >= date_from,
database.Assembly.ended_at <= date_to,
database.User.is_admin == False
)
.group_by(database.User.login, database.Assembly.user_id)
.with_entities(
database.User.login.label('user_login'),
func.count(database.Assembly.user_id).label('assembled'),
func.string_agg(func.cast(database.Assembly.order_id, database.db.String), ',').label('order_ids')
)
)
json_result = []
for row in dated_query.all():
json_result.append({
'user_login': row.user_login,
'assembled': row.assembled,
'order_ids': row.order_ids
})
return jsonify(json_result)
@sipro_blueprint.get('/dailyAssemblyData')
def daily_assembly_stats():
query = (
database.Assembly.query
.join(database.User)
.filter(
database.Assembly.state == database.enums.AssemblyState.CONFIRMED,
database.Assembly.ended_at >= func.current_date()
)
.group_by(database.User.login, database.Assembly.user_id)
.with_entities(
database.User.login.label('user_login'),
func.count(database.Assembly.user_id).label('assembled'),
func.string_agg(func.cast(database.Assembly.order_id, database.db.String), ',').label('order_ids')
)
)
json_result = []
for row in query.all():
json_result.append({
'user_login': row.user_login,
'assembled': row.assembled,
'order_ids': row.order_ids
})
return json_result