diff --git a/Marechai.Server/Controllers/BooksByMachineFamilyController.cs b/Marechai.Server/Controllers/BooksByMachineFamilyController.cs new file mode 100644 index 00000000..3461b237 --- /dev/null +++ b/Marechai.Server/Controllers/BooksByMachineFamilyController.cs @@ -0,0 +1,105 @@ +/****************************************************************************** +// 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-2025 Natalia Portillo +*******************************************************************************/ + +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; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; + +namespace Marechai.Server.Controllers; + +[Route("/machine-families/books")] +[ApiController] +public class BooksByMachineFamilyController(MarechaiContext context) : ControllerBase +{ + [HttpGet("/books/{bookId:long}/machine-families")] + [ProducesResponseType(typeof(List), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + public Task> GetByBook(long bookId) => context.BooksByMachineFamilies + .Where(p => p.BookId == bookId) + .Select(p => new BookByMachineFamilyDto + { + Id = p.Id, + BookId = p.BookId, + MachineFamilyId = p.MachineFamilyId, + MachineFamily = p.MachineFamily.Name + }) + .OrderBy(p => p.MachineFamily) + .ToListAsync(); + + [HttpDelete("{id:long}")] + [Authorize(Roles = "Admin,UberAdmin")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status404NotFound)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + public async Task DeleteAsync(long id) + { + string userId = User.FindFirstValue(ClaimTypes.Sid); + + if(userId is null) return Unauthorized(); + + BooksByMachineFamily item = await context.BooksByMachineFamilies.FindAsync(id); + + if(item is null) return NotFound(); + + context.BooksByMachineFamilies.Remove(item); + + await context.SaveChangesWithUserAsync(userId); + + return Ok(); + } + + [HttpPost] + [Authorize(Roles = "Admin,UberAdmin")] + [ProducesResponseType(typeof(int), StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [Consumes("application/json")] + [Produces("application/json")] + public async Task> CreateAsync([FromBody] BookByMachineFamilyDto dto) + { + string userId = User.FindFirstValue(ClaimTypes.Sid); + + if(userId is null) return Unauthorized(); + + var item = new BooksByMachineFamily + { + MachineFamilyId = dto.MachineFamilyId, + BookId = dto.BookId + }; + + await context.BooksByMachineFamilies.AddAsync(item); + await context.SaveChangesWithUserAsync(userId); + + return item.Id; + } +} \ No newline at end of file diff --git a/Marechai.Server/Controllers/WeatherForecastController.cs b/Marechai.Server/Controllers/WeatherForecastController.cs deleted file mode 100644 index fd6b209a..00000000 --- a/Marechai.Server/Controllers/WeatherForecastController.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace Marechai.Server.Controllers; - -[ApiController] -[Route("[controller]")] -public class WeatherForecastController : ControllerBase -{ - private static readonly string[] Summaries = - [ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - ]; - - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - { - return Enumerable.Range(1, 5) - .Select(index => new WeatherForecast - { - Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }) - .ToArray(); - } -} \ No newline at end of file diff --git a/Marechai.Server/WeatherForecast.cs b/Marechai.Server/WeatherForecast.cs deleted file mode 100644 index f1f2e618..00000000 --- a/Marechai.Server/WeatherForecast.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; - -namespace Marechai.Server; - -public class WeatherForecast -{ - public DateOnly Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } -} \ No newline at end of file