easyeat/backend/API/DBAccess/RecipeDBaccess.cs
2025-04-29 12:31:40 +02:00

80 lines
2.7 KiB
C#

using API.Models.RecipeModels;
using API.Models.UserModels;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace API.DBAccess
{
public class RecipeDBAccess
{
private readonly DBContext _context;
public RecipeDBAccess(DBContext context)
{
_context = context;
}
public async Task<PrefereredRecipes> ReadPrefereredRecipes(int userId)
{
var recipes = await _context.Users.Include(u => u.PrefereredRecipes).ThenInclude(p => p.Recipes).FirstOrDefaultAsync(u => u.Id == userId);
return recipes.PrefereredRecipes;
}
public async Task<PrefereredRecipes> ReadAllRecipe(int prefereredRecipesId)
{
return await _context.PrefereredRecipes.Include(p => p.Recipes).FirstOrDefaultAsync(r => r.Id == prefereredRecipesId);
}
public async Task<Recipe> ReadRecipe(int recipeId)
{
return await _context.Recipes.Include(r => r.Ingredients).FirstOrDefaultAsync(r => r.Id == recipeId);
}
public async Task<PrefereredRecipes> CreateMissingLists(int userId)
{
var user = await _context.Users.FirstOrDefaultAsync(u => u.Id == userId);
user.PrefereredRecipes = new PrefereredRecipes();
user.PrefereredRecipes.Recipes = new List<Recipe>();
_context.SaveChangesAsync();
return await ReadPrefereredRecipes(userId);
}
public async Task<IActionResult> CreateRecipe(Recipe recipe, int prefereredRecipeId)
{
var recipes = await _context.PrefereredRecipes.Include(p => p.Recipes).FirstOrDefaultAsync(p => p.Id == prefereredRecipeId);
recipes.Recipes.Add(recipe);
bool saved = await _context.SaveChangesAsync() > 1;
if (saved) { return new OkObjectResult(saved); }
return new ConflictObjectResult(new { message = "Could not save to database" });
}
public async Task<IActionResult> UpdateRecipe(Recipe recipe)
{
_context.Entry(recipe).State = EntityState.Modified;
bool saved = await _context.SaveChangesAsync() >= 1;
if (saved) { return new OkObjectResult(recipe); }
return new ConflictObjectResult(new { message = "Could not save to database" });
}
public async Task<IActionResult> DeleteUser(Recipe recipe)
{
_context.Recipes.Remove(recipe);
bool saved = await _context.SaveChangesAsync() >= 0;
if (saved) { return new OkObjectResult(saved); }
return new ConflictObjectResult(new { message = "Could not save to database" });
}
}
}