using ChapterX.Domain.Repositories; using MediatR; using Microsoft.Extensions.Logging; namespace ChapterX.Application.Story.Commands { public class UpdateHandler : IRequestHandler { private readonly IStoryRepository _storyRepository; private readonly ILogger _logger; public UpdateHandler(IStoryRepository storyRepository, ILogger logger) { _storyRepository = storyRepository; _logger = logger; } public async Task Handle(UpdateRequest request, CancellationToken cancellationToken) { var story = await _storyRepository.GetByIdAsync(request.Id, cancellationToken); if (story is null) return new UpdateResponse(false); if (story.UserId != request.CallerId) throw new UnauthorizedAccessException("You do not own this story."); story.MatureContent = request.MatureContent; story.ShortDescription = request.ShortDescription; story.Image = request.Image; story.Content = request.Content; story.UpdatedAt = DateTime.UtcNow; await _storyRepository.UpdateAsync(story, cancellationToken); return new UpdateResponse(true); } } }