public async Task ClearPasswordResetTokensAsync(Guid userId)
 {
     using (var db = new MainDatabase().Get)
     {
         await db.ExecuteAsync("DELETE FROM [dbo].[UserPasswordReset] WHERE UserId = @userId", new { userId });
     }
 }
 public async Task DeleteAsync(OdissUser user)
 {
     using (var db = new MainDatabase().Get)
     {
         var sql = "DELETE FROM [dbo].[Users] WHERE Id = @Id";
         await db.ExecuteAsync(sql, user);
     }
 }
 public async Task UpdateAsync(OdissUser user)
 {
     using (var db = new MainDatabase().Get)
     {
         var sql = "UPDATE [dbo].[Users] SET UserName = @UserName, Password = @Password, Type = @Type, FirstName = @FirstName, LastName = @LastName, PhoneOffice = @PhoneOffice, PhoneMobile = @PhoneMobile, Email = @Email, Company = @Company, Expire = @Expire, Permissions = @Permissions, Active = @Active, LockAccessUntil = @LockAccessUntil, WrongAccessAttempts = @WrongAccessAttempts WHERE ID = @Id";
         await db.ExecuteAsync(sql, user);
     }
 }
 public async Task CreateAsync(OdissUser user)
 {
     using (var db = new MainDatabase().Get)
     {
         var sql = "INSERT INTO [dbo].[Users] (UserName, Password, Type, FirstName, LastName, PhoneOffice, PhoneMobile, Email, Company, Expire, Permissions, Active, LockAccessUntil, WrongAccessAttempts) VALUES (@UserName, @Password, @Type, @FirstName, @LastName, @PhoneOffice, @PhoneMobile, @Email, @Company, @Expire, @Permissions, @Active, @LockAccessUntil, @WrongAccessAttempts)";
         await db.ExecuteAsync(sql, user);
     }
 }
        public async Task <string> RegisterPasswordResetTokenAsync(Guid userId, string passwordResetToken)
        {
            using (var db = new MainDatabase().Get)
                using (var transaction = db.BeginTransaction())
                {
                    try
                    {
                        var expiryDate = DateTime.Now.Add(expiryLength);

                        await db.ExecuteAsync("DELETE FROM [dbo].[UserPasswordReset] WHERE UserId = @userId", new { userId }, transaction : transaction);

                        var generatedId = await db.QuerySingleAsync <Guid>("INSERT INTO [dbo].[UserPasswordReset] (UserId, ExpiryDate, ResetPasswordToken) OUTPUT INSERTED.Id VALUES (@userId, @expiryDate, @passwordResetToken)", new { userId, expiryDate, passwordResetToken }, transaction : transaction);

                        transaction.Commit();

                        return(generatedId.ToString());
                    }
                    catch (SqlException ex)
                    {
                        transaction.Rollback();
                        throw ex;
                    }
                }
        }