Compare commits

...

2 Commits

Author SHA1 Message Date
7988850063 add content 2025-05-20 00:30:34 +08:00
356d9d5996 add content 2025-05-20 00:05:32 +08:00
3 changed files with 62 additions and 14 deletions

View File

@ -8,17 +8,29 @@ import {
Patch,
Post,
Query,
ValidationPipe,
} from '@nestjs/common';
import { CreatePostDto, QueryPostDto, UpdatePostDto } from '@/modules/content/dtos/post.dto';
import { PostService } from '@/modules/content/services/post.service';
import { PaginateOptions } from '@/modules/database/types';
@Controller('posts')
export class PostController {
constructor(private postService: PostService) {}
@Get()
async list(@Query() options: PaginateOptions) {
async list(
@Query(
new ValidationPipe({
transform: true,
whitelist: true,
forbidUnknownValues: true,
forbidNonWhitelisted: true,
validationError: { target: false },
}),
)
options: QueryPostDto,
) {
return this.postService.paginate(options);
}
@ -29,16 +41,34 @@ export class PostController {
@Post()
async store(
@Body()
data: RecordAny,
@Body(
new ValidationPipe({
transform: true,
whitelist: true,
forbidUnknownValues: true,
forbidNonWhitelisted: true,
validationError: { target: false },
groups: ['create'],
}),
)
data: CreatePostDto,
) {
return this.postService.create(data);
}
@Patch()
async update(
@Body()
data: RecordAny,
@Body(
new ValidationPipe({
transform: true,
whitelist: true,
forbidUnknownValues: true,
forbidNonWhitelisted: true,
validationError: { target: false },
groups: ['update'],
}),
)
data: UpdatePostDto,
) {
return this.postService.update(data);
}

View File

@ -1,5 +1,12 @@
import { Expose } from 'class-transformer';
import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryColumn } from 'typeorm';
import {
BaseEntity,
Column,
CreateDateColumn,
Entity,
PrimaryColumn,
UpdateDateColumn,
} from 'typeorm';
import { PostBodyType } from '@/modules/content/constants';
@ -21,7 +28,7 @@ export class PostEntity extends BaseEntity {
@Column({ comment: '关键字', type: 'simple-array', nullable: true })
keywords?: [];
@Column({ comment: '文章类型', type: 'enum', enum: PostBodyType })
@Column({ comment: '文章类型', type: 'enum', enum: PostBodyType, default: PostBodyType.HTML })
type: PostBodyType;
@Column({ comment: '发布时间', type: 'varchar', nullable: true })
@ -33,6 +40,6 @@ export class PostEntity extends BaseEntity {
@CreateDateColumn({ comment: '创建时间' })
createdAt?: Date;
@Column({ comment: '更新时间', nullable: true })
@UpdateDateColumn({ comment: '更新时间' })
updatedAt?: Date;
}

View File

@ -5,6 +5,7 @@ import { isFunction, omit } from 'lodash';
import { EntityNotFoundError, IsNull, Not, SelectQueryBuilder } from 'typeorm';
import { PostOrder } from '@/modules/content/constants';
import { CreatePostDto, UpdatePostDto } from '@/modules/content/dtos/post.dto';
import { PostEntity } from '@/modules/content/entities/post.entity';
import { PostRepository } from '@/modules/content/repositories/post.repository';
import { PaginateOptions, QueryHook } from '@/modules/database/types';
@ -30,14 +31,24 @@ export class PostService {
return item;
}
async create(data: RecordAny) {
const item = await this.repository.save(data);
async create(data: CreatePostDto) {
let publishedAt: Date | null;
if (!isNil(data.publish)) {
publishedAt = data.publish ? new Date() : null;
}
const item = await this.repository.save({ ...omit(data, ['publish']), publishedAt });
return this.detail(item.id);
}
async update(data: RecordAny) {
data.updatedAt = new Date();
await this.repository.update(data.id, omit(data, ['id']));
async update(data: UpdatePostDto) {
let publishedAt: Date | null;
if (!isNil(data.publish)) {
publishedAt = data.publish ? new Date() : null;
}
await this.repository.update(data.id, {
...omit(data, ['id', 'publish']),
publishedAt,
});
return this.detail(data.id);
}