source: ChapterX.Application/Auth/RegisterHandler.cs@ 3ae4bab

main
Last change on this file since 3ae4bab was d300631, checked in by kikisrbinoska <srbinoskakristina07@…>, 2 months ago

Added transactions and pooling

  • Property mode set to 100644
File size: 2.1 KB
RevLine 
[d300631]1using ChapterX.Application.Abstractions;
[e294f7d]2using ChapterX.Domain.Repositories;
3using MediatR;
4
5namespace ChapterX.Application.Auth
6{
7 public class RegisterHandler : IRequestHandler<RegisterRequest, RegisterResponse>
8 {
9 private readonly IUserRepository _userRepository;
[acf690c]10 private readonly IWriterRepository _writerRepository;
[d300631]11 private readonly IApplicationDbContext _context;
[e294f7d]12
[d300631]13 public RegisterHandler(IUserRepository userRepository, IWriterRepository writerRepository, IApplicationDbContext context)
[e294f7d]14 {
15 _userRepository = userRepository;
[acf690c]16 _writerRepository = writerRepository;
[d300631]17 _context = context;
[e294f7d]18 }
19
20 public async Task<RegisterResponse> Handle(RegisterRequest request, CancellationToken cancellationToken)
21 {
22 var existing = await _userRepository.GetByEmailAsync(request.Email, cancellationToken);
23 if (existing != null)
24 throw new InvalidOperationException("Email already in use.");
25
[d300631]26 await using var transaction = await _context.BeginTransactionAsync(cancellationToken);
27 try
[e294f7d]28 {
[d300631]29 var user = new Domain.Entities.User
30 {
31 Username = request.Username,
32 Email = request.Email,
33 Name = request.Name,
34 Surname = request.Surname,
35 Password = BCrypt.Net.BCrypt.HashPassword(request.Password),
36 CreatedAt = DateTime.UtcNow,
37 UpdatedAt = DateTime.UtcNow
38 };
[e294f7d]39
[d300631]40 await _userRepository.AddAsync(user, cancellationToken);
[e294f7d]41
[d300631]42 var writer = new Domain.Entities.Writer { Id = user.Id };
43 await _writerRepository.AddAsync(writer, cancellationToken);
[acf690c]44
[d300631]45 await transaction.CommitAsync(cancellationToken);
46 return new RegisterResponse(user.Id, user.Username, user.Email);
47 }
48 catch
49 {
50 await transaction.RollbackAsync(cancellationToken);
51 throw;
52 }
[e294f7d]53 }
54 }
55}
Note: See TracBrowser for help on using the repository browser.