diff --git a/LibraryManagement.Api/Controllers/ReadersController.cs b/LibraryManagement.Api/Controllers/ReadersController.cs new file mode 100644 index 0000000..e2ad32c --- /dev/null +++ b/LibraryManagement.Api/Controllers/ReadersController.cs @@ -0,0 +1,58 @@ +//----------------------------------------------------------- +// Copyright (c) Coalition of Good-Hearted Engineers +// Free To Use To Build Reliable Library Management Solutions +//----------------------------------------------------------- + +using LibraryManagement.Api.Models.Foundations.Readers; +using LibraryManagement.Api.Models.Foundations.Readers.Exceptions; +using LibraryManagement.Api.Services.Foundations.Readers; +using Microsoft.AspNetCore.Mvc; +using RESTFulSense.Controllers; + +namespace LibraryManagement.Api.Controllers +{ + [ApiController] + [Route("api/[controller]")] + public class ReadersController : RESTFulController + { + private readonly IReaderService readerService; + + public ReadersController(IReaderService readerService) + { + this.readerService = readerService; + } + + [HttpPost] + public async ValueTask> PostReaderAsync(Reader reader) + { + try + { + Reader postedReader = + await this.readerService.AddReaderAsync(reader); + + return Created(postedReader); + } + catch (ReaderValidationException readerValidationException) + { + return BadRequest(readerValidationException.InnerException); + } + catch (ReaderDependencyValidationException readerDependencyValidationException) + when (readerDependencyValidationException.InnerException is AlreadyExistsReaderException) + { + return Conflict(readerDependencyValidationException.InnerException); + } + catch (ReaderDependencyValidationException readerDependencyValidationException) + { + return BadRequest(readerDependencyValidationException.InnerException); + } + catch (ReaderDependencyException readerDependencyException) + { + return InternalServerError(readerDependencyException.InnerException); + } + catch (ReaderServiceException readerServiceException) + { + return InternalServerError(readerServiceException.InnerException); + } + } + } +} diff --git a/LibraryManagement.Api/Models/Foundations/Readers/Reader.cs b/LibraryManagement.Api/Models/Foundations/Readers/Reader.cs index e86f5b5..61d73fa 100644 --- a/LibraryManagement.Api/Models/Foundations/Readers/Reader.cs +++ b/LibraryManagement.Api/Models/Foundations/Readers/Reader.cs @@ -3,6 +3,7 @@ // Free To Use To Build Reliable Library Management Solutions //----------------------------------------------------------- +using System.Text.Json.Serialization; using LibraryManagement.Api.Models.Foundations.Books; namespace LibraryManagement.Api.Models.Foundations.Readers @@ -13,6 +14,9 @@ public class Reader public string FirstName { get; set; } public string LastName { get; set; } public DateTimeOffset DateOfBirth { get; set; } - public List Books { get; set; } + + [JsonIgnore] + [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] + public List Books { get; set; } = new(); } } diff --git a/LibraryManagement.Api/Program.cs b/LibraryManagement.Api/Program.cs index 56f6308..9612a2b 100644 --- a/LibraryManagement.Api/Program.cs +++ b/LibraryManagement.Api/Program.cs @@ -6,6 +6,7 @@ using LibraryManagement.Api.Brokers.Loggings; using LibraryManagement.Api.Brokers.Storages; using LibraryManagement.Api.Services.Foundations.Books; +using LibraryManagement.Api.Services.Foundations.Readers; using Microsoft.OpenApi.Models; var builder = WebApplication.CreateBuilder(args); @@ -20,6 +21,7 @@ builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); +builder.Services.AddTransient(); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer();