// services import APIService from "services/api.service"; // types import type { GithubRepositoriesResponse, IProject, IProjectMember, IProjectMemberInvitation, ProjectViewTheme, } from "types"; const { NEXT_PUBLIC_API_BASE_URL } = process.env; class ProjectServices extends APIService { constructor() { super(NEXT_PUBLIC_API_BASE_URL || "http://localhost:8000"); } async createProject(workspaceSlug: string, data: Partial): Promise { return this.post(`/api/workspaces/${workspaceSlug}/projects/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response; }); } async checkProjectIdentifierAvailability(workspaceSlug: string, data: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/project-identifiers`, { params: { name: data, }, }) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getProjects(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getProject(workspaceSlug: string, projectId: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async updateProject( workspaceSlug: string, projectId: string, data: Partial ): Promise { return this.patch(`/api/workspaces/${workspaceSlug}/projects/${projectId}/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async deleteProject(workspaceSlug: string, projectId: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/projects/${projectId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async inviteProject(workspaceSlug: string, projectId: string, data: any): Promise { return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/members/add/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async joinProject(workspaceSlug: string, data: any): Promise { return this.post(`/api/workspaces/${workspaceSlug}/projects/join/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async joinProjects(data: any): Promise { return this.post("/api/users/me/invitations/projects/", data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async projectMembers(workspaceSlug: string, projectId: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/members/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async projectMemberMe(workspaceSlug: string, projectId: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/project-members/me/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getProjectMember( workspaceSlug: string, projectId: string, memberId: string ): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/members/${memberId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async updateProjectMember( workspaceSlug: string, projectId: string, memberId: string, data: Partial ): Promise { return this.put( `/api/workspaces/${workspaceSlug}/projects/${projectId}/members/${memberId}/`, data ) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async deleteProjectMember( workspaceSlug: string, projectId: string, memberId: string ): Promise { return this.delete( `/api/workspaces/${workspaceSlug}/projects/${projectId}/members/${memberId}/` ) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async projectInvitations( workspaceSlug: string, projectId: string ): Promise { return this.get(`/api/workspaces/${workspaceSlug}/projects/${projectId}/invitations/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async updateProjectInvitation( workspaceSlug: string, projectId: string, invitationId: string ): Promise { return this.put( `/api/workspaces/${workspaceSlug}/projects/${projectId}/invitations/${invitationId}/` ) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async deleteProjectInvitation( workspaceSlug: string, projectId: string, invitationId: string ): Promise { return this.delete( `/api/workspaces/${workspaceSlug}/projects/${projectId}/invitations/${invitationId}/` ) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async setProjectView( workspaceSlug: string, projectId: string, data: { view_props?: ProjectViewTheme; default_props?: ProjectViewTheme; } ): Promise { await this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/project-views/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getGithubRepositories( slug: string, workspaceIntegrationId: string ): Promise { return this.get( `/api/workspaces/${slug}/workspace-integrations/${workspaceIntegrationId}/github-repositories/` ) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async syncGiuthubRepository( slug: string, projectId: string, workspaceIntegrationId: string, data: { name: string; owner: string; repository_id: string; url: string; } ): Promise { return this.post( `/api/workspaces/${slug}/projects/${projectId}/workspace-integrations/${workspaceIntegrationId}/github-repository-sync/`, data ) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getProjectGithubRepository( workspaceSlug: string, projectId: string, integrationId: string ): Promise { return this.get( `/api/workspaces/${workspaceSlug}/projects/${projectId}/workspace-integrations/${integrationId}/github-repository-sync/` ) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } } export default new ProjectServices();