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
Line 
1using ChapterX.Application.Abstractions;
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;
10 private readonly IWriterRepository _writerRepository;
11 private readonly IApplicationDbContext _context;
12
13 public RegisterHandler(IUserRepository userRepository, IWriterRepository writerRepository, IApplicationDbContext context)
14 {
15 _userRepository = userRepository;
16 _writerRepository = writerRepository;
17 _context = context;
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
26 await using var transaction = await _context.BeginTransactionAsync(cancellationToken);
27 try
28 {
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 };
39
40 await _userRepository.AddAsync(user, cancellationToken);
41
42 var writer = new Domain.Entities.Writer { Id = user.Id };
43 await _writerRepository.AddAsync(writer, cancellationToken);
44
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 }
53 }
54 }
55}
Note: See TracBrowser for help on using the repository browser.