| | | 1 | | using Syki.Back.Features.Cross.CreateUser; |
| | | 2 | | using Syki.Back.Features.Cross.CreateInstitution; |
| | | 3 | | |
| | | 4 | | namespace Syki.Back.Features.Cross.FinishUserRegister; |
| | | 5 | | |
| | 676 | 6 | | public class FinishUserRegisterService(SykiDbContext ctx, CreateUserService service, HybridCache cache) : ICrossService |
| | | 7 | | { |
| | | 8 | | public async Task<OneOf<UserOut, SykiError>> Finish(FinishUserRegisterIn data) |
| | | 9 | | { |
| | 676 | 10 | | _ = Guid.TryParse(data.Token, out var id); |
| | 676 | 11 | | var register = await ctx.UserRegisters.FirstOrDefaultAsync(d => d.Id == id); |
| | 698 | 12 | | if (register == null) return new InvalidRegistrationToken(); |
| | | 13 | | |
| | 654 | 14 | | var finish = register.Finish(); |
| | 656 | 15 | | if (finish.IsError) return finish.Error; |
| | | 16 | | |
| | 652 | 17 | | var institution = new Institution(register.InstitutionId, BrazilianInstitutions.PickRandom()); |
| | | 18 | | |
| | 652 | 19 | | ctx.Add(institution); |
| | 652 | 20 | | await ctx.SaveChangesAsync(); |
| | | 21 | | |
| | 652 | 22 | | var userIn = CreateUserIn.NewAcademic(institution.Id, register.Email, data.Password); |
| | 652 | 23 | | var result = await service.Create(userIn); |
| | | 24 | | |
| | 668 | 25 | | if (result.IsError) return result.Error; |
| | | 26 | | |
| | 636 | 27 | | var user = result.Success; |
| | | 28 | | |
| | 636 | 29 | | await ctx.SaveChangesAsync(); |
| | | 30 | | |
| | 636 | 31 | | await cache.RemoveAsync("users"); |
| | 636 | 32 | | await cache.RemoveAsync("institutions"); |
| | | 33 | | |
| | 636 | 34 | | return user; |
| | 676 | 35 | | } |
| | | 36 | | } |