| | 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 | | } |