// src/Webshop.Infrastructure/Repositories/ProductRepository.cs using Microsoft.EntityFrameworkCore; using Webshop.Domain.Entities; using Webshop.Domain.Interfaces; using Webshop.Infrastructure.Data; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace Webshop.Infrastructure.Repositories { public class ProductRepository : IProductRepository // Implementiert das korrigierte Interface { private readonly ApplicationDbContext _context; public ProductRepository(ApplicationDbContext context) { _context = context; } public async Task> GetAllProductsAsync() { return await _context.Products.AsNoTracking().ToListAsync(); } public async Task GetProductByIdAsync(Guid id) { return await _context.Products .AsNoTracking() .FirstOrDefaultAsync(p => p.Id == id); } public async Task GetBySlugAsync(string slug) { return await _context.Products .AsNoTracking() .FirstOrDefaultAsync(p => p.Slug == slug && p.IsActive); } // --- NEUE METHODE --- public async Task GetProductByIdForUpdateAsync(Guid id) { return await _context.Products .Include(p => p.Images) .Include(p => p.Productcategories) .FirstOrDefaultAsync(p => p.Id == id); } public async Task AddProductAsync(Product product) { await _context.Products.AddAsync(product); await _context.SaveChangesAsync(); } // --- KORRIGIERTE UPDATE-METHODE (OHNE PARAMETER) --- public async Task UpdateProductAsync(Product product) { // Sagen Sie EF explizit, was es tun soll. Das ist der robusteste Weg. _context.Products.Update(product); await _context.SaveChangesAsync(); } public async Task DeleteProductAsync(Guid id) { var product = await GetProductByIdAsync(id); if (product != null) { _context.Products.Remove(product); await _context.SaveChangesAsync(); } } } }