SurfSense/surfsense_web/lib/apis/invites-api.service.ts

152 lines
4.2 KiB
TypeScript
Raw Normal View History

import {
2025-12-19 00:45:29 -08:00
type AcceptInviteRequest,
type AcceptInviteResponse,
acceptInviteRequest,
acceptInviteResponse,
type CreateInviteRequest,
type CreateInviteResponse,
2025-12-19 00:45:29 -08:00
createInviteRequest,
createInviteResponse,
type DeleteInviteRequest,
type DeleteInviteResponse,
2025-12-19 00:45:29 -08:00
deleteInviteRequest,
deleteInviteResponse,
type GetInviteInfoRequest,
type GetInviteInfoResponse,
2025-12-19 00:45:29 -08:00
type GetInvitesRequest,
type GetInvitesResponse,
getInviteInfoRequest,
getInviteInfoResponse,
getInvitesRequest,
getInvitesResponse,
2025-12-19 00:45:29 -08:00
type UpdateInviteRequest,
type UpdateInviteResponse,
updateInviteRequest,
updateInviteResponse,
} from "@/contracts/types/invites.types";
import { ValidationError } from "@/lib/error";
import { baseApiService } from "./base-api.service";
class InvitesApiService {
/**
* Create a new invite
*/
createInvite = async (request: CreateInviteRequest) => {
const parsedRequest = createInviteRequest.safeParse(request);
2025-12-19 00:45:29 -08:00
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
2025-12-19 00:45:29 -08:00
2025-12-20 05:10:47 -08:00
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.post(
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/invites`,
createInviteResponse,
{
body: parsedRequest.data.data,
}
);
};
/**
* Get all invites for a search space
*/
getInvites = async (request: GetInvitesRequest) => {
const parsedRequest = getInvitesRequest.safeParse(request);
2025-12-19 00:45:29 -08:00
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
2025-12-19 00:45:29 -08:00
2025-12-20 05:10:47 -08:00
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.get(
2025-12-19 00:45:29 -08:00
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/invites`,
getInvitesResponse
);
};
/**
* Update an invite
*/
updateInvite = async (request: UpdateInviteRequest) => {
const parsedRequest = updateInviteRequest.safeParse(request);
2025-12-19 00:45:29 -08:00
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
2025-12-19 00:45:29 -08:00
2025-12-20 05:10:47 -08:00
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.put(
2025-12-19 00:45:29 -08:00
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/invites/${parsedRequest.data.invite_id}`,
updateInviteResponse,
{
body: parsedRequest.data.data,
}
);
};
/**
* Delete an invite
*/
deleteInvite = async (request: DeleteInviteRequest) => {
const parsedRequest = deleteInviteRequest.safeParse(request);
2025-12-19 00:45:29 -08:00
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
2025-12-19 00:45:29 -08:00
2025-12-20 05:10:47 -08:00
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.delete(
2025-12-19 00:45:29 -08:00
`/api/v1/searchspaces/${parsedRequest.data.search_space_id}/invites/${parsedRequest.data.invite_id}`,
deleteInviteResponse
);
};
/**
* Get invite info by invite code
*/
getInviteInfo = async (request: GetInviteInfoRequest) => {
const parsedRequest = getInviteInfoRequest.safeParse(request);
2025-12-19 00:45:29 -08:00
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
2025-12-19 00:45:29 -08:00
2025-12-20 05:10:47 -08:00
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
return baseApiService.get(
2025-12-19 00:45:29 -08:00
`/api/v1/invites/${parsedRequest.data.invite_code}/info`,
getInviteInfoResponse
);
};
/**
* Accept an invite
*/
acceptInvite = async (request: AcceptInviteRequest) => {
const parsedRequest = acceptInviteRequest.safeParse(request);
2025-12-19 00:45:29 -08:00
if (!parsedRequest.success) {
console.error("Invalid request:", parsedRequest.error);
2025-12-19 00:45:29 -08:00
2025-12-20 05:10:47 -08:00
const errorMessage = parsedRequest.error.issues.map((issue) => issue.message).join(", ");
throw new ValidationError(`Invalid request: ${errorMessage}`);
}
2025-12-19 00:45:29 -08:00
return baseApiService.post(`/api/v1/invites/accept`, acceptInviteResponse, {
body: parsedRequest.data,
});
};
}
export const invitesApiService = new InvitesApiService();