bb-plane-fork/packages/services/src/workspace/member.service.ts
sriram veeraghanta 02d0ee3e0f
chore: add copyright (#8584)
* feat: adding new copyright info on all files

* chore: adding CI
2026-01-27 13:54:22 +05:30

98 lines
3.8 KiB
TypeScript

/**
* Copyright (c) 2023-present Plane Software, Inc. and contributors
* SPDX-License-Identifier: AGPL-3.0-only
* See the LICENSE file for details.
*/
import { API_BASE_URL } from "@plane/constants";
import type { IWorkspaceMemberMe, IWorkspaceMember, IUserProjectsRole } from "@plane/types";
import { APIService } from "../api.service";
/**
* Service class for managing workspace members
* Handles operations related to workspace membership, including member information,
* updates, deletions, and role management
* @extends {APIService}
*/
export class WorkspaceMemberService extends APIService {
/**
* Creates an instance of WorkspaceMemberService
* @param {string} baseUrl - The base URL for API requests
*/
constructor(BASE_URL?: string) {
super(BASE_URL || API_BASE_URL);
}
/**
* Retrieves current user's information for a specific workspace
* @param {string} workspaceSlug - The unique slug identifier for the workspace
* @returns {Promise<IWorkspaceMemberMe>} Promise resolving to current user's workspace member information
* @throws {Error} If the API request fails
*/
async myInfo(workspaceSlug: string): Promise<IWorkspaceMemberMe> {
return this.get(`/api/workspaces/${workspaceSlug}/workspace-members/me/`)
.then((response) => response?.data)
.catch((error) => {
throw error?.response;
});
}
/**
* Retrieves all members of a specific workspace
* @param {string} workspaceSlug - The unique slug identifier for the workspace
* @returns {Promise<IWorkspaceMember[]>} Promise resolving to array of workspace members
* @throws {Error} If the API request fails
*/
async list(workspaceSlug: string): Promise<IWorkspaceMember[]> {
return this.get(`/api/workspaces/${workspaceSlug}/members/`)
.then((response) => response?.data)
.catch((error) => {
throw error?.response?.data;
});
}
/**
* Updates a workspace member's information
* @param {string} workspaceSlug - The unique slug identifier for the workspace
* @param {string} memberId - The unique identifier for the member
* @param {Partial<IWorkspaceMember>} data - Updated member data
* @returns {Promise<IWorkspaceMember>} Promise resolving to the updated member information
* @throws {Error} If the API request fails
*/
async update(workspaceSlug: string, memberId: string, data: Partial<IWorkspaceMember>): Promise<IWorkspaceMember> {
return this.patch(`/api/workspaces/${workspaceSlug}/members/${memberId}/`, data)
.then((response) => response?.data)
.catch((error) => {
throw error?.response?.data;
});
}
/**
* Removes a member from a workspace
* @param {string} workspaceSlug - The unique slug identifier for the workspace
* @param {string} memberId - The unique identifier for the member to remove
* @returns {Promise<any>} Promise resolving to the deletion response
* @throws {Error} If the API request fails
*/
async destroy(workspaceSlug: string, memberId: string): Promise<any> {
return this.delete(`/api/workspaces/${workspaceSlug}/members/${memberId}/`)
.then((response) => response?.data)
.catch((error) => {
throw error?.response?.data;
});
}
/**
* Retrieves the current user's project roles within a workspace
* @param {string} workspaceSlug - The unique slug identifier for the workspace
* @returns {Promise<IUserProjectsRole>} Promise resolving to user's project roles
* @throws {Error} If the API request fails
*/
async getWorkspaceUserProjectsRole(workspaceSlug: string): Promise<IUserProjectsRole> {
return this.get(`/api/users/me/workspaces/${workspaceSlug}/project-roles/`)
.then((response) => response?.data)
.catch((error) => {
throw error?.response?.data;
});
}
}