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