refactor league module (wip)

This commit is contained in:
2025-12-22 15:47:47 +01:00
parent 03dc81b0ba
commit f59e1b13e7
10 changed files with 444 additions and 819 deletions

View File

@@ -0,0 +1,48 @@
import { vi } from 'vitest';
import { DashboardService } from './DashboardService';
import { DashboardOverviewUseCase } from '@core/racing/application/use-cases/DashboardOverviewUseCase';
import type { Logger } from '@core/shared/application/Logger';
import { DashboardOverviewPresenter } from './presenters/DashboardOverviewPresenter';
describe('DashboardService', () => {
let service: DashboardService;
let mockUseCase: ReturnType<typeof vi.mocked<DashboardOverviewUseCase>>;
let mockPresenter: ReturnType<typeof vi.mocked<DashboardOverviewPresenter>>;
let mockLogger: ReturnType<typeof vi.mocked<Logger>>;
beforeEach(() => {
mockUseCase = {
execute: vi.fn(),
} as any;
mockPresenter = {
present: vi.fn(),
getResponseModel: vi.fn(),
} as any;
mockLogger = {
debug: vi.fn(),
info: vi.fn(),
warn: vi.fn(),
error: vi.fn(),
} as any;
service = new DashboardService(
mockLogger,
mockUseCase,
mockPresenter
);
});
it('should get dashboard overview', async () => {
const mockResult = { totalUsers: 100 };
mockUseCase.execute.mockResolvedValue(undefined);
mockPresenter.getResponseModel.mockReturnValue(mockResult);
const result = await service.getDashboardOverview('driver-1');
expect(mockUseCase.execute).toHaveBeenCalledWith({ driverId: 'driver-1' });
expect(mockPresenter.getResponseModel).toHaveBeenCalled();
expect(result).toBe(mockResult);
});
});

View File

@@ -7,27 +7,20 @@ import { DashboardOverviewPresenter } from './presenters/DashboardOverviewPresen
import type { Logger } from '@core/shared/application/Logger';
// Tokens
import { DASHBOARD_OVERVIEW_USE_CASE_TOKEN, LOGGER_TOKEN } from './DashboardProviders';
import { DASHBOARD_OVERVIEW_USE_CASE_TOKEN, LOGGER_TOKEN, DASHBOARD_OVERVIEW_OUTPUT_PORT_TOKEN } from './DashboardProviders';
@Injectable()
export class DashboardService {
private readonly presenter = new DashboardOverviewPresenter();
constructor(
@Inject(LOGGER_TOKEN) private readonly logger: Logger,
@Inject(DASHBOARD_OVERVIEW_USE_CASE_TOKEN) private readonly dashboardOverviewUseCase: DashboardOverviewUseCase,
@Inject(DASHBOARD_OVERVIEW_OUTPUT_PORT_TOKEN) private readonly presenter: DashboardOverviewPresenter,
) {}
async getDashboardOverview(driverId: string): Promise<DashboardOverviewDTO> {
this.logger.debug('[DashboardService] Getting dashboard overview:', { driverId });
const result = await this.dashboardOverviewUseCase.execute({ driverId });
if (result.isErr()) {
throw new Error(result.unwrapErr().details?.message ?? 'Failed to get dashboard overview');
}
this.presenter.present(result);
await this.dashboardOverviewUseCase.execute({ driverId });
return this.presenter.getResponseModel();
}