source: ChapterX.Application/Story/Commands/AddHandler.cs@ 99c1e45

main
Last change on this file since 99c1e45 was 99c1e45, checked in by kikisrbinoska <srbinoskakristina07@…>, 11 days ago

Fixed writer section and admin management

  • Property mode set to 100644
File size: 2.4 KB
RevLine 
[d300631]1using ChapterX.Application.Abstractions;
[877c13c]2using ChapterX.Domain.Repositories;
3using MediatR;
4using Microsoft.Extensions.Logging;
5
6namespace ChapterX.Application.Story.Commands
7{
8 public class AddHandler : IRequestHandler<AddRequest, AddResponse>
9 {
10 private readonly IStoryRepository _storyRepository;
[73b69b2]11 private readonly IGenreRepository _genreRepository;
12 private readonly IHasGenreRepository _hasGenreRepository;
[d300631]13 private readonly IApplicationDbContext _context;
[877c13c]14 private readonly ILogger<AddHandler> _logger;
15
[d300631]16 public AddHandler(IStoryRepository storyRepository, IGenreRepository genreRepository, IHasGenreRepository hasGenreRepository, IApplicationDbContext context, ILogger<AddHandler> logger)
[877c13c]17 {
18 _storyRepository = storyRepository;
[73b69b2]19 _genreRepository = genreRepository;
20 _hasGenreRepository = hasGenreRepository;
[d300631]21 _context = context;
[877c13c]22 _logger = logger;
23 }
24
25 public async Task<AddResponse> Handle(AddRequest request, CancellationToken cancellationToken)
26 {
[d300631]27 await using var transaction = await _context.BeginTransactionAsync(cancellationToken);
28 try
[877c13c]29 {
[d300631]30 var story = new Domain.Entities.Story
31 {
32 MatureContent = request.MatureContent,
[99c1e45]33 Title = request.Title,
[d300631]34 ShortDescription = request.ShortDescription,
35 Image = request.Image,
36 Content = request.Content,
37 UserId = request.UserId,
38 CreatedAt = DateTime.UtcNow,
39 UpdatedAt = DateTime.UtcNow
40 };
[877c13c]41
[d300631]42 await _storyRepository.AddAsync(story, cancellationToken);
[877c13c]43
[d300631]44 foreach (var genreName in request.Genres ?? [])
45 {
46 var genre = await _genreRepository.GetByNameAsync(genreName, cancellationToken);
47 if (genre == null) continue;
48 await _hasGenreRepository.AddAsync(new Domain.Entities.HasGenre { StoryId = story.Id, GenreId = genre.Id }, cancellationToken);
49 }
50
51 await transaction.CommitAsync(cancellationToken);
52 return new AddResponse(story.Id);
53 }
54 catch
[73b69b2]55 {
[d300631]56 await transaction.RollbackAsync(cancellationToken);
57 throw;
[73b69b2]58 }
[877c13c]59 }
60 }
61}
Note: See TracBrowser for help on using the repository browser.