// services import APIService from "services/api.service"; import trackEventServices from "services/track-event.service"; const { NEXT_PUBLIC_API_BASE_URL } = process.env; // types import { IWorkspace, IWorkspaceMember, IWorkspaceMemberInvitation, ILastActiveWorkspaceDetails, IAppIntegrations, IWorkspaceIntegrations, IWorkspaceSearchResults, } from "types"; const trackEvent = process.env.NEXT_PUBLIC_TRACK_EVENTS === "true" || process.env.NEXT_PUBLIC_TRACK_EVENTS === "1"; class WorkspaceService extends APIService { constructor() { super(NEXT_PUBLIC_API_BASE_URL || "http://localhost:8000"); } async userWorkspaces(): Promise { return this.get("/api/users/me/workspaces/") .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getWorkspace(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/`) .then((response) => response?.data) .catch((error) => { throw error?.response; }); } async createWorkspace(data: Partial): Promise { return this.post("/api/workspaces/", data) .then((response) => { if (trackEvent) trackEventServices.trackCreateWorkspaceEvent(response.data); return response?.data; }) .catch((error) => { throw error?.response?.data; }); } async updateWorkspace(workspaceSlug: string, data: Partial): Promise { return this.patch(`/api/workspaces/${workspaceSlug}/`, data) .then((response) => { if (trackEvent) trackEventServices.trackUpdateWorkspaceEvent(response.data); return response?.data; }) .catch((error) => { throw error?.response?.data; }); } async deleteWorkspace(workspaceSlug: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/`) .then((response) => { if (trackEvent) trackEventServices.trackDeleteWorkspaceEvent({ workspaceSlug }); return response?.data; }) .catch((error) => { throw error?.response?.data; }); } async inviteWorkspace(workspaceSlug: string, data: any): Promise { return this.post(`/api/workspaces/${workspaceSlug}/invite/`, data) .then((response) => { if (trackEvent) trackEventServices.trackWorkspaceUserInviteEvent(response.data); return response?.data; }) .catch((error) => { throw error?.response?.data; }); } async joinWorkspace(workspaceSlug: string, invitationId: string, data: any): Promise { return this.post( `/api/users/me/invitations/workspaces/${workspaceSlug}/${invitationId}/join/`, data, { headers: {}, } ) .then((response) => { if (trackEvent) trackEventServices.trackWorkspaceUserJoinEvent(response.data); return response?.data; }) .catch((error) => { throw error?.response?.data; }); } async joinWorkspaces(data: any): Promise { return this.post("/api/users/me/invitations/workspaces/", data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getLastActiveWorkspaceAndProjects(): Promise { return this.get("/api/users/last-visited-workspace/") .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async userWorkspaceInvitations(): Promise { return this.get("/api/users/me/invitations/workspaces/") .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async workspaceMembers(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/members/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async workspaceMemberMe(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/workspace-members/me/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async updateWorkspaceMember( workspaceSlug: string, memberId: string, data: Partial ): Promise { return this.put(`/api/workspaces/${workspaceSlug}/members/${memberId}/`, data) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async deleteWorkspaceMember(workspaceSlug: string, memberId: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/members/${memberId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async workspaceInvitations(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/invitations/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getWorkspaceInvitation(invitationId: string): Promise { return this.get(`/api/users/me/invitations/${invitationId}/`, { headers: {} }) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async deleteWorkspaceInvitations(workspaceSlug: string, invitationId: string): Promise { return this.delete(`/api/workspaces/${workspaceSlug}/invitations/${invitationId}/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async workspaceSlugCheck(slug: string): Promise { return this.get(`/api/workspace-slug-check/?slug=${slug}`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getIntegrations(): Promise { return this.get(`/api/integrations/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async getWorkspaceIntegrations(workspaceSlug: string): Promise { return this.get(`/api/workspaces/${workspaceSlug}/workspace-integrations/`) .then((response) => response?.data) .catch((error) => { throw error?.response?.data; }); } async deleteWorkspaceIntegration(workspaceSlug: string, integrationId: string): Promise { return this.delete( `/api/workspaces/${workspaceSlug}/workspace-integrations/${integrationId}/provider/` ) .then((res) => res?.data) .catch((error) => { throw error?.response?.data; }); } async searchWorkspace( workspaceSlug: string, projectId: string, query: string ): Promise { return this.get( `/api/workspaces/${workspaceSlug}/projects/${projectId}/search/?search=${query}` ) .then((res) => res?.data) .catch((error) => { throw error?.response?.data; }); } } export default new WorkspaceService();