diff --git a/Controllers/ReportController.cs b/Controllers/ReportController.cs new file mode 100644 index 0000000..28505e2 --- /dev/null +++ b/Controllers/ReportController.cs @@ -0,0 +1,75 @@ +using FirmTracker_Server.nHibernate.Reports; +using Microsoft.AspNetCore.Mvc; +using System.Text.Json.Serialization; +using System.Text.Json; +using NuGet.Protocol; + +namespace FirmTracker_Server.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class ReportController : ControllerBase + { + private readonly ReportCRUD _reportCRUD; + + public ReportController() + { + _reportCRUD = new ReportCRUD(); + } + [HttpPost] + [ProducesResponseType(201)] //Created + [ProducesResponseType(400)] //Bad request + public IActionResult CreateReport([FromBody] Report.DateRangeDto dateRange) + { + try + { + + if (dateRange == null || dateRange.FromDate >= dateRange.ToDate) + { + return BadRequest("Invalid date range."); + } + + var report = _reportCRUD.AddReport(dateRange.FromDate, dateRange.ToDate); + return CreatedAtAction(nameof(GetReport), new { id = report.Id }, report); // to change? + } + catch (Exception ex) + { + return BadRequest(ex.Message); + } + + + + + } + + [HttpGet("{id}")] + [ProducesResponseType(200)] + [ProducesResponseType(404)] + public IActionResult GetReport(int id) + { + var report = _reportCRUD.GetReport(id); + if (report == null) + return NotFound(); + + var options = new JsonSerializerOptions + { + ReferenceHandler = ReferenceHandler.Preserve // Obsługa cykli obiektów + }; + + var json = JsonSerializer.Serialize(report, options); + return Ok(json); + } + + [HttpGet] + [ProducesResponseType(200)] + [ProducesResponseType(404)] + public IActionResult GetAllReports() + { + var reports = _reportCRUD.GetAllReports(); + if (reports == null) + return NotFound(); + + return Ok(reports); + } + } +}