Files
cloud-server/src/repositories/index.ts
kappa a2133ae5c9 feat: KRW 가격 지원 및 GPU/G8/VPU 인스턴스 추가
## KRW 가격 기능
- pricing 테이블에 hourly_price_krw, monthly_price_krw 컬럼 추가
- 부가세 10% + 영업이익 10% + 환율 적용 (기본 1450원)
- 시간당: 1원 단위 반올림 (최소 1원)
- 월간: 100원 단위 반올림 (최소 100원)
- 환율/부가세/영업이익률 환경변수로 분리 (배포 없이 변경 가능)

## GPU/G8/VPU 인스턴스 지원
- gpu_instances, gpu_pricing 테이블 추가
- g8_instances, g8_pricing 테이블 추가
- vpu_instances, vpu_pricing 테이블 추가
- Linode/Vultr 커넥터에 GPU 동기화 로직 추가

## 환경변수 추가
- KRW_EXCHANGE_RATE: 환율 (기본 1450)
- KRW_VAT_RATE: 부가세율 (기본 1.1)
- KRW_MARKUP_RATE: 영업이익률 (기본 1.1)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 18:57:51 +09:00

102 lines
3.3 KiB
TypeScript

/**
* Repositories Index
* Export all repository classes for easy importing
*/
export { BaseRepository } from './base';
export { ProvidersRepository } from './providers';
export { RegionsRepository } from './regions';
export { InstancesRepository } from './instances';
export { PricingRepository } from './pricing';
export { GpuInstancesRepository } from './gpu-instances';
export { GpuPricingRepository } from './gpu-pricing';
export { G8InstancesRepository } from './g8-instances';
export { G8PricingRepository } from './g8-pricing';
export { VpuInstancesRepository } from './vpu-instances';
export { VpuPricingRepository } from './vpu-pricing';
import { ProvidersRepository } from './providers';
import { RegionsRepository } from './regions';
import { InstancesRepository } from './instances';
import { PricingRepository } from './pricing';
import { GpuInstancesRepository } from './gpu-instances';
import { GpuPricingRepository } from './gpu-pricing';
import { G8InstancesRepository } from './g8-instances';
import { G8PricingRepository } from './g8-pricing';
import { VpuInstancesRepository } from './vpu-instances';
import { VpuPricingRepository } from './vpu-pricing';
import type { Env } from '../types';
/**
* Repository factory for creating repository instances
* Uses lazy singleton pattern to cache repository instances
*/
export class RepositoryFactory {
private _providers?: ProvidersRepository;
private _regions?: RegionsRepository;
private _instances?: InstancesRepository;
private _pricing?: PricingRepository;
private _gpuInstances?: GpuInstancesRepository;
private _gpuPricing?: GpuPricingRepository;
private _g8Instances?: G8InstancesRepository;
private _g8Pricing?: G8PricingRepository;
private _vpuInstances?: VpuInstancesRepository;
private _vpuPricing?: VpuPricingRepository;
constructor(private _db: D1Database, private _env?: Env) {}
/**
* Access to raw D1 database instance for advanced operations (e.g., batch queries)
*/
get db(): D1Database {
return this._db;
}
/**
* Access to environment variables for KRW pricing configuration
*/
get env(): Env | undefined {
return this._env;
}
get providers(): ProvidersRepository {
return this._providers ??= new ProvidersRepository(this.db);
}
get regions(): RegionsRepository {
return this._regions ??= new RegionsRepository(this.db);
}
get instances(): InstancesRepository {
return this._instances ??= new InstancesRepository(this.db);
}
get pricing(): PricingRepository {
return this._pricing ??= new PricingRepository(this.db, this._env);
}
get gpuInstances(): GpuInstancesRepository {
return this._gpuInstances ??= new GpuInstancesRepository(this.db);
}
get gpuPricing(): GpuPricingRepository {
return this._gpuPricing ??= new GpuPricingRepository(this.db, this._env);
}
get g8Instances(): G8InstancesRepository {
return this._g8Instances ??= new G8InstancesRepository(this.db);
}
get g8Pricing(): G8PricingRepository {
return this._g8Pricing ??= new G8PricingRepository(this.db, this._env);
}
get vpuInstances(): VpuInstancesRepository {
return this._vpuInstances ??= new VpuInstancesRepository(this.db);
}
get vpuPricing(): VpuPricingRepository {
return this._vpuPricing ??= new VpuPricingRepository(this.db, this._env);
}
}