private bool SaveToken(string token, int userId, DateTime expiry)
        {
            var newTokEntry = new UserTokenEntry()
            {
                EncodedToken = token,
                AppUserId    = userId,
                ExpiryDate   = expiry
            };

            _dbCtx.UserTokenEntries.Add(newTokEntry);
            try
            {
                _dbCtx.SaveChanges();
                return(true);
            }
            catch (DbUpdateConcurrencyException e)
            {
                foreach (var item in e.Entries)
                {
                    if (item.Entity is UserTokenEntry)
                    {
                        var currValues = item.CurrentValues;
                        var dbValues   = item.GetDatabaseValues();

                        foreach (var property in currValues.Properties)
                        {
                            var currentValue = currValues[property];
                            var dbValue      = dbValues[property];
                        }

                        // Refresh the original values to bypass next concurrency check
                        item.OriginalValues.SetValues(dbValues);
                    }
                    else
                    {
                        return(false);
                    }
                }
                return(true);
            }
            catch (Exception)
            {
                // Rollback token entry
                _dbCtx.UserTokenEntries.Remove(newTokEntry);
                return(false);
            }
        }
 public User GetUserByTokenEntry(UserTokenEntry entry)
 {
     return(_dbContext.Users.Where(x => x.UserId == entry.UserId).FirstOrDefault());
 }