Exemplo n.º 1
0
 public static Cloud SetHooks(this Cloud cloud)
 {
     cloud.BeforeSave("Todo", todo =>
     {
         var title = todo.Get<string>("title");
         // reset value for title
         if (!string.IsNullOrEmpty(title))
             if (title.Length > 20) todo["title"] = title.Substring(0, 20);
         // returning any value will be ok.
         return Task.FromResult(true);
     }).BeforeSave("Review", review =>
     {
         var comment = review.Get<string>("comment");
         if (comment.Length > 140) review["comment"] = comment.Substring(0, 137) + "...";
         return Task.FromResult(comment);
     }).AfterSave("Review", async review =>
     {
         var post = review.Get<AVObject>("post");
         await post.FetchAsync();
         post.Increment("comments");
         await post.SaveAsync();
     }).AfterSave("_User", async user =>
     {
         if (user is AVUser avUser)
         {
             avUser.Set("from", "LeanCloud");
             await avUser.SaveAsync();
         }
     }).BeforeUpdate("Review", (EngineObjectHookContext context) =>
     {
         if (context.UpdatedKeys.Contains("comment"))
         {
             var comment = context.TheObject.Get<string>("comment");
             if (comment.Length > 140) throw new EngineException(400, "comment 长度不得超过 140 字符");
         }
         return Task.FromResult(true);
     }).AfterSave("Article", article =>
     {
         Console.WriteLine(article.ObjectId);
         return Task.FromResult(true);
     }).BeforeDelete("Album", async album =>
     {
         AVQuery<AVObject> query = new AVQuery<AVObject>("Photo");
         query.WhereEqualTo("album", album);
         int count = await query.CountAsync();
         if (count > 0)
         {
             throw new Exception("无法删除非空相簿");
         }
         else
         {
             Console.WriteLine("deleted.");
         }
     }).AfterDelete("Album", async album =>
     {
         AVQuery<AVObject> query = new AVQuery<AVObject>("Photo");
         query.WhereEqualTo("album", album);
         var result = await query.FindAsync();
         if (result != null && result.Count() != 0)
         {
             await AVObject.DeleteAllAsync(result);
         }
     }).OnVerifiedSMS((AVUser user) =>
     {
         Console.WriteLine("user verified by sms");
         return Task.FromResult(true);
     }).OnLogIn((AVUser user) =>
     {
         Console.WriteLine("user logged in.");
         return Task.FromResult(true);
     });
     return cloud;
 }