/
Kovalenko
/
TODO
Обзор
Документация
Войти
/
Kovalenko
/
TODO
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
TaskApi/Controllers/Internal/TasksInternalController.cs
52 строки
2 KB
Kovalenko1
that's all
10 янв 2026, 10:20
10 янв 2026, 10:20
4c1ccf3
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using TaskApi.Data; using TaskApi.Dtos.Internal; using TaskApi.Models; using TaskStatus = TaskApi.Models.TaskStatus; namespace TaskApi.Controllers.Internal; [ApiController] [ApiExplorerSettings(GroupName = "internal")] [Route("internal/tasks")] public class TasksInternalController : ControllerBase { private readonly AppDbContext _db; public TasksInternalController(AppDbContext db) { _db = db; } [HttpGet("summary")] [ProducesResponseType(typeof(TaskSummaryResponse), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] public async Task<ActionResult<TaskSummaryResponse>> GetSummary() { var counts = await _db.Tasks.AsNoTracking() .GroupBy(task => task.Status) .Select(group => new { Status = group.Key, Count = group.Count() }) .ToListAsync(); var byStatus = Enum.GetValues<TaskStatus>() .ToDictionary(status => status.ToString(), status => 0, StringComparer.OrdinalIgnoreCase); foreach (var item in counts) { byStatus[item.Status.ToString()] = item.Count; } var latestCreated = await _db.Tasks.AsNoTracking().MaxAsync(task => (DateTimeOffset?)task.CreatedAt); var latestUpdated = await _db.Tasks.AsNoTracking().MaxAsync(task => (DateTimeOffset?)task.UpdatedAt); var total = counts.Sum(item => item.Count); return Ok(new TaskSummaryResponse { TotalTasks = total, ByStatus = byStatus, LatestCreatedAt = latestCreated, LatestUpdatedAt = latestUpdated }); } }