// src/Webshop.Application/Services/Admin/AdminReviewService.cs using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Webshop.Application; using Webshop.Application.DTOs.Reviews; using Webshop.Domain.Interfaces; namespace Webshop.Application.Services.Admin { public class AdminReviewService : IAdminReviewService { private readonly IReviewRepository _reviewRepository; public AdminReviewService(IReviewRepository reviewRepository) { _reviewRepository = reviewRepository; } public async Task>> GetAllReviewsAsync() { var reviews = await _reviewRepository.GetAllAsync(); var dtos = reviews.Select(r => new ReviewDto { Id = r.Id, ProductId = r.ProductId, ProductName = r.Product?.Name, CustomerName = $"{r.Customer?.FirstName} {r.Customer?.LastName}".Trim(), Rating = r.Rating, Title = r.Title, Comment = r.Comment, ReviewDate = r.ReviewDate, IsApproved = r.IsApproved }); return ServiceResult.Ok>(dtos); } public async Task ApproveReviewAsync(Guid reviewId) { var review = await _reviewRepository.GetByIdAsync(reviewId); if (review == null) { return ServiceResult.Fail(ServiceResultType.NotFound, $"Bewertung mit ID '{reviewId}' nicht gefunden."); } review.IsApproved = true; await _reviewRepository.UpdateAsync(review); return ServiceResult.Ok(); } public async Task DeleteReviewAsync(Guid reviewId) { var review = await _reviewRepository.GetByIdAsync(reviewId); if (review == null) { return ServiceResult.Fail(ServiceResultType.NotFound, $"Bewertung mit ID '{reviewId}' nicht gefunden."); } await _reviewRepository.DeleteAsync(reviewId); return ServiceResult.Ok(); } } }