public async Task <IEmailVerificationCode> GetActualCode(string email, string partnerId) { var priorityCode = await _priorityCodesStorage.GetTopRecordAsync( EmailVerificationCodeEntity.GeneratePartitionKey(email, partnerId)); if (priorityCode == null || priorityCode.ExpirationDate < DateTime.UtcNow) { return(await _tableStorage.GetTopRecordAsync( EmailVerificationCodeEntity.GeneratePartitionKey(email, partnerId))); } return(priorityCode); }
public EmailVerificationCodeEntity CreateEmailVerificationCode(string email, string partnerId = null, bool generateRealCode = true, int codeLength = 4) { var creationDt = _dateTimeProvider.GetDateTime(); var entity = new EmailVerificationCodeEntity { RowKey = EmailVerificationCodeEntity.GenerateRowKey(creationDt), PartitionKey = EmailVerificationCodeEntity.GeneratePartitionKey(email, partnerId), Code = _randomValueGenerator.GetCode(codeLength, generateRealCode), CreationDateTime = creationDt }; return(entity); }
public EmailVerificationPriorityCodeEntity CreateEmailVerificationPriorityCode(string email, string partnerId, DateTime expirationDt, int codeLength = 4) { var creationDt = _dateTimeProvider.GetDateTime(); var entity = new EmailVerificationPriorityCodeEntity { RowKey = EmailVerificationCodeEntity.GenerateRowKey(creationDt), PartitionKey = EmailVerificationCodeEntity.GeneratePartitionKey(email, partnerId), Code = _randomValueGenerator.GetCode(codeLength, true), CreationDateTime = creationDt, ExpirationDate = expirationDt }; return(entity); }
private static async Task DeleteCodesInRepository <T>(string email, string partnerId, INoSQLTableStorage <T> storage) where T : ITableEntity, new() { var batchOperation = new TableBatchOperation(); var entitiesToDelete = (await storage.GetDataAsync(EmailVerificationCodeEntity.GeneratePartitionKey(email, partnerId))) .ToArray(); if (entitiesToDelete.Any()) { foreach (var e in entitiesToDelete) { batchOperation.Delete(e); } await storage.DoBatchAsync(batchOperation); } }
public async Task <IVerificationCode> CreateOrUpdateAsync(string adminId, string verificationCode) { var entity = EmailVerificationCodeEntity.Create(adminId, verificationCode, _verificationLinkExpirePeriod); using (var context = _contextFactory.CreateDataContext()) { await context.EmailVerificationCodes.AddAsync(entity); try { await context.SaveChangesAsync(); } catch (DbUpdateException e) { if (e.InnerException is SqlException sqlException && sqlException.Number == MsSqlErrorCodes.PrimaryKeyConstraintViolation) { context.EmailVerificationCodes.Update(entity); await context.SaveChangesAsync(); }
public async Task <IVerificationCode> CreateOrUpdateAsync(string customerId, string verificationCode) { var entity = EmailVerificationCodeEntity.Create(customerId, verificationCode, _verificationEmailExpirePeriod); using (var context = _contextFactory.CreateDataContext()) { await context.EmailVerificationCodes.AddAsync(entity); try { await context.SaveChangesAsync(); } catch (DbUpdateException e) { if (e.InnerException is PostgresException sqlException && sqlException.SqlState == PostgresErrorCodes.UniqueViolation) { context.EmailVerificationCodes.Update(entity); await context.SaveChangesAsync(); }