protected override void UpdateCache(CommandResponse <bool?> result) { if (result.Success) { string key = CachingKey.UserSavedItems(_type, UserName); if (result.Response.HasValue && CacheHandler.Instance.Exists(key)) { if (result.Response.Value) { CacheHandler.Instance.SetAdd(key, _id); } else { CacheHandler.Instance.SetRemove(key, _id); } } } }
public override async Task <ISet <int> > ExecuteAsync() { DemandAuthentication(); var handler = CacheHandler.Instance; if (handler.CacheEnabled) { var cacheKey = CachingKey.UserSavedItems(_type, User.Identity.Name); if (!handler.Exists(cacheKey)) { handler.Replace(cacheKey, await GetData(), TimeSpan.FromMinutes(30)); } return(new CacheSetAccessor <int>(cacheKey)); } else { return(await GetData()); } }
public static bool?IsSaved(Domain.Models.ContentType type, int id) { var identity = System.Threading.Thread.CurrentPrincipal.Identity; if (identity.IsAuthenticated) { string userName = identity.Name; string cacheKey = CachingKey.UserSavedItems(type, userName); if (!CacheHandler.Instance.Exists(cacheKey)) { var q = new QueryUserSaves(type); var d = q.Execute(); return(d.Contains(id)); } else { return(CacheHandler.Instance.SetExists(cacheKey, id)); } } return(null); }
public async Task UserSaves() { var userName = "******"; //var userName = "******" + Guid.NewGuid().ToString().Substring(0, 5); TestDataInitializer.CreateUser(userName); var bio = Guid.NewGuid().ToString(); var user = TestHelper.SetPrincipal(userName); //save start test data using (var repo = new Voat.Data.Repository(user)) { var r = await repo.Save(Domain.Models.ContentType.Submission, 1); VoatAssert.IsValid(r); var submissionSaves = await repo.GetUserSavedItems(Domain.Models.ContentType.Submission, user.Identity.Name); Assert.AreEqual(1, submissionSaves.Count()); Assert.IsTrue(submissionSaves.Any(x => x == 1), "Submission not saved"); r = await repo.Save(Domain.Models.ContentType.Comment, 1); VoatAssert.IsValid(r); var commentSaves = await repo.GetUserSavedItems(Domain.Models.ContentType.Comment, user.Identity.Name); Assert.AreEqual(1, commentSaves.Count()); Assert.IsTrue(commentSaves.Any(x => x == 1), "Comment not saved"); } var q = new QueryUserSaves(Domain.Models.ContentType.Submission).SetUserContext(user); var d = await q.ExecuteAsync(); Assert.AreEqual(1, d.Count); Assert.AreEqual(true, d.Contains(1)); Assert.AreEqual(true, CacheHandler.Instance.Exists(CachingKey.UserSavedItems(Domain.Models.ContentType.Submission, userName))); q = new QueryUserSaves(Domain.Models.ContentType.Comment).SetUserContext(user); d = await q.ExecuteAsync(); Assert.AreEqual(1, d.Count); Assert.AreEqual(true, d.Contains(1)); Assert.AreEqual(true, CacheHandler.Instance.Exists(CachingKey.UserSavedItems(Domain.Models.ContentType.Comment, userName))); //check helper object Assert.AreEqual(true, UserHelper.IsSaved(user, Domain.Models.ContentType.Submission, 1)); Assert.AreEqual(true, UserHelper.IsSaved(user, Domain.Models.ContentType.Comment, 1)); Assert.AreEqual(false, UserHelper.IsSaved(user, Domain.Models.ContentType.Submission, 2)); Assert.AreEqual(false, UserHelper.IsSaved(user, Domain.Models.ContentType.Comment, 2)); var cmd = new SaveCommand(Domain.Models.ContentType.Submission, 2).SetUserContext(user); var response = await cmd.Execute(); VoatAssert.IsValid(response); cmd = new SaveCommand(Domain.Models.ContentType.Comment, 2).SetUserContext(user); response = await cmd.Execute(); VoatAssert.IsValid(response); Assert.AreEqual(true, UserHelper.IsSaved(user, Domain.Models.ContentType.Submission, 2)); Assert.AreEqual(true, UserHelper.IsSaved(user, Domain.Models.ContentType.Comment, 2)); cmd = new SaveCommand(Domain.Models.ContentType.Submission, 1).SetUserContext(user);; response = await cmd.Execute(); VoatAssert.IsValid(response); cmd = new SaveCommand(Domain.Models.ContentType.Comment, 1).SetUserContext(user); response = await cmd.Execute(); VoatAssert.IsValid(response); Assert.AreEqual(false, UserHelper.IsSaved(user, Domain.Models.ContentType.Submission, 1)); Assert.AreEqual(false, UserHelper.IsSaved(user, Domain.Models.ContentType.Comment, 1)); }
public async Task UserSaves() { var userName = "******"; var bio = Guid.NewGuid().ToString(); TestHelper.SetPrincipal(userName); //save start test data using (var repo = new Voat.Data.Repository()) { var r = await repo.Save(Domain.Models.ContentType.Submission, 1); Assert.AreEqual(Status.Success, r.Status); r = await repo.Save(Domain.Models.ContentType.Comment, 1); Assert.AreEqual(Status.Success, r.Status); } var q = new QueryUserSaves(Domain.Models.ContentType.Submission); var d = await q.ExecuteAsync(); Assert.AreEqual(true, d.Contains(1)); Assert.AreEqual(1, d.Count); Assert.AreEqual(true, CacheHandler.Instance.Exists(CachingKey.UserSavedItems(Domain.Models.ContentType.Submission, userName))); q = new QueryUserSaves(Domain.Models.ContentType.Comment); d = await q.ExecuteAsync(); Assert.AreEqual(true, d.Contains(1)); Assert.AreEqual(1, d.Count); Assert.AreEqual(true, CacheHandler.Instance.Exists(CachingKey.UserSavedItems(Domain.Models.ContentType.Comment, userName))); //check helper object Assert.AreEqual(true, UserHelper.IsSaved(Domain.Models.ContentType.Submission, 1)); Assert.AreEqual(true, UserHelper.IsSaved(Domain.Models.ContentType.Comment, 1)); Assert.AreEqual(false, UserHelper.IsSaved(Domain.Models.ContentType.Submission, 2)); Assert.AreEqual(false, UserHelper.IsSaved(Domain.Models.ContentType.Comment, 2)); var cmd = new SaveCommand(Domain.Models.ContentType.Submission, 2); var response = await cmd.Execute(); Assert.AreEqual(Status.Success, response.Status); cmd = new SaveCommand(Domain.Models.ContentType.Comment, 2); response = await cmd.Execute(); Assert.AreEqual(Status.Success, response.Status); Assert.AreEqual(true, UserHelper.IsSaved(Domain.Models.ContentType.Submission, 2)); Assert.AreEqual(true, UserHelper.IsSaved(Domain.Models.ContentType.Comment, 2)); cmd = new SaveCommand(Domain.Models.ContentType.Submission, 1); response = await cmd.Execute(); Assert.AreEqual(Status.Success, response.Status); cmd = new SaveCommand(Domain.Models.ContentType.Comment, 1); response = await cmd.Execute(); Assert.AreEqual(Status.Success, response.Status); Assert.AreEqual(false, UserHelper.IsSaved(Domain.Models.ContentType.Submission, 1)); Assert.AreEqual(false, UserHelper.IsSaved(Domain.Models.ContentType.Comment, 1)); }