127 lines
4.6 KiB
TypeScript
127 lines
4.6 KiB
TypeScript
import { fetchJson } from '../../auth/api-client';
|
|
import type {
|
|
HydrogenKpi, HydrogenStationTop, HydrogenRegionShare, HydrogenMonthlyPoint, HydrogenDailyRow,
|
|
HydrogenOrderResponse,
|
|
HydrogenCustomerRow, HydrogenStationFull,
|
|
ElectricKpi, ElectricDailyRow, ElectricMonthGroup,
|
|
ElectricChargeOrderResponse,
|
|
EtcOverviewResponse,
|
|
EtcBillResponse, EtcTollRecordResponse,
|
|
CustomerType, DateQuickPick, ElectricVehicleScope,
|
|
} from './types';
|
|
|
|
const BASE = '/api/energy';
|
|
|
|
export interface HydrogenOverviewResponse {
|
|
kpi: HydrogenKpi;
|
|
top5: HydrogenStationTop[];
|
|
regions: HydrogenRegionShare[];
|
|
monthly: HydrogenMonthlyPoint[];
|
|
customers: HydrogenCustomerRow[];
|
|
stations: HydrogenStationFull[];
|
|
availableYears: number[];
|
|
year: number;
|
|
}
|
|
|
|
export function fetchHydrogenOverview(year?: number, force = false): Promise<HydrogenOverviewResponse> {
|
|
const params = new URLSearchParams();
|
|
if (year) params.set('year', String(year));
|
|
if (force) params.set('force', '1');
|
|
const q = params.toString();
|
|
return fetchJson<HydrogenOverviewResponse>(`${BASE}/hydrogen/overview${q ? `?${q}` : ''}`);
|
|
}
|
|
|
|
export interface HydrogenDailyQuery {
|
|
range?: DateQuickPick;
|
|
startDate?: string;
|
|
endDate?: string;
|
|
stationId?: number;
|
|
customerName?: string;
|
|
}
|
|
|
|
export function fetchHydrogenDaily(query: HydrogenDailyQuery, customer: CustomerType): Promise<HydrogenDailyRow[]> {
|
|
const q = new URLSearchParams({ customer });
|
|
if (query.range) q.set('range', query.range);
|
|
if (query.startDate) q.set('startDate', query.startDate);
|
|
if (query.endDate) q.set('endDate', query.endDate);
|
|
if (query.stationId !== undefined) q.set('stationId', String(query.stationId));
|
|
if (query.customerName) q.set('customerName', query.customerName);
|
|
return fetchJson<HydrogenDailyRow[]>(`${BASE}/hydrogen/daily?${q.toString()}`);
|
|
}
|
|
|
|
export interface HydrogenOrderQuery {
|
|
date: string;
|
|
customer: CustomerType;
|
|
stationId?: number;
|
|
customerName?: string;
|
|
page?: number;
|
|
limit?: number;
|
|
}
|
|
|
|
export function fetchHydrogenOrders(query: HydrogenOrderQuery): Promise<HydrogenOrderResponse> {
|
|
const params = new URLSearchParams({
|
|
date: query.date,
|
|
customer: query.customer,
|
|
page: String(query.page ?? 1),
|
|
limit: String(query.limit ?? 20),
|
|
});
|
|
if (query.stationId !== undefined) params.set('stationId', String(query.stationId));
|
|
if (query.customerName) params.set('customerName', query.customerName);
|
|
return fetchJson<HydrogenOrderResponse>(`${BASE}/hydrogen/orders?${params}`);
|
|
}
|
|
|
|
export interface ElectricOverviewResponse {
|
|
kpi: ElectricKpi;
|
|
trend: ElectricDailyRow[];
|
|
latestRecordAt: string | null;
|
|
}
|
|
|
|
export function fetchElectricOverview(): Promise<ElectricOverviewResponse> {
|
|
return fetchJson<ElectricOverviewResponse>(`${BASE}/electric/overview`);
|
|
}
|
|
|
|
export function fetchElectricMonthly(customer: ElectricVehicleScope, query: HydrogenDailyQuery = { range: 'last15' }): Promise<ElectricMonthGroup[]> {
|
|
const q = new URLSearchParams({ customer });
|
|
if (query.range) q.set('range', query.range);
|
|
if (query.startDate) q.set('startDate', query.startDate);
|
|
if (query.endDate) q.set('endDate', query.endDate);
|
|
return fetchJson<ElectricMonthGroup[]>(`${BASE}/electric/monthly?${q.toString()}`);
|
|
}
|
|
|
|
export function fetchElectricOrders(date: string, customer: ElectricVehicleScope): Promise<ElectricChargeOrderResponse> {
|
|
const q = new URLSearchParams({ date, customer });
|
|
return fetchJson<ElectricChargeOrderResponse>(`${BASE}/electric/orders?${q.toString()}`);
|
|
}
|
|
|
|
export function fetchEtcOverview(force = false): Promise<EtcOverviewResponse> {
|
|
return fetchJson<EtcOverviewResponse>(`${BASE}/etc/overview${force ? '?force=1' : ''}`);
|
|
}
|
|
|
|
export interface EtcListQuery {
|
|
page?: number;
|
|
limit?: number;
|
|
startDate?: string;
|
|
endDate?: string;
|
|
search?: string;
|
|
}
|
|
|
|
function etcListParams(query: EtcListQuery): string {
|
|
const params = new URLSearchParams();
|
|
if (query.page) params.set('page', String(query.page));
|
|
if (query.limit) params.set('limit', String(query.limit));
|
|
if (query.startDate) params.set('startDate', query.startDate);
|
|
if (query.endDate) params.set('endDate', query.endDate);
|
|
if (query.search) params.set('search', query.search);
|
|
return params.toString();
|
|
}
|
|
|
|
export function fetchEtcRecords(query: EtcListQuery): Promise<EtcTollRecordResponse> {
|
|
const params = etcListParams(query);
|
|
return fetchJson<EtcTollRecordResponse>(`${BASE}/etc/records${params ? `?${params}` : ''}`);
|
|
}
|
|
|
|
export function fetchEtcBills(query: EtcListQuery): Promise<EtcBillResponse> {
|
|
const params = etcListParams(query);
|
|
return fetchJson<EtcBillResponse>(`${BASE}/etc/bills${params ? `?${params}` : ''}`);
|
|
}
|