refactor(metadata): move ComicMetadataService to ComicMetadataRepository

This commit is contained in:
neon
2026-03-31 06:18:41 -06:00
parent 368837eeff
commit a8a3049c26
8 changed files with 14 additions and 23 deletions
@@ -44,7 +44,6 @@ describe('Architecture boundaries', () => {
'src/modules/auth/oidc/oidc-group-mapping.service.ts',
'src/modules/authors/author-enrichment-config.service.ts',
'src/modules/book/book-query-builder.service.ts',
'src/modules/book/comic-metadata.service.ts',
'src/modules/book-metadata-fetch/book-metadata-fetch-config.service.ts',
'src/modules/catalog/catalog.service.ts',
'src/modules/cover/cover.service.ts',
+1 -8
View File
@@ -13,18 +13,11 @@ import { BookController } from './book.controller';
import { BookModule } from './book.module';
import { BookRepository } from './book.repository';
import { BookService } from './book.service';
import { ComicMetadataService } from './comic-metadata.service';
describe('BookModule', () => {
it('registers expected controller/providers/exports', () => {
expect(Reflect.getMetadata('controllers', BookModule)).toEqual([BookController]);
expect(Reflect.getMetadata('providers', BookModule)).toEqual([
BookService,
BookRepository,
BookReadService,
BookQueryBuilder,
ComicMetadataService,
]);
expect(Reflect.getMetadata('providers', BookModule)).toEqual([BookService, BookRepository, BookReadService, BookQueryBuilder]);
expect(Reflect.getMetadata('exports', BookModule)).toEqual([BookService, BookReadService, BookQueryBuilder]);
});
});
+1 -2
View File
@@ -14,7 +14,6 @@ import { BookQueryBuilder } from './book-query-builder.service';
import { BookController } from './book.controller';
import { BookRepository } from './book.repository';
import { BookService } from './book.service';
import { ComicMetadataService } from './comic-metadata.service';
@Module({
imports: [
@@ -29,7 +28,7 @@ import { ComicMetadataService } from './comic-metadata.service';
UserBookStatusModule,
],
controllers: [BookController],
providers: [BookService, BookRepository, BookReadService, BookQueryBuilder, ComicMetadataService],
providers: [BookService, BookRepository, BookReadService, BookQueryBuilder],
exports: [BookService, BookReadService, BookQueryBuilder],
})
export class BookModule {}
+2 -2
View File
@@ -19,7 +19,7 @@ import { NarratorService } from '../narrator/narrator.service';
import { UserBookStatusService } from '../user-book-status/user-book-status.service';
import { BookQueryBuilder } from './book-query-builder.service';
import { BookRepository } from './book.repository';
import { ComicMetadataService } from './comic-metadata.service';
import { ComicMetadataRepository } from '../metadata/comic-metadata.repository';
import { BookDetailDto } from './dto/book-detail.dto';
import { SaveProgressDto } from './dto/save-progress.dto';
import { UpsertAudioProgressDto } from './dto/upsert-audio-progress.dto';
@@ -41,7 +41,7 @@ export class BookService {
private readonly appSettings: AppSettingsService,
private readonly userBookStatusService: UserBookStatusService,
private readonly narratorService: NarratorService,
private readonly comicMetadataService: ComicMetadataService,
private readonly comicMetadataService: ComicMetadataRepository,
@Optional() private readonly embedder: BookEmbedderService,
@Optional() private readonly fileWriteService: FileWriteService,
) {
@@ -4,12 +4,12 @@ import { NodePgDatabase } from 'drizzle-orm/node-postgres';
import { DB } from '../../db';
import * as schema from '../../db/schema';
import { ComicMetadataDto } from './dto/update-book-metadata.dto';
import { ComicMetadataDto } from '../book/dto/update-book-metadata.dto';
type Db = NodePgDatabase<typeof schema>;
@Injectable()
export class ComicMetadataService {
export class ComicMetadataRepository {
constructor(@Inject(DB) private readonly db: Db) {}
async upsert(bookId: number, fields: ComicMetadataDto): Promise<void> {
@@ -5,11 +5,11 @@ vi.mock('../embedding/embedding.module', () => ({ EmbeddingModule: class Embeddi
import { MetadataModule } from './metadata.module';
import { MetadataEventsService } from './metadata-events.service';
import { MetadataService } from './metadata.service';
import { ComicMetadataService } from '../book/comic-metadata.service';
import { ComicMetadataRepository } from './comic-metadata.repository';
describe('MetadataModule', () => {
it('registers MetadataService provider/export', () => {
expect(Reflect.getMetadata('providers', MetadataModule)).toEqual([MetadataService, MetadataEventsService, ComicMetadataService]);
expect(Reflect.getMetadata('exports', MetadataModule)).toEqual([MetadataService, MetadataEventsService]);
expect(Reflect.getMetadata('providers', MetadataModule)).toEqual([MetadataService, MetadataEventsService, ComicMetadataRepository]);
expect(Reflect.getMetadata('exports', MetadataModule)).toEqual([MetadataService, MetadataEventsService, ComicMetadataRepository]);
});
});
@@ -3,13 +3,13 @@ import { Module } from '@nestjs/common';
import { EmbeddingModule } from '../embedding/embedding.module';
import { MetadataScoreModule } from '../metadata-score/metadata-score.module';
import { NarratorModule } from '../narrator/narrator.module';
import { ComicMetadataService } from '../book/comic-metadata.service';
import { ComicMetadataRepository } from './comic-metadata.repository';
import { MetadataEventsService } from './metadata-events.service';
import { MetadataService } from './metadata.service';
@Module({
imports: [EmbeddingModule, MetadataScoreModule, NarratorModule],
providers: [MetadataService, MetadataEventsService, ComicMetadataService],
exports: [MetadataService, MetadataEventsService],
providers: [MetadataService, MetadataEventsService, ComicMetadataRepository],
exports: [MetadataService, MetadataEventsService, ComicMetadataRepository],
})
export class MetadataModule {}
@@ -8,7 +8,7 @@ import { join } from 'path';
import { DB } from '../../db';
import * as schema from '../../db/schema';
import { BookEmbedderService } from '../embedding/book-embedder.service';
import { ComicMetadataService } from '../book/comic-metadata.service';
import { ComicMetadataRepository } from './comic-metadata.repository';
import { MetadataScoreService } from '../metadata-score/metadata-score.service';
import { NarratorService } from '../narrator/narrator.service';
import { authors, bookAuthors, bookGenres, bookMetadata, bookTags, genres, tags } from '../../db/schema';
@@ -37,7 +37,7 @@ export class MetadataService {
private readonly config: ConfigService,
private readonly scoreService: MetadataScoreService,
private readonly narratorService: NarratorService,
private readonly comicMetadataService: ComicMetadataService,
private readonly comicMetadataService: ComicMetadataRepository,
@Optional() private readonly embedder: BookEmbedderService,
@Optional() private readonly metadataEvents?: MetadataEventsService,
) {