diff --git a/src/InternshipSystem.Api/Controllers/ReportController.cs b/src/InternshipSystem.Api/Controllers/ReportController.cs new file mode 100644 index 0000000..0427641 --- /dev/null +++ b/src/InternshipSystem.Api/Controllers/ReportController.cs @@ -0,0 +1,59 @@ +using System.Threading; +using System.Threading.Tasks; +using InternshipSystem.Api.Security; +using InternshipSystem.Repository; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace InternshipSystem.Api.Controllers +{ + [Route("internship/report")] + public class ReportController : ControllerBase + { + private readonly InternshipDbContext _context; + + public ReportController(InternshipDbContext context) + { + _context = context; + } + + [HttpPost] + [Authorize(Policy = Policies.RegisteredOnly)] + public async Task PostReport([FromBody] JObject reportValue, [FromServices] User user, CancellationToken ct) + { + var edition = await _context.Editions + .FindAsync(user.EditionId); + + var internship = await _context.Entry(edition) + .Collection(e => e.Internships) + .Query() + .Include(i => i.Report) + .SingleAsync(i => i.Student.Id == user.PersonNumber, ct); + + internship.Report.UpdateReport(reportValue.ToString(Formatting.None)); + + await _context.SaveChangesAsync(ct); + + return Ok(); + } + + [HttpGet] + [Authorize(Policy = Policies.RegisteredOnly)] + public async Task GetReport([FromServices] User user, CancellationToken ct) + { + var edition = await _context.Editions + .FindAsync(user.EditionId); + + var internship = await _context.Entry(edition) + .Collection(e => e.Internships) + .Query() + .Include(i => i.Report) + .SingleAsync(i => i.Student.Id == user.PersonNumber, ct); + + return Ok(JsonConvert.DeserializeObject(internship.Report.Value)); + } + } +} \ No newline at end of file diff --git a/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs b/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs index 45a7a37..16e7c7b 100644 --- a/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs +++ b/src/InternshipSystem.Api/Controllers/ReportFieldsController.cs @@ -79,6 +79,7 @@ namespace InternshipSystem.Api.Controllers public class FieldCreateRequest { + public long? Id { get; set; } public string Label { get; set; } public string LabelEng { get; set; } public string Description { get; set; } diff --git a/src/InternshipSystem.Core/Entity/Report.cs b/src/InternshipSystem.Core/Entity/Report.cs index 5515c28..b3b4245 100644 --- a/src/InternshipSystem.Core/Entity/Report.cs +++ b/src/InternshipSystem.Core/Entity/Report.cs @@ -12,5 +12,11 @@ namespace InternshipSystem.Core { return new Report(); } + + public void UpdateReport(string reportValue) + { + Value = reportValue; + State = DocumentState.Submitted; + } } } \ No newline at end of file diff --git a/src/InternshipSystem.Repository/DatabaseFiller.cs b/src/InternshipSystem.Repository/DatabaseFiller.cs index 3936d4f..f79e3b6 100644 --- a/src/InternshipSystem.Repository/DatabaseFiller.cs +++ b/src/InternshipSystem.Repository/DatabaseFiller.cs @@ -347,6 +347,7 @@ namespace InternshipSystem.Repository } } }, + Report = Report.Create() }, new Internship {