mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2026-02-17 13:52:14 +01:00
# Description of Changes <!-- Please provide a summary of the changes, including: - What was changed - Why the change was made - Any challenges encountered Closes #(issue_number) --> --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing) for more details. --------- Co-authored-by: James Brunton <jbrunton96@gmail.com>
108 lines
2.8 KiB
TypeScript
108 lines
2.8 KiB
TypeScript
import apiClient from '@app/services/apiClient';
|
|
|
|
export interface Team {
|
|
id: number;
|
|
name: string;
|
|
userCount?: number;
|
|
}
|
|
|
|
export interface TeamMember {
|
|
id: number;
|
|
username: string;
|
|
email?: string;
|
|
roleName: string;
|
|
enabled: boolean;
|
|
team?: {
|
|
id: number;
|
|
name: string;
|
|
};
|
|
lastRequest?: Date | null;
|
|
}
|
|
|
|
export interface TeamDetailsResponse {
|
|
team: Team;
|
|
members: TeamMember[];
|
|
availableUsers: TeamMember[];
|
|
}
|
|
|
|
/**
|
|
* Team Management Service
|
|
* Provides functions to interact with team-related backend APIs
|
|
*/
|
|
export const teamService = {
|
|
/**
|
|
* Get all teams with user counts
|
|
*/
|
|
async getTeams(): Promise<Team[]> {
|
|
const response = await apiClient.get<{ teamsWithCounts: Team[] }>('/api/v1/proprietary/ui-data/teams');
|
|
return response.data.teamsWithCounts;
|
|
},
|
|
|
|
/**
|
|
* Get team details including members
|
|
*/
|
|
async getTeamDetails(teamId: number): Promise<any> {
|
|
const response = await apiClient.get(`/api/v1/proprietary/ui-data/teams/${teamId}`);
|
|
return response.data;
|
|
},
|
|
|
|
/**
|
|
* Create a new team
|
|
*/
|
|
async createTeam(name: string): Promise<void> {
|
|
const formData = new FormData();
|
|
formData.append('name', name);
|
|
await apiClient.post('/api/v1/team/create', formData, {
|
|
suppressErrorToast: true,
|
|
} as any);
|
|
},
|
|
|
|
/**
|
|
* Rename an existing team
|
|
*/
|
|
async renameTeam(teamId: number, newName: string): Promise<void> {
|
|
const formData = new FormData();
|
|
formData.append('teamId', teamId.toString());
|
|
formData.append('newName', newName);
|
|
await apiClient.post('/api/v1/team/rename', formData, {
|
|
suppressErrorToast: true,
|
|
} as any);
|
|
},
|
|
|
|
/**
|
|
* Delete a team (only if it has no members)
|
|
*/
|
|
async deleteTeam(teamId: number): Promise<void> {
|
|
const formData = new FormData();
|
|
formData.append('teamId', teamId.toString());
|
|
await apiClient.post('/api/v1/team/delete', formData, {
|
|
suppressErrorToast: true,
|
|
} as any);
|
|
},
|
|
|
|
/**
|
|
* Add a user to a team
|
|
*/
|
|
async addUserToTeam(teamId: number, userId: number): Promise<void> {
|
|
const formData = new FormData();
|
|
formData.append('teamId', teamId.toString());
|
|
formData.append('userId', userId.toString());
|
|
await apiClient.post('/api/v1/team/addUser', formData, {
|
|
suppressErrorToast: true,
|
|
} as any);
|
|
},
|
|
|
|
/**
|
|
* Move a user to a specific team (used when "removing" from a team - moves to Default)
|
|
*/
|
|
async moveUserToTeam(username: string, currentRole: string, teamId: number): Promise<void> {
|
|
const formData = new FormData();
|
|
formData.append('username', username);
|
|
formData.append('role', currentRole);
|
|
formData.append('teamId', teamId.toString());
|
|
await apiClient.post('/api/v1/user/admin/changeRole', formData, {
|
|
suppressErrorToast: true,
|
|
} as any);
|
|
},
|
|
};
|