refactor: share domain reference reader contracts

This commit is contained in:
jb
2026-09-19 10:02:28 -04:00
parent 240e16a258
commit 440540657a
+10 -80
View File
@@ -1,4 +1,12 @@
import type { ReferenceRepository } from '../../domain/model';
import type { ReferenceReaderHandle } from '../../domain/reference';
export type {
ReferenceRepository, ReferenceCategoryRecord, ReferenceGroupRecord,
ReferenceTypeRecord, ReferenceRegionRecord, ReferenceConstellationRecord,
ReferenceSystemRecord, ReferenceStationEvidence, ReferenceStationRecord,
ReferenceSearchOptions, ReferenceListOptions, ReferenceIdSelection,
ReferenceGroupSelection, ReferenceSystemSelection, ReferenceStationSelection,
ReferenceReader,
} from '../../domain/reference';
export const REFERENCE_SOURCES = ['reference-data', 'hoboleaks', 'esi-universe'] as const;
export type ReferenceSourceName = (typeof REFERENCE_SOURCES)[number];
@@ -141,84 +149,6 @@ export interface EsiUniversePayload {
stations?: Record<string, ReferenceStation>;
}
export interface ReferenceCategoryRecord {
id: number;
name: string;
published?: boolean;
}
export interface ReferenceGroupRecord {
id: number;
categoryId: number;
name: string;
published?: boolean;
}
export interface ReferenceTypeRecord {
id: number;
name: string;
categoryId: number;
groupId: number;
published?: boolean;
volume?: number;
}
export interface ReferenceRegionRecord { id: number; name: string | null; }
export interface ReferenceConstellationRecord { id: number; name: string | null; regionId: number | null; }
export interface ReferenceSystemRecord {
id: number;
name: string;
constellationId: number;
regionId: number | null;
x: number;
y: number;
z: number;
securityStatus: number;
securityClass: string | null;
}
export type ReferenceStationEvidence = 'verified' | 'system_listed';
export interface ReferenceStationRecord {
id: number;
systemId: number;
systemName: string | null;
regionId: number | null;
/** Evidence distinguishes authoritative station rows from system-list-only IDs. */
evidence: ReferenceStationEvidence;
/** Compatibility projection; true exactly when evidence is `verified`. */
sourceVerified: boolean;
name: string | null;
typeId: number | null;
ownerId: number | null;
x: number | null;
y: number | null;
z: number | null;
}
export interface ReferenceSearchOptions {
query: string;
categoryId?: number;
groupId?: number;
published?: boolean;
limit?: number;
offset?: number;
}
export interface ReferenceListOptions {
ids?: number[];
query?: string;
limit?: number;
offset?: number;
}
export type ReferenceIdSelection = number[] | ReferenceListOptions | undefined;
export type ReferenceGroupSelection = number[] | (ReferenceListOptions & { categoryId?: number }) | undefined;
export type ReferenceSystemSelection = number[] | (ReferenceListOptions & { constellationId?: number; regionId?: number }) | undefined;
export type ReferenceStationSelection = number[] | (ReferenceListOptions & { systemId?: number }) | undefined;
export interface ReferenceReader extends ReferenceRepository {
searchTypes(options: ReferenceSearchOptions): Promise<ReferenceTypeRecord[]>;
searchTypesByName(query: string, options?: Omit<ReferenceSearchOptions, 'query'>): Promise<ReferenceTypeRecord[]>;
categories(selection?: ReferenceIdSelection): Promise<ReferenceCategoryRecord[]>;
groups(selection?: ReferenceGroupSelection): Promise<ReferenceGroupRecord[]>;
regions(selection?: ReferenceIdSelection): Promise<ReferenceRegionRecord[]>;
constellations(selection?: ReferenceIdSelection): Promise<ReferenceConstellationRecord[]>;
systems(selection?: ReferenceSystemSelection): Promise<ReferenceSystemRecord[]>;
stations(selection?: ReferenceStationSelection): Promise<ReferenceStationRecord[]>;
}
export interface SourceCheck {
source: ReferenceSourceName;
checkedAt: string;
@@ -377,7 +307,7 @@ export interface SourceCheckResult {
error?: string;
}
export interface ReferenceSnapshot extends ReferenceReader {
export interface ReferenceSnapshot extends ReferenceReaderHandle {
close(): void;
readonly pinnedVersion: string;
}