public void UpdateContentCache(Content content) { if (content.GroupId.HasValue) { CachService.DropViewModelByModel(content.GroupId.Value); } if (content.AuthorId.HasValue) { CachService.DropViewModelByModel(content.AuthorId.Value); } }
private void UpdateGroupState(Guid groupId) { var group = DataService.PerThread.GroupSet.SingleOrDefault(x => x.Id == groupId); if (group == null) { throw new BusinessLogicException("Указан неверный идентификатор группы"); } if (group.Type != (byte)GroupType.Root) { if (group.State == (byte)GroupState.Blank && group.ModeratorsCount < ConstHelper.MinModeratorsInGroup && group.CreationDate < DateTime.Now.AddDays(-7)) { //TODO: Удалять группу } if (group.State != (byte)GroupState.Archive) { //Если группа фаундинг и кол-во модеров упало ниже минимального, то группа станет архивной if (group.GroupMembers.Count(x => x.State == (byte)GroupMemberState.Moderator) < ConstHelper.MinModeratorsInGroup && group.State == (byte)GroupState.Founding) { group.State = (byte)GroupState.Archive; } //Если группа бланк и кол-во модеров стало больше равно установленному в настройках, то группа станет фаундинг if (group.GroupMembers.Count(x => x.State == (byte)GroupMemberState.Moderator) >= group.ModeratorsCount && group.State == (byte)GroupState.Blank) { if (!group.PrivacyEnum.HasFlag(GroupPrivacy.MemberModeration)) { foreach (var member in group.GroupMembers) { if (member.State == (byte)GroupMemberState.NotApproved) { ChangeMemberStatus(member.UserId, member.GroupId, GroupMemberState.Approved); } } } group.State = (byte)GroupState.Founding; } //TODO: условия превращения в Formed группу и обратно (полный состав модераторов - определенное количество пользователей) } else { if (group.GroupMembers.Count(x => x.State == (byte)GroupMemberState.Moderator) >= group.ModeratorsCount) { group.State = (byte)GroupState.Founding; } } DataService.PerThread.SaveChanges(); CachService.DropViewModelByModel(group.Id); } }
public Group UpdateGroup(EditGroupStruct newGroupData, bool saveChanges = true) { //var parentGroup = DataService.PerThread.GroupSet.Where(g => g.Id == groupData.ParentGroupId).SingleOrDefault(); var parentGroup = DataService.PerThread.GroupSet.SingleOrDefault(g => g.Id == ConstHelper.RootGroupId); //TODO: пока нет вложенности, будет так if (parentGroup == null) { throw new BusinessLogicException("В качестве родительской указана не существующая группа"); } if (ExistAnotherGroupWithLabel(newGroupData.Label, newGroupData.GroupId)) { throw new BusinessLogicException("Существует другая группа с указанным label (ЧПУ)"); } var group = DataService.PerThread.GroupSet.SingleOrDefault(g => g.Id == newGroupData.GroupId); if (group == null) { throw new BusinessLogicException("Такой группы не существует"); } if (newGroupData.ElectionFrequency > 12) { throw new BusinessLogicException("Выборы в группе не могут происходить реже чем раз в 12 месяцев"); } if (newGroupData.ElectionFrequency < 1) { throw new BusinessLogicException("Выборы в группе не могут происходить реже чем раз в месяц"); } if (newGroupData.ModeratorsCount < 3) { throw new BusinessLogicException("В группе должно быть не менее 3х модераторов"); } group.Name = newGroupData.Name; group.Label = newGroupData.Label; group.Summary = newGroupData.Summary; group.Categories.Clear(); foreach (var cid in newGroupData.Categories) { var category = DataService.PerThread.GroupCategorySet.SingleOrDefault(x => x.Id == cid); if (category != null) { group.Categories.Add(category); } } //IList<Tag> tagsToDelete = new List<Tag>(); //IList<ExpertVote> evToDelete = new List<ExpertVote>(); //foreach (var tag in group.Tags) // if (!newTagsList.Contains(tag)) // { // tagsToDelete.Add(tag); // foreach (var gm in group.GroupMembers) // if (gm.Expert != null) // gm.Expert.Tags.Remove(tag); // foreach (var ev in DataService.PerThread.ExpertVoteSet.Where(x => x.GroupMember.GroupId == group.Id && x.TagId == tag.Id)) // evToDelete.Add(ev); // } //foreach (var ev in evToDelete) // DataService.PerThread.ExpertVoteSet.DeleteObject(ev); //foreach (var tag in tagsToDelete) // group.Tags.Remove(tag); //foreach (var tag in newTagsList) // if (!group.Tags.Contains(tag)) // group.Tags.Add(tag); group.ModeratorsCount = newGroupData.ModeratorsCount; group.ElectionFrequency = newGroupData.ElectionFrequency; group.ParentGroup = parentGroup; group.PollQuorum = newGroupData.PollQuorum; group.ElectionQuorum = newGroupData.ElectionQuorum; if (saveChanges) { DataService.PerThread.SaveChanges(); } CachService.DropViewModelByModel(group.Id); UserContextService.GroupMembersAbandon(group.Id); return(group); }