public HttpResponseMessage PostNote(Note postedNote, [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 == postedNote.ProjectName && x.Role >= UserRoles.ProjectManager);

            if (postingUser == null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "User does not participate in project or role is insufficient.");
                return(responseMessage);
            }

            MongoCollection <Note> notesCollection = mongoDb.GetCollection <Note>(MongoCollections.Notes);

            notesCollection.Save(postedNote);

            return(responseMessage = this.Request.CreateResponse(HttpStatusCode.OK, new { Posted = "Success" }));
        }
        public HttpResponseMessage GetNote(string noteId, [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 <Note> notesCollection = mongoDb.GetCollection <Note>(MongoCollections.Notes);
            Note foundNote = notesCollection.FindOneAs <Note>(Query.EQ("_id", new ObjectId(noteId)));

            MongoCollection <UsersProjects> usersInProjects = mongoDb.GetCollection <UsersProjects>(MongoCollections.UsersInProjects);

            // todo projects need to be recognized by id
            UsersProjects postingUser = usersInProjects.AsQueryable <UsersProjects>()
                                        .FirstOrDefault(x => x.Username == sqlUser.Username &&
                                                        x.ProjectName == foundNote.ProjectName);

            if (postingUser == null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "User does not participate in project.");
                return(responseMessage);
            }

            return(responseMessage = this.Request.CreateResponse(HttpStatusCode.OK, new { Note = foundNote }));
        }
Ejemplo n.º 3
0
        public HttpResponseMessage AllTasksForProject(UserInProject user, [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);
            }

            var           usersProjects = mongoDb.GetCollection <UsersProjects>(MongoCollections.UsersInProjects);
            UsersProjects userInProject = usersProjects.FindOneAs <UsersProjects>(Query.And(
                                                                                      Query.EQ("ProjectName", user.ProjectName),
                                                                                      Query.EQ("Username", sqlUser.Username),
                                                                                      Query.EQ("OrganizationName", user.OrganizationName)));

            if (userInProject == null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "No such organization, project, or user does not participate in them.");
                return(responseMessage);
            }

            var tasksCollection = mongoDb.GetCollection <ProjectTask>(MongoCollections.Tasks);

            var openTasks      = tasksCollection.AsQueryable <ProjectTask>().Where(x => x.ProjectName == user.ProjectName && x.Completed == false);
            var completedTasks = tasksCollection.AsQueryable <ProjectTask>().Where(x => x.ProjectName == user.ProjectName && x.Completed == true);

            return(responseMessage = this.Request.CreateResponse(HttpStatusCode.OK, new { Open = openTasks, Completed = completedTasks }));
        }
        public HttpResponseMessage PostIssue(OpenIssue postedIssue, [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string authKey)
        {
            HttpResponseMessage responseMessage;
            User sqlUser;

            if (!ValidateCredentials.AuthKeyIsValid(db, authKey, out sqlUser) || postedIssue.Title.Length > 20 || postedIssue.Text.Length > 300)
            {
                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 == postedIssue.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);

            postedIssue.ByUser  = sqlUser.Username;
            postedIssue.Answers = new List <AnswerIssue>();
            issuesCollection.Save(postedIssue);

            return(responseMessage = this.Request.CreateResponse(HttpStatusCode.OK, new { Posted = "Success" }));
        }
        private void CreateUserProjectRelation(UsersOrganizations userAssigned, Project project)
        {
            MongoCollection <UsersProjects> usersProjects = mongoDb.GetCollection <UsersProjects>(MongoCollections.UsersInProjects);
            UsersProjects usersProjectsRelation           = new UsersProjects()
            {
                ProjectId   = project.Id,
                ProjectName = project.Name,
                //UserId = userAssigned.Id,
                Username         = userAssigned.Username,
                OrganizationName = project.OrganizationName,
                Role             = userAssigned.Role
            };

            usersProjects.Save(usersProjectsRelation);
        }
        public HttpResponseMessage SetProjectManager(SetAsProjectManager postData, [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string authKey)
        {
            HttpResponseMessage responseMessage;

            if (!ValidateCredentials.AuthKeyIsValid(db, authKey))
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid information.");
                return(responseMessage);
            }

            var queriedOrganization = GenericQueries.CheckOrganizationName(postData.OrganizationName, mongoDb);

            if (queriedOrganization == null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid organization name.");
                return(responseMessage);
            }

            MongoCollection <UsersOrganizations> usersAndOrganizations = mongoDb.GetCollection <UsersOrganizations>(MongoCollections.UsersInOrganizations);
            UsersOrganizations userAssigning;
            UsersOrganizations usersProfile = usersAndOrganizations.FindOneAs <UsersOrganizations>(Query.EQ("Username", postData.Username));

            GenericQueries.CheckUser(authKey, queriedOrganization, usersAndOrganizations, out userAssigning, UserRoles.OrganizationManager, db);

            if (usersProfile == null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "No such user in organization.");
                return(responseMessage);
            }
            if (userAssigning == null || userAssigning.Role < usersProfile.Role)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Insufficient permissions.");
                return(responseMessage);
            }

            MongoCollection <UsersProjects> usersProjects = mongoDb.GetCollection <UsersProjects>(MongoCollections.UsersInProjects);
            UsersProjects userInProject = usersProjects.FindOneAs <UsersProjects>(Query.And(
                                                                                      Query.EQ("ProjectName", postData.ProjectName),
                                                                                      Query.EQ("Username", postData.Username),
                                                                                      Query.EQ("OrganizationName", postData.OrganizationName)));

            userInProject.Role = postData.SetAsManager ? UserRoles.ProjectManager : usersProfile.Role;
            usersProjects.Save(userInProject);
            HistoryController.RecordHistoryEntry(userAssigning.OrganizationName, userAssigning.Username,
                                                 string.Format("{0} {1} as Project Manager", postData.SetAsManager ? "assigned" : "dissociated", userInProject.Username), userInProject.ProjectName);

            return(responseMessage = this.Request.CreateResponse(HttpStatusCode.OK, new { User = userInProject }));
        }
Ejemplo n.º 7
0
        public void OnPostAddUserToProject(int userIndex)
        {
            Update();
            IRepository <Project> projRepository = new Repository <Project>(_context);
            User          selectedUser           = Users.First(u => u.Id == userIndex);
            UsersProjects userProject            = new UsersProjects()
            {
                User      = selectedUser,
                UserId    = selectedUser.Id,
                Project   = Project,
                ProjectId = ProjectId
            };

            Project.Users.Add(userProject);
            projRepository.Update(Project);
        }
Ejemplo n.º 8
0
        public void OnPostAddProjectToUser(int id)
        {
            Update();
            IRepository <User> userRepository = new Repository <User>(_context);

            Project       selectedProject = Projects.First(proj => proj.Id == id);
            UsersProjects usersProjects   = new UsersProjects()
            {
                User      = User,
                UserId    = Id,
                Project   = selectedProject,
                ProjectId = selectedProject.Id
            };

            User.Projects.Add(usersProjects);
            userRepository.Update(User);
        }
        public IHttpActionResult UserProjects(UsersProjectsDTO dto)
        {
            var userId = User.Identity.GetUserId();

            if (_context.UsersProjects.Any(u => u.UserId == userId && u.ProjectId == dto.ProjectId))
            {
                return(BadRequest("Project Already Exists."));
            }

            var userprojects = new UsersProjects
            {
                ProjectId = dto.ProjectId,
                UserId    = userId
            };

            _context.UsersProjects.Add(userprojects);
            _context.SaveChanges();

            return(Ok());
        }
        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 }));
        }
Ejemplo n.º 11
0
        public HttpResponseMessage CreateTask(ProjectTask task, [ValueProvider(typeof(HeaderValueProviderFactory <string>))] string authKey)
        {
            HttpResponseMessage responseMessage;
            User sqlUser;

            if (!ValidateCredentials.AuthKeyIsValid(db, authKey, out sqlUser) ||
                task.TaskName.Length < 1 || task.TaskName.Length > 20 || task.TaskDescription.Length > 100)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid information.");
                return(responseMessage);
            }

            var           usersProjects = mongoDb.GetCollection <UsersProjects>(MongoCollections.UsersInProjects);
            UsersProjects userInProject = usersProjects.FindOneAs <UsersProjects>(Query.And(
                                                                                      Query.EQ("ProjectName", task.ProjectName),
                                                                                      Query.EQ("Username", sqlUser.Username),
                                                                                      Query.EQ("OrganizationName", task.OrganizationName)));

            if (userInProject == null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "No such organization, project, or user does not participate in them.");
                return(responseMessage);
            }
            if (userInProject.Role < UserRoles.ProjectManager)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Insufficient permissions.");
                return(responseMessage);
            }

            var tasksCollection = mongoDb.GetCollection <ProjectTask>(MongoCollections.Tasks);

            task.UsersParticipating = new List <string>();
            tasksCollection.Save(task);

            return(responseMessage = this.Request.CreateResponse(HttpStatusCode.OK, new { Posted = "Success" }));
        }
        public HttpResponseMessage PartInProject(UserInProject postData, [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);
            }

            var queriedOrganization = GenericQueries.CheckOrganizationName(postData.OrganizationName, mongoDb);

            if (queriedOrganization == null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid organization name.");
                return(responseMessage);
            }

            MongoCollection <UsersOrganizations> usersAndOrganizations = mongoDb.GetCollection <UsersOrganizations>(MongoCollections.UsersInOrganizations);
            UsersOrganizations userAssigning;

            GenericQueries.CheckUser(authKey, queriedOrganization, usersAndOrganizations, out userAssigning, UserRoles.OrganizationManager, db);
            if (userAssigning == null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Insufficient permissions.");
                return(responseMessage);
            }

            UsersOrganizations userAssigned = usersAndOrganizations.FindOneAs <UsersOrganizations>(Query.EQ("Username", postData.Username));

            if (userAssigned == null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "No such user in organization.");
                return(responseMessage);
            }

            //todo check if assigned user isnt already in project
            MongoCollection <Project> projectsCollection = mongoDb.GetCollection <Project>(MongoCollections.Projects);
            Project project;

            project = projectsCollection.FindOneAs <Project>(Query.EQ("Name", postData.ProjectName));
            if (project == null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid project.");
                return(responseMessage);
            }
            MongoCollection <UsersProjects> usersProjects = mongoDb.GetCollection <UsersProjects>(MongoCollections.UsersInProjects);
            UsersProjects possibleRelation = usersProjects.AsQueryable <UsersProjects>()
                                             .FirstOrDefault(x => x.ProjectName == project.Name &&
                                                             x.Username == project.Name &&
                                                             x.OrganizationName == queriedOrganization.Name);

            if (possibleRelation != null)
            {
                responseMessage = this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "User already in project.");
                return(responseMessage);
            }

            CreateUserProjectRelation(userAssigned, project);
            HistoryController.RecordHistoryEntry(userAssigning.OrganizationName, userAssigning.Username,
                                                 string.Format("assigned {0} in {1}", userAssigned.Username, project.Name));

            return(responseMessage = this.Request.CreateResponse(HttpStatusCode.OK, new { Assigned = "Success" }));
        }
        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 }));
        }