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