public void Add(CommentServiceDto commentDto)
        {
            if(commentDto == null)
                throw new ArgumentNullException("commentDto");

            // Necessito de ser membro
            Member dbMember = GetDbMember();

            //
            // Os membros podem inserir comentarios nos issues cujo o projecto associado
            // ao issue pertenca a lista de projectos do membro

            // Obter lista de ids de projectos do membro
            var myProjectsIds = _db.Query<Member>()
                                   .GetProjectsIdsWhereIamResponsableOrWork(dbMember.UserID);

            // Obter issue
            Issue dbIssue = _db.Query<Issue>().GetByIdIncludeAll(commentDto.IssueID);

            if(!myProjectsIds.Any(pid => pid == dbIssue.Project.ProjectID))
                throw new HijackedException("You are not assigned to the project that has this issue");

            // Insere no repositorio
            _db.Insert(commentDto.CopyToDomainObject(dbMember, dbIssue));

            // Gravar persistente
            _db.SaveToDisk();
        }
        public void Add(CommentServiceDto commentDto)
        {
            if (commentDto == null)
                throw new ArgumentNullException("commentDto");

            Client dbClient = GetDbClient();

            //
            // Os clientes podem inserir comentarios nos issues cujo o projecto associado
            // ao issue pertenca a lista de projectos do cliente

            // Obter lista de ids de projectos associados ao cliente
            var myProjectsIds = _db.Query<Client>().GetMyProjectsIds(dbClient.UserID);

            // Obter issue
            Issue dbIssue = _db.Query<Issue>().GetByIdIncludeAll(commentDto.IssueID);

            if (!myProjectsIds.Any(pid => pid == dbIssue.Project.ProjectID))
                throw new HijackedException("You are not assigned to the project that has this issue");

            // Insere no repositorio
            _db.Insert(commentDto.CopyToDomainObject(dbClient, dbIssue));

            // Gravar persistente
            _db.SaveToDisk();
        }
        public void Add(CommentServiceDto commentDto)
        {
            if(commentDto == null)
                throw new ArgumentNullException("commentDto");

            // Verificar se sou admin
            Member dbAdmin = GetDbAdmin();

            //
            // Os admins podem inserir comentários nos issues de qualquer projecto
            Issue dbIssue = _db.Query<Issue>().GetByIdIncludeAll(commentDto.IssueID);

            // Insere no repositorio
            _db.Insert(commentDto.CopyToDomainObject(dbAdmin, dbIssue));

            // Gravar persistente
            _db.SaveToDisk();
        }
        //
        // GET: /Issue/{issueId}/Comments/Create?description=...
        public ActionResult Create(int issueId, CommentServiceDto commentDto)
        {
            if (!ModelState.IsValid)
                return Json(new { invalid = true });

            // É valido, atribui issueId
            commentDto.IssueID = issueId;

            // Saber qual o serviço a invocar
            if (User.IsInRole(LoginService.Admin)){
                var adminService = ObjectsManager.GetInstance<ICommentsAdminService>();
                adminService.Add(commentDto); // Internamente invoca SaveChanges
            } else{
                if (User.IsInRole(LoginService.Member)){
                    var memberService = ObjectsManager.GetInstance<ICommentsMemberService>();
                    memberService.Add(commentDto); // Internamente invoca SaveChanges
                } else{
                    var clientService = ObjectsManager.GetInstance<ICommentsClientService>();
                    clientService.Add(commentDto); // Internamente invoca SaveChanges
                }
            }
            return IndexPaging(issueId);
        }