using Zentral.Domain.Entities.HR; using Zentral.Infrastructure.Data; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace Zentral.API.Apps.HR.Controllers; [ApiController] [Route("api/hr/[controller]")] public class AssenzeController : ControllerBase { private readonly ZentralDbContext _context; public AssenzeController(ZentralDbContext context) { _context = context; } [HttpGet] public async Task>> GetAssenze([FromQuery] int? dipendenteId, [FromQuery] DateTime? from, [FromQuery] DateTime? to) { var query = _context.Assenze.Include(a => a.Dipendente).AsQueryable(); if (dipendenteId.HasValue) query = query.Where(a => a.DipendenteId == dipendenteId.Value); if (from.HasValue) query = query.Where(a => a.DataInizio >= from.Value); if (to.HasValue) query = query.Where(a => a.DataFine <= to.Value); return await query.OrderByDescending(a => a.DataInizio).ToListAsync(); } [HttpGet("{id}")] public async Task> GetAssenza(int id) { var assenza = await _context.Assenze .Include(a => a.Dipendente) .FirstOrDefaultAsync(a => a.Id == id); if (assenza == null) return NotFound(); return assenza; } [HttpPost] public async Task> CreateAssenza(Assenza assenza) { assenza.CreatedAt = DateTime.UtcNow; _context.Assenze.Add(assenza); await _context.SaveChangesAsync(); return CreatedAtAction(nameof(GetAssenza), new { id = assenza.Id }, assenza); } [HttpPut("{id}")] public async Task UpdateAssenza(int id, Assenza assenza) { if (id != assenza.Id) return BadRequest(); assenza.UpdatedAt = DateTime.UtcNow; _context.Entry(assenza).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!await _context.Assenze.AnyAsync(a => a.Id == id)) return NotFound(); throw; } return NoContent(); } [HttpDelete("{id}")] public async Task DeleteAssenza(int id) { var assenza = await _context.Assenze.FindAsync(id); if (assenza == null) return NotFound(); _context.Assenze.Remove(assenza); await _context.SaveChangesAsync(); return NoContent(); } }