Ejemplo n.º 1
0
        private Content AttachDetach(Guid contentId, Guid?currUserId, AttachDetachTarget target, AttachOrDetach wtf)  // TODO: при ретрансляции постов принимать ИД групп/юзеров, где пост прикрепить/открепить
        {
            var content = DataService.PerThread.ContentSet.SingleOrDefault(x => x.Id == contentId);

            if (content == null)
            {
                throw new BusinessLogicException("Нет контента с указанным идентификатором");
            }

            var attach = content.Attach;

            if (currUserId.HasValue)
            {
                if (content.GroupId.HasValue)
                {
                    var gm = GroupService.UserInGroup(currUserId.Value, content.Group.Id);

                    if (gm == null)
                    {
                        throw new BusinessLogicException("Вы не имеете права");
                    }
                    if (gm.State != (byte)GroupMemberState.Moderator)
                    {
                        throw new BusinessLogicException("Вы не имеете права");
                    }
                }
                else
                {
                    if (content.AuthorId.HasValue)
                    {
                        if (content.AuthorId.Value != currUserId.Value)
                        {
                            throw new BusinessLogicException("Вы не имеете права");
                        }
                    }
                    else
                    {
                        throw new BusinessLogicException("Вы не имеете права");
                    }
                }
            }

            if (attach == null)
            {
                switch (wtf)
                {
                case AttachOrDetach.Attach:
                    attach = new Attach {
                        Content = content
                    };
                    DataService.PerThread.AttachSet.AddObject(attach);
                    break;

                case AttachOrDetach.Detach:
                    return(content);
                }
            }

            switch (target)
            {
            case AttachDetachTarget.Group:
                switch (wtf)
                {
                case AttachOrDetach.Attach:
                    attach.Groups.Add(content.Group);
                    break;

                case AttachOrDetach.Detach:
                    attach.Groups.Remove(content.Group);
                    break;
                }
                break;

            case AttachDetachTarget.User:
                switch (wtf)
                {
                case AttachOrDetach.Attach:
                    attach.Users.Add(content.Author);
                    break;

                case AttachOrDetach.Detach:
                    attach.Users.Remove(content.Author);
                    break;
                }
                break;
            }

            DataService.PerThread.SaveChanges();
            UpdateContentCache(content);

            return(content);
        }
Ejemplo n.º 2
0
        // TODO: при ретрансляции постов принимать ИД групп/юзеров, где пост прикрепить/открепить
        private Content AttachDetach(Guid contentId, Guid? currUserId, AttachDetachTarget target, AttachOrDetach wtf)
        {
            var content = DataService.PerThread.ContentSet.SingleOrDefault(x => x.Id == contentId);
            if (content == null)
                throw new BusinessLogicException("Нет контента с указанным идентификатором");

            var attach = content.Attach;

            if (currUserId.HasValue)
            {
                if (content.GroupId.HasValue)
                {
                    var gm = GroupService.UserInGroup(currUserId.Value, content.Group.Id);

                    if (gm == null)
                        throw new BusinessLogicException("Вы не имеете права");
                    if (gm.State != (byte)GroupMemberState.Moderator)
                        throw new BusinessLogicException("Вы не имеете права");
                }
                else
                {
                    if (content.AuthorId.HasValue)
                    {
                        if (content.AuthorId.Value != currUserId.Value)
                            throw new BusinessLogicException("Вы не имеете права");
                    }
                    else
                        throw new BusinessLogicException("Вы не имеете права");
                }
            }

            if (attach == null)
            {
                switch (wtf)
                {
                    case AttachOrDetach.Attach:
                        attach = new Attach { Content = content };
                        DataService.PerThread.AttachSet.AddObject(attach);
                        break;

                    case AttachOrDetach.Detach:
                        return content;
                }
            }

            switch (target)
            {
                case AttachDetachTarget.Group:
                    switch (wtf)
                    {
                        case AttachOrDetach.Attach:
                            attach.Groups.Add(content.Group);
                            break;

                        case AttachOrDetach.Detach:
                            attach.Groups.Remove(content.Group);
                            break;
                    }
                    break;

                case AttachDetachTarget.User:
                    switch (wtf)
                    {
                        case AttachOrDetach.Attach:
                            attach.Users.Add(content.Author);
                            break;

                        case AttachOrDetach.Detach:
                            attach.Users.Remove(content.Author);
                            break;
                    }
                    break;
            }

            DataService.PerThread.SaveChanges();
            UpdateContentCache(content);

            return content;
        }