From 356674f51ff86000305c607b663746b4f33844a3 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 14 Nov 2025 04:50:12 +0000 Subject: [PATCH] Add InstructionSetDto and update InstructionSetsController to use DTO for instruction set operations --- Marechai.Data/Dtos/InstructionSetDto.cs | 34 ++++++++++ .../Controllers/InstructionSetsController.cs | 65 +++++++++++-------- 2 files changed, 71 insertions(+), 28 deletions(-) create mode 100644 Marechai.Data/Dtos/InstructionSetDto.cs diff --git a/Marechai.Data/Dtos/InstructionSetDto.cs b/Marechai.Data/Dtos/InstructionSetDto.cs new file mode 100644 index 00000000..61ce7970 --- /dev/null +++ b/Marechai.Data/Dtos/InstructionSetDto.cs @@ -0,0 +1,34 @@ +/****************************************************************************** +// 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 InstructionSetDto : BaseDto +{ + [JsonPropertyName("name")] [Required] public required string Name { get; set; } +} \ No newline at end of file diff --git a/Marechai.Server/Controllers/InstructionSetsController.cs b/Marechai.Server/Controllers/InstructionSetsController.cs index 71706ebd..c497d0f8 100644 --- a/Marechai.Server/Controllers/InstructionSetsController.cs +++ b/Marechai.Server/Controllers/InstructionSetsController.cs @@ -28,6 +28,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; @@ -44,25 +45,31 @@ public class InstructionSetsController(MarechaiContext context) : ControllerBase [AllowAnonymous] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] - public Task> GetAsync() => context.InstructionSets.OrderBy(e => e.Name) - .Select(e => new InstructionSet - { - Name = e.Name, - Id = e.Id - }) - .ToListAsync(); + public Task> GetAsync() + { + return context.InstructionSets.OrderBy(e => e.Name) + .Select(e => new InstructionSetDto + { + Name = e.Name, + Id = e.Id + }) + .ToListAsync(); + } [HttpGet("{id:int}")] [AllowAnonymous] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] - public Task GetAsync(int id) => context.InstructionSets.Where(e => e.Id == id) - .Select(e => new InstructionSet - { - Name = e.Name, - Id = e.Id - }) - .FirstOrDefaultAsync(); + public Task GetAsync(int id) + { + return context.InstructionSets.Where(e => e.Id == id) + .Select(e => new InstructionSetDto + { + Name = e.Name, + Id = e.Id + }) + .FirstOrDefaultAsync(); + } [HttpPut("{id:int}")] [Authorize(Roles = "Admin,UberAdmin")] @@ -70,14 +77,14 @@ public class InstructionSetsController(MarechaiContext context) : ControllerBase [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status404NotFound)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] - public async Task UpdateAsync(int id, [FromBody] InstructionSet viewModel) + public async Task UpdateAsync(int id, [FromBody] InstructionSetDto viewModel) { - string userId = User.FindFirstValue(ClaimTypes.Sid); + var userId = User.FindFirstValue(ClaimTypes.Sid); - if(userId is null) return Unauthorized(); - InstructionSet model = await context.InstructionSets.FindAsync(viewModel.Id); + if (userId is null) return Unauthorized(); + var model = await context.InstructionSets.FindAsync(viewModel.Id); - if(model is null) return NotFound(); + if (model is null) return NotFound(); model.Name = viewModel.Name; @@ -91,11 +98,11 @@ public class InstructionSetsController(MarechaiContext context) : ControllerBase [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] - public async Task> CreateAsync([FromBody] InstructionSet viewModel) + public async Task> CreateAsync([FromBody] InstructionSetDto 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 InstructionSet { @@ -116,12 +123,12 @@ public class InstructionSetsController(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(); - InstructionSet item = await context.InstructionSets.FindAsync(id); + if (userId is null) return Unauthorized(); + var item = await context.InstructionSets.FindAsync(id); - if(item is null) return NotFound(); + if (item is null) return NotFound(); context.InstructionSets.Remove(item); @@ -134,6 +141,8 @@ public class InstructionSetsController(MarechaiContext context) : ControllerBase [AllowAnonymous] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] - public bool VerifyUnique(string name) => - !context.InstructionSets.Any(i => string.Equals(i.Name, name, StringComparison.OrdinalIgnoreCase)); + public bool VerifyUnique(string name) + { + return !context.InstructionSets.Any(i => string.Equals(i.Name, name, StringComparison.OrdinalIgnoreCase)); + } } \ No newline at end of file