Ignore:
Timestamp:
04/28/26 14:53:32 (2 months ago)
Author:
kikisrbinoska <srbinoskakristina07@…>
Branches:
main
Children:
b373fea
Parents:
dc383dd
Message:

Added transactions and pooling

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ChapterX.Application/Story/Commands/AddHandler.cs

    rdc383dd rd300631  
     1using ChapterX.Application.Abstractions;
    12using ChapterX.Domain.Repositories;
    23using MediatR;
     
    1011        private readonly IGenreRepository _genreRepository;
    1112        private readonly IHasGenreRepository _hasGenreRepository;
     13        private readonly IApplicationDbContext _context;
    1214        private readonly ILogger<AddHandler> _logger;
    1315
    14         public AddHandler(IStoryRepository storyRepository, IGenreRepository genreRepository, IHasGenreRepository hasGenreRepository, ILogger<AddHandler> logger)
     16        public AddHandler(IStoryRepository storyRepository, IGenreRepository genreRepository, IHasGenreRepository hasGenreRepository, IApplicationDbContext context, ILogger<AddHandler> logger)
    1517        {
    1618            _storyRepository = storyRepository;
    1719            _genreRepository = genreRepository;
    1820            _hasGenreRepository = hasGenreRepository;
     21            _context = context;
    1922            _logger = logger;
    2023        }
     
    2225        public async Task<AddResponse> Handle(AddRequest request, CancellationToken cancellationToken)
    2326        {
    24             var story = new Domain.Entities.Story
     27            await using var transaction = await _context.BeginTransactionAsync(cancellationToken);
     28            try
    2529            {
    26                 MatureContent = request.MatureContent,
    27                 ShortDescription = request.ShortDescription,
    28                 Image = request.Image,
    29                 Content = request.Content,
    30                 UserId = request.UserId,
    31                 CreatedAt = DateTime.UtcNow,
    32                 UpdatedAt = DateTime.UtcNow
    33             };
     30                var story = new Domain.Entities.Story
     31                {
     32                    MatureContent = request.MatureContent,
     33                    ShortDescription = request.ShortDescription,
     34                    Image = request.Image,
     35                    Content = request.Content,
     36                    UserId = request.UserId,
     37                    CreatedAt = DateTime.UtcNow,
     38                    UpdatedAt = DateTime.UtcNow
     39                };
    3440
    35             await _storyRepository.AddAsync(story, cancellationToken);
     41                await _storyRepository.AddAsync(story, cancellationToken);
    3642
    37             foreach (var genreName in request.Genres ?? [])
     43                foreach (var genreName in request.Genres ?? [])
     44                {
     45                    var genre = await _genreRepository.GetByNameAsync(genreName, cancellationToken);
     46                    if (genre == null) continue;
     47                    await _hasGenreRepository.AddAsync(new Domain.Entities.HasGenre { StoryId = story.Id, GenreId = genre.Id }, cancellationToken);
     48                }
     49
     50                await transaction.CommitAsync(cancellationToken);
     51                return new AddResponse(story.Id);
     52            }
     53            catch
    3854            {
    39                 var genre = await _genreRepository.GetByNameAsync(genreName, cancellationToken);
    40                 if (genre == null) continue;
    41                 await _hasGenreRepository.AddAsync(new Domain.Entities.HasGenre { StoryId = story.Id, GenreId = genre.Id }, cancellationToken);
     55                await transaction.RollbackAsync(cancellationToken);
     56                throw;
    4257            }
    43 
    44             return new AddResponse(story.Id);
    4558        }
    4659    }
Note: See TracChangeset for help on using the changeset viewer.