modify PostService and ContentModule
This commit is contained in:
parent
37f11a0097
commit
fdd9d80310
@ -4,7 +4,7 @@ import { APP_FILTER, APP_INTERCEPTOR, APP_PIPE } from '@nestjs/core';
|
|||||||
|
|
||||||
import { AppInterceptor } from '@/modules/core/providers/app.interceptor';
|
import { AppInterceptor } from '@/modules/core/providers/app.interceptor';
|
||||||
|
|
||||||
import { database } from './config';
|
import { content, database } from './config';
|
||||||
|
|
||||||
import { DEFAULT_VALIDATION_CONFIG } from './modules/content/constants';
|
import { DEFAULT_VALIDATION_CONFIG } from './modules/content/constants';
|
||||||
import { ContentModule } from './modules/content/content.module';
|
import { ContentModule } from './modules/content/content.module';
|
||||||
@ -14,7 +14,11 @@ import { AppPipe } from './modules/core/providers/app.pipe';
|
|||||||
import { DatabaseModule } from './modules/database/database.module';
|
import { DatabaseModule } from './modules/database/database.module';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [ContentModule, CoreModule.forRoot(), DatabaseModule.forRoot(database)],
|
imports: [
|
||||||
|
ContentModule.forRoot(content),
|
||||||
|
CoreModule.forRoot(),
|
||||||
|
DatabaseModule.forRoot(database),
|
||||||
|
],
|
||||||
providers: [
|
providers: [
|
||||||
{
|
{
|
||||||
provide: APP_PIPE,
|
provide: APP_PIPE,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Module } from '@nestjs/common';
|
import { DynamicModule, Module, ModuleMetadata } from '@nestjs/common';
|
||||||
|
|
||||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
|
|
||||||
@ -8,19 +8,59 @@ import * as repositories from '@/modules/content/repositories';
|
|||||||
import * as services from '@/modules/content/services';
|
import * as services from '@/modules/content/services';
|
||||||
import { SanitizeService } from '@/modules/content/services/SanitizeService';
|
import { SanitizeService } from '@/modules/content/services/SanitizeService';
|
||||||
|
|
||||||
|
import { PostService } from '@/modules/content/services/post.service';
|
||||||
import { PostSubscriber } from '@/modules/content/subscribers/post.subscriber';
|
import { PostSubscriber } from '@/modules/content/subscribers/post.subscriber';
|
||||||
|
import { ContentConfig } from '@/modules/content/types';
|
||||||
import { DatabaseModule } from '@/modules/database/database.module';
|
import { DatabaseModule } from '@/modules/database/database.module';
|
||||||
|
|
||||||
@Module({
|
@Module({})
|
||||||
imports: [
|
export class ContentModule {
|
||||||
TypeOrmModule.forFeature(Object.values(entities)),
|
static forRoot(configRegister?: () => ContentConfig): DynamicModule {
|
||||||
DatabaseModule.forRepository(Object.values(repositories)),
|
const config: Required<ContentConfig> = {
|
||||||
],
|
SearchType: 'mysql',
|
||||||
controllers: Object.values(controllers),
|
...(configRegister ? configRegister() : {}),
|
||||||
providers: [...Object.values(services), PostSubscriber, SanitizeService],
|
};
|
||||||
exports: [
|
const providers: ModuleMetadata['providers'] = [
|
||||||
...Object.values(services),
|
...Object.values(services),
|
||||||
DatabaseModule.forRepository(Object.values(repositories)),
|
SanitizeService,
|
||||||
],
|
PostSubscriber,
|
||||||
})
|
{
|
||||||
export class ContentModule {}
|
provide: PostService,
|
||||||
|
inject: [
|
||||||
|
repositories.PostRepository,
|
||||||
|
repositories.CategoryRepository,
|
||||||
|
repositories.TagRepository,
|
||||||
|
services.CategoryService,
|
||||||
|
],
|
||||||
|
useFactory(
|
||||||
|
postRepository: repositories.PostRepository,
|
||||||
|
categoryRepository: repositories.CategoryRepository,
|
||||||
|
tagRepository: repositories.TagRepository,
|
||||||
|
categoryService: services.CategoryService,
|
||||||
|
) {
|
||||||
|
return new PostService(
|
||||||
|
postRepository,
|
||||||
|
categoryRepository,
|
||||||
|
categoryService,
|
||||||
|
tagRepository,
|
||||||
|
config.SearchType,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
return {
|
||||||
|
module: ContentModule,
|
||||||
|
imports: [
|
||||||
|
TypeOrmModule.forFeature(Object.values(entities)),
|
||||||
|
DatabaseModule.forRepository(Object.values(repositories)),
|
||||||
|
],
|
||||||
|
controllers: Object.values(controllers),
|
||||||
|
providers,
|
||||||
|
exports: [
|
||||||
|
...Object.values(services),
|
||||||
|
PostService,
|
||||||
|
DatabaseModule.forRepository(Object.values(repositories)),
|
||||||
|
],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
export * from './category.service';
|
export * from './category.service';
|
||||||
export * from './tag.service';
|
export * from './tag.service';
|
||||||
export * from './post.service';
|
|
||||||
export * from './comment.service';
|
export * from './comment.service';
|
||||||
|
@ -9,6 +9,7 @@ import { CreatePostDto, QueryPostDto, UpdatePostDto } from '@/modules/content/dt
|
|||||||
import { PostEntity } from '@/modules/content/entities/post.entity';
|
import { PostEntity } from '@/modules/content/entities/post.entity';
|
||||||
import { CategoryRepository } from '@/modules/content/repositories';
|
import { CategoryRepository } from '@/modules/content/repositories';
|
||||||
import { PostRepository } from '@/modules/content/repositories/post.repository';
|
import { PostRepository } from '@/modules/content/repositories/post.repository';
|
||||||
|
import { SearchType } from '@/modules/content/types';
|
||||||
import { SelectTrashMode } from '@/modules/database/constants';
|
import { SelectTrashMode } from '@/modules/database/constants';
|
||||||
import { QueryHook } from '@/modules/database/types';
|
import { QueryHook } from '@/modules/database/types';
|
||||||
import { paginate } from '@/modules/database/utils';
|
import { paginate } from '@/modules/database/utils';
|
||||||
@ -28,6 +29,7 @@ export class PostService {
|
|||||||
protected categoryRepository: CategoryRepository,
|
protected categoryRepository: CategoryRepository,
|
||||||
protected categoryService: CategoryService,
|
protected categoryService: CategoryService,
|
||||||
protected tagRepository: TagRepository,
|
protected tagRepository: TagRepository,
|
||||||
|
protected searchType: SearchType = 'mysql',
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async paginate(options: QueryPostDto, callback?: QueryHook<PostEntity>) {
|
async paginate(options: QueryPostDto, callback?: QueryHook<PostEntity>) {
|
||||||
@ -115,8 +117,8 @@ export class PostService {
|
|||||||
.where('post.id IN (:...ids)', { ids })
|
.where('post.id IN (:...ids)', { ids })
|
||||||
.withDeleted()
|
.withDeleted()
|
||||||
.getMany();
|
.getMany();
|
||||||
const trasheds = items.filter((item) => !isNil(item.deleteAt));
|
const trashes = items.filter((item) => !isNil(item.deleteAt));
|
||||||
const trashedIds = trasheds.map((item) => item.id);
|
const trashedIds = trashes.map((item) => item.id);
|
||||||
if (trashedIds.length < 1) {
|
if (trashedIds.length < 1) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
@ -157,6 +159,15 @@ export class PostService {
|
|||||||
return qb;
|
return qb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected buildSearchQuery(qb: SelectQueryBuilder<PostEntity>, search: string) {
|
||||||
|
qb.orWhere('title LIKE :search', { search: `%${search}%` })
|
||||||
|
.orWhere('summary LIKE :search', { search: `%${search}%` })
|
||||||
|
.orWhere('body LIKE :search', { search: `%${search}%` })
|
||||||
|
.orWhere('category.name LIKE :search', { search: `%${search}%` })
|
||||||
|
.orWhere('tags.name LIKE :search', { search: `%${search}%` });
|
||||||
|
return qb;
|
||||||
|
}
|
||||||
|
|
||||||
protected queryOrderBy(qb: SelectQueryBuilder<PostEntity>, orderBy?: PostOrder) {
|
protected queryOrderBy(qb: SelectQueryBuilder<PostEntity>, orderBy?: PostOrder) {
|
||||||
switch (orderBy) {
|
switch (orderBy) {
|
||||||
case PostOrder.CREATED:
|
case PostOrder.CREATED:
|
||||||
|
Loading…
Reference in New Issue
Block a user