feat(api): статистика истории роботов

This commit is contained in:
Mikhail Trubnikov
2023-12-13 09:36:11 +10:00
parent 57d003e98d
commit 71ba29b7e7
3 changed files with 92 additions and 4 deletions

View File

@@ -1,8 +1,16 @@
using Microsoft.AspNetCore.Authorization;
using AutoMapper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using PARR.API.Contracts.V1;
using PARR.API.Contracts.V1.Requests.Queries;
using PARR.API.Contracts.V1.Responses;
using PARR.API.Contracts.V1.Responses.Base;
using PARR.API.Contracts.V1.Responses.Statistics;
using PARR.API.Controllers.V1.Base;
using PARR.Constants;
using PARR.DAL.Models;
using PARR.DAL.Services.Interfaces;
namespace PARR.API.Controllers.V1.Statistics
{
@@ -12,15 +20,65 @@ namespace PARR.API.Controllers.V1.Statistics
[Authorize(Roles = ParrRoles.Administrator.Role)]
public class StatRobotHistoryController : BaseApiController
{
private readonly IRobotHistoryService robotHistoryService;
private readonly IRobotHistoryLevelService robotHistoryLevelService;
private readonly IMapper mapper;
public StatRobotHistoryController(
IRobotHistoryService robotHistoryService,
IRobotHistoryLevelService robotHistoryLevelService,
IMapper mapper
)
{
this.robotHistoryService = robotHistoryService;
this.robotHistoryLevelService = robotHistoryLevelService;
this.mapper = mapper;
}
/// <summary>
/// Статистика истории роботов
/// </summary>
/// <returns></returns>
[HttpGet(ApiRoutes.StatRobotHistory.Get)]
public async Task<IActionResult> Get()
public async Task<IActionResult> Get([FromQuery] StatRobotHistoryQuery request)
{
//todo:
return Ok();
if (!request.Date.HasValue)
request.Date = DateTime.Now.Date;
// всего
var allStat = await robotHistoryService.Get()
.GroupBy(t => t.HistoryLevel)
.Select(t => new { HistoryLevel = t.Key, Count = t.Count() })
.ToListAsync();
// за дату
var dateStat = await robotHistoryService.Get()
.Where(t => t.DateCreated.DateTime.Date == request.Date.Value.Date)
.GroupBy(t => t.HistoryLevel)
.Select(t => new { HistoryLevel = t.Key, Count = t.Count() })
.ToListAsync();
IQueryable<RobotHistoryLevel> levelsQuery = robotHistoryLevelService.Get();
if (request.HistoryLevel.HasValue)
levelsQuery = levelsQuery.Where(t => t.Level == (int)request.HistoryLevel.Value);
var levels = await levelsQuery.OrderBy(t => t.Level).ToListAsync();
var response = new List<StatRobotHistoryResponse>();
foreach (var level in levels)
{
response.Add(new StatRobotHistoryResponse
{
AllCount = allStat.FirstOrDefault(t => t.HistoryLevel == level.Level)?.Count ?? 0,
DateCount = dateStat.FirstOrDefault(t => t.HistoryLevel == level.Level)?.Count ?? 0,
Date = request.Date.Value.Date,
Level = mapper.Map<RobotHistoryLevelResponse>(level)
});
}
return Ok(new Response<List<StatRobotHistoryResponse>>(response, true));
}
}
}