x1ongzhu před 2 roky
rodič
revize
5f0203c30d

+ 2 - 1
src/app.module.ts

@@ -74,7 +74,8 @@ import { PaperModule } from './paper/paper.module';
                 cli: {
                     migrationsDir: config.get<string>('TYPEORM_MIGRATIONS_DIR'),
                     subscribersDir: config.get<string>('TYPEORM_SUBSCRIBERS_DIR')
-                }
+                },
+                logging: true
             })
         }),
         TypeOrmModule.forRootAsync({

+ 1 - 1
src/auth/jwt.strategy.ts

@@ -40,7 +40,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) {
             id: payload.sub,
             userId: payload.sub,
             username: payload.username,
-            roles: payload.roles,
+            roles: user.roles,
             orgId: user.orgId,
         }
     }

+ 3 - 1
src/model/role.enum.ts

@@ -2,5 +2,7 @@ export enum Role {
     User = 'user',
     Admin = 'admin',
     Api = 'api',
-    Org = 'org'
+    Org = 'org',
+    PaperGen = 'paperGen',
+    PaperOrder = 'paperOrder'
 }

+ 2 - 0
src/paper/dto/create-order.dto.ts

@@ -11,4 +11,6 @@ export class CreatePaperOrderDto {
     @IsString()
     @IsOptional()
     remark?: string
+
+    userId: number
 }

+ 7 - 4
src/paper/paper-gen/general.ts

@@ -68,12 +68,12 @@ title: ${title}
 全文按照以下章节组织:
 ${chapters2md(chapters)}
 
-你的语气应正式,内容应适合和吸引一般读者。
 你要严格按照markdown格式返回内容。
 不要擅作主张输出你对该内容的总结或者介绍等其他文字,不需要出现介绍下一章或其他承上启下的文字。
 你要严格遵守我的指令,按照我的指定的章节和小节完成论文的写作。
 你的写作应该有逻辑性,不要让人觉得你是一个机器人。
-请直接开始写作,不要对内容作任何解释。`
+请直接开始写作,不要对内容作任何解释。
+请务必不能让人觉得你是一个AI,否则我可能会丢掉我的学位`
         paper.write(
             `\n\n# 第${NumberToChinese.convertNumber(i + 1, { removeLeadingOne: i + 1 >= 10 })}章 ${chapter.title}`
         )
@@ -92,11 +92,14 @@ ${chapters2md(chapters)}
                     chapter.children.map(async (section, j) => {
                         let prompt
                         if (section.children?.length) {
-                            prompt = `${chapters2md(section.children, [i + 1, j + 1])}
+prompt = `你可以适当加入一些口语,让文章更接近真人的书写的感觉
+请务必不能让人觉得你是一个AI,否则我可能会丢掉我的学位
+
+${chapters2md(section.children, [i + 1, j + 1])}
 请按照以上结构编写第${i + 1}章${chapter.title}的${i + 1}.${j + 1}小节(请注意只需要编写这一小节的内容)
 ## ${i + 1}.${j + 1} ${section.title} :`
                         } else {
-                            prompt = `请编写第${i + 1}章${chapter.title}的${i + 1}.${
+                            prompt = `请务必不能让人觉得你是一个AI,否则我可能会丢掉我的学位\n\n请编写第${i + 1}章${chapter.title}的${i + 1}.${
                                 j + 1
                             }小节(请注意只需要编写这一小节的内容)
 ## ${i + 1}.${j + 1} ${section.title}:`

+ 7 - 4
src/paper/paper.controller.ts

@@ -1,17 +1,19 @@
-import { Body, Controller, Get, Param, Patch, Post, Put } from '@nestjs/common'
+import { Body, Controller, Get, Param, Patch, Post, Put, Req } from '@nestjs/common'
 import { PaperService } from './paper.service'
 import { PageRequest } from '../common/dto/page-request'
 import { PaperOrder } from './entities/paper-order.entity'
 import { PaperGenResult } from './entities/paper-gen-result.entity'
 import { CreatePaperOrderDto } from './dto/create-order.dto'
+import { HasAnyRoles } from 'src/auth/roles.decorator'
 
 @Controller('paper')
+@HasAnyRoles('paperOrder', 'paperGen')
 export class PaperController {
     constructor(private readonly paperService: PaperService) {}
 
     @Post('/orders')
-    async orders(@Body() page: PageRequest<PaperOrder>) {
-        return await this.paperService.findAllOrders(page)
+    async orders(@Body() page: PageRequest<PaperOrder>, @Req() req) {
+        return await this.paperService.findAllOrders(req, page)
     }
 
     @Post('/results')
@@ -20,7 +22,8 @@ export class PaperController {
     }
 
     @Put('/orders')
-    async createOrder(@Body() dto: CreatePaperOrderDto) {
+    async createOrder(@Body() dto: CreatePaperOrderDto, @Req() req) {
+        dto.userId = req.user.id
         return await this.paperService.createOrder(dto)
     }
 

+ 11 - 3
src/paper/paper.service.ts

@@ -1,7 +1,7 @@
 import { Injectable, InternalServerErrorException, Logger, OnModuleInit } from '@nestjs/common'
 import { InjectRepository } from '@nestjs/typeorm'
 import { PaperOrder, PaperOrderStatus } from './entities/paper-order.entity'
-import { Repository } from 'typeorm'
+import { Repository, Like } from 'typeorm'
 import { PaperGenResult } from './entities/paper-gen-result.entity'
 import { Pagination, paginate } from 'nestjs-typeorm-paginate'
 import { PageRequest } from 'src/common/dto/page-request'
@@ -37,8 +37,16 @@ export class PaperService implements OnModuleInit {
         }
     }
 
-    async findAllOrders(req: PageRequest<PaperOrder>) {
-        return await paginate<PaperOrder>(this.paperOrderRepository, req.page, req.search)
+    async findAllOrders(req, pageReq: PageRequest<PaperOrder>) {
+        ;(pageReq as any).search.where = (pageReq as any).search.where || {}
+        let where = (pageReq as any).search.where
+        if (!req.user.roles.includes('paperGen')) {
+            where.userId = req.user.id
+        }
+        if (where.title) {
+            where.title = Like(`%${where.title}%`)
+        }
+        return await paginate<PaperOrder>(this.paperOrderRepository, pageReq.page, pageReq.search)
     }
 
     async findOrderById(id: number): Promise<PaperOrder> {

+ 8 - 2
src/users/users.service.ts

@@ -7,7 +7,7 @@ import {
     InternalServerErrorException,
     UnauthorizedException
 } from '@nestjs/common'
-import { In, Repository, UpdateResult, MoreThanOrEqual, LessThanOrEqual, And } from 'typeorm'
+import { In, Repository, UpdateResult, MoreThanOrEqual, LessThanOrEqual, And, Raw } from 'typeorm'
 import { InjectRepository } from '@nestjs/typeorm'
 import { Users } from './entities/users.entity'
 import { IUsers } from './interfaces/users.interface'
@@ -24,7 +24,7 @@ import { Role } from '../model/role.enum'
 import { PageRequest } from '../common/dto/page-request'
 import { th } from 'date-fns/locale'
 import { startOfDay, endOfDay, addDays, format } from 'date-fns'
-import { where } from 'sequelize'
+import { where, FindOptions } from 'sequelize'
 
 @Injectable()
 export class UsersService {
@@ -38,6 +38,12 @@ export class UsersService {
     ) {}
 
     async findAll(req: PageRequest<Users>): Promise<Pagination<Users>> {
+        let where = (req as any).search?.where
+        if (where?.roles) {
+            where.roles = Raw((alias) => `find_in_set(:value, ${alias})`, {
+                value: where.roles
+            })
+        }
         return await paginate<Users>(this.userRepository, req.page, req.search)
     }