Stirling-PDF/frontend/src/core/services/teamService.ts
Anthony Stirling d0c5d74471
settingsPage Init selfhost (#4734)
# 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>
2025-10-28 14:47:41 +00:00

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);
},
};