private async Task <AuthResult> AuthenticateAsync(TelegramUserDto dto) { telegramUserIdProvider.Set(dto.Id); var user = await GetOrCreateTelegramUser(dto); return(await CreateAndSaveSessionAsync(user)); }
private async Task <TelegramUser> GetOrCreateTelegramUser(TelegramUserDto dto) { var user = await hookrRepository .ReadAsync((context, token) => context.TelegramUsers .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == dto.Id, token), Token); if (user != null) { await UpdateTelegramUserAsync(hookrRepository.Context.Update(user).Entity, dto); return(user); } var createdUser = new TelegramUser { Id = dto.Id, State = TelegramUserStates.Default }; await UpdateTelegramUserAsync(hookrRepository.Context.Add(createdUser).Entity, dto); return(createdUser); }
private async Task UpdateTelegramUserAsync(TelegramUser user, TelegramUserDto dto) { user.Username = dto.Username; user.FirstName = dto.FirstName; user.PhotoUrl = dto.PhotoUrl; user.LastUpdatedAt = DateTime.UtcNow; await hookrRepository.SaveChangesAsync(); }
public async Task HandleAsync(IUpdateContext context, UpdateDelegate next, CancellationToken cancellationToken) { var user = context.Update.Message?.From ?? context.Update.ChannelPost?.From; if (user != null) { var telegramUserDto = new TelegramUserDto { Id = user.Id, IsBot = user.IsBot, FirstName = user.FirstName, LastName = user.LastName, Username = user.Username, LanguageCode = user.LanguageCode, IsActive = false }; await _telegramUserApplicationService.CreateIfDoesNotExist(telegramUserDto); } await next(context, cancellationToken); }