private async Task<ShareThing> PostShare(string message, string shareType, string tags, string shareContent, string reshareable, string pShareId, ShareService service)
 {
     var b64 = new DBTek.Crypto.Base64();
     var tagb64s = string.IsNullOrWhiteSpace(tags) ? new string[0] : tags.Split('#');
     var tagJsons = (from tagB64 in tagb64s select b64.DecodeString(tagB64)).ToList();
     var ownTag = new
     {
         name = "ME",
         type = SharelinkTagConstant.TAG_TYPE_SHARELINKER,
         data = UserSessionData.UserId
     };
     tagJsons.Add(ownTag.ToJson());
     var reshare = true;
     try { reshare = bool.Parse(reshareable); } catch { };
     var newShare = new ShareThing()
     {
         ShareTime = DateTime.UtcNow,
         Message = message,
         UserId = new ObjectId(UserSessionData.UserId),
         ShareType = shareType,
         ShareContent = shareContent,
         Tags = tagJsons.ToArray(),
         Reshareable = reshare,
     };
     if (string.IsNullOrWhiteSpace(pShareId) == false)
     {
         newShare.PShareId = new ObjectId(pShareId);
     }
     if (newShare.IsUserShareType() == false)
     {
         Response.StatusCode = (int)HttpStatusCode.Forbidden;
         return null;
     }
     var share = await service.PostNewShareThing(newShare);
     return share;
 }
        private async Task<object> SetShareFinished(ShareThing newShare, SharelinkTagService tagService, ShareService service)
        {
            var mails = new List<ShareThingMail>();
            IEnumerable<dynamic> dynamicTags = from tagJson in newShare.Tags select JsonConvert.DeserializeObject(tagJson);
            var newShareTags = (from dt in dynamicTags
                                select new SharelinkTag()
                                {
                                    Data = dt.data,
                                    TagType = dt.type
                                }).ToList();
            var isPrivateShare = newShareTags.Count(st => st.IsPrivateTag()) > 0;
            newShareTags.Add(new SharelinkTag()
            {
                Data = UserSessionData.UserId,
                TagType = SharelinkTagConstant.TAG_TYPE_SHARELINKER
            });
            mails.Add(new ShareThingMail()
            {
                ShareId = newShare.Id,
                Time = DateTime.UtcNow,
                ToSharelinker = new ObjectId(UserSessionData.UserId)
            });

            if (isPrivateShare == false)
            {
                await MatchLinkerTags(tagService, newShare, mails, newShareTags);
            }
            service.InsertMails(mails);
            Startup.ServicesProvider.GetBahamutPubSubService().PublishShareMessages(mails);
            return new { message = "ok" };
        }
        private async Task SendShowToLinkerTagMessage(ShareService shareService, SharelinkerService userService, ObjectId userId, SharelinkTag newTag)
        {
            var newShare = new ShareThing()
            {
                ShareTime = DateTime.UtcNow,
                ShareType = newTag.IsFocus ? ShareThingConstants.SHARE_TYPE_MESSAGE_FOCUS_TAG : ShareThingConstants.SHARE_TYPE_MESSAGE_ADD_TAG,
                UserId = userId,
                ShareContent = SharelinkTagToResultObject(newTag.Id.ToString(),newTag).ToJson()
            };
            await shareService.PostNewShareThing(newShare);

            var linkers = await userService.GetUserlinksOfUserId(UserSessionData.UserId);
            var linkerIds = from l in linkers select l.SlaveUserObjectId;

            var newMails = new List<ShareThingMail>();
            foreach (var linker in linkerIds)
            {
                if (!Startup.SharelinkCenterList.Contains(linker.ToString()))
                {
                    var newMail = new ShareThingMail()
                    {
                        ShareId = newShare.Id,
                        Time = DateTime.UtcNow,
                        ToSharelinker = linker
                    };
                    newMails.Add(newMail);
                }
            }
            shareService.InsertMails(newMails);

            Startup.ServicesProvider.GetBahamutPubSubService().PublishShareMessages(newMails);
        }