fix(admin-web): route parse/register through use-cases to satisfy no-restricted-imports

- ParsePackageUseCase.execute now accepts onProgress callback
- RegisterVersionUseCase added for the new /register endpoint
- use-upload.ts now imports only from application layer (no direct infra import)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-03-07 07:34:34 -08:00
parent 7c8b79161a
commit 5bce676903
2 changed files with 15 additions and 6 deletions

View File

@ -1,4 +1,4 @@
import type { IVersionRepository, UploadVersionInput, UpdateVersionInput } from '@/domain/repositories/version.repository.interface';
import type { IVersionRepository, UploadVersionInput, RegisterVersionInput, UpdateVersionInput } from '@/domain/repositories/version.repository.interface';
import type { AppType, AppPlatform } from '@/domain/entities';
import { versionRepository } from '@/infrastructure/repositories/version.repository';
@ -13,8 +13,16 @@ export class ListVersionsUseCase {
export class ParsePackageUseCase {
constructor(private readonly repo: IVersionRepository = versionRepository) {}
execute(file: File) {
return this.repo.parse(file);
// onProgress: 0-100 upload progress callback (for progress bar)
execute(file: File, onProgress?: (pct: number) => void) {
return this.repo.parse(file, onProgress);
}
}
export class RegisterVersionUseCase {
constructor(private readonly repo: IVersionRepository = versionRepository) {}
execute(input: RegisterVersionInput) {
return this.repo.register(input);
}
}
@ -49,6 +57,7 @@ export class DeleteVersionUseCase {
// ── Singleton instances (frontend DI) ───────────────────────
export const listVersionsUseCase = new ListVersionsUseCase();
export const parsePackageUseCase = new ParsePackageUseCase();
export const registerVersionUseCase = new RegisterVersionUseCase();
export const uploadVersionUseCase = new UploadVersionUseCase();
export const updateVersionUseCase = new UpdateVersionUseCase();
export const toggleVersionUseCase = new ToggleVersionUseCase();

View File

@ -3,7 +3,7 @@
import type { ChangeEvent } from 'react';
import type { AppType } from '@/domain/entities';
import { useUploadStore } from '@/store/zustand/upload.store';
import { versionRepository } from '@/infrastructure/repositories/version.repository';
import { parsePackageUseCase, registerVersionUseCase } from '@/application/use-cases/version.use-cases';
export function useUpload(appType: AppType, onSuccess: () => void) {
const store = useUploadStore();
@ -31,7 +31,7 @@ export function useUpload(appType: AppType, onSuccess: () => void) {
store.setIsParsing(true);
try {
const parsed = await versionRepository.parse(f, (pct) => {
const parsed = await parsePackageUseCase.execute(f, (pct) => {
store.setParseProgress(pct);
console.log(`[useUpload] parse upload progress: ${pct}%`);
});
@ -75,7 +75,7 @@ export function useUpload(appType: AppType, onSuccess: () => void) {
console.log(`[useUpload] registering version: storageKey=${storageKey} ver=${versionName} build=${buildNumber}`);
try {
const result = await versionRepository.register({
const result = await registerVersionUseCase.execute({
storageKey, fileSize, fileSha256,
appType, platform, versionCode,
versionName, buildNumber, changelog, minOsVersion, isForceUpdate,