From 0fb9333b82ac64c1c9547196a499945a55cc3cbf Mon Sep 17 00:00:00 2001 From: franc Date: Tue, 15 Apr 2025 16:10:42 +0200 Subject: [PATCH] Implement two methods for the sorting logic on the service --- .../Instruction/IInstructionRepository.cs | 4 ++ .../Instruction/InstructionRepository.cs | 39 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/Francesco.Recipes.World/Repositories/Instruction/IInstructionRepository.cs b/Francesco.Recipes.World/Repositories/Instruction/IInstructionRepository.cs index 963099b..528f6b8 100644 --- a/Francesco.Recipes.World/Repositories/Instruction/IInstructionRepository.cs +++ b/Francesco.Recipes.World/Repositories/Instruction/IInstructionRepository.cs @@ -11,5 +11,9 @@ Task> GetInstructionsByRecipeIdAsync(Guid recipeId); Task RemoveInstructionFromRecipeAsync(Guid recipeId, Guid instructionId); + + Task SwapInstructionOrderAsync(Instruction a, Instruction b); + + Task GetInstructionWithRecipeAsync(Guid instructionId); } } diff --git a/Francesco.Recipes.World/Repositories/Instruction/InstructionRepository.cs b/Francesco.Recipes.World/Repositories/Instruction/InstructionRepository.cs index b487d57..0a71b5f 100644 --- a/Francesco.Recipes.World/Repositories/Instruction/InstructionRepository.cs +++ b/Francesco.Recipes.World/Repositories/Instruction/InstructionRepository.cs @@ -77,5 +77,44 @@ .Where(i => i.Recipe.Id == recipeId) .ToListAsync(); } + + public async Task GetInstructionWithRecipeAsync(Guid instructionId) + { + var instruction = await _context.Instructions + .Include(i => i.Recipe) + .ThenInclude(r => r.Instructions) + .FirstOrDefaultAsync(i => i.Id == instructionId); + + if (instruction == null) + { + throw new InvalidDataException($"Instruction with ID {instructionId} not found."); + } + + if (instruction.Recipe == null) + { + throw new InvalidDataException($"The Recipe for Instruction with ID {instructionId} is not loaded or does not exist."); + } + + return instruction; + } + + public async Task SwapInstructionOrderAsync(Instruction a, Instruction b) + { + if (a == null) + { + throw new ArgumentNullException(nameof(a), "Instruction 'a' cannot be null."); + } + + if (b == null) + { + throw new ArgumentNullException(nameof(b), "Instruction 'b' cannot be null."); + } + + var temp = a.Number; + a.Number = b.Number; + b.Number = temp; + + await _context.SaveChangesAsync(); + } } }