|
@@ -1,4 +1,4 @@
|
|
|
-import { Injectable, Logger } from '@nestjs/common'
|
|
|
|
|
|
|
+import { ForbiddenException, Injectable, Logger } from '@nestjs/common'
|
|
|
import { Observable } from 'rxjs'
|
|
import { Observable } from 'rxjs'
|
|
|
import { ChatGPTAPI, ChatMessage } from '../chatapi'
|
|
import { ChatGPTAPI, ChatMessage } from '../chatapi'
|
|
|
import type { RequestProps } from './types'
|
|
import type { RequestProps } from './types'
|
|
@@ -8,6 +8,8 @@ import { ChatHistory } from './entities/chat.entity'
|
|
|
import { InjectRepository } from '@nestjs/typeorm'
|
|
import { InjectRepository } from '@nestjs/typeorm'
|
|
|
import { TokenUsage } from './entities/token-usage.entity'
|
|
import { TokenUsage } from './entities/token-usage.entity'
|
|
|
import { format } from 'date-fns'
|
|
import { format } from 'date-fns'
|
|
|
|
|
+import { MembershipService } from '../membership/membership.service'
|
|
|
|
|
+import { MemberType } from '../membership/entities/membership.entity'
|
|
|
|
|
|
|
|
@Injectable()
|
|
@Injectable()
|
|
|
export class ChatService {
|
|
export class ChatService {
|
|
@@ -15,7 +17,8 @@ export class ChatService {
|
|
|
@InjectRepository(ChatHistory)
|
|
@InjectRepository(ChatHistory)
|
|
|
private readonly chatHistoryRepository: Repository<ChatHistory>,
|
|
private readonly chatHistoryRepository: Repository<ChatHistory>,
|
|
|
@InjectRepository(TokenUsage)
|
|
@InjectRepository(TokenUsage)
|
|
|
- private readonly tokenUsageRepository: Repository<TokenUsage>
|
|
|
|
|
|
|
+ private readonly tokenUsageRepository: Repository<TokenUsage>,
|
|
|
|
|
+ private readonly membershipService: MembershipService
|
|
|
) {}
|
|
) {}
|
|
|
|
|
|
|
|
public chat(req, res): Observable<any> {
|
|
public chat(req, res): Observable<any> {
|
|
@@ -51,7 +54,16 @@ export class ChatService {
|
|
|
|
|
|
|
|
public async chat1(req, res) {
|
|
public async chat1(req, res) {
|
|
|
res.setHeader('Content-type', 'application/octet-stream')
|
|
res.setHeader('Content-type', 'application/octet-stream')
|
|
|
-
|
|
|
|
|
|
|
+ const membership = await this.membershipService.getMembership(req.user.id)
|
|
|
|
|
+ if (!membership) {
|
|
|
|
|
+ throw new ForbiddenException('请先成为会员')
|
|
|
|
|
+ }
|
|
|
|
|
+ if (membership.memberType == MemberType.Trial && membership.tokenLeft <= 0) {
|
|
|
|
|
+ throw new ForbiddenException('您的试用额度已用完,请升级会员')
|
|
|
|
|
+ }
|
|
|
|
|
+ if (membership.isExpired) {
|
|
|
|
|
+ throw new ForbiddenException('您的会员已过期,请即时续费')
|
|
|
|
|
+ }
|
|
|
try {
|
|
try {
|
|
|
const promptTime = new Date()
|
|
const promptTime = new Date()
|
|
|
const { prompt, options = {}, systemMessage, temperature, top_p } = req.body as RequestProps
|
|
const { prompt, options = {}, systemMessage, temperature, top_p } = req.body as RequestProps
|
|
@@ -119,5 +131,7 @@ export class ChatService {
|
|
|
} else {
|
|
} else {
|
|
|
await this.tokenUsageRepository.save(new TokenUsage({ userId, usage, date }))
|
|
await this.tokenUsageRepository.save(new TokenUsage({ userId, usage, date }))
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ this.membershipService.saveUsage(userId, usage)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|