-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathProjects.ts
More file actions
87 lines (76 loc) · 2.77 KB
/
Projects.ts
File metadata and controls
87 lines (76 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { BaseResource } from "./BaseResource";
import { Configuration } from "../Configuration";
import { Project, CreateProject, UpdateProject, ListProjectsParams } from "../models/Project";
import { PaginatedResponse } from "../models/common";
import { User } from "../models/User";
import { ProjectFeatures, UpdateProjectFeatures } from "../models/ProjectFeatures";
/**
* Project API resource
* Handles all project-related operations
*/
export class Projects extends BaseResource {
constructor(config: Configuration) {
super(config);
}
/**
* Create a new project
*/
async create(workspaceSlug: string, createProject: CreateProject): Promise<Project> {
if (!createProject.identifier) {
createProject.identifier = createProject.name.toUpperCase().replace(/ /g, "").slice(0, 5);
}
return this.post<Project>(`/workspaces/${workspaceSlug}/projects/`, createProject);
}
/**
* Retrieve a project by ID
*/
async retrieve(workspaceSlug: string, projectId: string): Promise<Project> {
return this.get<Project>(`/workspaces/${workspaceSlug}/projects/${projectId}/`);
}
/**
* Update a project
*/
async update(workspaceSlug: string, projectId: string, updateProject: UpdateProject): Promise<Project> {
return this.patch<Project>(`/workspaces/${workspaceSlug}/projects/${projectId}/`, updateProject);
}
/**
* Delete a project
*/
async delete(workspaceSlug: string, projectId: string): Promise<void> {
return this.httpDelete(`/workspaces/${workspaceSlug}/projects/${projectId}/`);
}
/**
* List projects with optional filtering
*/
async list(workspaceSlug: string, params?: ListProjectsParams): Promise<PaginatedResponse<Project>> {
return this.get<PaginatedResponse<Project>>(`/workspaces/${workspaceSlug}/projects/`, params);
}
/**
* Get project members
*/
async getMembers(workspaceSlug: string, projectId: string): Promise<User[]> {
return this.get<User[]>(`/workspaces/${workspaceSlug}/projects/${projectId}/members/`);
}
/**
* Get total work logs for a project
*/
async getTotalWorkLogs(workspaceSlug: string, projectId: string): Promise<any> {
return this.get<any>(`/workspaces/${workspaceSlug}/projects/${projectId}/work-logs/total/`);
}
/**
* Retrieve project features
*/
async retrieveFeatures(workspaceSlug: string, projectId: string): Promise<ProjectFeatures> {
return this.get<ProjectFeatures>(`/workspaces/${workspaceSlug}/projects/${projectId}/features/`);
}
/**
* Update project features
*/
async updateFeatures(
workspaceSlug: string,
projectId: string,
updateFeatures: UpdateProjectFeatures
): Promise<ProjectFeatures> {
return this.patch<ProjectFeatures>(`/workspaces/${workspaceSlug}/projects/${projectId}/features/`, updateFeatures);
}
}