public void Add(IssueServiceClientDTO issueClientDto) { if (issueClientDto == null) throw new ArgumentNullException("issueClientDto"); // // O cliente so pode inserir um issue se, o projecto a que pertence o issue // pertence ao cliente. // Verificar se sou cliente Client dbClient = GetDbClient(); // Obter o projecto a partir do Dto data e ver se o cliente sou eu.. Project dbProject = _db.Query<Project>().GetByIdIncludeClient(issueClientDto.ProjectId); if (dbProject == null || dbProject.Client.UserID != dbClient.UserID) { throw new HijackedException("ProjectID hijacked"); } if(dbProject != null && !dbProject.Enabled) throw new ProjectDisabledException("Project disabled"); // Se estou aqui então eu sou o owner do projecto _db.Insert(issueClientDto.CopyToDomainObject(dbProject, dbClient)); // // Executar o serviço de enviar emails para os membros do projecto deste issue. NotificatorClientDTO clientDto = new NotificatorClientDTO( dbClient.Name, dbProject.ProjectID, dbProject.Name, issueClientDto.Priority, issueClientDto.Type, issueClientDto.ShortDescription, issueClientDto.LongDescription ); // Notificar _notificator.NotifyMembers(clientDto); }