mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-29 18:13:47 +00:00
Replace the user-facing 'RemnaWave' spelling with 'Remnawave' across all locale values (en/ru/zh/fa, 67 strings), t() display fallbacks, and code comments. Translation keys (refreshRemnaWave, ...) and code identifiers (RemnaWaveService, setRemnaWaveUuid, ...) are left untouched.
143 lines
3.6 KiB
TypeScript
143 lines
3.6 KiB
TypeScript
import apiClient from './client';
|
|
|
|
// Types
|
|
export interface PromoGroupInfo {
|
|
id: number;
|
|
name: string;
|
|
is_selected: boolean;
|
|
}
|
|
|
|
export interface ServerListItem {
|
|
id: number;
|
|
squad_uuid: string;
|
|
display_name: string;
|
|
original_name: string | null;
|
|
country_code: string | null;
|
|
is_available: boolean;
|
|
is_trial_eligible: boolean;
|
|
price_kopeks: number;
|
|
price_rubles: number;
|
|
max_users: number | null;
|
|
current_users: number;
|
|
sort_order: number;
|
|
is_full: boolean;
|
|
availability_status: string;
|
|
created_at: string;
|
|
}
|
|
|
|
export interface ServerListResponse {
|
|
servers: ServerListItem[];
|
|
total: number;
|
|
}
|
|
|
|
export interface ServerDetail {
|
|
id: number;
|
|
squad_uuid: string;
|
|
display_name: string;
|
|
original_name: string | null;
|
|
country_code: string | null;
|
|
description: string | null;
|
|
is_available: boolean;
|
|
is_trial_eligible: boolean;
|
|
price_kopeks: number;
|
|
price_rubles: number;
|
|
max_users: number | null;
|
|
current_users: number;
|
|
sort_order: number;
|
|
is_full: boolean;
|
|
availability_status: string;
|
|
promo_groups: PromoGroupInfo[];
|
|
active_subscriptions: number;
|
|
tariffs_using: string[];
|
|
created_at: string;
|
|
updated_at: string | null;
|
|
}
|
|
|
|
export interface ServerUpdateRequest {
|
|
display_name?: string;
|
|
description?: string;
|
|
country_code?: string;
|
|
is_available?: boolean;
|
|
is_trial_eligible?: boolean;
|
|
price_kopeks?: number;
|
|
max_users?: number;
|
|
sort_order?: number;
|
|
promo_group_ids?: number[];
|
|
}
|
|
|
|
export interface ServerToggleResponse {
|
|
id: number;
|
|
is_available: boolean;
|
|
message: string;
|
|
}
|
|
|
|
export interface ServerTrialToggleResponse {
|
|
id: number;
|
|
is_trial_eligible: boolean;
|
|
message: string;
|
|
}
|
|
|
|
export interface ServerStats {
|
|
id: number;
|
|
display_name: string;
|
|
squad_uuid: string;
|
|
current_users: number;
|
|
max_users: number | null;
|
|
active_subscriptions: number;
|
|
trial_subscriptions: number;
|
|
usage_percent: number | null;
|
|
}
|
|
|
|
export interface ServerSyncResponse {
|
|
created: number;
|
|
updated: number;
|
|
removed: number;
|
|
message: string;
|
|
}
|
|
|
|
export const serversApi = {
|
|
// Get all servers
|
|
getServers: async (includeUnavailable = true): Promise<ServerListResponse> => {
|
|
const response = await apiClient.get('/cabinet/admin/servers', {
|
|
params: { include_unavailable: includeUnavailable },
|
|
});
|
|
return response.data;
|
|
},
|
|
|
|
// Get single server
|
|
getServer: async (serverId: number): Promise<ServerDetail> => {
|
|
const response = await apiClient.get(`/cabinet/admin/servers/${serverId}`);
|
|
return response.data;
|
|
},
|
|
|
|
// Update server
|
|
updateServer: async (serverId: number, data: ServerUpdateRequest): Promise<ServerDetail> => {
|
|
const response = await apiClient.put(`/cabinet/admin/servers/${serverId}`, data);
|
|
return response.data;
|
|
},
|
|
|
|
// Toggle server availability
|
|
toggleServer: async (serverId: number): Promise<ServerToggleResponse> => {
|
|
const response = await apiClient.post(`/cabinet/admin/servers/${serverId}/toggle`);
|
|
return response.data;
|
|
},
|
|
|
|
// Toggle trial eligibility
|
|
toggleTrial: async (serverId: number): Promise<ServerTrialToggleResponse> => {
|
|
const response = await apiClient.post(`/cabinet/admin/servers/${serverId}/trial`);
|
|
return response.data;
|
|
},
|
|
|
|
// Get server stats
|
|
getServerStats: async (serverId: number): Promise<ServerStats> => {
|
|
const response = await apiClient.get(`/cabinet/admin/servers/${serverId}/stats`);
|
|
return response.data;
|
|
},
|
|
|
|
// Sync servers with Remnawave
|
|
syncServers: async (): Promise<ServerSyncResponse> => {
|
|
const response = await apiClient.post('/cabinet/admin/servers/sync');
|
|
return response.data;
|
|
},
|
|
};
|