import { API_BASE_URL } from "helpers/common.helper"; // services import { APIService } from "services/api.service"; import { TrackEventService } from "services/track_event.service"; // types import type { IUser, IProjectBulkAddFormData, IProjectMember, IProjectMemberInvitation } from "types"; const trackEventService = new TrackEventService(); export class ProjectMemberService extends APIService { constructor() { super(API_BASE_URL); } async fetchProjectMembers(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 bulkAddMembersToProject( workspaceSlug: string, projectId: string, data: IProjectBulkAddFormData, user: IUser | undefined ): Promise { return this.post(`/api/workspaces/${workspaceSlug}/projects/${projectId}/members/`, data) .then((response) => { trackEventService.trackProjectEvent( { workspaceId: response?.data?.workspace?.id, workspaceSlug, projectId, projectName: response?.data?.project?.name, memberEmail: response?.data?.member?.email, }, "PROJECT_MEMBER_INVITE", user as IUser ); return 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; }); } 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.patch(`/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 fetchProjectInvitations(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; }); } }