import { IServerResponse } from '@/types/common.types'; import apiClient from '../api-client'; import { API_BASE_URL } from '@/shared/constants'; import { IOrganization, IOrganizationUser, IOrganizationTeam, IOrganizationUsersGetRequest, IOrganizationTeamGetRequest, IOrganizationProjectsGetResponse, IBillingConfigurationCountry, IBillingConfiguration, IBillingAccountInfo, IUpgradeSubscriptionPlanResponse, IPricingPlans, IBillingTransaction, IBillingChargesResponse, IStorageInfo, IFreePlanSettings, IBillingAccountStorage, } from '@/types/admin-center/admin-center.types'; import { IClient } from '@/types/client.types'; import { toQueryString } from '@/utils/toQueryString'; const rootUrl = `${API_BASE_URL}/admin-center`; export interface IOrganizationUserRequestParams { page: number; pageSize: number; sort: string; order: string; searchTerm: string; } export interface IOrganizationTeamRequestParams { index: number; size: number; field: string | null; order: string | null; search: string | null; } export const adminCenterApiService = { async getOrganizationDetails(): Promise> { const response = await apiClient.get>(`${rootUrl}/organization`); return response.data; }, async getOrganizationAdmins(): Promise> { const response = await apiClient.get>( `${rootUrl}/organization/admins` ); return response.data; }, async updateOrganizationName(body: IClient): Promise> { const response = await apiClient.put>( `${rootUrl}/organization`, body ); return response.data; }, async updateOwnerContactNumber(body: { contact_number: string; }): Promise> { const response = await apiClient.put>( `${rootUrl}/organization/owner/contact-number`, body ); return response.data; }, async getOrganizationUsers( requestParams: IOrganizationUserRequestParams ): Promise> { const params = new URLSearchParams({ index: requestParams.page.toString(), size: requestParams.pageSize.toString(), ...(requestParams.sort && { field: requestParams.sort }), ...(requestParams.order && { order: requestParams.order }), ...(requestParams.searchTerm && { search: requestParams.searchTerm }), }); const response = await apiClient.get>( `${rootUrl}/organization/users?${params}` ); return response.data; }, async getOrganizationTeams( requestParams: IOrganizationTeamRequestParams ): Promise> { const params = new URLSearchParams({ index: requestParams.index.toString(), size: requestParams.size.toString(), ...(requestParams.field && { field: requestParams.field }), ...(requestParams.order && { order: requestParams.order }), ...(requestParams.search && { search: requestParams.search }), }); const response = await apiClient.get>( `${rootUrl}/organization/teams?${params}` ); return response.data; }, async getOrganizationTeam(team_id: string): Promise> { const response = await apiClient.get>( `${rootUrl}/organization/team/${team_id}` ); return response.data; }, async updateTeam( team_id: string, body: {name: string, teamMembers: IOrganizationUser[]} ): Promise> { const response = await apiClient.put>( `${rootUrl}/organization/team/${team_id}`, body ); return response.data; }, async deleteTeam(id: string): Promise> { const response = await apiClient.delete>( `${rootUrl}/organization/team/${id}` ); return response.data; }, async removeTeamMember(team_member_id: string, team_id: string): Promise> { const response = await apiClient.put>( `${rootUrl}/organization/team-member/${team_member_id}`, { teamId: team_id } ); return response.data; }, async getOrganizationProjects( requestParams: IOrganizationTeamRequestParams ): Promise> { const params = new URLSearchParams({ index: requestParams.index.toString(), size: requestParams.size.toString(), ...(requestParams.field && { field: requestParams.field }), ...(requestParams.order && { order: requestParams.order }), ...(requestParams.search && { search: requestParams.search }), }); const response = await apiClient.get>( `${rootUrl}/organization/projects?${params}` ); return response.data; }, // Billing - Configuration async getCountries(): Promise> { const response = await apiClient.get>( `${rootUrl}/billing/countries` ); return response.data; }, async getBillingConfiguration(): Promise> { const response = await apiClient.get>( `${rootUrl}/billing/configuration` ); return response.data; }, async updateBillingConfiguration(body: IBillingConfiguration): Promise> { const response = await apiClient.put>( `${rootUrl}/billing/configuration`, body ); return response.data; }, // Billing - Current Bill async getCharges(): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/charges`); return response.data; }, async getTransactions(): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/transactions`); return response.data; }, async getBillingAccountInfo(): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/info`); return response.data; }, async getFreePlanSettings(): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/free-plan`); return response.data; }, async upgradePlan(plan: string): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/upgrade-plan${toQueryString({plan})}`); return response.data; }, async changePlan(plan: string): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/change-plan${toQueryString({plan})}`); return response.data; }, async getPlans(): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/plans`); return response.data; }, async getStorageInfo(): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/storage`); return response.data; }, async pauseSubscription(): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/pause-plan`); return response.data; }, async resumeSubscription(): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/resume-plan`); return response.data; }, async cancelSubscription(): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/cancel-plan`); return response.data; }, async addMoreSeats(totalSeats: number): Promise> { const response = await apiClient.post>(`${rootUrl}/billing/purchase-more-seats`, {seatCount: totalSeats}); return response.data; }, async redeemCode(code: string): Promise> { const response = await apiClient.post>(`${rootUrl}/billing/redeem`, { code, }); return response.data; }, async getAccountStorage(): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/account-storage`); return response.data; }, async switchToFreePlan(teamId: string): Promise> { const response = await apiClient.get>(`${rootUrl}/billing/switch-to-free-plan/${teamId}`); return response.data; }, };