private async Task MatchLinkerTags(SharelinkTagService tagService, ShareThing newShare, List<ShareThingMail> mails, IEnumerable<SharelinkTag> newShareTags) { var userService = this.UseSharelinkerService().GetSharelinkerService(); var linkers = await userService.GetUserlinksOfUserId(UserSessionData.UserId); var linkerIds = from l in linkers select l.SlaveUserObjectId; var linkersTags = await tagService.GetLinkersTags(linkerIds); foreach (var linkerTags in linkersTags) { var sendMailFlag = false; var mail = new ShareThingMail() { ShareId = newShare.Id, Time = DateTime.UtcNow }; if (linkerTags.Key != newShare.UserId) { var linkTagDatas = from lt in linkerTags.Value select lt; var matchTags = tagService.MatchTags(newShareTags, linkTagDatas); if (matchTags.Count() > 0) { mail.Tags = matchTags; sendMailFlag = true; mail.ToSharelinker = linkerTags.Key; } } if (sendMailFlag) { mails.Add(mail); } } }
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" }; }