/
Lexus_666
/
Pir_API
Обзор
Документация
Войти
/
Lexus_666
/
Pir_API
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Controllers/V1/WorkersController.cs
111 строк
3 KB
Lexus_666
Добавлена пагинация и опциональные поля
20 окт 2025, 03:36
20 окт 2025, 03:36
b323cab
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Mvc; using Pir_API.Interfaces; using Pir_API.Model; using Pir_API.Models; namespace Pir_API.Controllers.V1; [ApiController] [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/[controller]/[action]")] public class WorkersController : ControllerBase { private readonly IWorkerService _workerService; public WorkersController(IWorkerService workerService) { _workerService = workerService; } [HttpGet] public async Task<ActionResult<PaginatedList<WorkerModel>>> GetWorkers( [FromQuery] PaginationParameters paginationParameters, [FromQuery] string? fields = null) { var workers = await _workerService.GetWorkersPaginatedAsync( paginationParameters.PageNumber, paginationParameters.PageSize); if (string.IsNullOrEmpty(fields)) return Ok(workers); var selectedFields = fields.Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(f => f.Trim().ToLower()) .ToHashSet(); var response = workers; response.Items = workers.Items.Select(worker => new WorkerModel { Id = worker.Id, Name = selectedFields.Contains("name") ? worker.Name : "", Surname = selectedFields.Contains("surname") ? worker.Surname : "", Phone = selectedFields.Contains("phone") ? worker.Phone : "", Role = selectedFields.Contains("role") ? worker.Role : "", OnWorkTimer = worker.OnWorkTimer, StartedAt = worker.StartedAt }); return Ok(response); } [HttpGet("{id:guid}")] public async Task<ActionResult<WorkerModel>> GetWorker(Guid id, [FromQuery] string? fields = null) { var worker = await _workerService.GetWorkerByIdAsync(id); if (worker == null) { return NotFound(); } if (string.IsNullOrEmpty(fields)) return Ok(worker); var selectedFields = fields.Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(f => f.Trim().ToLower()) .ToHashSet(); var response = new WorkerModel { Id = worker.Id, Name = selectedFields.Contains("name") ? worker.Name : "", Surname = selectedFields.Contains("surname") ? worker.Surname : "", Phone = selectedFields.Contains("phone") ? worker.Phone : "", Role = selectedFields.Contains("role") ? worker.Role : "", OnWorkTimer = worker.OnWorkTimer, StartedAt = worker.StartedAt }; return Ok(response); } [HttpPost] public async Task<ActionResult<WorkerModel>> CreateWorker([FromBody] WorkerModel worker) { var createdWorker = await _workerService.CreateWorkerAsync(worker); return CreatedAtAction(nameof(GetWorker), new { id = createdWorker.Id }, createdWorker); } [HttpPut("{id:guid}")] public async Task<ActionResult<WorkerModel>> UpdateWorker(Guid id, [FromBody] WorkerModel worker) { var updatedWorker = await _workerService.UpdateWorkerAsync(id, worker); if (updatedWorker == null) { return NotFound(); } return Ok(updatedWorker); } [HttpDelete("{id:guid}")] public async Task<ActionResult> DeleteWorker(Guid id) { var result = await _workerService.DeleteWorkerAsync(id); if (!result) { return NotFound(); } return NoContent(); } }