Пример #1
0
        public async Task <IActionResult> ForkProjectWithoutBlob([FromForm] ProjectForkVM formdata)
        {
            // Find User
            var user = await _dbContext.Users.FindAsync(formdata.UserID);

            if (user == null)
            {
                return(NotFound(new { message = "User Not Found" }));
            }

            // Find Project
            var project = await _dbContext.Projects.FindAsync(formdata.ProjectID);

            if (project == null)
            {
                return(NotFound(new { message = "Project Not Found" }));
            }

            // Check If Project Already Exist
            var checkProject = _dbContext.Projects
                               .SingleOrDefault(p => p.ProjectUsers.Any(aup =>
                                                                        aup.User.Id == formdata.UserID &&
                                                                        aup.Project.Name == project.Name &&
                                                                        aup.UserRole == "owner"));

            // If Conflict If Project Found
            if (checkProject != null)
            {
                return(Conflict(new { message = "Project Already Exist" }));
            }

            // Create Project
            var newProject = new Project
            {
                Name                = project.Name,
                Visibility          = project.Visibility,
                Description         = project.Description,
                DateCreated         = DateTimeOffset.UtcNow,
                LastUpdated         = DateTimeOffset.UtcNow,
                Route               = user.UserName + "/" + project.Name,
                ForkedFromProjectID = project.ProjectID,
            };

            // Add Project And Save Change
            await _dbContext.Projects.AddAsync(newProject);

            await _dbContext.SaveChangesAsync();

            // Add ProjectUser And Save Change
            await _dbContext.AddAsync(
                new ProjectUser
            {
                UserID      = user.Id,
                ProjectID   = newProject.ProjectID,
                UserRole    = "owner",
                IsFollowing = true
            }
                );

            await _dbContext.SaveChangesAsync();

            // Return Ok Request
            return(Ok(new
            {
                result = newProject,
                message = "Project Successfully Forked"
            }));
        }
Пример #2
0
        public async Task <IActionResult> ForkProject([FromForm] ProjectForkVM formdata)
        {
            // Find User
            var user = await _dbContext.Users.FindAsync(formdata.UserID);

            if (user == null)
            {
                return(NotFound(new { message = "User Not Found" }));
            }

            // Find Project
            var project = await _dbContext.Projects.FindAsync(formdata.ProjectID);

            if (project == null)
            {
                return(NotFound(new { message = "Project Not Found" }));
            }

            // Check If Project Already Exist
            var checkProject = _dbContext.Projects
                               .SingleOrDefault(p => p.ProjectUsers.Any(aup =>
                                                                        aup.User.Id == formdata.UserID &&
                                                                        aup.Project.Name == project.Name &&
                                                                        aup.UserRole == "owner"));

            // If Conflict If Project Found
            if (checkProject != null)
            {
                return(Conflict(new { message = "Project Already Exist" }));
            }

            // Create Project
            var newProject = new Project
            {
                Name                = project.Name,
                Visibility          = project.Visibility,
                Description         = project.Description,
                DateCreated         = DateTimeOffset.UtcNow,
                LastUpdated         = DateTimeOffset.UtcNow,
                Route               = user.UserName + "/" + project.Name,
                ForkedFromProjectID = project.ProjectID,
            };

            // Add Project And Save Change
            await _dbContext.Projects.AddAsync(newProject);

            await _dbContext.SaveChangesAsync();

            // Add ProjectUser And Save Change
            await _dbContext.AddAsync(
                new ProjectUser
            {
                UserID      = user.Id,
                ProjectID   = newProject.ProjectID,
                UserRole    = "owner",
                IsFollowing = true
            }
                );

            await _dbContext.SaveChangesAsync();

            // Add BlobFiles
            for (int i = 0; i < formdata.BlobFilesID.Length; i++)
            {
                // Find File
                var file = await _dbContext.BlobFiles.FindAsync(formdata.BlobFilesID[i]);

                // Create new file
                await _dbContext.BlobFiles.AddAsync(
                    new BlobFile
                {
                    Container    = file.Container,
                    Directory    = file.Directory,
                    Name         = file.Name,
                    Extension    = file.Extension,
                    Size         = file.Size,
                    Uri          = file.Uri,
                    DateCreated  = DateTimeOffset.UtcNow,
                    LastModified = DateTimeOffset.UtcNow,
                    User         = user,
                    UserID       = user.Id,
                    Project      = newProject,
                    ProjectID    = newProject.ProjectID,
                }
                    );

                //Save Change
                await _dbContext.SaveChangesAsync();
            }

            // Return Ok Request
            return(Ok(new
            {
                result = newProject,
                message = "Project Successfully Forked"
            }));
        }