diff --git a/Marechai.Data/Dtos/LicenseDto.cs b/Marechai.Data/Dtos/LicenseDto.cs new file mode 100644 index 00000000..959c187b --- /dev/null +++ b/Marechai.Data/Dtos/LicenseDto.cs @@ -0,0 +1,48 @@ +/****************************************************************************** +// MARECHAI: Master repository of computing history artifacts information +// ---------------------------------------------------------------------------- +// +// Author(s) : Natalia Portillo +// +// --[ License ] -------------------------------------------------------------- +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as +// published by the Free Software Foundation, either version 3 of the +// License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// ---------------------------------------------------------------------------- +// Copyright © 2003-2021 Natalia Portillo +*******************************************************************************/ + +using System.ComponentModel.DataAnnotations; +using System.Text.Json.Serialization; + +namespace Marechai.Data.Dtos; + +public class LicenseDto : BaseDto +{ + [JsonPropertyName("name")] [Required] public string Name { get; set; } + + [JsonPropertyName("spdx")] public string? SPDX { get; set; } + + [JsonPropertyName("fsf_approved")] + [Required] + public bool FsfApproved { get; set; } + + [JsonPropertyName("osi_approved")] + [Required] + public bool OsiApproved { get; set; } + + [JsonPropertyName("link")] public string? Link { get; set; } + + [JsonPropertyName("text")] public string? Text { get; set; } +} \ No newline at end of file diff --git a/Marechai.Server/Controllers/LicensesController.cs b/Marechai.Server/Controllers/LicensesController.cs index 44de8a49..4fe25c79 100644 --- a/Marechai.Server/Controllers/LicensesController.cs +++ b/Marechai.Server/Controllers/LicensesController.cs @@ -27,6 +27,7 @@ using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; +using Marechai.Data.Dtos; using Marechai.Database.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; @@ -43,34 +44,40 @@ public class LicensesController(MarechaiContext context) : ControllerBase [AllowAnonymous] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] - public Task> GetAsync() => context.Licenses.OrderBy(l => l.Name) - .Select(l => new License - { - FsfApproved = l.FsfApproved, - Id = l.Id, - Link = l.Link, - Name = l.Name, - OsiApproved = l.OsiApproved, - SPDX = l.SPDX - }) - .ToListAsync(); + public Task> GetAsync() + { + return context.Licenses.OrderBy(l => l.Name) + .Select(l => new LicenseDto + { + FsfApproved = l.FsfApproved, + Id = l.Id, + Link = l.Link, + Name = l.Name, + OsiApproved = l.OsiApproved, + SPDX = l.SPDX + }) + .ToListAsync(); + } [HttpGet("{id:int}")] [AllowAnonymous] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] - public Task GetAsync(int id) => context.Licenses.Where(l => l.Id == id) - .Select(l => new License - { - FsfApproved = l.FsfApproved, - Id = l.Id, - Link = l.Link, - Name = l.Name, - OsiApproved = l.OsiApproved, - SPDX = l.SPDX, - Text = l.Text - }) - .FirstOrDefaultAsync(); + public Task GetAsync(int id) + { + return context.Licenses.Where(l => l.Id == id) + .Select(l => new LicenseDto + { + FsfApproved = l.FsfApproved, + Id = l.Id, + Link = l.Link, + Name = l.Name, + OsiApproved = l.OsiApproved, + SPDX = l.SPDX, + Text = l.Text + }) + .FirstOrDefaultAsync(); + } [HttpPut("{id:int}")] [Authorize(Roles = "Admin,UberAdmin")] @@ -78,21 +85,21 @@ public class LicensesController(MarechaiContext context) : ControllerBase [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] - public async Task UpdateAsync(int id, [FromBody] License viewModel) + public async Task UpdateAsync(int id, [FromBody] LicenseDto viewModel) { - string userId = User.FindFirstValue(ClaimTypes.Sid); + var userId = User.FindFirstValue(ClaimTypes.Sid); - if(userId is null) return Unauthorized(); - License model = await context.Licenses.FindAsync(viewModel.Id); + if (userId is null) return Unauthorized(); + var model = await context.Licenses.FindAsync(viewModel.Id); - if(model is null) return NotFound(); + if (model is null) return NotFound(); model.FsfApproved = viewModel.FsfApproved; - model.Link = viewModel.Link; - model.Name = viewModel.Name; + model.Link = viewModel.Link; + model.Name = viewModel.Name; model.OsiApproved = viewModel.OsiApproved; - model.SPDX = viewModel.SPDX; - model.Text = viewModel.Text; + model.SPDX = viewModel.SPDX; + model.Text = viewModel.Text; await context.SaveChangesWithUserAsync(userId); @@ -104,20 +111,20 @@ public class LicensesController(MarechaiContext context) : ControllerBase [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] - public async Task> CreateAsync([FromBody] License viewModel) + public async Task> CreateAsync([FromBody] LicenseDto viewModel) { - string userId = User.FindFirstValue(ClaimTypes.Sid); + var userId = User.FindFirstValue(ClaimTypes.Sid); - if(userId is null) return Unauthorized(); + if (userId is null) return Unauthorized(); var model = new License { FsfApproved = viewModel.FsfApproved, - Link = viewModel.Link, - Name = viewModel.Name, + Link = viewModel.Link, + Name = viewModel.Name, OsiApproved = viewModel.OsiApproved, - SPDX = viewModel.SPDX, - Text = viewModel.Text + SPDX = viewModel.SPDX, + Text = viewModel.Text }; await context.Licenses.AddAsync(model); @@ -134,12 +141,12 @@ public class LicensesController(MarechaiContext context) : ControllerBase [ProducesResponseType(StatusCodes.Status401Unauthorized)] public async Task DeleteAsync(int id) { - string userId = User.FindFirstValue(ClaimTypes.Sid); + var userId = User.FindFirstValue(ClaimTypes.Sid); - if(userId is null) return Unauthorized(); - License item = await context.Licenses.FindAsync(id); + if (userId is null) return Unauthorized(); + var item = await context.Licenses.FindAsync(id); - if(item is null) return NotFound(); + if (item is null) return NotFound(); context.Licenses.Remove(item);