diff --git a/TickAPI/TickAPI.Tests/Events/Services/EventServiceTests.cs b/TickAPI/TickAPI.Tests/Events/Services/EventServiceTests.cs index e7bea9c..1bca7bc 100644 --- a/TickAPI/TickAPI.Tests/Events/Services/EventServiceTests.cs +++ b/TickAPI/TickAPI.Tests/Events/Services/EventServiceTests.cs @@ -105,7 +105,7 @@ public async Task CreateNewEventAsync_WhenEventDataIsValid_ShouldReturnNewEvent( dateTimeServiceMock.Setup(m => m.GetCurrentDateTime()).Returns(new DateTime(2003, 7, 11)); var categoryServiceMock = new Mock(); - categoryServiceMock.Setup(c => c.CheckIfCategoriesExistAsync(It.IsAny>())).Returns(Task.FromResult(true)); + categoryServiceMock.Setup(c => c.GetCategoriesByNames(It.IsAny>())).Returns(Result>.Success(expectedCategories)); var paginationServiceMock = new Mock(); diff --git a/TickAPI/TickAPI/Addresses/Models/Address.cs b/TickAPI/TickAPI/Addresses/Models/Address.cs index f6e705b..e3226fe 100644 --- a/TickAPI/TickAPI/Addresses/Models/Address.cs +++ b/TickAPI/TickAPI/Addresses/Models/Address.cs @@ -8,5 +8,4 @@ public class Address public uint? HouseNumber { get; set; } public uint? FlatNumber { get; set; } public string PostalCode { get; set; } - } \ No newline at end of file diff --git a/TickAPI/TickAPI/Categories/Abstractions/ICategoryRepository.cs b/TickAPI/TickAPI/Categories/Abstractions/ICategoryRepository.cs index c7d1fc3..cfa2f50 100644 --- a/TickAPI/TickAPI/Categories/Abstractions/ICategoryRepository.cs +++ b/TickAPI/TickAPI/Categories/Abstractions/ICategoryRepository.cs @@ -7,5 +7,6 @@ public interface ICategoryRepository { public IQueryable GetCategories(); public Task> GetCategoryByNameAsync(string categoryName); + public Result> GetCategoriesByNames(IEnumerable categoryNames); public Task AddNewCategoryAsync(Category category); } \ No newline at end of file diff --git a/TickAPI/TickAPI/Categories/Abstractions/ICategoryService.cs b/TickAPI/TickAPI/Categories/Abstractions/ICategoryService.cs index 8560738..606c92f 100644 --- a/TickAPI/TickAPI/Categories/Abstractions/ICategoryService.cs +++ b/TickAPI/TickAPI/Categories/Abstractions/ICategoryService.cs @@ -10,6 +10,5 @@ public interface ICategoryService public Task> GetCategoryByNameAsync(string categoryName); public Task>> GetCategoriesResponsesAsync(int pageSize, int page); public Task> CreateNewCategoryAsync(string categoryName); - - public Task CheckIfCategoriesExistAsync(IEnumerable categories); + public Result> GetCategoriesByNames(IList categoryNames); } \ No newline at end of file diff --git a/TickAPI/TickAPI/Categories/Respositories/CategoryRepository.cs b/TickAPI/TickAPI/Categories/Respositories/CategoryRepository.cs index e1dcdb2..acb929d 100644 --- a/TickAPI/TickAPI/Categories/Respositories/CategoryRepository.cs +++ b/TickAPI/TickAPI/Categories/Respositories/CategoryRepository.cs @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using TickAPI.Categories.Abstractions; using TickAPI.Categories.Models; +using TickAPI.Common.Results; using TickAPI.Common.Results.Generic; using TickAPI.Common.TickApiDbContext; namespace TickAPI.Categories.Respositories; @@ -31,6 +32,18 @@ public async Task> GetCategoryByNameAsync(string categoryName) return Result.Success(category); } + public Result> GetCategoriesByNames(IEnumerable categoryNames) + { + var categories = _tickApiDbContext.Categories.Where(c => categoryNames.Contains(c.Name)); + + if (categories.Count() < categoryNames.Count()) + { + return Result>.Failure(StatusCodes.Status404NotFound, "one or more of category names is invalid"); + } + + return Result>.Success(categories); + } + public async Task AddNewCategoryAsync(Category category) { _tickApiDbContext.Categories.Add(category); diff --git a/TickAPI/TickAPI/Categories/Services/CategoryService.cs b/TickAPI/TickAPI/Categories/Services/CategoryService.cs index e30dafc..06d55de 100644 --- a/TickAPI/TickAPI/Categories/Services/CategoryService.cs +++ b/TickAPI/TickAPI/Categories/Services/CategoryService.cs @@ -5,6 +5,7 @@ using TickAPI.Common.Pagination.Abstractions; using TickAPI.Common.Pagination.Responses; using TickAPI.Common.Results.Generic; +using TickAPI.Events.Models; namespace TickAPI.Categories.Services; @@ -56,11 +57,16 @@ public async Task> CreateNewCategoryAsync(string categoryName) await _categoryRepository.AddNewCategoryAsync(category); return Result.Success(category); } - - public async Task CheckIfCategoriesExistAsync(IEnumerable categories) + + public Result> GetCategoriesByNames(IList categoryNames) { - var dbCategories = _categoryRepository.GetCategories(); - int count = await dbCategories.Where(cdb => categories.Any(c => c.Name == cdb.Name)).CountAsync(); - return count == categories.Count(); + var result = _categoryRepository.GetCategoriesByNames(categoryNames); + + if (result.IsError) + { + return Result>.PropagateError(result); + } + + return Result>.Success(result.Value!.ToList()); } } \ No newline at end of file diff --git a/TickAPI/TickAPI/Events/Repositories/EventRepository.cs b/TickAPI/TickAPI/Events/Repositories/EventRepository.cs index 391b613..73b4e13 100644 --- a/TickAPI/TickAPI/Events/Repositories/EventRepository.cs +++ b/TickAPI/TickAPI/Events/Repositories/EventRepository.cs @@ -8,13 +8,13 @@ namespace TickAPI.Events.Repositories; public class EventRepository : IEventRepository { - private readonly TickApiDbContext _tickApiDbContext; public EventRepository(TickApiDbContext tickApiDbContext) { _tickApiDbContext = tickApiDbContext; } + public async Task AddNewEventAsync(Event @event) { _tickApiDbContext.Events.Add(@event); diff --git a/TickAPI/TickAPI/Events/Services/EventService.cs b/TickAPI/TickAPI/Events/Services/EventService.cs index 92cbb80..aa7e5ef 100644 --- a/TickAPI/TickAPI/Events/Services/EventService.cs +++ b/TickAPI/TickAPI/Events/Services/EventService.cs @@ -4,7 +4,6 @@ using TickAPI.Common.Pagination.Responses; using TickAPI.Categories.Abstractions; using TickAPI.Categories.DTOs.Request; -using TickAPI.Categories.Models; using TickAPI.Common.Time.Abstractions; using TickAPI.Events.Abstractions; using TickAPI.Events.Models; @@ -61,12 +60,13 @@ public async Task> CreateNewEventAsync(string name, string descri var address = await _addressService.GetOrCreateAddressAsync(createAddress); - var categoriesConverted = categories.Select(c => new Category { Name = c.CategoryName }).ToList(); + var categoryNames = categories.Select(c => c.CategoryName).ToList(); - var categoriesExist = await _categoryService.CheckIfCategoriesExistAsync(categoriesConverted); - if (!categoriesExist) + var categoriesByNameResult = _categoryService.GetCategoriesByNames(categoryNames); + + if (categoriesByNameResult.IsError) { - return Result.Failure(StatusCodes.Status400BadRequest, "Category does not exist"); + return Result.PropagateError(categoriesByNameResult); } var ticketTypesConverted = ticketTypes.Select(t => new TicketType @@ -87,7 +87,7 @@ public async Task> CreateNewEventAsync(string name, string descri EndDate = endDate, MinimumAge = minimumAge, Address = address.Value!, - Categories = categoriesConverted, + Categories = categoriesByNameResult.Value!, Organizer = organizerResult.Value!, EventStatus = eventStatus, TicketTypes = ticketTypesConverted,