using data.Domain.UseCase; using data.RemoteData.RemoteDatabase.DAO; using data.RemoteData.RemoteDataBase.DAO; using data.Repository; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore.Storage; namespace presence_api.Controllers; [ApiController] [Route("api/[controller]")] public class PresenceController : ControllerBase { readonly UseCaseGeneratePresence _presenceUseCase; public PresenceController(UseCaseGeneratePresence presenceUseCase) { _presenceUseCase = presenceUseCase; } [HttpGet] public ActionResult> getPresence([FromQuery] int GroupId, [FromQuery] DateOnly StartData, [FromQuery] DateOnly EndData, [FromQuery] int UserId) { return Ok(_presenceUseCase.GetPresenceAll(EndData,StartData, GroupId, UserId)); } [HttpPost("update")] public IActionResult UpdateAttendance([FromBody] List attendanceList) { if (attendanceList == null || !attendanceList.Any()) { return BadRequest("Attendance list cannot be empty."); } try { // Вызываем метод сервиса для обновления посещаемости _presenceUseCase.UpdateAttendance(attendanceList); return Ok("Attendance updated successfully."); } catch (Exception ex) { // Логируем ошибку return StatusCode(500, $"Internal server error: {ex.Message}"); } } [HttpDelete] public ActionResult DeletePresence([FromQuery] int GroupId, [FromQuery] int? UserId, [FromQuery] DateOnly? StartDate, [FromQuery] DateOnly? EndDate) { try { // Проверка, что хотя бы один параметр задан if (!UserId.HasValue && !StartDate.HasValue && !EndDate.HasValue) { return BadRequest("At least one parameter (UserId, StartDate, EndDate) must be specified."); } // Выполнение удаления в зависимости от параметров if (UserId.HasValue) { // Удаление посещаемости по UserId _presenceUseCase.DeletePresenceByUser(GroupId, UserId.Value); } else if (StartDate.HasValue && EndDate.HasValue) { // Удаление посещаемости по диапазону дат _presenceUseCase.DeletePresenceByDateRange(GroupId, StartDate.Value, EndDate.Value); } else { // Удаление посещаемости по группе (если не задано UserId или диапазон дат) _presenceUseCase.DeletePresenceByGroup(GroupId); } return Ok("Attendance records deleted successfully."); } catch (Exception ex) { return StatusCode(500, $"Internal server error: {ex.Message}"); } } [HttpPost("mark-absent")] public IActionResult MarkUserAbsent([FromBody] MarkAbsenceRequest request) { _presenceUseCase.MarkUserAbsent(request.UserId, request.GroupId, request.Date, request.LessonNumber); return Ok("User marked as absent."); } }