public HttpResponseMessage GetIssue(ProjectPostData postData, [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string authKey) { // todo get issue needs only issue id HttpResponseMessage responseMessage; User sqlUser; if (!ValidateCredentials.AuthKeyIsValid(db, authKey, out sqlUser)) { responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid information."); return(responseMessage); } MongoCollection <UsersProjects> usersInProjects = mongoDb.GetCollection <UsersProjects>(MongoCollections.UsersInProjects); // todo projects need to be recognized by id // the relation table has to save the id and use it in further queries UsersProjects postingUser = usersInProjects.AsQueryable <UsersProjects>() .FirstOrDefault(x => x.Username == sqlUser.Username && x.ProjectName == postData.ProjectName); if (postingUser == null) { responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "User does not participate in project."); return(responseMessage); } MongoCollection <OpenIssue> issuesCollection = mongoDb.GetCollection <OpenIssue>(MongoCollections.Issues); var issue = issuesCollection.AsQueryable <OpenIssue>().FirstOrDefault(x => x.Id == new ObjectId(postData.IssueId)); if (issue == null) { responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "No such issue."); return(responseMessage); } List <AnswerIssue> entries = GetEntries(issue); return(responseMessage = this.Request.CreateResponse(HttpStatusCode.OK, new { Entries = entries, Title = issue.Title })); }
public HttpResponseMessage GetProjectInformation(ProjectPostData project, [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string authKey) { HttpResponseMessage responseMessage; User sqlUser; if (!ValidateCredentials.AuthKeyIsValid(db, authKey, out sqlUser)) { responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid information."); return(responseMessage); } MongoCollection <UsersProjects> usersInProjects = mongoDb.GetCollection <UsersProjects>(MongoCollections.UsersInProjects); // todo projects need to be recognized by id // the relation table has to save the id and use it in further queries UsersProjects postingUser = usersInProjects.AsQueryable <UsersProjects>() .FirstOrDefault(x => x.Username == sqlUser.Username && x.ProjectName == project.ProjectName); if (postingUser == null) { responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "User does not participate in project."); return(responseMessage); } MongoCollection <OpenIssue> issuesCollection = mongoDb.GetCollection <OpenIssue>(MongoCollections.Issues); MongoCollection <Note> notesCollection = mongoDb.GetCollection <Note>(MongoCollections.Notes); MongoCollection <ProjectTask> tasksCollection = mongoDb.GetCollection <ProjectTask>(MongoCollections.Tasks); var issues = (from i in issuesCollection.AsQueryable <OpenIssue>() where i.ProjectName == project.ProjectName select new TableCell() { Id = i.Id.ToString(), Title = i.Title }).ToList(); issues.Reverse(); var notes = (from n in notesCollection.AsQueryable <Note>() where n.ProjectName == project.ProjectName select new TableCell() { Id = n.Id.ToString(), Title = n.Title }).ToList(); var allTasksCount = tasksCollection.AsQueryable <ProjectTask>() .Where(x => x.ProjectName == project.ProjectName).Count(); var allOpenTasks = tasksCollection.AsQueryable <ProjectTask>() .Where(x => x.Completed == false && x.ProjectName == project.ProjectName).Count(); TableCell task = new TableCell() { Title = string.Format("All: {0}, Open: {1}", allTasksCount, allOpenTasks) }; return(responseMessage = this.Request.CreateResponse(HttpStatusCode.OK, new { Issues = issues, Notes = notes, UserRoleInProject = postingUser.Role, Tasks = task })); }