From 4b084eea9879a8af1ebf0b50dd148e26851dffa8 Mon Sep 17 00:00:00 2001 From: franc Date: Wed, 16 Apr 2025 17:22:19 +0200 Subject: [PATCH] Refactoring some code and change logic and make sure to reduce db calls and avoid redundants --- .../Instruction/IInstructionRepository.cs | 4 +- .../Instruction/InstructionRepository.cs | 21 ++-------- .../Instruction/IInstructionService.cs | 2 + .../Instruction/InstructionService.cs | 42 ++++++++----------- 4 files changed, 25 insertions(+), 44 deletions(-) diff --git a/Francesco.Recipes.World/Repositories/Instruction/IInstructionRepository.cs b/Francesco.Recipes.World/Repositories/Instruction/IInstructionRepository.cs index 528f6b8..057eb02 100644 --- a/Francesco.Recipes.World/Repositories/Instruction/IInstructionRepository.cs +++ b/Francesco.Recipes.World/Repositories/Instruction/IInstructionRepository.cs @@ -8,12 +8,10 @@ Task CreateInstructionToRecipeAsync(Guid recipeId, string description, int number); - Task> GetInstructionsByRecipeIdAsync(Guid recipeId); - Task RemoveInstructionFromRecipeAsync(Guid recipeId, Guid instructionId); Task SwapInstructionOrderAsync(Instruction a, Instruction b); - Task GetInstructionWithRecipeAsync(Guid instructionId); + Task> GetInstructionsByInstructionIdAsync(Guid instructionId); } } diff --git a/Francesco.Recipes.World/Repositories/Instruction/InstructionRepository.cs b/Francesco.Recipes.World/Repositories/Instruction/InstructionRepository.cs index 0a71b5f..a95e22d 100644 --- a/Francesco.Recipes.World/Repositories/Instruction/InstructionRepository.cs +++ b/Francesco.Recipes.World/Repositories/Instruction/InstructionRepository.cs @@ -70,32 +70,19 @@ } } - public async Task> GetInstructionsByRecipeIdAsync(Guid recipeId) - { - return await _context.Instructions - .Include(i => i.Recipe) - .Where(i => i.Recipe.Id == recipeId) - .ToListAsync(); - } - - public async Task GetInstructionWithRecipeAsync(Guid instructionId) + public async Task> GetInstructionsByInstructionIdAsync(Guid instructionId) { var instruction = await _context.Instructions .Include(i => i.Recipe) .ThenInclude(r => r.Instructions) .FirstOrDefaultAsync(i => i.Id == instructionId); - if (instruction == null) + if (instruction?.Recipe == null) { - throw new InvalidDataException($"Instruction with ID {instructionId} not found."); + throw new InvalidDataException($"Instruction with ID {instructionId} or its Recipe 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; + return instruction.Recipe.Instructions.ToList(); } public async Task SwapInstructionOrderAsync(Instruction a, Instruction b) diff --git a/Francesco.Recipes.World/Services/Instruction/IInstructionService.cs b/Francesco.Recipes.World/Services/Instruction/IInstructionService.cs index fa514a1..efb6b00 100644 --- a/Francesco.Recipes.World/Services/Instruction/IInstructionService.cs +++ b/Francesco.Recipes.World/Services/Instruction/IInstructionService.cs @@ -5,5 +5,7 @@ Task MoveInstructionUpAsync(Guid instructionId); Task MoveInstructionDownAsync(Guid instructionId); + + Task MoveInstructionAsync(Guid instructionId, bool moveUp); } } diff --git a/Francesco.Recipes.World/Services/Instruction/InstructionService.cs b/Francesco.Recipes.World/Services/Instruction/InstructionService.cs index 5015426..895cf66 100644 --- a/Francesco.Recipes.World/Services/Instruction/InstructionService.cs +++ b/Francesco.Recipes.World/Services/Instruction/InstructionService.cs @@ -11,39 +11,33 @@ namespace Francesco.Recipes.World.Services.Instruction _instructionRepository = instructionRepository; } - public async Task MoveInstructionDownAsync(Guid instructionId) + public Task MoveInstructionUpAsync(Guid instructionId) + => MoveInstructionAsync(instructionId, moveUp: true); + + public Task MoveInstructionDownAsync(Guid instructionId) + => MoveInstructionAsync(instructionId, moveUp: false); + + private async Task MoveInstructionAsync(Guid instructionId, bool moveUp) { - var instruction = await _instructionRepository.GetInstructionWithRecipeAsync(instructionId); + var instructions = await _instructionRepository.GetInstructionsByInstructionIdAsync(instructionId); - var instructions = await _instructionRepository.GetInstructionsByRecipeIdAsync(instruction.Recipe.Id); + var instruction = instructions.FirstOrDefault(i => i.Id == instructionId); + if (instruction == null) + { + throw new InvalidDataException($"Instruction with ID {instructionId} not found."); + } + + var minStep = 1; var maxStep = instructions.Max(i => i.Number); - if (instruction.Number >= maxStep) + if ((moveUp && instruction.Number == minStep) || (!moveUp && instruction.Number >= maxStep)) { return; } - var neighbor = instructions.FirstOrDefault(i => i.Number == instruction.Number + 1); - - if (neighbor != null) - { - await _instructionRepository.SwapInstructionOrderAsync(instruction, neighbor); - } - } - - public async Task MoveInstructionUpAsync(Guid instructionId) - { - var instruction = await _instructionRepository.GetInstructionWithRecipeAsync(instructionId); - - if (instruction.Number == 1) - { - return; - } - - var instructions = await _instructionRepository.GetInstructionsByRecipeIdAsync(instruction.Recipe.Id); - - var neighbor = instructions.FirstOrDefault(i => i.Number == instruction.Number - 1); + var targetNumber = moveUp ? instruction.Number - 1 : instruction.Number + 1; + var neighbor = instructions.FirstOrDefault(i => i.Number == targetNumber); if (neighbor != null) {