|
@@ -6,14 +6,18 @@ import {
|
|
Post,
|
|
Post,
|
|
Body,
|
|
Body,
|
|
Headers,
|
|
Headers,
|
|
|
|
+ Delete,
|
|
} from '@nestjs/common';
|
|
} from '@nestjs/common';
|
|
import { AuthService } from 'src/auth/auth.service';
|
|
import { AuthService } from 'src/auth/auth.service';
|
|
import { DatasourceService } from 'src/datasource/datasource.service';
|
|
import { DatasourceService } from 'src/datasource/datasource.service';
|
|
|
|
+import { generateVibrantRandomColor } from 'src/utils';
|
|
|
|
|
|
interface PostBody {
|
|
interface PostBody {
|
|
title: string;
|
|
title: string;
|
|
content: string;
|
|
content: string;
|
|
tags: string[];
|
|
tags: string[];
|
|
|
|
+ cate: string;
|
|
|
|
+ description?: string;
|
|
}
|
|
}
|
|
|
|
|
|
@Controller('post')
|
|
@Controller('post')
|
|
@@ -25,20 +29,34 @@ export class PostController {
|
|
|
|
|
|
@Get('/list')
|
|
@Get('/list')
|
|
async getAllPosts(
|
|
async getAllPosts(
|
|
- @Query('length') take: number = 10,
|
|
|
|
- @Query('start') skip: number = 0,
|
|
|
|
|
|
+ @Query('length') take: number | string,
|
|
|
|
+ @Query('start') skip: number | string,
|
|
) {
|
|
) {
|
|
|
|
+ take = Number(take);
|
|
|
|
+ skip = Number(skip);
|
|
|
|
+ if (isNaN(take) || isNaN(skip)) {
|
|
|
|
+ return {
|
|
|
|
+ code: 400,
|
|
|
|
+ msg: 'Invalid length or start',
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+
|
|
const prisma = this.datasource.getPrisma();
|
|
const prisma = this.datasource.getPrisma();
|
|
return {
|
|
return {
|
|
code: 200,
|
|
code: 200,
|
|
data: await prisma.post.findMany({
|
|
data: await prisma.post.findMany({
|
|
- skip: Number(skip),
|
|
|
|
- take: Number(take),
|
|
|
|
|
|
+ skip,
|
|
|
|
+ take,
|
|
|
|
+ orderBy: {
|
|
|
|
+ createdAt: 'desc',
|
|
|
|
+ },
|
|
select: {
|
|
select: {
|
|
id: true,
|
|
id: true,
|
|
title: true,
|
|
title: true,
|
|
createdAt: true,
|
|
createdAt: true,
|
|
updatedAt: true,
|
|
updatedAt: true,
|
|
|
|
+ cate: true,
|
|
|
|
+ descirption: true,
|
|
tags: {
|
|
tags: {
|
|
select: {
|
|
select: {
|
|
name: true,
|
|
name: true,
|
|
@@ -62,6 +80,8 @@ export class PostController {
|
|
content: true,
|
|
content: true,
|
|
createdAt: true,
|
|
createdAt: true,
|
|
updatedAt: true,
|
|
updatedAt: true,
|
|
|
|
+ cate: true,
|
|
|
|
+ descirption: true,
|
|
tags: {
|
|
tags: {
|
|
select: {
|
|
select: {
|
|
name: true,
|
|
name: true,
|
|
@@ -99,10 +119,12 @@ export class PostController {
|
|
data: {
|
|
data: {
|
|
title: body.title,
|
|
title: body.title,
|
|
content: body.content,
|
|
content: body.content,
|
|
|
|
+ cate: body.cate,
|
|
|
|
+ descirption: body.description ?? '',
|
|
tags: {
|
|
tags: {
|
|
connectOrCreate: body.tags.map((tag) => ({
|
|
connectOrCreate: body.tags.map((tag) => ({
|
|
where: { name: tag },
|
|
where: { name: tag },
|
|
- create: { name: tag, color: '#000000' },
|
|
|
|
|
|
+ create: { name: tag, color: generateVibrantRandomColor() },
|
|
})),
|
|
})),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
@@ -139,11 +161,13 @@ export class PostController {
|
|
data: {
|
|
data: {
|
|
title: body.title,
|
|
title: body.title,
|
|
content: body.content,
|
|
content: body.content,
|
|
|
|
+ cate: body.cate,
|
|
|
|
+ descirption: body.description ?? '',
|
|
tags: {
|
|
tags: {
|
|
set: [],
|
|
set: [],
|
|
connectOrCreate: body.tags.map((tag) => ({
|
|
connectOrCreate: body.tags.map((tag) => ({
|
|
where: { name: tag },
|
|
where: { name: tag },
|
|
- create: { name: tag, color: '#000000' },
|
|
|
|
|
|
+ create: { name: tag, color: generateVibrantRandomColor() },
|
|
})),
|
|
})),
|
|
},
|
|
},
|
|
},
|
|
},
|
|
@@ -158,7 +182,7 @@ export class PostController {
|
|
}));
|
|
}));
|
|
}
|
|
}
|
|
|
|
|
|
- @Post('delete/:id')
|
|
|
|
|
|
+ @Delete('delete/:id')
|
|
async deletePost(
|
|
async deletePost(
|
|
@Param('id') id: string,
|
|
@Param('id') id: string,
|
|
@Headers('Authorization') token: string,
|
|
@Headers('Authorization') token: string,
|