Skip to content

Commit

Permalink
update copy project logic
Browse files Browse the repository at this point in the history
  • Loading branch information
itsmostafa committed Feb 13, 2025
1 parent 40463bd commit 08b396f
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
28 changes: 27 additions & 1 deletion api/src/routes/projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@

@router.get("/", dependencies=[Depends(JWTBearer())])
async def get_projects(token: str = Depends(JWTBearer())):
"""Get all projects by user id."""
token_data = decode_jwt(token)
return project_document().all({"user_ids": token_data["user_id"]})


@router.post("/project/create/", dependencies=[Depends(JWTBearer())])
async def create_project(project: ProjectModel, token: str = Depends(JWTBearer())):
"""Register a new user."""
"""Create a new project."""

payload = project.model_dump()
token_data = decode_jwt(token)
Expand All @@ -36,6 +37,31 @@ async def create_project(project: ProjectModel, token: str = Depends(JWTBearer()
return project_id


@router.post("/project/{project_id}/copy/", dependencies=[Depends(JWTBearer())])
async def copy_project(
project_id: str, project: ProjectModel, token: str = Depends(JWTBearer())
):
"""Create a new project from an existing project."""

payload = project.model_dump()
token_data = decode_jwt(token)
payload["user_ids"] = [token_data["user_id"]]
new_project_id = project_document().create(payload)
case_documents = case_document().all({"project_id": project_id})

# Generate all cases from the existing project
for case in case_documents:
case_document().create(
{
"project_id": new_project_id,
"name": case["name"],
"diagram_data": case["diagram_data"],
}
)

return new_project_id


@router.get("/project/{project_id}/", dependencies=[Depends(JWTBearer())])
async def get_project(project_id: str, token: str = Depends(JWTBearer())):
"""Get a project."""
Expand Down
7 changes: 6 additions & 1 deletion web/src/app/components/projects/projects.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,14 @@ export class ProjectsComponent implements OnInit {
}

copyProject(project: Project): void {
if (!project._id) {
console.error('Cannot delete project without ID');
return;
}

// Append " (copy)" to the original project name and create a new project
const copyName = project.name + ' (copy)';
this.projectService.createProject({ name: copyName }).subscribe({
this.projectService.copyProject(project._id, { name: copyName }).subscribe({
next: () => {
// Refresh the projects component after copying the project
this.loadProjects();
Expand Down
5 changes: 5 additions & 0 deletions web/src/app/services/project.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ export class ProjectService {
return this.http.post<Project>(`${this.apiUrl}/project/create/`, project, { headers: this.getAuthHeaders() });
}

// Copy an existing project
copyProject(projectId: string, project: Project): Observable<Project> {
return this.http.post<Project>(`${this.apiUrl}/project/${projectId}/copy/`, project, { headers: this.getAuthHeaders() });
}

// Fetch a specific project by ID
getProjectById(projectId: string): Observable<Project> {
return this.http.get<Project>(`${this.apiUrl}/project/${projectId}/`, { headers: this.getAuthHeaders() });
Expand Down

0 comments on commit 08b396f

Please sign in to comment.