code quality
Some checks failed
CI / lint-typecheck (pull_request) Failing after 12s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped

This commit is contained in:
2026-01-26 12:52:24 +01:00
parent f877f821ef
commit cfc30c79a8
62 changed files with 227 additions and 173 deletions

View File

@@ -1,17 +1,18 @@
import { describe, vi } from 'vitest';
import { InMemoryMediaRepository } from './InMemoryMediaRepository';
import { runMediaRepositoryContract } from '../../../../tests/contracts/media/MediaRepository.contract';
import type { Logger } from '@core/shared/domain/Logger';
describe('InMemoryMediaRepository Contract Compliance', () => {
runMediaRepositoryContract(async () => {
const logger = {
const logger: Logger = {
info: vi.fn(),
debug: vi.fn(),
warn: vi.fn(),
error: vi.fn(),
};
const repository = new InMemoryMediaRepository(logger as any);
const repository = new InMemoryMediaRepository(logger);
return {
repository,

View File

@@ -1,4 +1,5 @@
import { AvatarGenerationRequest } from '@core/media/domain/entities/AvatarGenerationRequest';
import { AvatarGenerationRequestProps } from '@core/media/domain/types/AvatarGenerationRequest';
import { AvatarGenerationRequestOrmEntity } from '../entities/AvatarGenerationRequestOrmEntity';
import { TypeOrmMediaSchemaError } from '../errors/TypeOrmMediaSchemaError';
import {
@@ -37,7 +38,7 @@ export class AvatarGenerationRequestOrmMapper {
}
try {
const props: any = {
const props: AvatarGenerationRequestProps = {
id: entity.id,
userId: entity.userId,
facePhotoUrl: entity.facePhotoUrl,

View File

@@ -1,4 +1,4 @@
import { Media } from '@core/media/domain/entities/Media';
import { Media, MediaProps } from '@core/media/domain/entities/Media';
import { MediaOrmEntity } from '../entities/MediaOrmEntity';
import { TypeOrmMediaSchemaError } from '../errors/TypeOrmMediaSchemaError';
import {
@@ -31,7 +31,7 @@ export class MediaOrmMapper {
}
try {
const domainProps: any = {
const domainProps: MediaProps = {
id: entity.id,
filename: entity.filename,
originalName: entity.originalName,

View File

@@ -1,6 +1,9 @@
import * as fs from 'node:fs';
import * as path from 'node:path';
import type { DataSource } from 'typeorm';
import { describe, expect, it, vi } from 'vitest';
import type { AvatarGenerationRequest } from '@core/media/domain/entities/AvatarGenerationRequest';
import type { AvatarGenerationRequestOrmMapper } from '../mappers/AvatarGenerationRequestOrmMapper';
import { TypeOrmAvatarGenerationRepository } from './TypeOrmAvatarGenerationRepository';
@@ -35,7 +38,7 @@ describe('TypeOrmAvatarGenerationRepository', () => {
toOrmEntity: vi.fn().mockReturnValue({ id: 'orm-request-1' }),
};
const repo = new TypeOrmAvatarGenerationRepository(dataSource as any, mapper as any);
const repo = new TypeOrmAvatarGenerationRepository(dataSource as unknown as DataSource, mapper as unknown as AvatarGenerationRequestOrmMapper);
// Test findById
const request = await repo.findById('request-1');
@@ -61,8 +64,8 @@ describe('TypeOrmAvatarGenerationRepository', () => {
});
// Test save
const domainRequest = { id: 'new-request', toProps: () => ({ id: 'new-request' }) };
await repo.save(domainRequest as any);
const domainRequest = { id: 'new-request', toProps: () => ({ id: 'new-request' }) } as unknown as AvatarGenerationRequest;
await repo.save(domainRequest);
expect(mapper.toOrmEntity).toHaveBeenCalledWith(domainRequest);
expect(ormRepo.save).toHaveBeenCalledWith({ id: 'orm-request-1' });

View File

@@ -1,6 +1,9 @@
import * as fs from 'node:fs';
import * as path from 'node:path';
import type { DataSource } from 'typeorm';
import { describe, expect, it, vi } from 'vitest';
import type { Avatar } from '@core/media/domain/entities/Avatar';
import type { AvatarOrmMapper } from '../mappers/AvatarOrmMapper';
import { TypeOrmAvatarRepository } from './TypeOrmAvatarRepository';
@@ -35,7 +38,7 @@ describe('TypeOrmAvatarRepository', () => {
toOrmEntity: vi.fn().mockReturnValue({ id: 'orm-avatar-1' }),
};
const repo = new TypeOrmAvatarRepository(dataSource as any, mapper as any);
const repo = new TypeOrmAvatarRepository(dataSource as unknown as DataSource, mapper as unknown as AvatarOrmMapper);
// Test findById
const avatar = await repo.findById('avatar-1');
@@ -61,8 +64,8 @@ describe('TypeOrmAvatarRepository', () => {
expect(avatars).toHaveLength(2);
// Test save
const domainAvatar = { id: 'new-avatar', toProps: () => ({ id: 'new-avatar' }) };
await repo.save(domainAvatar as any);
const domainAvatar = { id: 'new-avatar', toProps: () => ({ id: 'new-avatar' }) } as unknown as Avatar;
await repo.save(domainAvatar);
expect(mapper.toOrmEntity).toHaveBeenCalledWith(domainAvatar);
expect(ormRepo.save).toHaveBeenCalledWith({ id: 'orm-avatar-1' });

View File

@@ -1,13 +1,15 @@
import { describe, vi } from 'vitest';
import type { DataSource } from 'typeorm';
import { TypeOrmMediaRepository } from './TypeOrmMediaRepository';
import { MediaOrmMapper } from '../mappers/MediaOrmMapper';
import { runMediaRepositoryContract } from '../../../../../tests/contracts/media/MediaRepository.contract';
import type { MediaOrmEntity } from '../entities/MediaOrmEntity';
describe('TypeOrmMediaRepository Contract Compliance', () => {
runMediaRepositoryContract(async () => {
// Mocking TypeORM DataSource and Repository for a DB-free contract test
// In a real scenario, this might use an in-memory SQLite database
const ormEntities = new Map<string, any>();
const ormEntities = new Map<string, MediaOrmEntity>();
const ormRepo = {
save: vi.fn().mockImplementation(async (entity) => {
@@ -30,7 +32,7 @@ describe('TypeOrmMediaRepository Contract Compliance', () => {
};
const mapper = new MediaOrmMapper();
const repository = new TypeOrmMediaRepository(dataSource as any, mapper);
const repository = new TypeOrmMediaRepository(dataSource as unknown as DataSource, mapper);
return {
repository,

View File

@@ -1,6 +1,9 @@
import * as fs from 'node:fs';
import * as path from 'node:path';
import type { DataSource } from 'typeorm';
import { describe, expect, it, vi } from 'vitest';
import type { Media } from '@core/media/domain/entities/Media';
import type { MediaOrmMapper } from '../mappers/MediaOrmMapper';
import { TypeOrmMediaRepository } from './TypeOrmMediaRepository';
@@ -35,7 +38,7 @@ describe('TypeOrmMediaRepository', () => {
toOrmEntity: vi.fn().mockReturnValue({ id: 'orm-media-1' }),
};
const repo = new TypeOrmMediaRepository(dataSource as any, mapper as any);
const repo = new TypeOrmMediaRepository(dataSource as unknown as DataSource, mapper as unknown as MediaOrmMapper);
// Test findById
const media = await repo.findById('media-1');

View File

@@ -86,7 +86,7 @@ export class FileSystemMediaStorageAdapter implements MediaStoragePort {
await fs.unlink(filePath);
} catch (error) {
// Ignore if file doesn't exist
if (error instanceof Error && 'code' in error && (error as any).code === 'ENOENT') {
if (error instanceof Error && 'code' in error && (error as NodeJS.ErrnoException).code === 'ENOENT') {
return;
}
throw error;

View File

@@ -34,7 +34,7 @@ export interface GeneratedMediaResolverConfig {
* Format: "{type}-{id}" (e.g., "team-123", "league-456")
*/
export class GeneratedMediaResolverAdapter implements MediaResolverPort {
constructor(_config: GeneratedMediaResolverConfig = {}) {
constructor() {
// basePath is not used since we return path-only URLs
// config.basePath is ignored for backward compatibility
}
@@ -85,8 +85,6 @@ export class GeneratedMediaResolverAdapter implements MediaResolverPort {
/**
* Factory function for creating GeneratedMediaResolverAdapter instances
*/
export function createGeneratedMediaResolver(
config: GeneratedMediaResolverConfig = {}
): GeneratedMediaResolverAdapter {
return new GeneratedMediaResolverAdapter(config);
export function createGeneratedMediaResolver(): GeneratedMediaResolverAdapter {
return new GeneratedMediaResolverAdapter();
}