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 }));
        }