refactor: 收敛Blog WordPress Asset模块
This commit is contained in:
parent
cca2f9e1b4
commit
ff8e3908f4
@ -15,7 +15,7 @@
|
||||
| Domain | Deleted | Merged | Kept | Evidence |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| Admin/Auth/Platform Config | `src/admin/example` if no active route evidence; empty old admin subdirectories | auth/user/role/menu/dept/component/dict/notice/system-log/timezone moved into `src/modules/admin/**`; duplicate old imports removed | route paths and public DTO class names kept | `rg '@/admin/' src test` returns no source hits; admin focused Jest passes |
|
||||
| Blog/WordPress/Asset | none yet | none yet | current files before migration | baseline only |
|
||||
| Blog/WordPress/Asset | old `src/blog`, `src/wordpress`, `src/minio`; legacy module wrappers after local imports replaced | MinIO internal files renamed into Asset module; Blog and WordPress controller/service/entity files moved under target modules | existing route decorators and response DTO behavior | `rg '@/blog/|@/wordpress/|@/minio/' src test` has no hits; Blog/WordPress/Asset focused tests pass |
|
||||
| Runtime/Common | none yet | none yet | current files before migration | baseline only |
|
||||
| QQBot Core/NapCat | none yet | none yet | current files before migration | baseline only |
|
||||
| Plugin Platform/Plugins | none yet | none yet | current files before migration | baseline only |
|
||||
|
||||
@ -1,31 +0,0 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { AdminAuthGuardModule } from '@/modules/admin/identity/auth/admin-auth-guard.module';
|
||||
import { CommonModule } from '@/common';
|
||||
import { WordpressModule } from '@/wordpress/wordpress.module';
|
||||
import { BlogArticleController } from './blog-article.controller';
|
||||
import { BlogArticle } from './blog-article.entity';
|
||||
import { BlogArticleService } from './blog-article.service';
|
||||
import { BlogThemeConfigController } from './blog-theme-config.controller';
|
||||
import { BlogThemeConfig } from './blog-theme-config.entity';
|
||||
import { BlogThemeConfigService } from './blog-theme-config.service';
|
||||
import { BlogTermController } from './blog-term.controller';
|
||||
import { BlogTerm } from './blog-term.entity';
|
||||
import { BlogTermService } from './blog-term.service';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
AdminAuthGuardModule,
|
||||
CommonModule,
|
||||
WordpressModule,
|
||||
TypeOrmModule.forFeature([BlogArticle, BlogTerm, BlogThemeConfig]),
|
||||
],
|
||||
controllers: [
|
||||
BlogArticleController,
|
||||
BlogTermController,
|
||||
BlogThemeConfigController,
|
||||
],
|
||||
providers: [BlogArticleService, BlogTermService, BlogThemeConfigService],
|
||||
exports: [BlogArticleService, BlogTermService, BlogThemeConfigService],
|
||||
})
|
||||
export class BlogModule {}
|
||||
@ -1,13 +0,0 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { AdminAuthGuardModule } from '@/modules/admin/identity/auth/admin-auth-guard.module';
|
||||
import { MinioClientController } from './minio.controller';
|
||||
import { MinioClientService } from './minio.service';
|
||||
|
||||
@Module({
|
||||
imports: [AdminAuthGuardModule, ConfigModule],
|
||||
controllers: [MinioClientController],
|
||||
providers: [MinioClientService],
|
||||
exports: [MinioClientService],
|
||||
})
|
||||
export class MinioClientModule {}
|
||||
@ -17,7 +17,7 @@ import { AdminAuthService } from './admin-auth.service';
|
||||
import { AdminLoginDto } from './admin-auth.dto';
|
||||
import { AdminPasswordCryptoService } from './admin-password-crypto.service';
|
||||
import { JwtAuthGuard } from './jwt-auth.guard';
|
||||
import { WordpressService } from '@/modules/wordpress/wordpress-mirror.service';
|
||||
import { WordpressService } from '@/modules/wordpress/application/wordpress.service';
|
||||
|
||||
@ApiTags('Admin - 认证')
|
||||
@Controller()
|
||||
|
||||
@ -5,7 +5,7 @@ import type {
|
||||
MinioListObjectOptions,
|
||||
MinioObjectResult,
|
||||
MinioUploadObjectOptions,
|
||||
} from './minio.types';
|
||||
} from '../domain/asset-minio.types';
|
||||
|
||||
@Injectable()
|
||||
export class MinioClientService {
|
||||
@ -1,7 +1,8 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { MinioClientController } from '@/minio/minio.controller';
|
||||
import { MinioClientModule } from '@/minio/minio.module';
|
||||
import { MinioClientService } from '@/minio/minio.service';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { AdminAuthGuardModule } from '@/modules/admin/identity/auth/admin-auth-guard.module';
|
||||
import { MinioClientService } from './application/asset-minio.service';
|
||||
import { MinioClientController } from './contract/asset-minio.controller';
|
||||
|
||||
export const ASSET_CONTROLLERS = [MinioClientController];
|
||||
|
||||
@ -41,7 +42,9 @@ export const ASSET_DOMAIN_CONTRACT = {
|
||||
} as const;
|
||||
|
||||
@Module({
|
||||
imports: [MinioClientModule],
|
||||
exports: [MinioClientModule],
|
||||
imports: [AdminAuthGuardModule, ConfigModule],
|
||||
controllers: ASSET_CONTROLLERS,
|
||||
providers: ASSET_PROVIDERS,
|
||||
exports: ASSET_PROVIDERS,
|
||||
})
|
||||
export class AssetModule {}
|
||||
|
||||
@ -21,8 +21,8 @@ import {
|
||||
ApiTags,
|
||||
} from '@nestjs/swagger';
|
||||
import { Response } from 'express';
|
||||
import { MinioClientService } from './minio.service';
|
||||
import type { MinioUploadFile } from './minio.types';
|
||||
import { MinioClientService } from '../application/asset-minio.service';
|
||||
import type { MinioUploadFile } from '../domain/asset-minio.types';
|
||||
import {
|
||||
ApiFileDownloadResponse,
|
||||
ApiArrayResponse,
|
||||
@ -35,7 +35,7 @@ import {
|
||||
MinioBucketStatusDto,
|
||||
MinioObjectDto,
|
||||
MinioUploadResultDto,
|
||||
} from './minio.dto';
|
||||
} from './asset-minio.dto';
|
||||
import { JwtAuthGuard } from '@/modules/admin/identity/auth/jwt-auth.guard';
|
||||
|
||||
const PROXY_RESOURCE_TIMEOUT = 1000 * 15;
|
||||
@ -2,19 +2,19 @@ import { HttpStatus, Injectable } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Brackets, Repository } from 'typeorm';
|
||||
import { MarkdownService, throwVbenError, ToolsService } from '@/common';
|
||||
import { WordpressService } from '@/modules/wordpress/application/wordpress.service';
|
||||
import {
|
||||
BlogArticle,
|
||||
type BlogArticleStatus,
|
||||
type BlogArticleTerm,
|
||||
} from './blog-article.entity';
|
||||
} from '../infrastructure/persistence/blog-article.entity';
|
||||
import type {
|
||||
BlogArticleBodyDto,
|
||||
BlogArticleImportWordpressDto,
|
||||
BlogArticleListQueryDto,
|
||||
BlogArticleTermOptionsQueryDto,
|
||||
BlogArticleUpdateBodyDto,
|
||||
} from './blog-article.dto';
|
||||
import { WordpressService } from '@/wordpress/wordpress.service';
|
||||
} from '../contract/blog-article.dto';
|
||||
import { BlogTermService } from './blog-term.service';
|
||||
|
||||
@Injectable()
|
||||
@ -5,13 +5,16 @@ import { throwVbenError, ToolsService } from '@/common';
|
||||
import {
|
||||
BlogArticle,
|
||||
type BlogArticleTerm,
|
||||
} from './blog-article.entity';
|
||||
import { BlogTerm, type BlogTermKind } from './blog-term.entity';
|
||||
} from '../infrastructure/persistence/blog-article.entity';
|
||||
import {
|
||||
BlogTerm,
|
||||
type BlogTermKind,
|
||||
} from '../infrastructure/persistence/blog-term.entity';
|
||||
import type {
|
||||
BlogTermBodyDto,
|
||||
BlogTermListQueryDto,
|
||||
BlogTermUpdateBodyDto,
|
||||
} from './blog-term.dto';
|
||||
} from '../contract/blog-term.dto';
|
||||
|
||||
type CountedBlogTerm = BlogArticleTerm & {
|
||||
count: number;
|
||||
@ -2,10 +2,10 @@ import { HttpStatus, Injectable } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Repository } from 'typeorm';
|
||||
import { throwVbenError, ToolsService } from '@/common';
|
||||
import { WordpressService } from '@/wordpress/wordpress.service';
|
||||
import type { WordpressArgonThemeConfig } from '@/wordpress/wordpress.types';
|
||||
import { BlogThemeConfigBodyDto } from './blog-theme-config.dto';
|
||||
import { BlogThemeConfig } from './blog-theme-config.entity';
|
||||
import { WordpressService } from '@/modules/wordpress/application/wordpress.service';
|
||||
import type { WordpressArgonThemeConfig } from '@/modules/wordpress/domain/wordpress.types';
|
||||
import { BlogThemeConfigBodyDto } from '../contract/blog-theme-config.dto';
|
||||
import { BlogThemeConfig } from '../infrastructure/persistence/blog-theme-config.entity';
|
||||
|
||||
const DEFAULT_THEME_ID = 'argon';
|
||||
|
||||
@ -1,11 +1,17 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { BlogArticleController } from '@/blog/blog-article.controller';
|
||||
import { BlogArticleService } from '@/blog/blog-article.service';
|
||||
import { BlogModule } from '@/blog/blog.module';
|
||||
import { BlogTermController } from '@/blog/blog-term.controller';
|
||||
import { BlogTermService } from '@/blog/blog-term.service';
|
||||
import { BlogThemeConfigController } from '@/blog/blog-theme-config.controller';
|
||||
import { BlogThemeConfigService } from '@/blog/blog-theme-config.service';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { CommonModule } from '@/common';
|
||||
import { AdminAuthGuardModule } from '@/modules/admin/identity/auth/admin-auth-guard.module';
|
||||
import { WordpressMirrorModule } from '@/modules/wordpress/wordpress-mirror.module';
|
||||
import { BlogArticleService } from './application/blog-article.service';
|
||||
import { BlogTermService } from './application/blog-term.service';
|
||||
import { BlogThemeConfigService } from './application/blog-theme-config.service';
|
||||
import { BlogArticleController } from './contract/blog-article.controller';
|
||||
import { BlogTermController } from './contract/blog-term.controller';
|
||||
import { BlogThemeConfigController } from './contract/blog-theme-config.controller';
|
||||
import { BlogArticle } from './infrastructure/persistence/blog-article.entity';
|
||||
import { BlogTerm } from './infrastructure/persistence/blog-term.entity';
|
||||
import { BlogThemeConfig } from './infrastructure/persistence/blog-theme-config.entity';
|
||||
|
||||
export const BLOG_CONTENT_CONTROLLERS = [
|
||||
BlogArticleController,
|
||||
@ -60,7 +66,14 @@ export const BLOG_CONTENT_DOMAIN_CONTRACT = {
|
||||
} as const;
|
||||
|
||||
@Module({
|
||||
imports: [BlogModule],
|
||||
exports: [BlogModule],
|
||||
imports: [
|
||||
AdminAuthGuardModule,
|
||||
CommonModule,
|
||||
WordpressMirrorModule,
|
||||
TypeOrmModule.forFeature([BlogArticle, BlogTerm, BlogThemeConfig]),
|
||||
],
|
||||
controllers: BLOG_CONTENT_CONTROLLERS,
|
||||
providers: BLOG_CONTENT_PROVIDERS,
|
||||
exports: BLOG_CONTENT_PROVIDERS,
|
||||
})
|
||||
export class BlogContentModule {}
|
||||
|
||||
@ -19,7 +19,7 @@ import {
|
||||
BlogArticleTermOptionsQueryDto,
|
||||
BlogArticleUpdateBodyDto,
|
||||
} from './blog-article.dto';
|
||||
import { BlogArticleService } from './blog-article.service';
|
||||
import { BlogArticleService } from '../application/blog-article.service';
|
||||
|
||||
@ApiTags('Blog - 文章')
|
||||
@Controller('blog/article')
|
||||
@ -1,5 +1,8 @@
|
||||
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
|
||||
import type { BlogArticleStatus, BlogArticleTerm } from './blog-article.entity';
|
||||
import type {
|
||||
BlogArticleStatus,
|
||||
BlogArticleTerm,
|
||||
} from '../infrastructure/persistence/blog-article.entity';
|
||||
|
||||
export class BlogArticleListQueryDto {
|
||||
@ApiPropertyOptional({
|
||||
@ -12,13 +12,13 @@ import {
|
||||
import { ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
|
||||
import { JwtAuthGuard } from '@/modules/admin/identity/auth/jwt-auth.guard';
|
||||
import { vbenSuccess } from '@/common';
|
||||
import type { BlogTermKind } from './blog-term.entity';
|
||||
import type { BlogTermKind } from '../infrastructure/persistence/blog-term.entity';
|
||||
import {
|
||||
BlogTermBodyDto,
|
||||
BlogTermListQueryDto,
|
||||
BlogTermUpdateBodyDto,
|
||||
} from './blog-term.dto';
|
||||
import { BlogTermService } from './blog-term.service';
|
||||
import { BlogTermService } from '../application/blog-term.service';
|
||||
|
||||
@ApiTags('Blog - 分类标签')
|
||||
@Controller('blog')
|
||||
@ -12,7 +12,7 @@ import { ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import { JwtAuthGuard } from '@/modules/admin/identity/auth/jwt-auth.guard';
|
||||
import { Public, vbenSuccess } from '@/common';
|
||||
import { BlogThemeConfigBodyDto } from './blog-theme-config.dto';
|
||||
import { BlogThemeConfigService } from './blog-theme-config.service';
|
||||
import { BlogThemeConfigService } from '../application/blog-theme-config.service';
|
||||
|
||||
@ApiTags('Blog - 主题')
|
||||
@Controller('blog/theme')
|
||||
@ -1,5 +1,5 @@
|
||||
import { ApiPropertyOptional } from '@nestjs/swagger';
|
||||
import type { WordpressArgonThemeConfig } from '@/wordpress/wordpress.types';
|
||||
import type { WordpressArgonThemeConfig } from '@/modules/wordpress/domain/wordpress.types';
|
||||
|
||||
export class BlogThemeConfigBodyDto {
|
||||
@ApiPropertyOptional({
|
||||
@ -1,7 +1,7 @@
|
||||
import { Column, Entity, PrimaryColumn } from 'typeorm';
|
||||
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
|
||||
import { KtCreateDateColumn, KtDateTime, KtUpdateDateColumn } from '@/common';
|
||||
import type { WordpressArgonThemeConfig } from '@/wordpress/wordpress.types';
|
||||
import type { WordpressArgonThemeConfig } from '@/modules/wordpress/domain/wordpress.types';
|
||||
|
||||
@Entity('blog_theme_config')
|
||||
export class BlogThemeConfig {
|
||||
@ -10,7 +10,7 @@ import type {
|
||||
WordpressArticleListQueryDto,
|
||||
WordpressTermBodyDto,
|
||||
WordpressTermListQueryDto,
|
||||
} from './wordpress.dto';
|
||||
} from '../contract/wordpress.dto';
|
||||
import type {
|
||||
WordpressAuthContext,
|
||||
WordpressAvailabilityCache,
|
||||
@ -22,7 +22,7 @@ import type {
|
||||
WordpressResponse,
|
||||
WordpressArgonThemeConfig,
|
||||
WordpressArgonMenuItem,
|
||||
} from './wordpress.types';
|
||||
} from '../domain/wordpress.types';
|
||||
|
||||
const WORDPRESS_COOKIE_PREFIXES = [
|
||||
'wordpress_',
|
||||
@ -19,7 +19,7 @@ import {
|
||||
WordpressArticleListQueryDto,
|
||||
WordpressArticleUpdateBodyDto,
|
||||
} from './wordpress.dto';
|
||||
import { WordpressService } from './wordpress.service';
|
||||
import { WordpressService } from '../application/wordpress.service';
|
||||
|
||||
@ApiTags('WordPress - 文章')
|
||||
@ApiHeader({
|
||||
@ -10,7 +10,7 @@ import { ApiHeader, ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import type { Request, Response } from 'express';
|
||||
import { JwtAuthGuard } from '@/modules/admin/identity/auth/jwt-auth.guard';
|
||||
import { Public, vbenSuccess } from '@/common';
|
||||
import { WordpressService } from './wordpress.service';
|
||||
import { WordpressService } from '../application/wordpress.service';
|
||||
|
||||
@ApiTags('WordPress - 认证')
|
||||
@ApiHeader({
|
||||
@ -19,7 +19,7 @@ import {
|
||||
WordpressTermListQueryDto,
|
||||
WordpressTermUpdateBodyDto,
|
||||
} from './wordpress.dto';
|
||||
import { WordpressService } from './wordpress.service';
|
||||
import { WordpressService } from '../application/wordpress.service';
|
||||
|
||||
@ApiTags('WordPress - 分类')
|
||||
@ApiHeader({
|
||||
@ -19,7 +19,7 @@ import {
|
||||
WordpressTermListQueryDto,
|
||||
WordpressTermUpdateBodyDto,
|
||||
} from './wordpress.dto';
|
||||
import { WordpressService } from './wordpress.service';
|
||||
import { WordpressService } from '../application/wordpress.service';
|
||||
|
||||
@ApiTags('WordPress - 标签')
|
||||
@ApiHeader({
|
||||
@ -2,7 +2,7 @@ import { Controller, Get, Res, UseGuards } from '@nestjs/common';
|
||||
import { ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import { JwtAuthGuard } from '@/modules/admin/identity/auth/jwt-auth.guard';
|
||||
import { Public, vbenSuccess } from '@/common';
|
||||
import { WordpressService } from './wordpress.service';
|
||||
import { WordpressService } from '../application/wordpress.service';
|
||||
|
||||
@ApiTags('WordPress - 主题')
|
||||
@Controller('wordpress/theme')
|
||||
@ -1,7 +1,7 @@
|
||||
import type {
|
||||
WordpressArticleListQueryDto,
|
||||
WordpressTermListQueryDto,
|
||||
} from './wordpress.dto';
|
||||
} from '../contract/wordpress.dto';
|
||||
|
||||
export type WordpressAuthContext = {
|
||||
authorization?: string;
|
||||
@ -1,11 +1,11 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { WordpressArticleController } from '@/wordpress/wordpress-article.controller';
|
||||
import { WordpressAuthController } from '@/wordpress/wordpress-auth.controller';
|
||||
import { WordpressCategoryController } from '@/wordpress/wordpress-category.controller';
|
||||
import { WordpressModule } from '@/wordpress/wordpress.module';
|
||||
import { WordpressService } from '@/wordpress/wordpress.service';
|
||||
import { WordpressTagController } from '@/wordpress/wordpress-tag.controller';
|
||||
import { WordpressThemeController } from '@/wordpress/wordpress-theme.controller';
|
||||
import { AdminAuthGuardModule } from '@/modules/admin/identity/auth/admin-auth-guard.module';
|
||||
import { WordpressService } from './application/wordpress.service';
|
||||
import { WordpressArticleController } from './contract/wordpress-article.controller';
|
||||
import { WordpressAuthController } from './contract/wordpress-auth.controller';
|
||||
import { WordpressCategoryController } from './contract/wordpress-category.controller';
|
||||
import { WordpressTagController } from './contract/wordpress-tag.controller';
|
||||
import { WordpressThemeController } from './contract/wordpress-theme.controller';
|
||||
|
||||
export const WORDPRESS_MIRROR_CONTROLLERS = [
|
||||
WordpressAuthController,
|
||||
@ -53,7 +53,9 @@ export const WORDPRESS_MIRROR_DOMAIN_CONTRACT = {
|
||||
} as const;
|
||||
|
||||
@Module({
|
||||
imports: [WordpressModule],
|
||||
exports: [WordpressModule],
|
||||
imports: [AdminAuthGuardModule],
|
||||
controllers: WORDPRESS_MIRROR_CONTROLLERS,
|
||||
providers: WORDPRESS_MIRROR_PROVIDERS,
|
||||
exports: WORDPRESS_MIRROR_PROVIDERS,
|
||||
})
|
||||
export class WordpressMirrorModule {}
|
||||
|
||||
@ -1 +0,0 @@
|
||||
export { WordpressService } from '@/wordpress/wordpress.service';
|
||||
@ -1,22 +0,0 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { AdminAuthGuardModule } from '@/modules/admin/identity/auth/admin-auth-guard.module';
|
||||
import { WordpressArticleController } from './wordpress-article.controller';
|
||||
import { WordpressAuthController } from './wordpress-auth.controller';
|
||||
import { WordpressCategoryController } from './wordpress-category.controller';
|
||||
import { WordpressService } from './wordpress.service';
|
||||
import { WordpressTagController } from './wordpress-tag.controller';
|
||||
import { WordpressThemeController } from './wordpress-theme.controller';
|
||||
|
||||
@Module({
|
||||
imports: [AdminAuthGuardModule],
|
||||
controllers: [
|
||||
WordpressAuthController,
|
||||
WordpressArticleController,
|
||||
WordpressTagController,
|
||||
WordpressCategoryController,
|
||||
WordpressThemeController,
|
||||
],
|
||||
providers: [WordpressService],
|
||||
exports: [WordpressService],
|
||||
})
|
||||
export class WordpressModule {}
|
||||
@ -19,20 +19,20 @@ import {
|
||||
SaveBodyInterceptor,
|
||||
ToolsService,
|
||||
} from '../src/common';
|
||||
import { BlogArticleController } from '../src/blog/blog-article.controller';
|
||||
import { BlogArticleService } from '../src/blog/blog-article.service';
|
||||
import { BlogThemeConfigController } from '../src/blog/blog-theme-config.controller';
|
||||
import { BlogThemeConfigService } from '../src/blog/blog-theme-config.service';
|
||||
import { BlogTermController } from '../src/blog/blog-term.controller';
|
||||
import { BlogTermService } from '../src/blog/blog-term.service';
|
||||
import { MinioClientController } from '../src/minio/minio.controller';
|
||||
import { MinioClientService } from '../src/minio/minio.service';
|
||||
import { WordpressArticleController } from '../src/wordpress/wordpress-article.controller';
|
||||
import { WordpressAuthController } from '../src/wordpress/wordpress-auth.controller';
|
||||
import { WordpressCategoryController } from '../src/wordpress/wordpress-category.controller';
|
||||
import { WordpressService } from '../src/wordpress/wordpress.service';
|
||||
import { WordpressTagController } from '../src/wordpress/wordpress-tag.controller';
|
||||
import { WordpressThemeController } from '../src/wordpress/wordpress-theme.controller';
|
||||
import { BlogArticleService } from '../src/modules/blog/application/blog-article.service';
|
||||
import { BlogTermService } from '../src/modules/blog/application/blog-term.service';
|
||||
import { BlogThemeConfigService } from '../src/modules/blog/application/blog-theme-config.service';
|
||||
import { BlogArticleController } from '../src/modules/blog/contract/blog-article.controller';
|
||||
import { BlogTermController } from '../src/modules/blog/contract/blog-term.controller';
|
||||
import { BlogThemeConfigController } from '../src/modules/blog/contract/blog-theme-config.controller';
|
||||
import { MinioClientService } from '../src/modules/asset/application/asset-minio.service';
|
||||
import { MinioClientController } from '../src/modules/asset/contract/asset-minio.controller';
|
||||
import { WordpressService } from '../src/modules/wordpress/application/wordpress.service';
|
||||
import { WordpressArticleController } from '../src/modules/wordpress/contract/wordpress-article.controller';
|
||||
import { WordpressAuthController } from '../src/modules/wordpress/contract/wordpress-auth.controller';
|
||||
import { WordpressCategoryController } from '../src/modules/wordpress/contract/wordpress-category.controller';
|
||||
import { WordpressTagController } from '../src/modules/wordpress/contract/wordpress-tag.controller';
|
||||
import { WordpressThemeController } from '../src/modules/wordpress/contract/wordpress-theme.controller';
|
||||
import { PinoLogger } from 'nestjs-pino';
|
||||
import {
|
||||
collectControllerRoutes,
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import { getRepositoryToken } from '@nestjs/typeorm';
|
||||
import { Test } from '@nestjs/testing';
|
||||
import { MarkdownService, ToolsService } from '../../src/common';
|
||||
import { BlogArticle } from '../../src/blog/blog-article.entity';
|
||||
import { BlogArticleService } from '../../src/blog/blog-article.service';
|
||||
import { BlogTermService } from '../../src/blog/blog-term.service';
|
||||
import { WordpressService } from '../../src/wordpress/wordpress.service';
|
||||
import { BlogArticleService } from '../../src/modules/blog/application/blog-article.service';
|
||||
import { BlogTermService } from '../../src/modules/blog/application/blog-term.service';
|
||||
import { BlogArticle } from '../../src/modules/blog/infrastructure/persistence/blog-article.entity';
|
||||
import { WordpressService } from '../../src/modules/wordpress/application/wordpress.service';
|
||||
|
||||
describe('BlogArticleService', () => {
|
||||
let service: BlogArticleService;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { getRepositoryToken } from '@nestjs/typeorm';
|
||||
import { Test } from '@nestjs/testing';
|
||||
import { ToolsService } from '../../src/common';
|
||||
import { BlogArticle } from '../../src/blog/blog-article.entity';
|
||||
import { BlogTerm } from '../../src/blog/blog-term.entity';
|
||||
import { BlogTermService } from '../../src/blog/blog-term.service';
|
||||
import { BlogTermService } from '../../src/modules/blog/application/blog-term.service';
|
||||
import { BlogArticle } from '../../src/modules/blog/infrastructure/persistence/blog-article.entity';
|
||||
import { BlogTerm } from '../../src/modules/blog/infrastructure/persistence/blog-term.entity';
|
||||
|
||||
describe('BlogTermService', () => {
|
||||
let service: BlogTermService;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { getRepositoryToken } from '@nestjs/typeorm';
|
||||
import { Test } from '@nestjs/testing';
|
||||
import { ToolsService } from '../../src/common';
|
||||
import { BlogThemeConfig } from '../../src/blog/blog-theme-config.entity';
|
||||
import { BlogThemeConfigService } from '../../src/blog/blog-theme-config.service';
|
||||
import { WordpressService } from '../../src/wordpress/wordpress.service';
|
||||
import { BlogThemeConfigService } from '../../src/modules/blog/application/blog-theme-config.service';
|
||||
import { BlogThemeConfig } from '../../src/modules/blog/infrastructure/persistence/blog-theme-config.entity';
|
||||
import { WordpressService } from '../../src/modules/wordpress/application/wordpress.service';
|
||||
|
||||
describe('BlogThemeConfigService', () => {
|
||||
let service: BlogThemeConfigService;
|
||||
|
||||
@ -3,16 +3,17 @@ jest.mock('../../../src/modules/qqbot/core/qqbot-core.module', () => ({
|
||||
}));
|
||||
|
||||
import { MODULE_METADATA } from '@nestjs/common/constants';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
import { AppModule } from '../../../src/app.module';
|
||||
import { MinioClientController } from '../../../src/minio/minio.controller';
|
||||
import { MinioClientModule } from '../../../src/minio/minio.module';
|
||||
import { MinioClientService } from '../../../src/minio/minio.service';
|
||||
import { AdminAuthGuardModule } from '../../../src/modules/admin/identity/auth/admin-auth-guard.module';
|
||||
import {
|
||||
ASSET_CONTROLLERS,
|
||||
ASSET_DOMAIN_CONTRACT,
|
||||
ASSET_PROVIDERS,
|
||||
AssetModule,
|
||||
} from '../../../src/modules/asset/asset.module';
|
||||
import { MinioClientService } from '../../../src/modules/asset/application/asset-minio.service';
|
||||
import { MinioClientController } from '../../../src/modules/asset/contract/asset-minio.controller';
|
||||
import { AdminPlatformConfigModule } from '../../../src/modules/admin/platform-config/admin-platform-config.module';
|
||||
import {
|
||||
collectControllerRoutes,
|
||||
@ -24,18 +25,13 @@ const getModuleMetadata = <T>(moduleClass: unknown, key: string): T[] => {
|
||||
return Reflect.getMetadata(key, moduleClass) || [];
|
||||
};
|
||||
|
||||
const expectControllersNotRegisteredDirectly = (
|
||||
moduleClass: unknown,
|
||||
controllers: unknown[],
|
||||
) => {
|
||||
const directControllers = getModuleMetadata(
|
||||
moduleClass,
|
||||
MODULE_METADATA.CONTROLLERS,
|
||||
);
|
||||
|
||||
for (const controller of controllers) {
|
||||
expect(directControllers).not.toContain(controller);
|
||||
}
|
||||
const expectNoModuleNamed = (modules: unknown[], moduleName: string) => {
|
||||
expect(
|
||||
modules.some(
|
||||
(moduleRef) =>
|
||||
typeof moduleRef === 'function' && moduleRef.name === moduleName,
|
||||
),
|
||||
).toBe(false);
|
||||
};
|
||||
|
||||
describe('Asset module contract', () => {
|
||||
@ -62,30 +58,34 @@ describe('Asset module contract', () => {
|
||||
expect(getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS)).toEqual(
|
||||
expect.arrayContaining([AssetModule]),
|
||||
);
|
||||
expect(getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS)).not.toEqual(
|
||||
expect.arrayContaining([MinioClientModule]),
|
||||
);
|
||||
expect(
|
||||
getModuleMetadata(AdminPlatformConfigModule, MODULE_METADATA.IMPORTS),
|
||||
).toEqual(expect.arrayContaining([AssetModule]));
|
||||
expect(
|
||||
getModuleMetadata(AdminPlatformConfigModule, MODULE_METADATA.IMPORTS),
|
||||
).not.toEqual(expect.arrayContaining([MinioClientModule]));
|
||||
|
||||
expect(getModuleMetadata(AssetModule, MODULE_METADATA.IMPORTS)).toEqual(
|
||||
expect.arrayContaining([MinioClientModule]),
|
||||
const appImports = getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS);
|
||||
const platformImports = getModuleMetadata(
|
||||
AdminPlatformConfigModule,
|
||||
MODULE_METADATA.IMPORTS,
|
||||
);
|
||||
expect(getModuleMetadata(AssetModule, MODULE_METADATA.EXPORTS)).toEqual(
|
||||
expect.arrayContaining([MinioClientModule]),
|
||||
const assetImports = getModuleMetadata(AssetModule, MODULE_METADATA.IMPORTS);
|
||||
const assetExports = getModuleMetadata(AssetModule, MODULE_METADATA.EXPORTS);
|
||||
|
||||
expectNoModuleNamed(appImports, 'MinioClientModule');
|
||||
expectNoModuleNamed(platformImports, 'MinioClientModule');
|
||||
expectNoModuleNamed(assetImports, 'MinioClientModule');
|
||||
expectNoModuleNamed(assetExports, 'MinioClientModule');
|
||||
|
||||
expect(assetImports).toEqual(
|
||||
expect.arrayContaining([AdminAuthGuardModule, ConfigModule]),
|
||||
);
|
||||
expectControllersNotRegisteredDirectly(AssetModule, ASSET_CONTROLLERS);
|
||||
|
||||
expect(
|
||||
getModuleMetadata(MinioClientModule, MODULE_METADATA.CONTROLLERS),
|
||||
getModuleMetadata(AssetModule, MODULE_METADATA.CONTROLLERS),
|
||||
).toEqual(expect.arrayContaining([MinioClientController]));
|
||||
expect(
|
||||
getModuleMetadata(MinioClientModule, MODULE_METADATA.PROVIDERS),
|
||||
getModuleMetadata(AssetModule, MODULE_METADATA.PROVIDERS),
|
||||
).toEqual(expect.arrayContaining([MinioClientService]));
|
||||
expect(assetExports).toEqual(expect.arrayContaining([MinioClientService]));
|
||||
expect(ASSET_CONTROLLERS).toEqual(
|
||||
expect.arrayContaining([MinioClientController]),
|
||||
);
|
||||
|
||||
@ -4,19 +4,21 @@ jest.mock('../../../src/modules/qqbot/core/qqbot-core.module', () => ({
|
||||
|
||||
import { MODULE_METADATA } from '@nestjs/common/constants';
|
||||
import { AppModule } from '../../../src/app.module';
|
||||
import { BlogArticleController } from '../../../src/blog/blog-article.controller';
|
||||
import { BlogArticleService } from '../../../src/blog/blog-article.service';
|
||||
import { BlogModule } from '../../../src/blog/blog.module';
|
||||
import { BlogTermController } from '../../../src/blog/blog-term.controller';
|
||||
import { BlogTermService } from '../../../src/blog/blog-term.service';
|
||||
import { BlogThemeConfigController } from '../../../src/blog/blog-theme-config.controller';
|
||||
import { BlogThemeConfigService } from '../../../src/blog/blog-theme-config.service';
|
||||
import { CommonModule } from '../../../src/common';
|
||||
import { AdminAuthGuardModule } from '../../../src/modules/admin/identity/auth/admin-auth-guard.module';
|
||||
import { BlogArticleService } from '../../../src/modules/blog/application/blog-article.service';
|
||||
import { BlogTermService } from '../../../src/modules/blog/application/blog-term.service';
|
||||
import { BlogThemeConfigService } from '../../../src/modules/blog/application/blog-theme-config.service';
|
||||
import { BlogArticleController } from '../../../src/modules/blog/contract/blog-article.controller';
|
||||
import { BlogTermController } from '../../../src/modules/blog/contract/blog-term.controller';
|
||||
import { BlogThemeConfigController } from '../../../src/modules/blog/contract/blog-theme-config.controller';
|
||||
import {
|
||||
BLOG_CONTENT_CONTROLLERS,
|
||||
BLOG_CONTENT_DOMAIN_CONTRACT,
|
||||
BLOG_CONTENT_PROVIDERS,
|
||||
BlogContentModule,
|
||||
} from '../../../src/modules/blog/blog-content.module';
|
||||
import { WordpressMirrorModule } from '../../../src/modules/wordpress/wordpress-mirror.module';
|
||||
import {
|
||||
collectControllerRoutes,
|
||||
routeKey,
|
||||
@ -27,18 +29,13 @@ const getModuleMetadata = <T>(moduleClass: unknown, key: string): T[] => {
|
||||
return Reflect.getMetadata(key, moduleClass) || [];
|
||||
};
|
||||
|
||||
const expectControllersNotRegisteredDirectly = (
|
||||
moduleClass: unknown,
|
||||
controllers: unknown[],
|
||||
) => {
|
||||
const directControllers = getModuleMetadata(
|
||||
moduleClass,
|
||||
MODULE_METADATA.CONTROLLERS,
|
||||
);
|
||||
|
||||
for (const controller of controllers) {
|
||||
expect(directControllers).not.toContain(controller);
|
||||
}
|
||||
const expectNoModuleNamed = (modules: unknown[], moduleName: string) => {
|
||||
expect(
|
||||
modules.some(
|
||||
(moduleRef) =>
|
||||
typeof moduleRef === 'function' && moduleRef.name === moduleName,
|
||||
),
|
||||
).toBe(false);
|
||||
};
|
||||
|
||||
describe('Blog content module contract', () => {
|
||||
@ -81,29 +78,48 @@ describe('Blog content module contract', () => {
|
||||
expect(getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS)).toEqual(
|
||||
expect.arrayContaining([BlogContentModule]),
|
||||
);
|
||||
expect(getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS)).not.toEqual(
|
||||
expect.arrayContaining([BlogModule]),
|
||||
);
|
||||
|
||||
expect(
|
||||
getModuleMetadata(BlogContentModule, MODULE_METADATA.IMPORTS),
|
||||
).toEqual(expect.arrayContaining([BlogModule]));
|
||||
expect(
|
||||
getModuleMetadata(BlogContentModule, MODULE_METADATA.EXPORTS),
|
||||
).toEqual(expect.arrayContaining([BlogModule]));
|
||||
expectControllersNotRegisteredDirectly(
|
||||
const appImports = getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS);
|
||||
const blogImports = getModuleMetadata(
|
||||
BlogContentModule,
|
||||
BLOG_CONTENT_CONTROLLERS,
|
||||
MODULE_METADATA.IMPORTS,
|
||||
);
|
||||
const blogExports = getModuleMetadata(
|
||||
BlogContentModule,
|
||||
MODULE_METADATA.EXPORTS,
|
||||
);
|
||||
|
||||
expect(getModuleMetadata(BlogModule, MODULE_METADATA.CONTROLLERS)).toEqual(
|
||||
expectNoModuleNamed(appImports, 'BlogModule');
|
||||
expectNoModuleNamed(blogImports, 'BlogModule');
|
||||
expectNoModuleNamed(blogExports, 'BlogModule');
|
||||
|
||||
expect(blogImports).toEqual(
|
||||
expect.arrayContaining([
|
||||
AdminAuthGuardModule,
|
||||
CommonModule,
|
||||
WordpressMirrorModule,
|
||||
]),
|
||||
);
|
||||
expect(
|
||||
blogImports.some(
|
||||
(moduleRef: any) => moduleRef?.module?.name === 'TypeOrmModule',
|
||||
),
|
||||
).toBe(true);
|
||||
expect(getModuleMetadata(BlogContentModule, MODULE_METADATA.CONTROLLERS)).toEqual(
|
||||
expect.arrayContaining([
|
||||
BlogArticleController,
|
||||
BlogTermController,
|
||||
BlogThemeConfigController,
|
||||
]),
|
||||
);
|
||||
expect(getModuleMetadata(BlogModule, MODULE_METADATA.PROVIDERS)).toEqual(
|
||||
expect(getModuleMetadata(BlogContentModule, MODULE_METADATA.PROVIDERS)).toEqual(
|
||||
expect.arrayContaining([
|
||||
BlogArticleService,
|
||||
BlogTermService,
|
||||
BlogThemeConfigService,
|
||||
]),
|
||||
);
|
||||
expect(blogExports).toEqual(
|
||||
expect.arrayContaining([
|
||||
BlogArticleService,
|
||||
BlogTermService,
|
||||
|
||||
@ -4,20 +4,20 @@ jest.mock('../../../src/modules/qqbot/core/qqbot-core.module', () => ({
|
||||
|
||||
import { MODULE_METADATA } from '@nestjs/common/constants';
|
||||
import { AppModule } from '../../../src/app.module';
|
||||
import { AdminAuthGuardModule } from '../../../src/modules/admin/identity/auth/admin-auth-guard.module';
|
||||
import { AdminIdentityModule } from '../../../src/modules/admin/identity/admin-identity.module';
|
||||
import { WordpressService } from '../../../src/modules/wordpress/application/wordpress.service';
|
||||
import { WordpressArticleController } from '../../../src/modules/wordpress/contract/wordpress-article.controller';
|
||||
import { WordpressAuthController } from '../../../src/modules/wordpress/contract/wordpress-auth.controller';
|
||||
import { WordpressCategoryController } from '../../../src/modules/wordpress/contract/wordpress-category.controller';
|
||||
import { WordpressTagController } from '../../../src/modules/wordpress/contract/wordpress-tag.controller';
|
||||
import { WordpressThemeController } from '../../../src/modules/wordpress/contract/wordpress-theme.controller';
|
||||
import {
|
||||
WORDPRESS_MIRROR_CONTROLLERS,
|
||||
WORDPRESS_MIRROR_DOMAIN_CONTRACT,
|
||||
WORDPRESS_MIRROR_PROVIDERS,
|
||||
WordpressMirrorModule,
|
||||
} from '../../../src/modules/wordpress/wordpress-mirror.module';
|
||||
import { WordpressArticleController } from '../../../src/wordpress/wordpress-article.controller';
|
||||
import { WordpressAuthController } from '../../../src/wordpress/wordpress-auth.controller';
|
||||
import { WordpressCategoryController } from '../../../src/wordpress/wordpress-category.controller';
|
||||
import { WordpressModule } from '../../../src/wordpress/wordpress.module';
|
||||
import { WordpressService } from '../../../src/wordpress/wordpress.service';
|
||||
import { WordpressTagController } from '../../../src/wordpress/wordpress-tag.controller';
|
||||
import { WordpressThemeController } from '../../../src/wordpress/wordpress-theme.controller';
|
||||
import {
|
||||
collectControllerRoutes,
|
||||
routeKey,
|
||||
@ -28,18 +28,13 @@ const getModuleMetadata = <T>(moduleClass: unknown, key: string): T[] => {
|
||||
return Reflect.getMetadata(key, moduleClass) || [];
|
||||
};
|
||||
|
||||
const expectControllersNotRegisteredDirectly = (
|
||||
moduleClass: unknown,
|
||||
controllers: unknown[],
|
||||
) => {
|
||||
const directControllers = getModuleMetadata(
|
||||
moduleClass,
|
||||
MODULE_METADATA.CONTROLLERS,
|
||||
);
|
||||
|
||||
for (const controller of controllers) {
|
||||
expect(directControllers).not.toContain(controller);
|
||||
}
|
||||
const expectNoModuleNamed = (modules: unknown[], moduleName: string) => {
|
||||
expect(
|
||||
modules.some(
|
||||
(moduleRef) =>
|
||||
typeof moduleRef === 'function' && moduleRef.name === moduleName,
|
||||
),
|
||||
).toBe(false);
|
||||
};
|
||||
|
||||
describe('WordPress mirror module contract', () => {
|
||||
@ -79,29 +74,34 @@ describe('WordPress mirror module contract', () => {
|
||||
expect(getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS)).toEqual(
|
||||
expect.arrayContaining([WordpressMirrorModule]),
|
||||
);
|
||||
expect(getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS)).not.toEqual(
|
||||
expect.arrayContaining([WordpressModule]),
|
||||
);
|
||||
expect(
|
||||
getModuleMetadata(AdminIdentityModule, MODULE_METADATA.IMPORTS),
|
||||
).toEqual(expect.arrayContaining([WordpressMirrorModule]));
|
||||
expect(
|
||||
getModuleMetadata(AdminIdentityModule, MODULE_METADATA.IMPORTS),
|
||||
).not.toEqual(expect.arrayContaining([WordpressModule]));
|
||||
|
||||
expect(
|
||||
getModuleMetadata(WordpressMirrorModule, MODULE_METADATA.IMPORTS),
|
||||
).toEqual(expect.arrayContaining([WordpressModule]));
|
||||
expect(
|
||||
getModuleMetadata(WordpressMirrorModule, MODULE_METADATA.EXPORTS),
|
||||
).toEqual(expect.arrayContaining([WordpressModule]));
|
||||
expectControllersNotRegisteredDirectly(
|
||||
const appImports = getModuleMetadata(AppModule, MODULE_METADATA.IMPORTS);
|
||||
const identityImports = getModuleMetadata(
|
||||
AdminIdentityModule,
|
||||
MODULE_METADATA.IMPORTS,
|
||||
);
|
||||
const wordpressImports = getModuleMetadata(
|
||||
WordpressMirrorModule,
|
||||
WORDPRESS_MIRROR_CONTROLLERS,
|
||||
MODULE_METADATA.IMPORTS,
|
||||
);
|
||||
const wordpressExports = getModuleMetadata(
|
||||
WordpressMirrorModule,
|
||||
MODULE_METADATA.EXPORTS,
|
||||
);
|
||||
|
||||
expectNoModuleNamed(appImports, 'WordpressModule');
|
||||
expectNoModuleNamed(identityImports, 'WordpressModule');
|
||||
expectNoModuleNamed(wordpressImports, 'WordpressModule');
|
||||
expectNoModuleNamed(wordpressExports, 'WordpressModule');
|
||||
|
||||
expect(wordpressImports).toEqual(
|
||||
expect.arrayContaining([AdminAuthGuardModule]),
|
||||
);
|
||||
expect(
|
||||
getModuleMetadata(WordpressModule, MODULE_METADATA.CONTROLLERS),
|
||||
getModuleMetadata(WordpressMirrorModule, MODULE_METADATA.CONTROLLERS),
|
||||
).toEqual(
|
||||
expect.arrayContaining([
|
||||
WordpressAuthController,
|
||||
@ -112,8 +112,9 @@ describe('WordPress mirror module contract', () => {
|
||||
]),
|
||||
);
|
||||
expect(
|
||||
getModuleMetadata(WordpressModule, MODULE_METADATA.PROVIDERS),
|
||||
getModuleMetadata(WordpressMirrorModule, MODULE_METADATA.PROVIDERS),
|
||||
).toEqual(expect.arrayContaining([WordpressService]));
|
||||
expect(wordpressExports).toEqual(expect.arrayContaining([WordpressService]));
|
||||
expect(WORDPRESS_MIRROR_CONTROLLERS).toEqual(
|
||||
expect.arrayContaining([
|
||||
WordpressAuthController,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { createServer, type Server } from 'node:http';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import { MarkdownService, ToolsService } from '../../src/common';
|
||||
import { WordpressService } from '../../src/wordpress/wordpress.service';
|
||||
import { WordpressService } from '../../src/modules/wordpress/application/wordpress.service';
|
||||
|
||||
describe('WordpressService theme config', () => {
|
||||
const rootPayload = {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user