NineAI 2.4.2

This commit is contained in:
vastxie
2024-01-17 09:22:28 +08:00
commit bdc48207fc
636 changed files with 41864 additions and 0 deletions

262
dist/modules/app/app.controller.js vendored Normal file
View File

@@ -0,0 +1,262 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AppController = void 0;
const app_service_1 = require("./app.service");
const common_1 = require("@nestjs/common");
const swagger_1 = require("@nestjs/swagger");
const createCats_dto_1 = require("./dto/createCats.dto");
const updateCats_dto_1 = require("./dto/updateCats.dto");
const deleteCats_dto_1 = require("./dto/deleteCats.dto");
const queryCats_dto_1 = require("./dto/queryCats.dto");
const createApp_dto_1 = require("./dto/createApp.dto");
const updateApp_dto_1 = require("./dto/updateApp.dto");
const deleteApp_dto_1 = require("./dto/deleteApp.dto");
const queryApp_dto_1 = require("./dto/queryApp.dto");
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
const collectApp_dto_1 = require("./dto/collectApp.dto");
const custonApp_dto_1 = require("./dto/custonApp.dto");
let AppController = class AppController {
constructor(appService) {
this.appService = appService;
}
appCatsList(query) {
return this.appService.appCatsList(query);
}
catsList() {
const params = { status: 1, page: 1, size: 1000, name: '' };
return this.appService.appCatsList(params);
}
queryOneCats(query) {
return this.appService.queryOneCat(query);
}
createAppCat(body) {
return this.appService.createAppCat(body);
}
updateAppCats(body) {
return this.appService.updateAppCats(body);
}
delAppCat(body) {
return this.appService.delAppCat(body);
}
appList(req, query) {
return this.appService.appList(req, query);
}
list(req, query) {
return this.appService.frontAppList(req, query);
}
createApp(body) {
return this.appService.createApp(body);
}
customApp(body, req) {
return this.appService.customApp(body, req);
}
updateApp(body) {
return this.appService.updateApp(body);
}
delApp(body) {
return this.appService.delApp(body);
}
auditPass(body) {
return this.appService.auditPass(body);
}
auditFail(body) {
return this.appService.auditFail(body);
}
delMineApp(body, req) {
return this.appService.delMineApp(body, req);
}
collect(body, req) {
return this.appService.collect(body, req);
}
mineApps(req) {
return this.appService.mineApps(req);
}
};
__decorate([
(0, common_1.Get)('queryAppCats'),
(0, swagger_1.ApiOperation)({ summary: '获取App分类列表' }),
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [queryCats_dto_1.QuerCatsDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "appCatsList", null);
__decorate([
(0, common_1.Get)('queryCats'),
(0, swagger_1.ApiOperation)({ summary: '用户端获取App分类列表' }),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], AppController.prototype, "catsList", null);
__decorate([
(0, common_1.Get)('queryOneCat'),
(0, swagger_1.ApiOperation)({ summary: '用户端获取App分类列表' }),
__param(0, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], AppController.prototype, "queryOneCats", null);
__decorate([
(0, common_1.Post)('createAppCats'),
(0, swagger_1.ApiOperation)({ summary: '添加App分类' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [createCats_dto_1.CreateCatsDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "createAppCat", null);
__decorate([
(0, common_1.Post)('updateAppCats'),
(0, swagger_1.ApiOperation)({ summary: '修改App分类' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [updateCats_dto_1.UpdateCatsDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "updateAppCats", null);
__decorate([
(0, common_1.Post)('delAppCats'),
(0, swagger_1.ApiOperation)({ summary: '删除App分类' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [deleteCats_dto_1.DeleteCatsDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "delAppCat", null);
__decorate([
(0, common_1.Get)('queryApp'),
(0, swagger_1.ApiOperation)({ summary: '获取App列表' }),
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, queryApp_dto_1.QuerAppDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "appList", null);
__decorate([
(0, common_1.Get)('list'),
(0, swagger_1.ApiOperation)({ summary: '客户端获取App' }),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, queryApp_dto_1.QuerAppDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "list", null);
__decorate([
(0, common_1.Post)('createApp'),
(0, swagger_1.ApiOperation)({ summary: '添加App' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [createApp_dto_1.CreateAppDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "createApp", null);
__decorate([
(0, common_1.Post)('customApp'),
(0, swagger_1.ApiOperation)({ summary: '添加自定义App' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [custonApp_dto_1.CustomAppDto, Object]),
__metadata("design:returntype", void 0)
], AppController.prototype, "customApp", null);
__decorate([
(0, common_1.Post)('updateApp'),
(0, swagger_1.ApiOperation)({ summary: '修改App' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [updateApp_dto_1.UpdateAppDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "updateApp", null);
__decorate([
(0, common_1.Post)('delApp'),
(0, swagger_1.ApiOperation)({ summary: '删除App' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [deleteApp_dto_1.OperateAppDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "delApp", null);
__decorate([
(0, common_1.Post)('auditPass'),
(0, swagger_1.ApiOperation)({ summary: '审核通过App' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [deleteApp_dto_1.OperateAppDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "auditPass", null);
__decorate([
(0, common_1.Post)('auditFail'),
(0, swagger_1.ApiOperation)({ summary: '审核拒绝App' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [deleteApp_dto_1.OperateAppDto]),
__metadata("design:returntype", void 0)
], AppController.prototype, "auditFail", null);
__decorate([
(0, common_1.Post)('delMineApp'),
(0, swagger_1.ApiOperation)({ summary: '删除个人App' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [deleteApp_dto_1.OperateAppDto, Object]),
__metadata("design:returntype", void 0)
], AppController.prototype, "delMineApp", null);
__decorate([
(0, common_1.Post)('collect'),
(0, swagger_1.ApiOperation)({ summary: '收藏/取消收藏App' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [collectApp_dto_1.CollectAppDto, Object]),
__metadata("design:returntype", void 0)
], AppController.prototype, "collect", null);
__decorate([
(0, common_1.Get)('mineApps'),
(0, swagger_1.ApiOperation)({ summary: '我的收藏' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], AppController.prototype, "mineApps", null);
AppController = __decorate([
(0, swagger_1.ApiTags)('App'),
(0, common_1.Controller)('app'),
__metadata("design:paramtypes", [app_service_1.AppService])
], AppController);
exports.AppController = AppController;

64
dist/modules/app/app.entity.js vendored Normal file
View File

@@ -0,0 +1,64 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AppEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let AppEntity = class AppEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ unique: true, comment: 'App应用名称' }),
__metadata("design:type", String)
], AppEntity.prototype, "name", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App分类Id' }),
__metadata("design:type", Number)
], AppEntity.prototype, "catId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App应用描述信息' }),
__metadata("design:type", String)
], AppEntity.prototype, "des", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App应用预设场景信息', type: 'text' }),
__metadata("design:type", String)
], AppEntity.prototype, "preset", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App应用封面图片', nullable: true }),
__metadata("design:type", String)
], AppEntity.prototype, "coverImg", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App应用排序、数字越大越靠前', default: 100 }),
__metadata("design:type", Number)
], AppEntity.prototype, "order", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App应用是否启用中 0禁用 1启用', default: 1 }),
__metadata("design:type", Number)
], AppEntity.prototype, "status", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App示例数据', nullable: true, type: 'text' }),
__metadata("design:type", String)
], AppEntity.prototype, "demoData", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App应用角色 system user', default: 'system' }),
__metadata("design:type", String)
], AppEntity.prototype, "role", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App是否共享到应用广场', default: false }),
__metadata("design:type", Boolean)
], AppEntity.prototype, "public", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '用户Id', nullable: true }),
__metadata("design:type", Number)
], AppEntity.prototype, "userId", void 0);
AppEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'app' })
], AppEntity);
exports.AppEntity = AppEntity;

26
dist/modules/app/app.module.js vendored Normal file
View File

@@ -0,0 +1,26 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AppModule = void 0;
const common_1 = require("@nestjs/common");
const app_controller_1 = require("./app.controller");
const app_service_1 = require("./app.service");
const typeorm_1 = require("@nestjs/typeorm");
const appCats_entity_1 = require("./appCats.entity");
const app_entity_1 = require("./app.entity");
const userApps_entity_1 = require("./userApps.entity");
let AppModule = class AppModule {
};
AppModule = __decorate([
(0, common_1.Module)({
imports: [typeorm_1.TypeOrmModule.forFeature([appCats_entity_1.AppCatsEntity, app_entity_1.AppEntity, userApps_entity_1.UserAppsEntity])],
controllers: [app_controller_1.AppController],
providers: [app_service_1.AppService],
})
], AppModule);
exports.AppModule = AppModule;

314
dist/modules/app/app.service.js vendored Normal file
View File

@@ -0,0 +1,314 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AppService = void 0;
const common_1 = require("@nestjs/common");
const appCats_entity_1 = require("./appCats.entity");
const typeorm_1 = require("typeorm");
const typeorm_2 = require("@nestjs/typeorm");
const app_entity_1 = require("./app.entity");
const userApps_entity_1 = require("./userApps.entity");
let AppService = class AppService {
constructor(appCatsEntity, appEntity, userAppsEntity) {
this.appCatsEntity = appCatsEntity;
this.appEntity = appEntity;
this.userAppsEntity = userAppsEntity;
}
async createAppCat(body) {
const { name } = body;
const c = await this.appCatsEntity.findOne({ where: { name } });
if (c) {
throw new common_1.HttpException('该分类名称已存在!', common_1.HttpStatus.BAD_REQUEST);
}
return await this.appCatsEntity.save(body);
}
async delAppCat(body) {
const { id } = body;
const c = await this.appCatsEntity.findOne({ where: { id } });
if (!c) {
throw new common_1.HttpException('该分类不存在!', common_1.HttpStatus.BAD_REQUEST);
}
const count = await this.appEntity.count({ where: { catId: id } });
if (count > 0) {
throw new common_1.HttpException('该分类下存在App不可删除', common_1.HttpStatus.BAD_REQUEST);
}
const res = await this.appCatsEntity.delete(id);
if (res.affected > 0)
return '删除成功';
throw new common_1.HttpException('删除失败!', common_1.HttpStatus.BAD_REQUEST);
}
async updateAppCats(body) {
const { id, name } = body;
const c = await this.appCatsEntity.findOne({ where: { name, id: (0, typeorm_1.Not)(id) } });
if (c) {
throw new common_1.HttpException('该分类名称已存在!', common_1.HttpStatus.BAD_REQUEST);
}
const res = await this.appCatsEntity.update({ id }, body);
if (res.affected > 0)
return '修改成功';
throw new common_1.HttpException('修改失败!', common_1.HttpStatus.BAD_REQUEST);
}
async queryOneCat(params) {
const { id } = params;
if (!id) {
throw new common_1.HttpException('缺失必要参数!', common_1.HttpStatus.BAD_REQUEST);
}
const app = await this.appEntity.findOne({ where: { id } });
const { demoData: demo, coverImg, des, name } = app;
return {
demoData: demo ? demo.split('\n') : [],
coverImg,
des,
name
};
}
async appCatsList(query) {
const { page = 1, size = 10, name, status } = query;
const where = {};
name && (where.name = (0, typeorm_1.Like)(`%${name}%`));
[0, 1, '0', '1'].includes(status) && (where.status = status);
const [rows, count] = await this.appCatsEntity.findAndCount({
where,
order: { order: 'DESC' },
skip: (page - 1) * size,
take: size,
});
const catIds = rows.map((item) => item.id);
const apps = await this.appEntity.find({ where: { catId: (0, typeorm_1.In)(catIds) } });
const appCountMap = {};
apps.forEach((item) => {
if (appCountMap[item.catId]) {
appCountMap[item.catId] += 1;
}
else {
appCountMap[item.catId] = 1;
}
});
rows.forEach((item) => (item.appCount = appCountMap[item.id] || 0));
return { rows, count };
}
async appList(req, query, orderKey = 'id') {
var _a;
const { page = 1, size = 10, name, status, catId, role } = query;
const where = {};
name && (where.name = (0, typeorm_1.Like)(`%${name}%`));
catId && (where.catId = catId);
role && (where.role = role);
status && (where.status = status);
const [rows, count] = await this.appEntity.findAndCount({
where,
order: { [orderKey]: 'DESC' },
skip: (page - 1) * size,
take: size,
});
const catIds = rows.map((item) => item.catId);
const cats = await this.appCatsEntity.find({ where: { id: (0, typeorm_1.In)(catIds) } });
rows.forEach((item) => {
const cat = cats.find((c) => c.id === item.catId);
item.catName = cat ? cat.name : '';
});
if (((_a = req === null || req === void 0 ? void 0 : req.user) === null || _a === void 0 ? void 0 : _a.role) !== 'super') {
rows.forEach((item) => {
delete item.preset;
});
}
return { rows, count };
}
async frontAppList(req, query, orderKey = 'id') {
var _a;
const { page = 1, size = 1000, name, catId, role } = query;
const where = [
{ status: (0, typeorm_1.In)([1, 4]), userId: (0, typeorm_1.IsNull)(), public: false },
{ userId: (0, typeorm_1.MoreThan)(0), public: true },
];
const [rows, count] = await this.appEntity.findAndCount({
where,
order: { order: 'DESC' },
skip: (page - 1) * size,
take: size,
});
const catIds = rows.map((item) => item.catId);
const cats = await this.appCatsEntity.find({ where: { id: (0, typeorm_1.In)(catIds) } });
rows.forEach((item) => {
const cat = cats.find((c) => c.id === item.catId);
item.catName = cat ? cat.name : '';
});
if (((_a = req === null || req === void 0 ? void 0 : req.user) === null || _a === void 0 ? void 0 : _a.role) !== 'super') {
rows.forEach((item) => {
delete item.preset;
});
}
return { rows, count };
}
async createApp(body) {
const { name, catId } = body;
body.role = 'system';
const a = await this.appEntity.findOne({ where: { name } });
if (a) {
throw new common_1.HttpException('该应用名称已存在!', common_1.HttpStatus.BAD_REQUEST);
}
const c = await this.appCatsEntity.findOne({ where: { id: catId } });
if (!c) {
throw new common_1.HttpException('该分类不存在!', common_1.HttpStatus.BAD_REQUEST);
}
return await this.appEntity.save(body);
}
async customApp(body, req) {
const { id } = req.user;
const { name, catId, des, preset, coverImg, demoData, public: isPublic, appId } = body;
if (appId) {
const a = await this.appEntity.findOne({ where: { id: appId, userId: id } });
if (!a) {
throw new common_1.HttpException('您正在编辑一个不存在的应用!', common_1.HttpStatus.BAD_REQUEST);
}
const data = { name, catId, des, preset, coverImg, demoData, public: isPublic, status: isPublic ? 3 : 1 };
const res = await this.appEntity.update({ id: appId, userId: id }, data);
if (res.affected) {
return '修改成功';
}
else {
throw new common_1.HttpException('修改失败!', common_1.HttpStatus.BAD_REQUEST);
}
}
if (!appId) {
const c = await this.appCatsEntity.findOne({ where: { id: catId } });
if (!c) {
throw new common_1.HttpException('该分类不存在!', common_1.HttpStatus.BAD_REQUEST);
}
const a = await this.appEntity.findOne({ where: { name } });
if (a) {
throw new common_1.HttpException('该应用名称已存在!', common_1.HttpStatus.BAD_REQUEST);
}
const data = { name, catId, des, preset, coverImg, status: isPublic ? 3 : 1, demoData, public: isPublic, role: 'user', userId: id };
const res = await this.appEntity.save(data);
const params = { appId: res.id, userId: id, appType: 'user', public: isPublic, status: isPublic ? 3 : 1, catId };
return this.userAppsEntity.save(params);
}
}
async updateApp(body) {
const { id, name, catId, status } = body;
const a = await this.appEntity.findOne({ where: { name, id: (0, typeorm_1.Not)(id) } });
if (a) {
throw new common_1.HttpException('该应用名称已存在!', common_1.HttpStatus.BAD_REQUEST);
}
const c = await this.appCatsEntity.findOne({ where: { id: catId } });
if (!c) {
throw new common_1.HttpException('该分类不存在!', common_1.HttpStatus.BAD_REQUEST);
}
const curApp = await this.appEntity.findOne({ where: { id } });
if (curApp.status !== body.status) {
await this.userAppsEntity.update({ appId: id }, { status });
}
const res = await this.appEntity.update({ id }, body);
if (res.affected > 0)
return '修改App信息成功';
throw new common_1.HttpException('修改App信息失败', common_1.HttpStatus.BAD_REQUEST);
}
async delApp(body) {
const { id } = body;
const a = await this.appEntity.findOne({ where: { id } });
if (!a) {
throw new common_1.HttpException('该应用不存在!', common_1.HttpStatus.BAD_REQUEST);
}
const useApp = await this.userAppsEntity.count({ where: { appId: id } });
if (useApp > 0) {
throw new common_1.HttpException('该应用已被用户关联使用中,不可删除!', common_1.HttpStatus.BAD_REQUEST);
}
const res = await this.appEntity.delete(id);
if (res.affected > 0)
return '删除App成功';
throw new common_1.HttpException('删除App失败', common_1.HttpStatus.BAD_REQUEST);
}
async auditPass(body) {
const { id } = body;
const a = await this.appEntity.findOne({ where: { id, status: 3 } });
if (!a) {
throw new common_1.HttpException('该应用不存在!', common_1.HttpStatus.BAD_REQUEST);
}
await this.appEntity.update({ id }, { status: 4 });
await this.userAppsEntity.update({ appId: id }, { status: 4 });
return '应用审核通过';
}
async auditFail(body) {
const { id } = body;
const a = await this.appEntity.findOne({ where: { id, status: 3 } });
if (!a) {
throw new common_1.HttpException('该应用不存在!', common_1.HttpStatus.BAD_REQUEST);
}
await this.appEntity.update({ id }, { status: 5 });
await this.userAppsEntity.update({ appId: id }, { status: 5 });
return '应用审核拒绝完成';
}
async delMineApp(body, req) {
const { id } = body;
const a = await this.appEntity.findOne({ where: { id, userId: req.user.id } });
if (!a) {
throw new common_1.HttpException('您正在操作一个不存在的资源!', common_1.HttpStatus.BAD_REQUEST);
}
await this.appEntity.delete(id);
await this.userAppsEntity.delete({ appId: id, userId: req.user.id });
return '删除应用成功!';
}
async collect(body, req) {
const { appId } = body;
const { id: userId } = req.user;
const historyApp = await this.userAppsEntity.findOne({ where: { appId, userId } });
if (historyApp) {
const r = await this.userAppsEntity.delete({ appId, userId });
if (r.affected > 0) {
return '取消收藏成功!';
}
else {
throw new common_1.HttpException('取消收藏失败!', common_1.HttpStatus.BAD_REQUEST);
}
}
const app = await this.appEntity.findOne({ where: { id: appId } });
const { id, role: appRole, catId } = app;
const collectInfo = { userId, appId: id, catId, appRole, public: true, status: 1 };
await this.userAppsEntity.save(collectInfo);
return '已将应用加入到我的个人工作台!';
}
async mineApps(req, query = { page: 1, size: 30 }) {
const { id } = req.user;
const { page = 1, size = 30 } = query;
const [rows, count] = await this.userAppsEntity.findAndCount({
where: { userId: id, status: (0, typeorm_1.In)([1, 3, 4, 5]) },
order: { id: 'DESC' },
skip: (page - 1) * size,
take: size,
});
const appIds = rows.map((item) => item.appId);
const appsInfo = await this.appEntity.find({ where: { id: (0, typeorm_1.In)(appIds) } });
rows.forEach((item) => {
const app = appsInfo.find((c) => c.id === item.appId);
item.appName = app ? app.name : '';
item.appRole = app ? app.role : '';
item.appDes = app ? app.des : '';
item.coverImg = app ? app.coverImg : '';
item.demoData = app ? app.demoData : '';
item.preset = app.userId === id ? app.preset : '******';
});
return { rows, count };
}
};
AppService = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, typeorm_2.InjectRepository)(appCats_entity_1.AppCatsEntity)),
__param(1, (0, typeorm_2.InjectRepository)(app_entity_1.AppEntity)),
__param(2, (0, typeorm_2.InjectRepository)(userApps_entity_1.UserAppsEntity)),
__metadata("design:paramtypes", [typeorm_1.Repository,
typeorm_1.Repository,
typeorm_1.Repository])
], AppService);
exports.AppService = AppService;

40
dist/modules/app/appCats.entity.js vendored Normal file
View File

@@ -0,0 +1,40 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AppCatsEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let AppCatsEntity = class AppCatsEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ unique: true, comment: 'App分类名称' }),
__metadata("design:type", String)
], AppCatsEntity.prototype, "name", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App分类描述信息' }),
__metadata("design:type", String)
], AppCatsEntity.prototype, "des", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App分类封面图片', nullable: true }),
__metadata("design:type", String)
], AppCatsEntity.prototype, "coverImg", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App分类排序、数字越大越靠前', default: 100 }),
__metadata("design:type", Number)
], AppCatsEntity.prototype, "order", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App分类是否启用中 0禁用 1启用', default: 1 }),
__metadata("design:type", Number)
], AppCatsEntity.prototype, "status", void 0);
AppCatsEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'app_cats' })
], AppCatsEntity);
exports.AppCatsEntity = AppCatsEntity;

22
dist/modules/app/dto/collectApp.dto.js vendored Normal file
View File

@@ -0,0 +1,22 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CollectAppDto = void 0;
const swagger_1 = require("@nestjs/swagger");
const class_validator_1 = require("class-validator");
class CollectAppDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '要收藏的appId', required: true }),
(0, class_validator_1.IsNumber)({}, { message: 'ID必须是Number' }),
__metadata("design:type", Number)
], CollectAppDto.prototype, "appId", void 0);
exports.CollectAppDto = CollectAppDto;

65
dist/modules/app/dto/createApp.dto.js vendored Normal file
View File

@@ -0,0 +1,65 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateAppDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class CreateAppDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: '前端助手', description: 'app名称', required: true }),
(0, class_validator_1.IsDefined)({ message: 'app名称是必传参数' }),
__metadata("design:type", String)
], CreateAppDto.prototype, "name", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: 'app分类Id', required: true }),
(0, class_validator_1.IsDefined)({ message: 'app分类Id必传参数' }),
__metadata("design:type", Number)
], CreateAppDto.prototype, "catId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({
example: '适用于编程编码、期望成为您的编程助手',
description: 'app名称详情描述',
required: false,
}),
(0, class_validator_1.IsDefined)({ message: 'app名称描述是必传参数' }),
__metadata("design:type", String)
], CreateAppDto.prototype, "des", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '你现在是一个翻译官。接下来我说的所有话帮我翻译成中文', description: '预设的prompt', required: true }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], CreateAppDto.prototype, "preset", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'https://xxxx.png', description: '套餐封面图片', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], CreateAppDto.prototype, "coverImg", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 100, description: '套餐排序、数字越大越靠前', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], CreateAppDto.prototype, "order", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '套餐状态 0禁用 1启用', required: true }),
(0, class_validator_1.IsNumber)({}, { message: '套餐状态必须是Number' }),
(0, class_validator_1.IsIn)([0, 1, 3, 4, 5], { message: '套餐状态错误' }),
__metadata("design:type", Number)
], CreateAppDto.prototype, "status", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '这是一句示例数据', description: 'app示例数据', required: false }),
__metadata("design:type", String)
], CreateAppDto.prototype, "demoData", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'system', description: '创建的角色', required: false }),
__metadata("design:type", String)
], CreateAppDto.prototype, "role", void 0);
exports.CreateAppDto = CreateAppDto;

47
dist/modules/app/dto/createCats.dto.js vendored Normal file
View File

@@ -0,0 +1,47 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateCatsDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class CreateCatsDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: '编程助手', description: 'app分类名称', required: true }),
(0, class_validator_1.IsDefined)({ message: 'app分类名称是必传参数' }),
__metadata("design:type", String)
], CreateCatsDto.prototype, "name", void 0);
__decorate([
(0, swagger_1.ApiProperty)({
example: '适用于编程编码、期望成为您的编程助手',
description: 'app分类名称详情描述',
required: false,
}),
(0, class_validator_1.IsDefined)({ message: 'app分类名称描述是必传参数' }),
__metadata("design:type", String)
], CreateCatsDto.prototype, "des", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'https://xxxx.png', description: '套餐封面图片' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], CreateCatsDto.prototype, "coverImg", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 100, description: '套餐排序、数字越大越靠前', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], CreateCatsDto.prototype, "order", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '套餐状态 0禁用 1启用', required: true }),
(0, class_validator_1.IsNumber)({}, { message: '套餐状态必须是Number' }),
(0, class_validator_1.IsIn)([0, 1, 3, 4, 5], { message: '套餐状态错误' }),
__metadata("design:type", Number)
], CreateCatsDto.prototype, "status", void 0);
exports.CreateCatsDto = CreateCatsDto;

55
dist/modules/app/dto/custonApp.dto.js vendored Normal file
View File

@@ -0,0 +1,55 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CustomAppDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class CustomAppDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: '前端助手', description: 'app名称', required: true }),
__metadata("design:type", String)
], CustomAppDto.prototype, "name", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: 'app分类Id', required: true }),
__metadata("design:type", Number)
], CustomAppDto.prototype, "catId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({
example: '适用于编程编码、期望成为您的编程助手',
description: 'app名称详情描述',
required: false,
}),
(0, class_validator_1.IsDefined)({ message: 'app名称描述是必传参数' }),
__metadata("design:type", String)
], CustomAppDto.prototype, "des", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '你现在是一个翻译官。接下来我说的所有话帮我翻译成中文', description: '预设的prompt', required: true }),
__metadata("design:type", String)
], CustomAppDto.prototype, "preset", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'https://xxxx.png', description: '套餐封面图片', required: false }),
__metadata("design:type", String)
], CustomAppDto.prototype, "coverImg", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '这是一句示例数据', description: 'app示例数据', required: false }),
__metadata("design:type", String)
], CustomAppDto.prototype, "demoData", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: false, description: '是否共享到所有人', required: false }),
__metadata("design:type", Boolean)
], CustomAppDto.prototype, "public", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '应用ID', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], CustomAppDto.prototype, "appId", void 0);
exports.CustomAppDto = CustomAppDto;

22
dist/modules/app/dto/deleteApp.dto.js vendored Normal file
View File

@@ -0,0 +1,22 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OperateAppDto = void 0;
const swagger_1 = require("@nestjs/swagger");
const class_validator_1 = require("class-validator");
class OperateAppDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '要删除的appId', required: true }),
(0, class_validator_1.IsNumber)({}, { message: 'ID必须是Number' }),
__metadata("design:type", Number)
], OperateAppDto.prototype, "id", void 0);
exports.OperateAppDto = OperateAppDto;

22
dist/modules/app/dto/deleteCats.dto.js vendored Normal file
View File

@@ -0,0 +1,22 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeleteCatsDto = void 0;
const swagger_1 = require("@nestjs/swagger");
const class_validator_1 = require("class-validator");
class DeleteCatsDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '要删除app分类Id', required: true }),
(0, class_validator_1.IsNumber)({}, { message: 'ID必须是Number' }),
__metadata("design:type", Number)
], DeleteCatsDto.prototype, "id", void 0);
exports.DeleteCatsDto = DeleteCatsDto;

47
dist/modules/app/dto/queryApp.dto.js vendored Normal file
View File

@@ -0,0 +1,47 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuerAppDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QuerAppDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAppDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAppDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'name', description: 'app名称', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], QuerAppDto.prototype, "name", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: 'app状态 0禁用 1启用 3:审核加入广场中 4已拒绝加入广场', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAppDto.prototype, "status", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 2, description: 'app分类Id', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAppDto.prototype, "catId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'role', description: 'app角色', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], QuerAppDto.prototype, "role", void 0);
exports.QuerAppDto = QuerAppDto;

37
dist/modules/app/dto/queryCats.dto.js vendored Normal file
View File

@@ -0,0 +1,37 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuerCatsDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QuerCatsDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerCatsDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerCatsDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'name', description: '分类名称', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], QuerCatsDto.prototype, "name", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '分类状态 0禁用 1启用', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerCatsDto.prototype, "status", void 0);
exports.QuerCatsDto = QuerCatsDto;

23
dist/modules/app/dto/updateApp.dto.js vendored Normal file
View File

@@ -0,0 +1,23 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdateAppDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
const createApp_dto_1 = require("./createApp.dto");
class UpdateAppDto extends createApp_dto_1.CreateAppDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '要修改的分类Id', required: true }),
(0, class_validator_1.IsNumber)({}, { message: '分类ID必须是Number' }),
__metadata("design:type", Number)
], UpdateAppDto.prototype, "id", void 0);
exports.UpdateAppDto = UpdateAppDto;

23
dist/modules/app/dto/updateCats.dto.js vendored Normal file
View File

@@ -0,0 +1,23 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdateCatsDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
const createCats_dto_1 = require("./createCats.dto");
class UpdateCatsDto extends createCats_dto_1.CreateCatsDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '要修改的分类Id', required: true }),
(0, class_validator_1.IsNumber)({}, { message: '分类ID必须是Number' }),
__metadata("design:type", Number)
], UpdateCatsDto.prototype, "id", void 0);
exports.UpdateCatsDto = UpdateCatsDto;

48
dist/modules/app/userApps.entity.js vendored Normal file
View File

@@ -0,0 +1,48 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserAppsEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let UserAppsEntity = class UserAppsEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ comment: '用户ID' }),
__metadata("design:type", Number)
], UserAppsEntity.prototype, "userId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '应用ID' }),
__metadata("design:type", Number)
], UserAppsEntity.prototype, "appId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '应用分类ID' }),
__metadata("design:type", Number)
], UserAppsEntity.prototype, "catId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'app类型 system/user', default: 'user' }),
__metadata("design:type", String)
], UserAppsEntity.prototype, "appType", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '是否公开到公告菜单', default: false }),
__metadata("design:type", Boolean)
], UserAppsEntity.prototype, "public", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'app状态 1正常 2审核 3违规', default: 1 }),
__metadata("design:type", Number)
], UserAppsEntity.prototype, "status", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'App应用排序、数字越大越靠前', default: 100 }),
__metadata("design:type", Number)
], UserAppsEntity.prototype, "order", void 0);
UserAppsEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'user_apps' })
], UserAppsEntity);
exports.UserAppsEntity = UserAppsEntity;

187
dist/modules/auth/auth.controller.js vendored Normal file
View File

@@ -0,0 +1,187 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthController = void 0;
const verifyCode_dto_1 = require("./../verification/dto/verifyCode.dto");
const authLogin_dto_1 = require("./dto/authLogin.dto");
const common_1 = require("@nestjs/common");
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
const auth_service_1 = require("./auth.service");
const swagger_1 = require("@nestjs/swagger");
const authRegister_dto_1 = require("./dto/authRegister.dto");
const updatePassword_dto_1 = require("./dto/updatePassword.dto");
const updatePassByOther_dto_1 = require("./dto/updatePassByOther.dto");
const sendPhoneCode_dto_1 = require("./dto/sendPhoneCode.dto");
const userRegisterByPhone_dto_1 = require("./dto/userRegisterByPhone.dto");
const loginByPhone_dt_1 = require("./dto/loginByPhone.dt");
let AuthController = class AuthController {
constructor(authService) {
this.authService = authService;
}
async register(body, req) {
return await this.authService.register(body, req);
}
async registerByPhone(body, req) {
return await this.authService.registerByPhone(body, req);
}
async login(body, req) {
return this.authService.login(body, req);
}
async loginByPhone(body, req) {
return this.authService.loginByPhone(body, req);
}
async updatePassword(req, body) {
return this.authService.updatePassword(req, body);
}
async updatePassByOther(req, body) {
return this.authService.updatePassByOther(req, body);
}
async getInfo(req) {
return this.authService.getInfo(req);
}
async activateAccount(parmas, res) {
return this.authService.activateAccount(parmas, res);
}
async registerSuccess(parmas) {
const { username, id, email, teamName, registerSuccessEmailTitle, registerSuccessEmailTeamName, registerSuccessEmaileAppend } = parmas;
return { username, id, email, teamName, registerSuccessEmailTitle, registerSuccessEmailTeamName, registerSuccessEmaileAppend };
}
async registerError(parmas) {
const { message, teamName, registerFailEmailTitle, registerFailEmailTeamName } = parmas;
return { message, teamName, registerFailEmailTitle, registerFailEmailTeamName };
}
async captcha(parmas) {
return this.authService.captcha(parmas);
}
async sendPhoneCode(parmas) {
return this.authService.sendPhoneCode(parmas);
}
};
__decorate([
(0, common_1.Post)('register'),
(0, swagger_1.ApiOperation)({ summary: '用户注册' }),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [authRegister_dto_1.UserRegisterDto, Object]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "register", null);
__decorate([
(0, common_1.Post)('registerByPhone'),
(0, swagger_1.ApiOperation)({ summary: '用户通过手机号注册' }),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [userRegisterByPhone_dto_1.UserRegisterByPhoneDto, Object]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "registerByPhone", null);
__decorate([
(0, common_1.Post)('login'),
(0, swagger_1.ApiOperation)({ summary: '用户登录' }),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [authLogin_dto_1.UserLoginDto, Object]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "login", null);
__decorate([
(0, common_1.Post)('loginByPhone'),
(0, swagger_1.ApiOperation)({ summary: '用户手机号登录' }),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [loginByPhone_dt_1.LoginByPhoneDto, Object]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "loginByPhone", null);
__decorate([
(0, common_1.Post)('updatePassword'),
(0, swagger_1.ApiOperation)({ summary: '用户更改密码' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, updatePassword_dto_1.UpdatePasswordDto]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "updatePassword", null);
__decorate([
(0, common_1.Post)('updatePassByOther'),
(0, swagger_1.ApiOperation)({ summary: '用户更改密码' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, updatePassByOther_dto_1.UpdatePassByOtherDto]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "updatePassByOther", null);
__decorate([
(0, common_1.Get)('getInfo'),
(0, swagger_1.ApiOperation)({ summary: '获取用户个人信息' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "getInfo", null);
__decorate([
(0, common_1.Get)('activateAccount'),
(0, swagger_1.ApiOperation)({ summary: '账户激活' }),
__param(0, (0, common_1.Query)()),
__param(1, (0, common_1.Res)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [verifyCode_dto_1.VerifyCodeDto, Object]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "activateAccount", null);
__decorate([
(0, common_1.Get)('registerSuccess'),
(0, swagger_1.ApiOperation)({ summary: '注册成功页面' }),
(0, common_1.Render)('registerSuccess'),
__param(0, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "registerSuccess", null);
__decorate([
(0, common_1.Get)('registerError'),
(0, swagger_1.ApiOperation)({ summary: '注册失败页面' }),
(0, common_1.Render)('registerError'),
__param(0, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "registerError", null);
__decorate([
(0, common_1.Post)('captcha'),
(0, swagger_1.ApiOperation)({ summary: '获取一个图形验证码' }),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "captcha", null);
__decorate([
(0, common_1.Post)('sendPhoneCode'),
(0, swagger_1.ApiOperation)({ summary: '发送手机验证码' }),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [sendPhoneCode_dto_1.SendPhoneCodeDto]),
__metadata("design:returntype", Promise)
], AuthController.prototype, "sendPhoneCode", null);
AuthController = __decorate([
(0, swagger_1.ApiTags)('auth'),
(0, common_1.Controller)('auth'),
__metadata("design:paramtypes", [auth_service_1.AuthService])
], AuthController);
exports.AuthController = AuthController;

72
dist/modules/auth/auth.module.js vendored Normal file
View File

@@ -0,0 +1,72 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthModule = void 0;
const verifycation_entity_1 = require("./../verification/verifycation.entity");
const typeorm_1 = require("@nestjs/typeorm");
const verification_service_1 = require("./../verification/verification.service");
const mailer_service_1 = require("../mailer/mailer.service");
const nestjs_config_1 = require("nestjs-config");
const auth_controller_1 = require("./auth.controller");
const common_1 = require("@nestjs/common");
const auth_service_1 = require("./auth.service");
const user_module_1 = require("../user/user.module");
const passport_1 = require("@nestjs/passport");
const jwt_1 = require("@nestjs/jwt");
const jwt_strategy_1 = require("../../common/auth/jwt.strategy");
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
const userBalance_service_1 = require("../userBalance/userBalance.service");
const balance_entity_1 = require("../userBalance/balance.entity");
const accountLog_entity_1 = require("../userBalance/accountLog.entity");
const config_entity_1 = require("../globalConfig/config.entity");
const cramiPackage_entity_1 = require("../crami/cramiPackage.entity");
const redisCache_service_1 = require("../redisCache/redisCache.service");
const redisCache_module_1 = require("../redisCache/redisCache.module");
const userBalance_entity_1 = require("../userBalance/userBalance.entity");
const salesUsers_entity_1 = require("../sales/salesUsers.entity");
const user_entity_1 = require("../user/user.entity");
const whiteList_entity_1 = require("../chatgpt/whiteList.entity");
const fingerprint_entity_1 = require("../userBalance/fingerprint.entity");
const chatLog_entity_1 = require("../chatLog/chatLog.entity");
const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity");
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
let AuthModule = class AuthModule {
};
AuthModule = __decorate([
(0, common_1.Global)(),
(0, common_1.Module)({
imports: [
user_module_1.UserModule,
passport_1.PassportModule.register({ defaultStrategy: 'jwt' }),
jwt_1.JwtModule.registerAsync({
useFactory: async (configService) => configService.get('jwt'),
inject: [nestjs_config_1.ConfigService],
}),
typeorm_1.TypeOrmModule.forFeature([
verifycation_entity_1.VerifycationEntity,
balance_entity_1.BalanceEntity,
accountLog_entity_1.AccountLogEntity,
config_entity_1.ConfigEntity,
cramiPackage_entity_1.CramiPackageEntity,
redisCache_module_1.RedisCacheModule,
userBalance_entity_1.UserBalanceEntity,
salesUsers_entity_1.SalesUsersEntity,
user_entity_1.UserEntity,
whiteList_entity_1.WhiteListEntity,
fingerprint_entity_1.FingerprintLogEntity,
chatLog_entity_1.ChatLogEntity,
chatGroup_entity_1.ChatGroupEntity,
midjourney_entity_1.MidjourneyEntity
]),
],
controllers: [auth_controller_1.AuthController],
providers: [auth_service_1.AuthService, jwt_strategy_1.JwtStrategy, jwtAuth_guard_1.JwtAuthGuard, mailer_service_1.MailerService, verification_service_1.VerificationService, userBalance_service_1.UserBalanceService, redisCache_service_1.RedisCacheService],
exports: [auth_service_1.AuthService],
})
], AuthModule);
exports.AuthModule = AuthModule;

248
dist/modules/auth/auth.service.js vendored Normal file
View File

@@ -0,0 +1,248 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthService = void 0;
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
const verification_constant_1 = require("../../common/constants/verification.constant");
const verification_service_1 = require("./../verification/verification.service");
const common_1 = require("@nestjs/common");
const jwt_1 = require("@nestjs/jwt");
const user_service_1 = require("../user/user.service");
const mailer_service_1 = require("../mailer/mailer.service");
const user_constant_1 = require("../../common/constants/user.constant");
const userBalance_service_1 = require("../userBalance/userBalance.service");
const config_entity_1 = require("../globalConfig/config.entity");
const typeorm_1 = require("typeorm");
const typeorm_2 = require("@nestjs/typeorm");
const utils_1 = require("../../common/utils");
const os = require("os");
const redisCache_service_1 = require("../redisCache/redisCache.service");
const svgCaptcha = require("svg-captcha");
const bcrypt = require("bcryptjs");
let AuthService = class AuthService {
constructor(configEntity, userService, jwtService, mailerService, verificationService, userBalanceService, redisCacheService, globalConfigService) {
this.configEntity = configEntity;
this.userService = userService;
this.jwtService = jwtService;
this.mailerService = mailerService;
this.verificationService = verificationService;
this.userBalanceService = userBalanceService;
this.redisCacheService = redisCacheService;
this.globalConfigService = globalConfigService;
}
async onModuleInit() {
this.getIp();
}
async register(body, req) {
await this.verificationService.verifyCaptcha(body);
const user = await this.userService.createUserAndVerifycation(body, req);
const { username, email, client, id } = user;
const res = { username, email, id };
client && (res.client = client);
return res;
}
async registerByPhone(body, req) {
const { username, password, phone, phoneCode, invitedBy } = body;
await this.userService.verifyUserRegisterByPhone(body);
const nameSpace = await this.globalConfigService.getNamespace();
const key = `${nameSpace}:PHONECODE:${phone}`;
const redisPhoneCode = await this.redisCacheService.get({ key });
if (!redisPhoneCode) {
throw new common_1.HttpException('验证码已过期、请重新发送!', common_1.HttpStatus.BAD_REQUEST);
}
if (phoneCode !== redisPhoneCode) {
throw new common_1.HttpException('验证码填写错误、请重新输入!', common_1.HttpStatus.BAD_REQUEST);
}
const email = `${(0, utils_1.createRandomUid)()}@nine.com`;
const newUser = { username, password, phone, invitedBy, email, status: user_constant_1.UserStatusEnum.ACTIVE };
const userDefautlAvatar = await this.globalConfigService.getConfigs(['userDefautlAvatar']);
newUser.avatar = userDefautlAvatar;
const hashedPassword = bcrypt.hashSync(password, 10);
newUser.password = hashedPassword;
const u = await this.userService.createUser(newUser);
let inviteUser;
if (invitedBy) {
inviteUser = await this.userService.qureyUserInfoByInviteCode(invitedBy);
}
await this.userBalanceService.addBalanceToNewUser(u.id, inviteUser === null || inviteUser === void 0 ? void 0 : inviteUser.id);
return;
}
async login(user, req) {
const u = await this.userService.verifyUserCredentials(user);
const { username, id, email, role, openId, client } = u;
const ip = (0, utils_1.getClientIp)(req);
await this.userService.savaLoginIp(id, ip);
const token = await this.jwtService.sign({ username, id, email, role, openId, client });
await this.redisCacheService.saveToken(id, token);
return token;
}
async loginByPhone(body, req) {
const u = await this.userService.verifyUserCredentials(body);
const { username, id, email, role, openId, client } = u;
const ip = (0, utils_1.getClientIp)(req);
await this.userService.savaLoginIp(id, ip);
const { phone } = body;
const token = await this.jwtService.sign({ username, id, email, role, openId, client, phone });
await this.redisCacheService.saveToken(id, token);
return token;
}
async loginByOpenId(user, req) {
const { status } = user;
if (status !== user_constant_1.UserStatusEnum.ACTIVE) {
throw new common_1.HttpException(user_constant_1.UserStatusErrMsg[status], common_1.HttpStatus.BAD_REQUEST);
}
const { username, id, email, role, openId, client } = user;
const ip = (0, utils_1.getClientIp)(req);
await this.userService.savaLoginIp(id, ip);
const token = await this.jwtService.sign({ username, id, email, role, openId, client });
await this.redisCacheService.saveToken(id, token);
return token;
}
async getInfo(req) {
const { id } = req.user;
return await this.userService.getUserInfo(id);
}
async activateAccount(params, res) {
const emailConfigs = await this.configEntity.find({
where: {
configKey: (0, typeorm_1.In)([
'registerSuccessEmailTitle',
'registerSuccessEmailTeamName',
'registerSuccessEmaileAppend',
'registerFailEmailTitle',
'registerFailEmailTeamName',
]),
},
});
const configMap = emailConfigs.reduce((pre, cur) => {
pre[cur.configKey] = cur.configVal;
return pre;
}, {});
try {
const v = await this.verificationService.verifyCode(params, verification_constant_1.VerificationEnum.Registration);
const { type, userId } = v;
if (type !== verification_constant_1.VerificationEnum.Registration) {
throw new common_1.HttpException('验证码类型错误', common_1.HttpStatus.BAD_REQUEST);
}
const status = await this.userService.getUserStatus(userId);
if (status === user_constant_1.UserStatusEnum.ACTIVE) {
throw new common_1.HttpException('账户已被激活过', common_1.HttpStatus.BAD_REQUEST);
}
await this.userService.updateUserStatus(v.userId, user_constant_1.UserStatusEnum.ACTIVE);
const u = await this.userService.queryUserInfoById(v.userId);
const { username, email, id, invitedBy } = u;
let inviteUser;
if (invitedBy) {
inviteUser = await this.userService.qureyUserInfoByInviteCode(invitedBy);
}
await this.userBalanceService.addBalanceToNewUser(id, inviteUser === null || inviteUser === void 0 ? void 0 : inviteUser.id);
res.redirect(`/api/auth/registerSuccess?id=${id.toString().padStart(4, '0')}&username=${username}&email=${email}&registerSuccessEmailTitle=${configMap.registerSuccessEmailTitle}&registerSuccessEmailTeamName=${configMap.registerSuccessEmailTeamName}&registerSuccessEmaileAppend=${configMap.registerSuccessEmaileAppend}`);
}
catch (error) {
console.log('error: ', error);
const message = error.response;
res.redirect(`/api/auth/registerError?message=${message}&registerFailEmailTitle=${configMap.registerFailEmailTitle}&registerFailEmailTeamName=${configMap.registerFailEmailTeamName}`);
}
}
async updatePassword(req, body) {
const { id, client, role } = req.user;
if (client && Number(client) > 0) {
throw new common_1.HttpException('无权此操作、请联系管理员!', common_1.HttpStatus.BAD_REQUEST);
}
if (role === 'admin') {
throw new common_1.HttpException('非法操作、请联系管理员!', common_1.HttpStatus.BAD_REQUEST);
}
const bool = await this.userService.verifyUserPassword(id, body.oldPassword);
if (!bool) {
throw new common_1.HttpException('旧密码错误、请检查提交', common_1.HttpStatus.BAD_REQUEST);
}
this.userService.updateUserPassword(id, body.password);
return '密码修改成功';
}
async updatePassByOther(req, body) {
const { id, client } = req.user;
if (!client) {
throw new common_1.HttpException('无权此操作!', common_1.HttpStatus.BAD_REQUEST);
}
this.userService.updateUserPassword(id, body.password);
return '密码修改成功';
}
getIp() {
let ipAddress;
const interfaces = os.networkInterfaces();
Object.keys(interfaces).forEach((interfaceName) => {
const interfaceInfo = interfaces[interfaceName];
for (let i = 0; i < interfaceInfo.length; i++) {
const alias = interfaceInfo[i];
if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
ipAddress = alias.address;
break;
}
}
});
this.ipAddress = ipAddress;
}
async captcha(parmas) {
const nameSpace = await this.globalConfigService.getNamespace();
const { color = '#fff' } = parmas;
const captcha = svgCaptcha.createMathExpr({ background: color, height: 34, width: 120, noise: 3 });
const text = captcha.text;
const randomId = (0, utils_1.createRandomUid)();
const key = `${nameSpace}:CAPTCHA:${randomId}`;
await this.redisCacheService.set({ key, val: captcha.text }, 5 * 60);
return {
svgCode: captcha.data,
code: randomId,
};
}
async sendPhoneCode(body) {
await this.verificationService.verifyCaptcha(body);
const { phone } = body;
const nameSpace = await this.globalConfigService.getNamespace();
const key = `${nameSpace}:PHONECODE:${phone}`;
const ttl = await this.redisCacheService.ttl(key);
if (ttl && ttl > 0) {
throw new common_1.HttpException(`${ttl}秒内不得重复发送短信!`, common_1.HttpStatus.BAD_REQUEST);
}
const code = (0, utils_1.createRandomCode)();
const messageInfo = { phone, code };
await this.verificationService.sendPhoneCode(messageInfo);
await this.redisCacheService.set({ key, val: code }, 1 * 60);
return '验证码发送成功、请填写验证码完成注册!';
}
createTokenFromFingerprint(fingerprint) {
const token = this.jwtService.sign({
username: `游客${fingerprint}`,
id: fingerprint,
email: `${fingerprint}@nine.com`,
role: 'visitor',
openId: null,
client: null,
});
return token;
}
};
AuthService = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, typeorm_2.InjectRepository)(config_entity_1.ConfigEntity)),
__metadata("design:paramtypes", [typeorm_1.Repository,
user_service_1.UserService,
jwt_1.JwtService,
mailer_service_1.MailerService,
verification_service_1.VerificationService,
userBalance_service_1.UserBalanceService,
redisCache_service_1.RedisCacheService,
globalConfig_service_1.GlobalConfigService])
], AuthService);
exports.AuthService = AuthService;

32
dist/modules/auth/dto/adminLogin.dto.js vendored Normal file
View File

@@ -0,0 +1,32 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AdminLoginDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class AdminLoginDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 'super', description: '邮箱' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户名不能为空!' }),
(0, class_validator_1.MinLength)(2, { message: '用户名最短是两位数!' }),
(0, class_validator_1.MaxLength)(30, { message: '用户名最长不得超过30位' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], AdminLoginDto.prototype, "username", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '999999', description: '密码' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }),
(0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数' }),
(0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数' }),
__metadata("design:type", String)
], AdminLoginDto.prototype, "password", void 0);
exports.AdminLoginDto = AdminLoginDto;

37
dist/modules/auth/dto/authLogin.dto.js vendored Normal file
View File

@@ -0,0 +1,37 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserLoginDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class UserLoginDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 'super', description: '邮箱' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户名不能为空!' }),
(0, class_validator_1.MinLength)(2, { message: '用户名最短是两位数!' }),
(0, class_validator_1.MaxLength)(30, { message: '用户名最长不得超过30位' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], UserLoginDto.prototype, "username", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '用户ID' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], UserLoginDto.prototype, "uid", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '999999', description: '密码' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }),
(0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数' }),
(0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数' }),
__metadata("design:type", String)
], UserLoginDto.prototype, "password", void 0);
exports.UserLoginDto = UserLoginDto;

View File

@@ -0,0 +1,66 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserRegisterDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class UserRegisterDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 'cooper', description: '用户名称' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户名不能为空!' }),
(0, class_validator_1.MinLength)(2, { message: '用户名最低需要大于2位数' }),
(0, class_validator_1.MaxLength)(12, { message: '用户名不得超过12位' }),
__metadata("design:type", String)
], UserRegisterDto.prototype, "username", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '123456', description: '用户密码' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空' }),
(0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数' }),
(0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数' }),
__metadata("design:type", String)
], UserRegisterDto.prototype, "password", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'J_longyan@163.com', description: '用户邮箱' }),
(0, class_validator_1.IsEmail)({}, { message: '请填写正确格式的邮箱!' }),
(0, class_validator_1.IsNotEmpty)({ message: '邮箱不能为空!' }),
__metadata("design:type", String)
], UserRegisterDto.prototype, "email", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '5k3n', description: '图形验证码' }),
(0, class_validator_1.IsNotEmpty)({ message: '验证码为空!' }),
__metadata("design:type", String)
], UserRegisterDto.prototype, "captchaCode", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '2313ko423ko', description: '图形验证码KEY' }),
(0, class_validator_1.IsNotEmpty)({ message: '验证ID不能为空' }),
__metadata("design:type", String)
], UserRegisterDto.prototype, "captchaId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'FRJDLJHFNV', description: '用户填写的别人邀请码', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], UserRegisterDto.prototype, "invitedBy", void 0);
__decorate([
(0, swagger_1.ApiProperty)({
example: 'https://public-1300678944.cos.ap-shanghai.myqcloud.com/blog/1682571295452image.png',
description: '用户头像',
required: false,
}),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], UserRegisterDto.prototype, "avatar", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'default', description: '用户注册来源', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], UserRegisterDto.prototype, "client", void 0);
exports.UserRegisterDto = UserRegisterDto;

View File

@@ -0,0 +1,30 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoginByPhoneDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class LoginByPhoneDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: '19999999', description: '手机号' }),
(0, class_validator_1.IsNotEmpty)({ message: '手机号不能为空!' }),
(0, class_validator_1.IsPhoneNumber)('CN', { message: '手机号格式不正确!' }),
__metadata("design:type", String)
], LoginByPhoneDto.prototype, "phone", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '999999', description: '密码' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }),
(0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数' }),
(0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数' }),
__metadata("design:type", String)
], LoginByPhoneDto.prototype, "password", void 0);
exports.LoginByPhoneDto = LoginByPhoneDto;

View File

@@ -0,0 +1,34 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SendPhoneCodeDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class SendPhoneCodeDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: '199999999', description: '手机号' }),
(0, class_validator_1.IsNotEmpty)({ message: '手机号不能为空' }),
(0, class_validator_1.MinLength)(11, { message: '手机号长度为11位' }),
(0, class_validator_1.MaxLength)(11, { message: '手机号长度为11位' }),
__metadata("design:type", String)
], SendPhoneCodeDto.prototype, "phone", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '2b4i1b4', description: '图形验证码KEY' }),
(0, class_validator_1.IsNotEmpty)({ message: '验证码KEY不能为空' }),
__metadata("design:type", String)
], SendPhoneCodeDto.prototype, "captchaId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '1g4d', description: '图形验证码' }),
(0, class_validator_1.IsNotEmpty)({ message: '验证码不能为空' }),
__metadata("design:type", String)
], SendPhoneCodeDto.prototype, "captchaCode", void 0);
exports.SendPhoneCodeDto = SendPhoneCodeDto;

View File

@@ -0,0 +1,24 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdatePassByOtherDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class UpdatePassByOtherDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: '666666', description: '三方用户更新新密码' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }),
(0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数' }),
(0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数' }),
__metadata("design:type", String)
], UpdatePassByOtherDto.prototype, "password", void 0);
exports.UpdatePassByOtherDto = UpdatePassByOtherDto;

View File

@@ -0,0 +1,31 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdatePasswordDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class UpdatePasswordDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: '123456', description: '用户旧密码' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }),
(0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数' }),
(0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数' }),
__metadata("design:type", String)
], UpdatePasswordDto.prototype, "oldPassword", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '666666', description: '用户更新新密码' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }),
(0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数' }),
(0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数' }),
__metadata("design:type", String)
], UpdatePasswordDto.prototype, "password", void 0);
exports.UpdatePasswordDto = UpdatePasswordDto;

View File

@@ -0,0 +1,47 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserRegisterByPhoneDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class UserRegisterByPhoneDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 'cooper', description: '用户名称' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户名不能为空!' }),
(0, class_validator_1.MinLength)(2, { message: '用户名最低需要大于2位数' }),
(0, class_validator_1.MaxLength)(12, { message: '用户名不得超过12位' }),
__metadata("design:type", String)
], UserRegisterByPhoneDto.prototype, "username", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '123456', description: '用户密码' }),
(0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空' }),
(0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数' }),
(0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数' }),
__metadata("design:type", String)
], UserRegisterByPhoneDto.prototype, "password", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '19999999999', description: '用户手机号码' }),
(0, class_validator_1.IsPhoneNumber)('CN', { message: '手机号码格式不正确!' }),
(0, class_validator_1.IsNotEmpty)({ message: '手机号码不能为空!' }),
__metadata("design:type", String)
], UserRegisterByPhoneDto.prototype, "phone", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '152546', description: '手机验证码' }),
(0, class_validator_1.IsNotEmpty)({ message: '手机验证码不能为空!' }),
__metadata("design:type", String)
], UserRegisterByPhoneDto.prototype, "phoneCode", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'SNINE', description: '用户邀请码', required: true }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], UserRegisterByPhoneDto.prototype, "invitedBy", void 0);
exports.UserRegisterByPhoneDto = UserRegisterByPhoneDto;

View File

@@ -0,0 +1,32 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AutoReplyEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let AutoReplyEntity = class AutoReplyEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ comment: '提问的问题', type: 'text' }),
__metadata("design:type", String)
], AutoReplyEntity.prototype, "prompt", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '定义的答案', type: 'text' }),
__metadata("design:type", String)
], AutoReplyEntity.prototype, "answer", void 0);
__decorate([
(0, typeorm_1.Column)({ default: 1, comment: '启用当前自动回复状态, 0关闭 1启用' }),
__metadata("design:type", Number)
], AutoReplyEntity.prototype, "status", void 0);
AutoReplyEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'auto_reply' })
], AutoReplyEntity);
exports.AutoReplyEntity = AutoReplyEntity;

View File

@@ -0,0 +1,87 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AutoreplyController = void 0;
const autoreply_service_1 = require("./autoreply.service");
const common_1 = require("@nestjs/common");
const swagger_1 = require("@nestjs/swagger");
const queryAutoReply_dto_1 = require("./dto/queryAutoReply.dto");
const addAutoReply_dto_1 = require("./dto/addAutoReply.dto");
const updateAutoReply_dto_1 = require("./dto/updateAutoReply.dto");
const delBadWords_dto_1 = require("./dto/delBadWords.dto");
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
let AutoreplyController = class AutoreplyController {
constructor(autoreplyService) {
this.autoreplyService = autoreplyService;
}
queryAutoreply(query) {
return this.autoreplyService.queryAutoreply(query);
}
addAutoreply(body) {
return this.autoreplyService.addAutoreply(body);
}
updateAutoreply(body) {
return this.autoreplyService.updateAutoreply(body);
}
delAutoreply(body) {
return this.autoreplyService.delAutoreply(body);
}
};
__decorate([
(0, common_1.Get)('query'),
(0, swagger_1.ApiOperation)({ summary: '查询自动回复' }),
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [queryAutoReply_dto_1.QueryAutoReplyDto]),
__metadata("design:returntype", void 0)
], AutoreplyController.prototype, "queryAutoreply", null);
__decorate([
(0, common_1.Post)('add'),
(0, swagger_1.ApiOperation)({ summary: '添加自动回复' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [addAutoReply_dto_1.AddAutoReplyDto]),
__metadata("design:returntype", void 0)
], AutoreplyController.prototype, "addAutoreply", null);
__decorate([
(0, common_1.Post)('update'),
(0, swagger_1.ApiOperation)({ summary: '修改自动回复' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [updateAutoReply_dto_1.UpdateAutpReplyDto]),
__metadata("design:returntype", void 0)
], AutoreplyController.prototype, "updateAutoreply", null);
__decorate([
(0, common_1.Post)('del'),
(0, swagger_1.ApiOperation)({ summary: '删除自动回复' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [delBadWords_dto_1.DelAutoReplyDto]),
__metadata("design:returntype", void 0)
], AutoreplyController.prototype, "delAutoreply", null);
AutoreplyController = __decorate([
(0, swagger_1.ApiTags)('autoreply'),
(0, common_1.Controller)('autoreply'),
__metadata("design:paramtypes", [autoreply_service_1.AutoreplyService])
], AutoreplyController);
exports.AutoreplyController = AutoreplyController;

View File

@@ -0,0 +1,26 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AutoreplyModule = void 0;
const common_1 = require("@nestjs/common");
const autoreply_controller_1 = require("./autoreply.controller");
const autoreply_service_1 = require("./autoreply.service");
const typeorm_1 = require("@nestjs/typeorm");
const autoreplay_entity_1 = require("./autoreplay.entity");
let AutoreplyModule = class AutoreplyModule {
};
AutoreplyModule = __decorate([
(0, common_1.Global)(),
(0, common_1.Module)({
imports: [typeorm_1.TypeOrmModule.forFeature([autoreplay_entity_1.AutoReplyEntity])],
controllers: [autoreply_controller_1.AutoreplyController],
providers: [autoreply_service_1.AutoreplyService],
exports: [autoreply_service_1.AutoreplyService],
})
], AutoreplyModule);
exports.AutoreplyModule = AutoreplyModule;

View File

@@ -0,0 +1,94 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AutoreplyService = void 0;
const common_1 = require("@nestjs/common");
const autoreplay_entity_1 = require("./autoreplay.entity");
const typeorm_1 = require("typeorm");
const typeorm_2 = require("@nestjs/typeorm");
let AutoreplyService = class AutoreplyService {
constructor(autoReplyEntity) {
this.autoReplyEntity = autoReplyEntity;
this.autoReplyKes = [];
this.autoReplyMap = {};
this.autoReplyFuzzyMatch = true;
}
async onModuleInit() {
this.loadAutoReplyList();
}
async loadAutoReplyList() {
const res = await this.autoReplyEntity.find({ where: { status: 1 }, select: ['prompt', 'answer'] });
this.autoReplyMap = {};
res.forEach((t) => (this.autoReplyMap[t.prompt] = t.answer));
this.autoReplyKes = Object.keys(this.autoReplyMap);
}
async checkAutoReply(prompt) {
let question = prompt;
if (this.autoReplyFuzzyMatch) {
question = this.autoReplyKes.find((item) => item.includes(prompt));
}
return question ? this.autoReplyMap[question] : '';
}
async queryAutoreply(query) {
const { page = 1, size = 10, prompt, status } = query;
const where = {};
[0, 1, '0', '1'].includes(status) && (where.status = status);
prompt && (where.prompt = (0, typeorm_1.Like)(`%${prompt}%`));
const [rows, count] = await this.autoReplyEntity.findAndCount({
where,
skip: (page - 1) * size,
take: size,
order: { id: 'DESC' },
});
return { rows, count };
}
async addAutoreply(body) {
const { prompt } = body;
const a = await this.autoReplyEntity.findOne({ where: { prompt } });
if (a) {
throw new common_1.HttpException('该问题已存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST);
}
await this.autoReplyEntity.save(body);
await this.loadAutoReplyList();
return '添加问题成功!';
}
async updateAutoreply(body) {
const { id } = body;
const res = await this.autoReplyEntity.update({ id }, body);
if (res.affected > 0) {
await this.loadAutoReplyList();
return '更新问题成功';
}
throw new common_1.HttpException('更新失败', common_1.HttpStatus.BAD_REQUEST);
}
async delAutoreply(body) {
const { id } = body;
const z = await this.autoReplyEntity.findOne({ where: { id } });
if (!z) {
throw new common_1.HttpException('该问题不存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST);
}
const res = await this.autoReplyEntity.delete({ id });
if (res.affected > 0) {
await this.loadAutoReplyList();
return '删除问题成功';
}
throw new common_1.HttpException('删除失败', common_1.HttpStatus.BAD_REQUEST);
}
};
AutoreplyService = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, typeorm_2.InjectRepository)(autoreplay_entity_1.AutoReplyEntity)),
__metadata("design:paramtypes", [typeorm_1.Repository])
], AutoreplyService);
exports.AutoreplyService = AutoreplyService;

View File

@@ -0,0 +1,24 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AddAutoReplyDto = void 0;
const swagger_1 = require("@nestjs/swagger");
class AddAutoReplyDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: '你是谁', description: '提问的问题', required: true }),
__metadata("design:type", String)
], AddAutoReplyDto.prototype, "prompt", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '我是NineAi提供的Ai服务机器人', description: '回答的答案', required: true }),
__metadata("design:type", String)
], AddAutoReplyDto.prototype, "answer", void 0);
exports.AddAutoReplyDto = AddAutoReplyDto;

View File

@@ -0,0 +1,20 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DelAutoReplyDto = void 0;
const swagger_1 = require("@nestjs/swagger");
class DelAutoReplyDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '自动回复id', required: true }),
__metadata("design:type", Number)
], DelAutoReplyDto.prototype, "id", void 0);
exports.DelAutoReplyDto = DelAutoReplyDto;

View File

@@ -0,0 +1,37 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QueryAutoReplyDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QueryAutoReplyDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryAutoReplyDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryAutoReplyDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '你是谁', description: '提问问题', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], QueryAutoReplyDto.prototype, "prompt", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '问题状态', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryAutoReplyDto.prototype, "status", void 0);
exports.QueryAutoReplyDto = QueryAutoReplyDto;

View File

@@ -0,0 +1,37 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdateAutpReplyDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class UpdateAutpReplyDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '自动回复id', required: true }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], UpdateAutpReplyDto.prototype, "id", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '你可以干嘛', description: '问题', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], UpdateAutpReplyDto.prototype, "prompt", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '我可以干很多事情.......', description: '答案', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], UpdateAutpReplyDto.prototype, "answer", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 0, description: '状态', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], UpdateAutpReplyDto.prototype, "status", void 0);
exports.UpdateAutpReplyDto = UpdateAutpReplyDto;

View File

@@ -0,0 +1,100 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BadwordsController = void 0;
const badwords_service_1 = require("./badwords.service");
const common_1 = require("@nestjs/common");
const swagger_1 = require("@nestjs/swagger");
const queryBadWords_dto_1 = require("./dto/queryBadWords.dto");
const queryViolation_dto_1 = require("./dto/queryViolation.dto");
const updateBadWords_dto_1 = require("./dto/updateBadWords.dto");
const delBadWords_dto_1 = require("./dto/delBadWords.dto");
const addBadWords_dto_1 = require("./dto/addBadWords.dto");
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
let BadwordsController = class BadwordsController {
constructor(badwordsService) {
this.badwordsService = badwordsService;
}
queryBadWords(query) {
return this.badwordsService.queryBadWords(query);
}
delBadWords(body) {
return this.badwordsService.delBadWords(body);
}
updateBadWords(body) {
return this.badwordsService.updateBadWords(body);
}
addBadWord(body) {
return this.badwordsService.addBadWord(body);
}
violation(req, query) {
return this.badwordsService.violation(req, query);
}
};
__decorate([
(0, common_1.Get)('query'),
(0, swagger_1.ApiOperation)({ summary: '查询所有敏感词' }),
__param(0, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [queryBadWords_dto_1.QueryBadWordsDto]),
__metadata("design:returntype", void 0)
], BadwordsController.prototype, "queryBadWords", null);
__decorate([
(0, common_1.Post)('del'),
(0, swagger_1.ApiOperation)({ summary: '删除敏感词' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [delBadWords_dto_1.DelBadWordsDto]),
__metadata("design:returntype", void 0)
], BadwordsController.prototype, "delBadWords", null);
__decorate([
(0, common_1.Post)('update'),
(0, swagger_1.ApiOperation)({ summary: '更新敏感词' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [updateBadWords_dto_1.UpdateBadWordsDto]),
__metadata("design:returntype", void 0)
], BadwordsController.prototype, "updateBadWords", null);
__decorate([
(0, common_1.Post)('add'),
(0, swagger_1.ApiOperation)({ summary: '新增敏感词' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [addBadWords_dto_1.AddBadWordDto]),
__metadata("design:returntype", void 0)
], BadwordsController.prototype, "addBadWord", null);
__decorate([
(0, common_1.Get)('violation'),
(0, swagger_1.ApiOperation)({ summary: '查询违规记录' }),
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, queryViolation_dto_1.QueryViolationDto]),
__metadata("design:returntype", void 0)
], BadwordsController.prototype, "violation", null);
BadwordsController = __decorate([
(0, swagger_1.ApiTags)('badWords'),
(0, common_1.Controller)('badwords'),
__metadata("design:paramtypes", [badwords_service_1.BadwordsService])
], BadwordsController);
exports.BadwordsController = BadwordsController;

View File

@@ -0,0 +1,32 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BadWordsEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let BadWordsEntity = class BadWordsEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ length: 20, comment: '敏感词' }),
__metadata("design:type", String)
], BadWordsEntity.prototype, "word", void 0);
__decorate([
(0, typeorm_1.Column)({ default: 1, comment: '敏感词开启状态' }),
__metadata("design:type", Number)
], BadWordsEntity.prototype, "status", void 0);
__decorate([
(0, typeorm_1.Column)({ default: 0, comment: '敏感词触发次数' }),
__metadata("design:type", Number)
], BadWordsEntity.prototype, "count", void 0);
BadWordsEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'bad_words' })
], BadWordsEntity);
exports.BadWordsEntity = BadWordsEntity;

View File

@@ -0,0 +1,28 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BadwordsModule = void 0;
const common_1 = require("@nestjs/common");
const badwords_service_1 = require("./badwords.service");
const badwords_controller_1 = require("./badwords.controller");
const typeorm_1 = require("@nestjs/typeorm");
const badwords_entity_1 = require("./badwords.entity");
const violationLog_entity_1 = require("./violationLog.entity");
const user_entity_1 = require("../user/user.entity");
let BadwordsModule = class BadwordsModule {
};
BadwordsModule = __decorate([
(0, common_1.Global)(),
(0, common_1.Module)({
imports: [typeorm_1.TypeOrmModule.forFeature([badwords_entity_1.BadWordsEntity, violationLog_entity_1.ViolationLogEntity, user_entity_1.UserEntity])],
providers: [badwords_service_1.BadwordsService],
controllers: [badwords_controller_1.BadwordsController],
exports: [badwords_service_1.BadwordsService],
})
], BadwordsModule);
exports.BadwordsModule = BadwordsModule;

View File

@@ -0,0 +1,224 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BadwordsService = void 0;
const globalConfig_service_1 = require("./../globalConfig/globalConfig.service");
const common_1 = require("@nestjs/common");
const badwords_entity_1 = require("./badwords.entity");
const typeorm_1 = require("typeorm");
const typeorm_2 = require("@nestjs/typeorm");
const axios_1 = require("axios");
const violationLog_entity_1 = require("./violationLog.entity");
const user_entity_1 = require("../user/user.entity");
const utils_1 = require("../../common/utils");
let BadwordsService = class BadwordsService {
constructor(badWordsEntity, violationLogEntity, userEntity, globalConfigService) {
this.badWordsEntity = badWordsEntity;
this.violationLogEntity = violationLogEntity;
this.userEntity = userEntity;
this.globalConfigService = globalConfigService;
this.badWords = [];
}
async onModuleInit() {
this.loadBadWords();
}
async customSensitiveWords(content, userId) {
const triggeredWords = [];
for (let i = 0; i < this.badWords.length; i++) {
const word = this.badWords[i];
if (content.includes(word)) {
triggeredWords.push(word);
}
}
if (triggeredWords.length) {
await this.recordUserBadWords(userId, content, triggeredWords, ['自定义'], '自定义检测');
const tips = `您提交的信息中包含违规的内容、我们已对您的账户进行标记、请合规使用!`;
throw new common_1.HttpException(tips, common_1.HttpStatus.BAD_REQUEST);
}
}
async checkBadWords(content, userId) {
const config = await this.globalConfigService.getSensitiveConfig();
if (config) {
await this.checkBadWordsByConfig(content, config, userId);
}
await this.customSensitiveWords(content, userId);
}
async checkBadWordsByConfig(content, config, userId) {
const { useType } = config;
useType === 'baidu' && (await this.baiduCheckBadWords(content, config.baiduTextAccessToken, userId));
useType === 'nineai' && (await this.nineaiCheckBadWords(content, config, userId));
}
extractContent(str) {
const pattern = /存在(.*?)不合规/;
const match = str.match(pattern);
return match ? match[1] : '';
}
async baiduCheckBadWords(content, accessToken, userId) {
if (!accessToken)
return;
const url = `https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined?access_token=${accessToken}}`;
const headers = {
'Content-Type': 'application/x-www-form-urlencoded',
Accept: 'application/json',
};
const response = await axios_1.default.post(url, { text: content }, { headers });
const { conclusion, error_code, error_msg, conclusionType, data } = response.data;
if (error_code) {
console.log('百度文本检测出现错误、请查看配置信息: ', error_msg);
}
if (conclusionType !== 1) {
const types = [...new Set(data.map((item) => this.extractContent(item.msg)))];
await this.recordUserBadWords(userId, content, ['***'], types, '百度云检测');
const tips = `您提交的信息中包含${types.join(',')}的内容、我们已对您的账户进行标记、请合规使用!`;
throw new common_1.HttpException(tips, common_1.HttpStatus.BAD_REQUEST);
}
}
async nineaiCheckBadWords(content, config, userId) {
var _a;
const { nineaiBuiltInSensitiveApiBase, nineaiBuiltInSensitiveAuthKey } = config;
if (!nineaiBuiltInSensitiveApiBase || !nineaiBuiltInSensitiveAuthKey)
return;
const res = await axios_1.default.post(nineaiBuiltInSensitiveApiBase, { content }, { headers: { 'Content-Type': 'application/json', Authorization: nineaiBuiltInSensitiveAuthKey } });
if (!res.data)
return;
if (res.data.code !== '0') {
const { msg = '检测失败' } = res.data;
throw new common_1.HttpException(`敏感词检测 | ${msg}`, common_1.HttpStatus.BAD_REQUEST);
}
if (res.data.word_list && ((_a = res.data.word_list) === null || _a === void 0 ? void 0 : _a.length)) {
const words = [...new Set(res.data.word_list.map((t) => t.keyword))];
const types = [...new Set(res.data.word_list.map((t) => t.category))];
await this.recordUserBadWords(userId, content, words, types, 'NineAi检测');
const tips = this.formarTips(res.data.word_list);
throw new common_1.HttpException(tips, common_1.HttpStatus.BAD_REQUEST);
}
}
formarTips(wordList) {
const categorys = wordList.map((t) => t.category);
const unSet = [...new Set(categorys)];
return `您提交的内容中包含${unSet.join(',')}的信息、我们已对您账号进行标记、请合规使用!`;
}
async loadBadWords() {
const data = await this.badWordsEntity.find({ where: { status: 1 }, select: ['word'] });
this.badWords = data.map((t) => t.word);
}
async queryBadWords(query) {
const { page = 1, size = 500, word, status } = query;
const where = {};
[0, 1, '0', '1'].includes(status) && (where.status = status);
word && (where.word = (0, typeorm_1.Like)(`%${word}%`));
const [rows, count] = await this.badWordsEntity.findAndCount({
where,
skip: (page - 1) * size,
take: size,
order: { id: 'ASC' },
});
return { rows, count };
}
async delBadWords(body) {
const b = await this.badWordsEntity.findOne({ where: { id: body.id } });
if (!b) {
throw new common_1.HttpException('敏感词不存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST);
}
const res = await this.badWordsEntity.delete({ id: body.id });
if (res.affected > 0) {
await this.loadBadWords();
return '删除敏感词成功';
}
else {
throw new common_1.HttpException('删除敏感词失败', common_1.HttpStatus.BAD_REQUEST);
}
}
async updateBadWords(body) {
const { id, word, status } = body;
const b = await this.badWordsEntity.findOne({ where: { word } });
if (b) {
throw new common_1.HttpException('敏感词已经存在了、请勿重复添加', common_1.HttpStatus.BAD_REQUEST);
}
const res = await this.badWordsEntity.update({ id }, { word, status });
if (res.affected > 0) {
await this.loadBadWords();
return '更新敏感词成功';
}
else {
throw new common_1.HttpException('更新敏感词失败', common_1.HttpStatus.BAD_REQUEST);
}
}
async addBadWord(body) {
const { word } = body;
const b = await this.badWordsEntity.findOne({ where: { word } });
if (b) {
throw new common_1.HttpException('敏感词已存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST);
}
await this.badWordsEntity.save({ word });
await this.loadBadWords();
return '添加敏感词成功';
}
async recordUserBadWords(userId, content, words, typeCn, typeOriginCn) {
const data = {
userId,
content,
words: JSON.stringify(words),
typeCn: JSON.stringify(typeCn),
typeOriginCn,
};
try {
await this.userEntity
.createQueryBuilder()
.update(user_entity_1.UserEntity)
.set({ violationCount: () => 'violationCount + 1' })
.where('id = :userId', { userId })
.execute();
await this.violationLogEntity.save(data);
}
catch (error) {
console.log('error: ', error);
}
}
async violation(req, query) {
const { role } = req.user;
const { page = 1, size = 10, userId, typeOriginCn } = query;
const where = {};
userId && (where['userId'] = userId);
typeOriginCn && (where['typeOriginCn'] = typeOriginCn);
const [rows, count] = await this.violationLogEntity.findAndCount({
where,
skip: (page - 1) * size,
take: size,
order: { id: 'DESC' },
});
const userIds = [...new Set(rows.map((t) => t.userId))];
const usersInfo = await this.userEntity.find({
where: { id: (0, typeorm_1.In)(userIds) },
select: ['id', 'avatar', 'username', 'email', 'violationCount', 'status'],
});
rows.forEach((t) => {
const user = usersInfo.find((u) => u.id === t.userId);
role !== 'super' && (user.email = (0, utils_1.hideString)(user.email));
t.userInfo = user;
});
return { rows, count };
}
};
BadwordsService = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, typeorm_2.InjectRepository)(badwords_entity_1.BadWordsEntity)),
__param(1, (0, typeorm_2.InjectRepository)(violationLog_entity_1.ViolationLogEntity)),
__param(2, (0, typeorm_2.InjectRepository)(user_entity_1.UserEntity)),
__metadata("design:paramtypes", [typeorm_1.Repository,
typeorm_1.Repository,
typeorm_1.Repository,
globalConfig_service_1.GlobalConfigService])
], BadwordsService);
exports.BadwordsService = BadwordsService;

View File

@@ -0,0 +1,20 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AddBadWordDto = void 0;
const swagger_1 = require("@nestjs/swagger");
class AddBadWordDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词', required: true }),
__metadata("design:type", String)
], AddBadWordDto.prototype, "word", void 0);
exports.AddBadWordDto = AddBadWordDto;

View File

@@ -0,0 +1,20 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DelBadWordsDto = void 0;
const swagger_1 = require("@nestjs/swagger");
class DelBadWordsDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '敏感词id', required: true }),
__metadata("design:type", Number)
], DelBadWordsDto.prototype, "id", void 0);
exports.DelBadWordsDto = DelBadWordsDto;

View File

@@ -0,0 +1,37 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QueryBadWordsDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QueryBadWordsDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryBadWordsDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryBadWordsDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词内容', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], QueryBadWordsDto.prototype, "word", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '关键词状态', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryBadWordsDto.prototype, "status", void 0);
exports.QueryBadWordsDto = QueryBadWordsDto;

View File

@@ -0,0 +1,37 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QueryViolationDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QueryViolationDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryViolationDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryViolationDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '用户ID', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryViolationDto.prototype, "userId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '百度云检测', description: '检测平台来源', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], QueryViolationDto.prototype, "typeOriginCn", void 0);
exports.QueryViolationDto = QueryViolationDto;

View File

@@ -0,0 +1,32 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdateBadWordsDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class UpdateBadWordsDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '敏感词id', required: true }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], UpdateBadWordsDto.prototype, "id", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词内容', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], UpdateBadWordsDto.prototype, "word", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '关键词状态', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], UpdateBadWordsDto.prototype, "status", void 0);
exports.UpdateBadWordsDto = UpdateBadWordsDto;

View File

@@ -0,0 +1,40 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ViolationLogEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let ViolationLogEntity = class ViolationLogEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ comment: '用户id' }),
__metadata("design:type", Number)
], ViolationLogEntity.prototype, "userId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '违规内容', type: 'text' }),
__metadata("design:type", String)
], ViolationLogEntity.prototype, "content", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '敏感词', type: 'text' }),
__metadata("design:type", String)
], ViolationLogEntity.prototype, "words", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '违规类型' }),
__metadata("design:type", String)
], ViolationLogEntity.prototype, "typeCn", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '违规检测失败于哪个平台' }),
__metadata("design:type", String)
], ViolationLogEntity.prototype, "typeOriginCn", void 0);
ViolationLogEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'violation_log' })
], ViolationLogEntity);
exports.ViolationLogEntity = ViolationLogEntity;

View File

@@ -0,0 +1,101 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatGroupController = void 0;
const swagger_1 = require("@nestjs/swagger");
const chatGroup_service_1 = require("./chatGroup.service");
const common_1 = require("@nestjs/common");
const createGroup_dto_1 = require("./dto/createGroup.dto");
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
const delGroup_dto_1 = require("./dto/delGroup.dto");
const updateGroup_dto_1 = require("./dto/updateGroup.dto");
let ChatGroupController = class ChatGroupController {
constructor(chatGroupService) {
this.chatGroupService = chatGroupService;
}
create(body, req) {
return this.chatGroupService.create(body, req);
}
query(req) {
return this.chatGroupService.query(req);
}
update(body, req) {
return this.chatGroupService.update(body, req);
}
del(body, req) {
return this.chatGroupService.del(body, req);
}
delAll(req) {
return this.chatGroupService.delAll(req);
}
};
__decorate([
(0, common_1.Post)('create'),
(0, swagger_1.ApiOperation)({ summary: '创建对话组' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [createGroup_dto_1.CreateGroupDto, Object]),
__metadata("design:returntype", void 0)
], ChatGroupController.prototype, "create", null);
__decorate([
(0, common_1.Get)('query'),
(0, swagger_1.ApiOperation)({ summary: '查询对话组' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], ChatGroupController.prototype, "query", null);
__decorate([
(0, common_1.Post)('update'),
(0, swagger_1.ApiOperation)({ summary: '更新对话组' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [updateGroup_dto_1.UpdateGroupDto, Object]),
__metadata("design:returntype", void 0)
], ChatGroupController.prototype, "update", null);
__decorate([
(0, common_1.Post)('del'),
(0, swagger_1.ApiOperation)({ summary: '删除对话组' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [delGroup_dto_1.DelGroupDto, Object]),
__metadata("design:returntype", void 0)
], ChatGroupController.prototype, "del", null);
__decorate([
(0, common_1.Post)('delAll'),
(0, swagger_1.ApiOperation)({ summary: '删除对话组' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], ChatGroupController.prototype, "delAll", null);
ChatGroupController = __decorate([
(0, swagger_1.ApiTags)('group'),
(0, common_1.Controller)('group'),
__metadata("design:paramtypes", [chatGroup_service_1.ChatGroupService])
], ChatGroupController);
exports.ChatGroupController = ChatGroupController;

View File

@@ -0,0 +1,44 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatGroupEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let ChatGroupEntity = class ChatGroupEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ comment: '用户ID' }),
__metadata("design:type", Number)
], ChatGroupEntity.prototype, "userId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '是否置顶聊天', type: 'boolean', default: false }),
__metadata("design:type", Boolean)
], ChatGroupEntity.prototype, "isSticky", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '分组名称', nullable: true }),
__metadata("design:type", String)
], ChatGroupEntity.prototype, "title", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '应用ID', nullable: true }),
__metadata("design:type", Number)
], ChatGroupEntity.prototype, "appId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '是否删除了', default: false }),
__metadata("design:type", Boolean)
], ChatGroupEntity.prototype, "isDelete", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '配置', nullable: true, default: null, type: 'text' }),
__metadata("design:type", String)
], ChatGroupEntity.prototype, "config", void 0);
ChatGroupEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'chat_group' })
], ChatGroupEntity);
exports.ChatGroupEntity = ChatGroupEntity;

View File

@@ -0,0 +1,27 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatGroupModule = void 0;
const common_1 = require("@nestjs/common");
const chatGroup_controller_1 = require("./chatGroup.controller");
const chatGroup_service_1 = require("./chatGroup.service");
const typeorm_1 = require("@nestjs/typeorm");
const chatGroup_entity_1 = require("./chatGroup.entity");
const app_entity_1 = require("../app/app.entity");
let ChatGroupModule = class ChatGroupModule {
};
ChatGroupModule = __decorate([
(0, common_1.Global)(),
(0, common_1.Module)({
imports: [typeorm_1.TypeOrmModule.forFeature([chatGroup_entity_1.ChatGroupEntity, app_entity_1.AppEntity])],
controllers: [chatGroup_controller_1.ChatGroupController],
providers: [chatGroup_service_1.ChatGroupService],
exports: [chatGroup_service_1.ChatGroupService]
})
], ChatGroupModule);
exports.ChatGroupModule = ChatGroupModule;

View File

@@ -0,0 +1,143 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatGroupService = void 0;
const common_1 = require("@nestjs/common");
const chatGroup_entity_1 = require("./chatGroup.entity");
const typeorm_1 = require("@nestjs/typeorm");
const typeorm_2 = require("typeorm");
const app_entity_1 = require("../app/app.entity");
const models_service_1 = require("../models/models.service");
let ChatGroupService = class ChatGroupService {
constructor(chatGroupEntity, appEntity, modelsService) {
this.chatGroupEntity = chatGroupEntity;
this.appEntity = appEntity;
this.modelsService = modelsService;
}
async create(body, req) {
const { id } = req.user;
const { appId } = body;
const params = { title: '新对话', userId: id };
if (appId) {
const appInfo = await this.appEntity.findOne({ where: { id: appId } });
if (!appInfo) {
throw new common_1.HttpException('非法操作、您在使用一个不存在的应用!', common_1.HttpStatus.BAD_REQUEST);
}
else {
const { status, name } = appInfo;
const g = await this.chatGroupEntity.count({ where: { userId: id, appId, isDelete: false } });
if (g > 0) {
throw new common_1.HttpException('当前应用已经开启了一个对话无需新建了!', common_1.HttpStatus.BAD_REQUEST);
}
if (![1, 3, 4, 5].includes(status)) {
throw new common_1.HttpException('非法操作、您在使用一个未启用的应用!', common_1.HttpStatus.BAD_REQUEST);
}
name && (params['title'] = name);
appId && (params['appId'] = appId);
}
}
const modelConfig = await this.modelsService.getBaseConfig(appId);
appId && (modelConfig.appId = appId);
if (!modelConfig) {
throw new common_1.HttpException('管理员未配置任何AI模型、请先联系管理员开通聊天模型配置', common_1.HttpStatus.BAD_REQUEST);
}
return await this.chatGroupEntity.save(Object.assign(Object.assign({}, params), { config: JSON.stringify(modelConfig) }));
}
async query(req) {
try {
const { id } = req.user;
const params = { userId: id, isDelete: false };
const res = await this.chatGroupEntity.find({ where: params, order: { isSticky: 'DESC', id: 'DESC' } });
const appIds = res.filter(t => t.appId).map(t => t.appId);
const appInfos = await this.appEntity.find({ where: { id: (0, typeorm_2.In)(appIds) } });
return res.map((item) => {
var _a;
item.appLogo = (_a = appInfos.find(t => t.id === item.appId)) === null || _a === void 0 ? void 0 : _a.coverImg;
return item;
});
}
catch (error) {
console.log('error: ', error);
}
}
async update(body, req) {
const { title, isSticky, groupId, config } = body;
const { id } = req.user;
const g = await this.chatGroupEntity.findOne({ where: { id: groupId, userId: id } });
if (!g) {
throw new common_1.HttpException('请先选择一个对话或者新加一个对话再操作!', common_1.HttpStatus.BAD_REQUEST);
}
const { appId } = g;
if (appId && !title) {
try {
const parseData = JSON.parse(config);
if (Number(parseData.keyType) !== 1) {
throw new common_1.HttpException('应用对话名称不能修改哟!', common_1.HttpStatus.BAD_REQUEST);
}
}
catch (error) {
}
}
const data = {};
title && (data['title'] = title);
typeof isSticky !== 'undefined' && (data['isSticky'] = isSticky);
config && (data['config'] = config);
const u = await this.chatGroupEntity.update({ id: groupId }, data);
if (u.affected) {
return true;
}
else {
throw new common_1.HttpException('更新对话失败!', common_1.HttpStatus.BAD_REQUEST);
}
}
async del(body, req) {
const { groupId } = body;
const { id } = req.user;
const g = await this.chatGroupEntity.findOne({ where: { id: groupId, userId: id } });
if (!g) {
throw new common_1.HttpException('非法操作、您在删除一个非法资源!', common_1.HttpStatus.BAD_REQUEST);
}
const r = await this.chatGroupEntity.update({ id: groupId }, { isDelete: true });
if (r.affected) {
return '删除成功';
}
else {
throw new common_1.HttpException('删除失败!', common_1.HttpStatus.BAD_REQUEST);
}
}
async delAll(req) {
const { id } = req.user;
const r = await this.chatGroupEntity.update({ userId: id, isSticky: false, isDelete: false }, { isDelete: true });
if (r.affected) {
return '删除成功';
}
else {
throw new common_1.HttpException('删除失败!', common_1.HttpStatus.BAD_REQUEST);
}
}
async getGroupInfoFromId(id) {
if (!id)
return;
return await this.chatGroupEntity.findOne({ where: { id } });
}
};
ChatGroupService = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, typeorm_1.InjectRepository)(chatGroup_entity_1.ChatGroupEntity)),
__param(1, (0, typeorm_1.InjectRepository)(app_entity_1.AppEntity)),
__metadata("design:paramtypes", [typeorm_2.Repository,
typeorm_2.Repository,
models_service_1.ModelsService])
], ChatGroupService);
exports.ChatGroupService = ChatGroupService;

View File

@@ -0,0 +1,22 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateGroupDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class CreateGroupDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '应用ID', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], CreateGroupDto.prototype, "appId", void 0);
exports.CreateGroupDto = CreateGroupDto;

View File

@@ -0,0 +1,20 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DelGroupDto = void 0;
const swagger_1 = require("@nestjs/swagger");
class DelGroupDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '对话分组ID', required: true }),
__metadata("design:type", Number)
], DelGroupDto.prototype, "groupId", void 0);
exports.DelGroupDto = DelGroupDto;

View File

@@ -0,0 +1,36 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdateGroupDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class UpdateGroupDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '修改的对话ID', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], UpdateGroupDto.prototype, "groupId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '对话组title', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], UpdateGroupDto.prototype, "title", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '对话组是否置顶', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Boolean)
], UpdateGroupDto.prototype, "isSticky", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: "", description: '对话模型配置项序列化的字符串', required: false }),
__metadata("design:type", String)
], UpdateGroupDto.prototype, "config", void 0);
exports.UpdateGroupDto = UpdateGroupDto;

View File

@@ -0,0 +1,162 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatLogController = void 0;
const common_1 = require("@nestjs/common");
const swagger_1 = require("@nestjs/swagger");
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
const chatLog_service_1 = require("./chatLog.service");
const queryAllDrawLog_dto_1 = require("./dto/queryAllDrawLog.dto");
const queryAllChatLog_dto_1 = require("./dto/queryAllChatLog.dto");
const recDrawImg_dto_1 = require("./dto/recDrawImg.dto");
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
const queryMyChatLog_dto_1 = require("./dto/queryMyChatLog.dto");
const exportExcelChatlog_dto_1 = require("./dto/exportExcelChatlog.dto");
const chatList_dto_1 = require("./dto/chatList.dto");
const del_dto_1 = require("./dto/del.dto");
const delByGroup_dto_1 = require("./dto/delByGroup.dto");
const queryByAppId_dto_1 = require("./dto/queryByAppId.dto");
let ChatLogController = class ChatLogController {
constructor(chatLogService) {
this.chatLogService = chatLogService;
}
querDrawLog(query, req) {
return this.chatLogService.querDrawLog(req, query);
}
recDrawImg(body) {
return this.chatLogService.recDrawImg(body);
}
querAllDrawLog(params) {
return this.chatLogService.querAllDrawLog(params);
}
queryAllChatLog(params, req) {
return this.chatLogService.querAllChatLog(params, req);
}
exportExcel(body, res) {
return this.chatLogService.exportExcel(body, res);
}
chatList(req, params) {
return this.chatLogService.chatList(req, params);
}
del(req, body) {
return this.chatLogService.deleteChatLog(req, body);
}
delByGroupId(req, body) {
return this.chatLogService.delByGroupId(req, body);
}
byAppId(req, params) {
return this.chatLogService.byAppId(req, params);
}
};
__decorate([
(0, common_1.Get)('draw'),
(0, swagger_1.ApiOperation)({ summary: '查询我的绘制记录' }),
(0, swagger_1.ApiBearerAuth)(),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
__param(0, (0, common_1.Query)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [queryMyChatLog_dto_1.QuerMyChatLogDto, Object]),
__metadata("design:returntype", void 0)
], ChatLogController.prototype, "querDrawLog", null);
__decorate([
(0, common_1.Post)('recDrawImg'),
(0, swagger_1.ApiOperation)({ summary: '推荐此图片对外展示' }),
(0, swagger_1.ApiBearerAuth)(),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [recDrawImg_dto_1.recDrawImgDto]),
__metadata("design:returntype", void 0)
], ChatLogController.prototype, "recDrawImg", null);
__decorate([
(0, common_1.Get)('drawAll'),
(0, swagger_1.ApiOperation)({ summary: '查询所有的绘制记录' }),
__param(0, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [queryAllDrawLog_dto_1.QuerAllDrawLogDto]),
__metadata("design:returntype", void 0)
], ChatLogController.prototype, "querAllDrawLog", null);
__decorate([
(0, common_1.Get)('chatAll'),
(0, swagger_1.ApiOperation)({ summary: '查询所有的问答记录' }),
(0, swagger_1.ApiBearerAuth)(),
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
__param(0, (0, common_1.Query)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [queryAllChatLog_dto_1.QuerAllChatLogDto, Object]),
__metadata("design:returntype", void 0)
], ChatLogController.prototype, "queryAllChatLog", null);
__decorate([
(0, common_1.Post)('exportExcel'),
(0, swagger_1.ApiOperation)({ summary: '导出问答记录' }),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Res)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [exportExcelChatlog_dto_1.ExportExcelChatlogDto, Object]),
__metadata("design:returntype", void 0)
], ChatLogController.prototype, "exportExcel", null);
__decorate([
(0, common_1.Get)('chatList'),
(0, swagger_1.ApiOperation)({ summary: '查询我的问答记录' }),
(0, swagger_1.ApiBearerAuth)(),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, chatList_dto_1.ChatListDto]),
__metadata("design:returntype", void 0)
], ChatLogController.prototype, "chatList", null);
__decorate([
(0, common_1.Post)('del'),
(0, swagger_1.ApiOperation)({ summary: '删除我的问答记录' }),
(0, swagger_1.ApiBearerAuth)(),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, del_dto_1.DelDto]),
__metadata("design:returntype", void 0)
], ChatLogController.prototype, "del", null);
__decorate([
(0, common_1.Post)('delByGroupId'),
(0, swagger_1.ApiOperation)({ summary: '清空一组对话' }),
(0, swagger_1.ApiBearerAuth)(),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, delByGroup_dto_1.DelByGroupDto]),
__metadata("design:returntype", void 0)
], ChatLogController.prototype, "delByGroupId", null);
__decorate([
(0, common_1.Get)('byAppId'),
(0, swagger_1.ApiOperation)({ summary: '查询某个应用的问答记录' }),
(0, swagger_1.ApiBearerAuth)(),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, queryByAppId_dto_1.QueryByAppIdDto]),
__metadata("design:returntype", void 0)
], ChatLogController.prototype, "byAppId", null);
ChatLogController = __decorate([
(0, common_1.Controller)('chatLog'),
(0, swagger_1.ApiTags)('ChatLog'),
__metadata("design:paramtypes", [chatLog_service_1.ChatLogService])
], ChatLogController);
exports.ChatLogController = ChatLogController;

116
dist/modules/chatLog/chatLog.entity.js vendored Normal file
View File

@@ -0,0 +1,116 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatLogEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let ChatLogEntity = class ChatLogEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ comment: '用户ID' }),
__metadata("design:type", Number)
], ChatLogEntity.prototype, "userId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '使用类型', nullable: true }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "type", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '询问的问题', type: 'text', nullable: true }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "prompt", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '回答的答案', type: 'text', nullable: true }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "answer", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '本次问题的token', nullable: true }),
__metadata("design:type", Number)
], ChatLogEntity.prototype, "promptTokens", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '本次回答的token', nullable: true }),
__metadata("design:type", Number)
], ChatLogEntity.prototype, "completionTokens", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '本次总花费的token', nullable: true }),
__metadata("design:type", Number)
], ChatLogEntity.prototype, "totalTokens", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '本次使用的模型', nullable: true }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "model", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '本次访问的Ip地址', nullable: true }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "curIp", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '是否推荐0: 默认 1: 推荐', nullable: true, default: 0 }),
__metadata("design:type", Number)
], ChatLogEntity.prototype, "rec", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '扩展参数', nullable: true, type: 'text' }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "extend", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'mj绘画列表携带的一级id用于图片变换或者放大', nullable: true }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "message_id", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '一组图片的第几张、放大或者变换的时候需要使用', nullable: true }),
__metadata("design:type", Number)
], ChatLogEntity.prototype, "orderId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'mj绘画的动作、放大或者变换、或者全部重新绘制', nullable: true }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "action", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '是否是组图,这种图才可以指定放大', default: 0 }),
__metadata("design:type", Number)
], ChatLogEntity.prototype, "group", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '放大图片的Id记录', nullable: true }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "upscaleId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '变换图片的Id记录', nullable: true }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "variationId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '图片信息的string', nullable: true, type: 'text' }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "fileInfo", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'role system user assistant', nullable: true }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "role", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '对话分组ID', nullable: true }),
__metadata("design:type", Number)
], ChatLogEntity.prototype, "groupId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '序列化的本次会话参数', nullable: true, type: 'text' }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "conversationOptions", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '序列化的本次提交参数', nullable: true, type: 'text' }),
__metadata("design:type", String)
], ChatLogEntity.prototype, "requestOptions", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '是否删除', default: false }),
__metadata("design:type", Boolean)
], ChatLogEntity.prototype, "isDelete", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '使用的应用id', nullable: true }),
__metadata("design:type", Number)
], ChatLogEntity.prototype, "appId", void 0);
ChatLogEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'chatlog' })
], ChatLogEntity);
exports.ChatLogEntity = ChatLogEntity;

29
dist/modules/chatLog/chatLog.module.js vendored Normal file
View File

@@ -0,0 +1,29 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatLogModule = void 0;
const common_1 = require("@nestjs/common");
const chatLog_service_1 = require("./chatLog.service");
const typeorm_1 = require("@nestjs/typeorm");
const chatLog_entity_1 = require("./chatLog.entity");
const chatLog_controller_1 = require("./chatLog.controller");
const user_entity_1 = require("../user/user.entity");
const badwords_entity_1 = require("../badwords/badwords.entity");
const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity");
let ChatLogModule = class ChatLogModule {
};
ChatLogModule = __decorate([
(0, common_1.Global)(),
(0, common_1.Module)({
imports: [typeorm_1.TypeOrmModule.forFeature([chatLog_entity_1.ChatLogEntity, user_entity_1.UserEntity, badwords_entity_1.BadWordsEntity, chatGroup_entity_1.ChatGroupEntity])],
controllers: [chatLog_controller_1.ChatLogController],
providers: [chatLog_service_1.ChatLogService],
exports: [chatLog_service_1.ChatLogService],
})
], ChatLogModule);
exports.ChatLogModule = ChatLogModule;

269
dist/modules/chatLog/chatLog.service.js vendored Normal file
View File

@@ -0,0 +1,269 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatLogService = void 0;
const common_1 = require("@nestjs/common");
const typeorm_1 = require("@nestjs/typeorm");
const chatLog_entity_1 = require("./chatLog.entity");
const typeorm_2 = require("typeorm");
const balance_constant_1 = require("../../common/constants/balance.constant");
const user_entity_1 = require("../user/user.entity");
const utils_1 = require("../../common/utils");
const exceljs_1 = require("exceljs");
const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity");
let ChatLogService = class ChatLogService {
constructor(chatLogEntity, userEntity, chatGroupEntity) {
this.chatLogEntity = chatLogEntity;
this.userEntity = userEntity;
this.chatGroupEntity = chatGroupEntity;
}
async saveChatLog(logInfo) {
return await this.chatLogEntity.save(logInfo);
}
async querDrawLog(req, query) {
const { id } = req.user;
const { model } = query;
const where = { userId: id, type: balance_constant_1.DeductionKey.PAINT_TYPE };
if (model) {
where.model = model;
if (model === 'DALL-E2') {
where.model = (0, typeorm_2.In)(['DALL-E2', 'dall-e-3']);
}
}
const data = await this.chatLogEntity.find({
where,
order: { id: 'DESC' },
select: ['id', 'answer', 'prompt', 'message_id', 'group', 'model', 'extend', 'type', 'fileInfo'],
});
data.forEach((r) => {
if (r.type === 'paintCount') {
const w = r.model === 'mj' ? 310 : 160;
const imgType = r.answer.includes('cos') ? 'tencent' : 'ali';
const compress = imgType === 'tencent' ? `?imageView2/1/w/${w}/q/55` : `?x-oss-process=image/resize,w_${w}`;
r.thumbImg = r.answer + compress;
try {
r.fileInfo = r.fileInfo ? JSON.parse(r.fileInfo) : null;
}
catch (error) {
r.fileInfo = {};
}
}
});
return data;
}
async querAllDrawLog(params) {
const { page = 1, size = 20, rec, userId, model } = params;
const where = { type: balance_constant_1.DeductionKey.PAINT_TYPE, prompt: (0, typeorm_2.Not)(''), answer: (0, typeorm_2.Not)('') };
rec && Object.assign(where, { rec });
userId && Object.assign(where, { userId });
if (model) {
where.model = model;
if (model === 'DALL-E2') {
where.model = (0, typeorm_2.In)(['DALL-E2', 'dall-e-3']);
}
}
const [rows, count] = await this.chatLogEntity.findAndCount({
order: { id: 'DESC' },
skip: (page - 1) * size,
take: size,
where,
});
rows.forEach((r) => {
var _a;
if (r.type === 'paintCount') {
const w = r.model === 'mj' ? 310 : 160;
const imgType = r.answer.includes('cos') ? 'tencent' : 'ali';
const compress = imgType === 'tencent' ? `?imageView2/1/w/${w}/q/55` : `?x-oss-process=image/resize,w_${w}`;
r.thumbImg = r.answer + compress;
try {
const detailInfo = r.extend ? JSON.parse(r.extend) : null;
if (detailInfo) {
if (detailInfo) {
r.isGroup = ((_a = detailInfo === null || detailInfo === void 0 ? void 0 : detailInfo.components[0]) === null || _a === void 0 ? void 0 : _a.components.length) === 5;
}
else {
r.isGroup = false;
}
}
}
catch (error) {
console.log('querAllDrawLog Json parse error', error);
}
}
});
return { rows, count };
}
async recDrawImg(body) {
const { id } = body;
const l = await this.chatLogEntity.findOne({ where: { id, type: balance_constant_1.DeductionKey.PAINT_TYPE } });
if (!l) {
throw new common_1.HttpException('你推荐的图片不存在、请检查!', common_1.HttpStatus.BAD_REQUEST);
}
const rec = l.rec === 1 ? 0 : 1;
const res = await this.chatLogEntity.update({ id }, { rec });
if (res.affected > 0) {
return `${rec ? '推荐' : '取消推荐'}图片成功!`;
}
throw new common_1.HttpException('你操作的图片不存在、请检查!', common_1.HttpStatus.BAD_REQUEST);
}
async exportExcel(body, res) {
const where = { type: balance_constant_1.DeductionKey.CHAT_TYPE };
const { page = 1, size = 30, prompt, email } = body;
prompt && Object.assign(where, { prompt: (0, typeorm_2.Like)(`%${prompt}%`) });
if (email) {
const user = await this.userEntity.findOne({ where: { email } });
(user === null || user === void 0 ? void 0 : user.id) && Object.assign(where, { userId: user.id });
}
const [rows, count] = await this.chatLogEntity.findAndCount({
order: { id: 'DESC' },
skip: (page - 1) * size,
take: size,
where,
});
const userIds = rows.map((r) => r.userId);
const userInfos = await this.userEntity.find({ where: { id: (0, typeorm_2.In)(userIds) } });
const data = rows.map((r) => {
const userInfo = userInfos.find((u) => u.id === r.userId);
return {
username: userInfo ? userInfo.username : '',
email: userInfo ? userInfo.email : '',
prompt: r.prompt,
answer: r.answer,
createdAt: (0, utils_1.formatDate)(r.createdAt),
};
});
const workbook = new exceljs_1.default.Workbook();
const worksheet = workbook.addWorksheet('chatlog');
worksheet.columns = [
{ header: '用户名', key: 'username', width: 20 },
{ header: '用户邮箱', key: 'email', width: 20 },
{ header: '提问时间', key: 'createdAt', width: 20 },
{ header: '提问问题', key: 'prompt', width: 80 },
{ header: '回答答案', key: 'answer', width: 150 },
];
data.forEach((row) => worksheet.addRow(row));
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.setHeader('Content-Disposition', 'attachment; filename=' + 'chat.xlsx');
await workbook.xlsx.write(res);
res.end();
}
async querAllChatLog(params, req) {
const { page = 1, size = 20, userId, prompt } = params;
const where = { type: balance_constant_1.DeductionKey.CHAT_TYPE, prompt: (0, typeorm_2.Not)('') };
userId && Object.assign(where, { userId });
prompt && Object.assign(where, { prompt: (0, typeorm_2.Like)(`%${prompt}%`) });
const [rows, count] = await this.chatLogEntity.findAndCount({
order: { id: 'DESC' },
skip: (page - 1) * size,
take: size,
where,
});
const userIds = rows.map((item) => item.userId);
const userInfo = await this.userEntity.find({ where: { id: (0, typeorm_2.In)(userIds) }, select: ['id', 'username', 'email'] });
rows.forEach((item) => {
const { username, email } = userInfo.find((u) => u.id === item.userId) || {};
item.username = username;
item.email = email;
});
req.user.role !== 'super' && rows.forEach((t) => (t.email = (0, utils_1.maskEmail)(t.email)));
rows.forEach((item) => {
!item.email && (item.email = `${item === null || item === void 0 ? void 0 : item.userId}@nine.com`);
!item.username && (item.username = `游客${item === null || item === void 0 ? void 0 : item.userId}`);
});
return { rows, count };
}
async chatList(req, params) {
const { id } = req.user;
const { groupId } = params;
const where = { userId: id, isDelete: false };
groupId && Object.assign(where, { groupId });
if (groupId) {
const count = await this.chatGroupEntity.count({ where: { isDelete: false } });
if (count === 0)
return [];
}
const list = await this.chatLogEntity.find({ where });
return list.map((item) => {
const { prompt, role, answer, createdAt, model, conversationOptions, requestOptions, id } = item;
let parseConversationOptions = null;
let parseRequestOptions = null;
try {
parseConversationOptions = JSON.parse(conversationOptions);
parseRequestOptions = JSON.parse(requestOptions);
}
catch (error) {
}
return {
chatId: id,
dateTime: (0, utils_1.formatDate)(createdAt),
text: role === 'user' ? prompt : answer,
inversion: role === 'user',
error: false,
conversationOptions: parseConversationOptions,
requestOptions: parseRequestOptions,
};
});
}
async deleteChatLog(req, body) {
const { id: userId } = req.user;
const { id } = body;
const c = await this.chatLogEntity.findOne({ where: { id, userId } });
if (!c) {
throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST);
}
const r = await this.chatLogEntity.update({ id }, { isDelete: true });
if (r.affected > 0) {
return '删除对话记录成功!';
}
else {
throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST);
}
}
async delByGroupId(req, body) {
const { groupId } = body;
const { id } = req.user;
const g = await this.chatGroupEntity.findOne({ where: { id: groupId, userId: id } });
if (!g) {
throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST);
}
const r = await this.chatLogEntity.update({ groupId }, { isDelete: true });
if (r.affected > 0) {
return '删除对话记录成功!';
}
if (r.affected === 0) {
throw new common_1.HttpException('当前页面已经没有东西可以删除了!', common_1.HttpStatus.BAD_REQUEST);
}
}
async byAppId(req, body) {
const { id } = req.user;
const { appId, page = 1, size = 10 } = body;
const [rows, count] = await this.chatLogEntity.findAndCount({
where: { userId: id, appId, role: 'assistant' },
order: { id: 'DESC' },
take: size,
skip: (page - 1) * size,
});
return { rows, count };
}
};
ChatLogService = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)),
__param(1, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)),
__param(2, (0, typeorm_1.InjectRepository)(chatGroup_entity_1.ChatGroupEntity)),
__metadata("design:paramtypes", [typeorm_2.Repository,
typeorm_2.Repository,
typeorm_2.Repository])
], ChatLogService);
exports.ChatLogService = ChatLogService;

View File

@@ -0,0 +1,22 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatListDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class ChatListDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '对话分组ID', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], ChatListDto.prototype, "groupId", void 0);
exports.ChatListDto = ChatListDto;

20
dist/modules/chatLog/dto/del.dto.js vendored Normal file
View File

@@ -0,0 +1,20 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DelDto = void 0;
const swagger_1 = require("@nestjs/swagger");
class DelDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '对话Id', required: true }),
__metadata("design:type", Number)
], DelDto.prototype, "id", void 0);
exports.DelDto = DelDto;

View File

@@ -0,0 +1,20 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DelByGroupDto = void 0;
const swagger_1 = require("@nestjs/swagger");
class DelByGroupDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '对话组Id', required: true }),
__metadata("design:type", Number)
], DelByGroupDto.prototype, "groupId", void 0);
exports.DelByGroupDto = DelByGroupDto;

View File

@@ -0,0 +1,37 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExportExcelChatlogDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class ExportExcelChatlogDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], ExportExcelChatlogDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], ExportExcelChatlogDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '您好', description: '用户询问的问题', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], ExportExcelChatlogDto.prototype, "prompt", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'J_longyan@163.com', description: '用户邮箱', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], ExportExcelChatlogDto.prototype, "email", void 0);
exports.ExportExcelChatlogDto = ExportExcelChatlogDto;

View File

@@ -0,0 +1,41 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuerAllChatLogDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QuerAllChatLogDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllChatLogDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllChatLogDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 99, description: '对话的用户id', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllChatLogDto.prototype, "userId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '您好', description: '用户询问的问题', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], QuerAllChatLogDto.prototype, "prompt", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'user', description: '身份', required: false }),
__metadata("design:type", String)
], QuerAllChatLogDto.prototype, "role", void 0);
exports.QuerAllChatLogDto = QuerAllChatLogDto;

View File

@@ -0,0 +1,42 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuerAllDrawLogDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QuerAllDrawLogDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllDrawLogDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllDrawLogDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '是否推荐0: 默认 1: 推荐', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllDrawLogDto.prototype, "rec", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 99, description: '生成图片的用户id', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllDrawLogDto.prototype, "userId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'DALL-E2', description: '生成图片使用的模型', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], QuerAllDrawLogDto.prototype, "model", void 0);
exports.QuerAllDrawLogDto = QuerAllDrawLogDto;

View File

@@ -0,0 +1,32 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QueryByAppIdDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QueryByAppIdDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '应用Id', required: true }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryByAppIdDto.prototype, "appId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryByAppIdDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QueryByAppIdDto.prototype, "size", void 0);
exports.QueryByAppIdDto = QueryByAppIdDto;

View File

@@ -0,0 +1,22 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuerMyChatLogDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QuerMyChatLogDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 'mj', description: '使用的模型', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], QuerMyChatLogDto.prototype, "model", void 0);
exports.QuerMyChatLogDto = QuerMyChatLogDto;

View File

@@ -0,0 +1,20 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.recDrawImgDto = void 0;
const swagger_1 = require("@nestjs/swagger");
class recDrawImgDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '推荐图片的id' }),
__metadata("design:type", Number)
], recDrawImgDto.prototype, "id", void 0);
exports.recDrawImgDto = recDrawImgDto;

93
dist/modules/chatgpt/baidu.js vendored Normal file
View File

@@ -0,0 +1,93 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.sendMessageFromBaidu = exports.getAccessToken = void 0;
const axios = require('axios');
const getApiModelMaps = () => {
let res = {};
const maps = {
'ERNIE-Bot': 'completions',
'ERNIE-Bot-turbo': 'eb-instant',
'BLOOMZ-7B': 'bloomz_7b1',
'ERNIE-Bot-4': 'completions_pro',
'Llama-2-7b-chat': 'llama_2_7b',
'Llama-2-13b-chat': 'llama_2_13b',
'ChatGLM2-6B-32K': 'chatglm2_6b_32k',
'Qianfan-Chinese-Llama-2-7B': 'qianfan_chinese_llama_2_7b',
};
Object.keys(maps).map(key => {
res[`${key.toLowerCase()}`] = maps[key];
});
return res;
};
function getAccessToken(key, secret) {
let url = `https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${key}&client_secret=${secret}`;
return new Promise((resolve, reject) => {
axios
.post(url)
.then((response) => {
resolve(response.data.access_token);
})
.catch((error) => {
reject(error);
});
});
}
exports.getAccessToken = getAccessToken;
function sendMessageFromBaidu(messagesHistory, { onProgress, accessToken, model, temperature = 0.95 }) {
const endUrl = getApiModelMaps()[model.trim().toLowerCase()];
return new Promise((resolve, reject) => {
const url = `https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/${endUrl}?access_token=${accessToken}`;
var options = {
method: 'POST',
url,
responseType: 'stream',
headers: {
'Content-Type': 'application/json',
},
data: {
stream: true,
messages: messagesHistory,
},
};
axios(options)
.then((response) => {
const stream = response.data;
let resData = {};
let cacheChunk = '';
let cacheResText = '';
stream.on('data', (chunk) => {
const lines = chunk
.toString()
.split('\n\n')
.filter((line) => line.trim() !== '');
for (const line of lines) {
const message = line.replace('data: ', '');
try {
const msg = cacheChunk + message;
const parseData = JSON.parse(msg);
cacheChunk = '';
const { is_end, result } = parseData;
result && (cacheResText += result);
if (is_end) {
resData = parseData;
resData.text = cacheResText;
}
onProgress(parseData);
}
catch (error) {
cacheChunk = message;
}
}
});
stream.on('end', () => {
cacheResText = '';
cacheChunk = '';
resolve(resData);
});
})
.catch((error) => {
reject(new Error(error));
});
});
}
exports.sendMessageFromBaidu = sendMessageFromBaidu;

48
dist/modules/chatgpt/chatBox.entity.js vendored Normal file
View File

@@ -0,0 +1,48 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatBoxEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let ChatBoxEntity = class ChatBoxEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ comment: '分类ID' }),
__metadata("design:type", Number)
], ChatBoxEntity.prototype, "typeId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '应用ID', nullable: true }),
__metadata("design:type", Number)
], ChatBoxEntity.prototype, "appId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '快速描述词', nullable: true, type: 'text' }),
__metadata("design:type", String)
], ChatBoxEntity.prototype, "prompt", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '标题名称' }),
__metadata("design:type", String)
], ChatBoxEntity.prototype, "title", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '排序ID', default: 100 }),
__metadata("design:type", Number)
], ChatBoxEntity.prototype, "order", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '开启状态', default: true }),
__metadata("design:type", Boolean)
], ChatBoxEntity.prototype, "status", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '跳转地址' }),
__metadata("design:type", String)
], ChatBoxEntity.prototype, "url", void 0);
ChatBoxEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'chat_box' })
], ChatBoxEntity);
exports.ChatBoxEntity = ChatBoxEntity;

View File

@@ -0,0 +1,36 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatBoxTypeEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let ChatBoxTypeEntity = class ChatBoxTypeEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ comment: '分类名称' }),
__metadata("design:type", String)
], ChatBoxTypeEntity.prototype, "name", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'icon图标' }),
__metadata("design:type", String)
], ChatBoxTypeEntity.prototype, "icon", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '排序ID', default: 10 }),
__metadata("design:type", Number)
], ChatBoxTypeEntity.prototype, "order", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '是否打开', default: true }),
__metadata("design:type", Boolean)
], ChatBoxTypeEntity.prototype, "status", void 0);
ChatBoxTypeEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'chat_box_type' })
], ChatBoxTypeEntity);
exports.ChatBoxTypeEntity = ChatBoxTypeEntity;

40
dist/modules/chatgpt/chatPre.entity.js vendored Normal file
View File

@@ -0,0 +1,40 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatPreEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let ChatPreEntity = class ChatPreEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ comment: '分类ID' }),
__metadata("design:type", Number)
], ChatPreEntity.prototype, "typeId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '预设问题描述词', nullable: true, type: 'text' }),
__metadata("design:type", String)
], ChatPreEntity.prototype, "prompt", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '标题名称' }),
__metadata("design:type", String)
], ChatPreEntity.prototype, "title", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '排序ID', default: 100 }),
__metadata("design:type", Number)
], ChatPreEntity.prototype, "order", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '开启状态', default: true }),
__metadata("design:type", Boolean)
], ChatPreEntity.prototype, "status", void 0);
ChatPreEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'chat_pre' })
], ChatPreEntity);
exports.ChatPreEntity = ChatPreEntity;

View File

@@ -0,0 +1,36 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatPreTypeEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let ChatPreTypeEntity = class ChatPreTypeEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ comment: '分类名称' }),
__metadata("design:type", String)
], ChatPreTypeEntity.prototype, "name", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'icon图标', nullable: true }),
__metadata("design:type", String)
], ChatPreTypeEntity.prototype, "icon", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '排序ID', default: 10 }),
__metadata("design:type", Number)
], ChatPreTypeEntity.prototype, "order", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '是否打开', default: true }),
__metadata("design:type", Boolean)
], ChatPreTypeEntity.prototype, "status", void 0);
ChatPreTypeEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'chat_pre_type' })
], ChatPreTypeEntity);
exports.ChatPreTypeEntity = ChatPreTypeEntity;

View File

@@ -0,0 +1,310 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatgptController = void 0;
const jwtAuth_guard_1 = require("./../../common/auth/jwtAuth.guard");
const swagger_1 = require("@nestjs/swagger");
const chatgpt_service_1 = require("./chatgpt.service");
const common_1 = require("@nestjs/common");
const chatProcess_dto_1 = require("./dto/chatProcess.dto");
const chatDraw_dto_1 = require("./dto/chatDraw.dto");
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
let ChatgptController = class ChatgptController {
constructor(chatgptService, globalConfigService) {
this.chatgptService = chatgptService;
this.globalConfigService = globalConfigService;
}
chatProcess(body, req, res) {
return this.chatgptService.chatProcess(body, req, res);
}
chatProcessSync(body, req) {
return this.chatgptService.chatProcess(Object.assign({}, body), req);
}
async mjAssociate(body, req) {
const mjCustomLianxiangPrompt = await this.globalConfigService.getConfigs(['mjCustomLianxiangPrompt']);
body.systemMessage =
mjCustomLianxiangPrompt ||
`midjourney是一款AI绘画工具只要你输入你想到的文字就能通过人工智能产出相对应的图片、我希望你作为MidJourney程序的提示词(prompt)生成器。你的工作是根据我给你的一段提示内容扩展为更详细和更有创意的描述以激发人工智能的独特和有趣的图像。请记住人工智能能够理解广泛的语言并能解释抽象的概念所以请自由发挥想象力和描述力尽可能地发挥。例如你可以描述一个未来城市的场景或一个充满奇怪生物的超现实景观。你的描述越详细、越有想象力产生的图像就越有趣、Midjourney prompt的标准公式为:(image we're prompting).(5 descriptivekeywords). (camera type). (camera lens type). (time of day)(style of photograph).(type offilm)、请记住这个公式后续统一使用该公式进行prompt生成、最终把我给你的提示变成一整段连续不分开的完整内容并且只需要用英文回复您的联想、一定不要回复别内容、包括解释、我只需要纯粹的内容。`;
return this.chatgptService.chatProcess(Object.assign(Object.assign({}, body), { cusromPrompt: true }), req);
}
async mjFanyi(body, req) {
const mjCustomFanyiPrompt = await this.globalConfigService.getConfigs(['mjCustomFanyiPrompt']);
body.systemMessage =
mjCustomFanyiPrompt ||
`接下来我会给你一些内容、我希望你帮我翻译成英文、不管我给你任何语言、你都回复我英文、如果给你了英文、依然回复我更加优化的英文、并且期望你不需要做任何多余的解释、给我英文即可、不要加任何东西、我只需要英文!`;
return this.chatgptService.chatProcess(Object.assign(Object.assign({}, body), { cusromPrompt: true }), req);
}
async chatmind(body, req, res) {
const mindCustomPrompt = await this.globalConfigService.getConfigs(['mindCustomPrompt']);
body.systemMessage =
mindCustomPrompt ||
`我希望你使用markdown格式回答我得问题、我的需求是得到一份markdown格式的大纲、尽量做的精细、层级多一点、不管我问你什么、都需要您回复我一个大纲出来、我想使用大纲做思维导图、除了大纲之外、不要无关内容和总结。`;
return this.chatgptService.chatProcess(Object.assign(Object.assign({}, body), { cusromPrompt: true }), req, res);
}
async draw(body, req) {
return await this.chatgptService.draw(body, req);
}
async setChatBoxType(req, body) {
return await this.chatgptService.setChatBoxType(req, body);
}
async delChatBoxType(req, body) {
return await this.chatgptService.delChatBoxType(req, body);
}
async queryChatBoxType() {
return await this.chatgptService.queryChatBoxType();
}
async setChatBox(req, body) {
return await this.chatgptService.setChatBox(req, body);
}
async delChatBox(req, body) {
return await this.chatgptService.delChatBox(req, body);
}
async queryChatBox() {
return await this.chatgptService.queryChatBox();
}
async queryChatBoxFrontend() {
return await this.chatgptService.queryChatBoxFrontend();
}
async setChatPreType(req, body) {
return await this.chatgptService.setChatPreType(req, body);
}
async delChatPreType(req, body) {
return await this.chatgptService.delChatPreType(req, body);
}
async queryChatPreType() {
return await this.chatgptService.queryChatPreType();
}
async setChatPre(req, body) {
return await this.chatgptService.setChatPre(req, body);
}
async delChatPre(req, body) {
return await this.chatgptService.delChatPre(req, body);
}
async queryChatPre() {
return await this.chatgptService.queryChatPre();
}
async queryChatPreList() {
return await this.chatgptService.queryChatPreList();
}
};
__decorate([
(0, common_1.Post)('chat-process'),
(0, swagger_1.ApiOperation)({ summary: 'gpt聊天对话' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__param(2, (0, common_1.Res)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [chatProcess_dto_1.ChatProcessDto, Object, Object]),
__metadata("design:returntype", void 0)
], ChatgptController.prototype, "chatProcess", null);
__decorate([
(0, common_1.Post)('chat-sync'),
(0, swagger_1.ApiOperation)({ summary: 'gpt聊天对话' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [chatProcess_dto_1.ChatProcessDto, Object]),
__metadata("design:returntype", void 0)
], ChatgptController.prototype, "chatProcessSync", null);
__decorate([
(0, common_1.Post)('mj-associate'),
(0, swagger_1.ApiOperation)({ summary: 'gpt描述词绘画联想' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [chatProcess_dto_1.ChatProcessDto, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "mjAssociate", null);
__decorate([
(0, common_1.Post)('mj-fy'),
(0, swagger_1.ApiOperation)({ summary: 'gpt描述词绘画翻译' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [chatProcess_dto_1.ChatProcessDto, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "mjFanyi", null);
__decorate([
(0, common_1.Post)('chat-mind'),
(0, swagger_1.ApiOperation)({ summary: 'mind思维导图提示' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__param(2, (0, common_1.Res)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [chatProcess_dto_1.ChatProcessDto, Object, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "chatmind", null);
__decorate([
(0, common_1.Post)('chat-draw'),
(0, swagger_1.ApiOperation)({ summary: 'gpt绘画' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [chatDraw_dto_1.ChatDrawDto, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "draw", null);
__decorate([
(0, common_1.Post)('setChatBoxType'),
(0, swagger_1.ApiOperation)({ summary: '添加修改分类类型' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "setChatBoxType", null);
__decorate([
(0, common_1.Post)('delChatBoxType'),
(0, swagger_1.ApiOperation)({ summary: '添加修改ChatBoxType' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "delChatBoxType", null);
__decorate([
(0, common_1.Get)('queryChatBoxTypes'),
(0, swagger_1.ApiOperation)({ summary: '查询ChatBoxType' }),
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "queryChatBoxType", null);
__decorate([
(0, common_1.Post)('setChatBox'),
(0, swagger_1.ApiOperation)({ summary: '添加修改ChatBox' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "setChatBox", null);
__decorate([
(0, common_1.Post)('delChatBox'),
(0, swagger_1.ApiOperation)({ summary: '添加修改ChatBox提示词' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "delChatBox", null);
__decorate([
(0, common_1.Get)('queryChatBoxs'),
(0, swagger_1.ApiOperation)({ summary: '查询ChatBox列表' }),
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "queryChatBox", null);
__decorate([
(0, common_1.Get)('queryChatBoxFrontend'),
(0, swagger_1.ApiOperation)({ summary: '查询ChatBox分类加详细' }),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "queryChatBoxFrontend", null);
__decorate([
(0, common_1.Post)('setChatPreType'),
(0, swagger_1.ApiOperation)({ summary: '添加修改预设分类类型' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "setChatPreType", null);
__decorate([
(0, common_1.Post)('delChatPretype'),
(0, swagger_1.ApiOperation)({ summary: '添加修改ChatPretype' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "delChatPreType", null);
__decorate([
(0, common_1.Get)('queryChatPretypes'),
(0, swagger_1.ApiOperation)({ summary: '查询ChatPretype' }),
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "queryChatPreType", null);
__decorate([
(0, common_1.Post)('setChatPre'),
(0, swagger_1.ApiOperation)({ summary: '添加修改ChatPre' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "setChatPre", null);
__decorate([
(0, common_1.Post)('delChatPre'),
(0, swagger_1.ApiOperation)({ summary: '添加修改ChatPre提示词' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "delChatPre", null);
__decorate([
(0, common_1.Get)('queryChatPres'),
(0, swagger_1.ApiOperation)({ summary: '查询ChatPre列表' }),
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "queryChatPre", null);
__decorate([
(0, common_1.Get)('queryChatPreList'),
(0, swagger_1.ApiOperation)({ summary: '查询ChatPre列表' }),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", Promise)
], ChatgptController.prototype, "queryChatPreList", null);
ChatgptController = __decorate([
(0, swagger_1.ApiTags)('chatgpt'),
(0, common_1.Controller)('chatgpt'),
__metadata("design:paramtypes", [chatgpt_service_1.ChatgptService, globalConfig_service_1.GlobalConfigService])
], ChatgptController);
exports.ChatgptController = ChatgptController;

72
dist/modules/chatgpt/chatgpt.module.js vendored Normal file
View File

@@ -0,0 +1,72 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatgptModule = void 0;
const common_1 = require("@nestjs/common");
const chatgpt_controller_1 = require("./chatgpt.controller");
const chatgpt_service_1 = require("./chatgpt.service");
const userBalance_service_1 = require("../userBalance/userBalance.service");
const typeorm_1 = require("@nestjs/typeorm");
const balance_entity_1 = require("../userBalance/balance.entity");
const user_service_1 = require("../user/user.service");
const user_entity_1 = require("../user/user.entity");
const verification_service_1 = require("../verification/verification.service");
const verifycation_entity_1 = require("../verification/verifycation.entity");
const chatLog_service_1 = require("../chatLog/chatLog.service");
const chatLog_entity_1 = require("../chatLog/chatLog.entity");
const accountLog_entity_1 = require("../userBalance/accountLog.entity");
const config_entity_1 = require("../globalConfig/config.entity");
const gptkeys_entity_1 = require("./gptkeys.entity");
const whiteList_entity_1 = require("./whiteList.entity");
const cramiPackage_entity_1 = require("../crami/cramiPackage.entity");
const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity");
const app_entity_1 = require("../app/app.entity");
const userBalance_entity_1 = require("../userBalance/userBalance.entity");
const salesUsers_entity_1 = require("../sales/salesUsers.entity");
const redisCache_service_1 = require("../redisCache/redisCache.service");
const fingerprint_entity_1 = require("../userBalance/fingerprint.entity");
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
const chatBoxType_entity_1 = require("./chatBoxType.entity");
const chatBox_entity_1 = require("./chatBox.entity");
const chatPreType_entity_1 = require("./chatPreType.entity");
const chatPre_entity_1 = require("./chatPre.entity");
let ChatgptModule = class ChatgptModule {
};
ChatgptModule = __decorate([
(0, common_1.Global)(),
(0, common_1.Module)({
imports: [
typeorm_1.TypeOrmModule.forFeature([
balance_entity_1.BalanceEntity,
user_entity_1.UserEntity,
verifycation_entity_1.VerifycationEntity,
chatLog_entity_1.ChatLogEntity,
accountLog_entity_1.AccountLogEntity,
config_entity_1.ConfigEntity,
gptkeys_entity_1.GptKeysEntity,
whiteList_entity_1.WhiteListEntity,
user_entity_1.UserEntity,
cramiPackage_entity_1.CramiPackageEntity,
chatGroup_entity_1.ChatGroupEntity,
app_entity_1.AppEntity,
userBalance_entity_1.UserBalanceEntity,
salesUsers_entity_1.SalesUsersEntity,
fingerprint_entity_1.FingerprintLogEntity,
midjourney_entity_1.MidjourneyEntity,
chatBoxType_entity_1.ChatBoxTypeEntity,
chatBox_entity_1.ChatBoxEntity,
chatPreType_entity_1.ChatPreTypeEntity,
chatPre_entity_1.ChatPreEntity
]),
],
controllers: [chatgpt_controller_1.ChatgptController],
providers: [chatgpt_service_1.ChatgptService, userBalance_service_1.UserBalanceService, user_service_1.UserService, verification_service_1.VerificationService, chatLog_service_1.ChatLogService, redisCache_service_1.RedisCacheService],
exports: [chatgpt_service_1.ChatgptService]
})
], ChatgptModule);
exports.ChatgptModule = ChatgptModule;

850
dist/modules/chatgpt/chatgpt.service.js vendored Normal file
View File

@@ -0,0 +1,850 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatgptService = void 0;
const upload_service_1 = require("./../upload/upload.service");
const user_service_1 = require("./../user/user.service");
const nestjs_config_1 = require("nestjs-config");
const common_1 = require("@nestjs/common");
const errorMessage_constant_1 = require("../../common/constants/errorMessage.constant");
const utils_1 = require("../../common/utils");
const axios_1 = require("axios");
const userBalance_service_1 = require("../userBalance/userBalance.service");
const balance_constant_1 = require("../../common/constants/balance.constant");
const chatLog_service_1 = require("../chatLog/chatLog.service");
const uuid = require("uuid");
const config_entity_1 = require("../globalConfig/config.entity");
const typeorm_1 = require("typeorm");
const typeorm_2 = require("@nestjs/typeorm");
const badwords_service_1 = require("../badwords/badwords.service");
const autoreply_service_1 = require("../autoreply/autoreply.service");
const gptkeys_entity_1 = require("./gptkeys.entity");
const globalConfig_service_1 = require("../globalConfig/globalConfig.service");
const fanyi_service_1 = require("../fanyi/fanyi.service");
const app_entity_1 = require("../app/app.entity");
const chatGroup_service_1 = require("../chatGroup/chatGroup.service");
const models_service_1 = require("../models/models.service");
const baidu_1 = require("./baidu");
const helper_1 = require("./helper");
const store_1 = require("./store");
const zhipu_1 = require("./zhipu");
const openai_1 = require("./openai");
const chatBoxType_entity_1 = require("./chatBoxType.entity");
const chatBox_entity_1 = require("./chatBox.entity");
const chatPre_entity_1 = require("./chatPre.entity");
const chatPreType_entity_1 = require("./chatPreType.entity");
let ChatgptService = class ChatgptService {
constructor(gptKeysEntity, configEntity, chatBoxTypeEntity, chatBoxEntity, appEntity, chatPreTypeEntity, chatPreEntity, configService, userBalanceService, chatLogService, userService, uploadService, badwordsService, autoreplyService, globalConfigService, fanyiService, chatGroupService, modelsService) {
this.gptKeysEntity = gptKeysEntity;
this.configEntity = configEntity;
this.chatBoxTypeEntity = chatBoxTypeEntity;
this.chatBoxEntity = chatBoxEntity;
this.appEntity = appEntity;
this.chatPreTypeEntity = chatPreTypeEntity;
this.chatPreEntity = chatPreEntity;
this.configService = configService;
this.userBalanceService = userBalanceService;
this.chatLogService = chatLogService;
this.userService = userService;
this.uploadService = uploadService;
this.badwordsService = badwordsService;
this.autoreplyService = autoreplyService;
this.globalConfigService = globalConfigService;
this.fanyiService = fanyiService;
this.chatGroupService = chatGroupService;
this.modelsService = modelsService;
this.nineStore = null;
this.whiteListUser = [];
this.keyPool = {
list3: [],
list4: [],
};
}
async onModuleInit() {
let chatgpt = await (0, utils_1.importDynamic)('chatgpt-nine-ai');
let KeyvRedis = await (0, utils_1.importDynamic)('@keyv/redis');
let Keyv = await (0, utils_1.importDynamic)('keyv');
chatgpt = (chatgpt === null || chatgpt === void 0 ? void 0 : chatgpt.default) ? chatgpt.default : chatgpt;
KeyvRedis = (KeyvRedis === null || KeyvRedis === void 0 ? void 0 : KeyvRedis.default) ? KeyvRedis.default : KeyvRedis;
Keyv = (Keyv === null || Keyv === void 0 ? void 0 : Keyv.default) ? Keyv.default : Keyv;
const { ChatGPTAPI, ChatGPTError, ChatGPTUnofficialProxyAPI } = chatgpt;
const port = +process.env.REDIS_PORT;
const host = process.env.REDIS_HOST;
const password = process.env.REDIS_PASSWORD;
const username = process.env.REDIS_USER;
const redisUrl = `redis://${username || ''}:${password || ''}@${host}:${port}`;
const store = new KeyvRedis(redisUrl);
const messageStore = new Keyv({ store, namespace: 'nineai-chatlog' });
this.nineStore = new store_1.NineStore({ store: messageStore, namespace: 'chat' });
}
async getRequestParams(inputOpt, systemMessage, currentRequestModelKey, modelInfo = null) {
var _a;
if (!modelInfo) {
modelInfo = (_a = (await this.modelsService.getBaseConfig())) === null || _a === void 0 ? void 0 : _a.modelInfo;
}
const { timeout = 60 } = currentRequestModelKey;
const { topN: temperature, model } = modelInfo;
const { parentMessageId = 0 } = inputOpt;
const globalTimeoutMs = await this.globalConfigService.getConfigs(['openaiTimeoutMs']);
const timeoutMs = timeout * 1000 || globalTimeoutMs || 100 * 1000;
const options = {
parentMessageId,
timeoutMs: +timeoutMs,
completionParams: {
model,
temperature: temperature,
},
};
systemMessage && (options.systemMessage = systemMessage);
return options;
}
async chatSyncFree(prompt) {
const currentRequestModelKey = await this.modelsService.getRandomDrawKey();
const systemMessage = await this.globalConfigService.getConfigs(['systemPreMessage']);
const { maxModelTokens = 8000, maxResponseTokens = 4096, key, model } = currentRequestModelKey;
const proxyUrl = await this.getModelProxyUrl(currentRequestModelKey);
const { context: messagesHistory } = await this.nineStore.buildMessageFromParentMessageId(prompt, { parentMessageId: '', systemMessage });
try {
const response = await (0, openai_1.sendMessageFromOpenAi)(messagesHistory, {
apiKey: (0, utils_1.removeSpecialCharacters)(key),
model,
proxyUrl: proxyUrl,
onProgress: null,
});
return response === null || response === void 0 ? void 0 : response.text;
}
catch (error) {
console.log('error: ', error);
}
}
async chatProcess(body, req, res) {
var _a, _b, _c;
const abortController = req.abortController;
const { options = {}, appId, cusromPrompt, systemMessage = '' } = body;
let setSystemMessage = systemMessage;
const { parentMessageId } = options;
const { prompt } = body;
const { groupId, usingNetwork } = options;
const groupInfo = await this.chatGroupService.getGroupInfoFromId(groupId);
const groupConfig = (groupInfo === null || groupInfo === void 0 ? void 0 : groupInfo.config) ? JSON.parse(groupInfo.config) : await this.modelsService.getBaseConfig();
const { keyType, model, topN: temperature, systemMessage: customSystemMessage, rounds } = groupConfig.modelInfo;
let currentRequestModelKey = null;
if (!cusromPrompt) {
currentRequestModelKey = await this.modelsService.getCurrentModelKeyInfo(model);
}
else {
currentRequestModelKey = await this.modelsService.getRandomDrawKey();
}
if (!currentRequestModelKey) {
throw new common_1.HttpException('当前流程所需要的模型已被管理员下架、请联系管理员上架专属模型!', common_1.HttpStatus.BAD_REQUEST);
}
const { deduct, deductType, key: modelKey, secret, modelName, id: keyId, accessToken } = currentRequestModelKey;
await this.userService.checkUserStatus(req.user);
await this.userBalanceService.validateBalance(req, deductType === 1 ? 'model3' : 'model4', deduct);
res && res.setHeader('Content-type', 'application/octet-stream; charset=utf-8');
await this.badwordsService.checkBadWords(prompt, req.user.id);
const autoReplyRes = await this.autoreplyService.checkAutoReply(prompt);
if (autoReplyRes && res) {
const msg = { message: autoReplyRes, code: 500 };
res.write(JSON.stringify(msg));
return res.end();
}
if (appId) {
const appInfo = await this.appEntity.findOne({ where: { id: appId, status: (0, typeorm_1.In)([1, 3, 4, 5]) } });
if (!appInfo) {
throw new common_1.HttpException('你当前使用的应用已被下架、请删除当前对话开启新的对话吧!', common_1.HttpStatus.BAD_REQUEST);
}
appInfo.preset && (setSystemMessage = appInfo.preset);
}
else if (cusromPrompt) {
setSystemMessage = systemMessage;
}
else if (customSystemMessage) {
setSystemMessage = customSystemMessage;
}
else {
const currentDate = new Date().toISOString().split('T')[0];
const systemPreMessage = await this.globalConfigService.getConfigs(['systemPreMessage']);
setSystemMessage = systemPreMessage + `\n Current date: ${currentDate}`;
}
let netWorkPrompt = '';
if (usingNetwork) {
netWorkPrompt = await (0, utils_1.compileNetwork)(prompt);
const currentDate = new Date().toISOString().split('T')[0];
const systemPreMessage = await this.globalConfigService.getConfigs(['systemPreMessage']);
setSystemMessage = systemPreMessage + `\n Current date: ${currentDate}`;
}
const mergedOptions = await this.getRequestParams(options, setSystemMessage, currentRequestModelKey, groupConfig.modelInfo);
const { maxModelTokens = 8000, maxResponseTokens = 4096, key } = currentRequestModelKey;
res && res.status(200);
let response = null;
let othersInfo = null;
try {
if (res) {
let lastChat = null;
let isSuccess = false;
res.on('close', async () => {
if (isSuccess)
return;
abortController.abort();
const prompt_tokens = (await (0, openai_1.getTokenCount)(prompt)) || 0;
const completion_tokens = (await (0, openai_1.getTokenCount)(lastChat === null || lastChat === void 0 ? void 0 : lastChat.text)) || 0;
const total_tokens = prompt_tokens + completion_tokens;
const curIp = (0, utils_1.getClientIp)(req);
await this.chatLogService.saveChatLog({
appId,
curIp,
userId: req.user.id,
type: balance_constant_1.DeductionKey.CHAT_TYPE,
prompt,
answer: '',
promptTokens: prompt_tokens,
completionTokens: 0,
totalTokens: prompt_tokens,
model: model,
role: 'user',
groupId,
requestOptions: JSON.stringify({
options: null,
prompt,
}),
});
await this.chatLogService.saveChatLog({
appId,
curIp,
userId: req.user.id,
type: balance_constant_1.DeductionKey.CHAT_TYPE,
prompt: prompt,
answer: lastChat === null || lastChat === void 0 ? void 0 : lastChat.text,
promptTokens: prompt_tokens,
completionTokens: completion_tokens,
totalTokens: total_tokens,
model: model,
role: 'assistant',
groupId,
requestOptions: JSON.stringify({
options: {
model: model,
temperature,
},
prompt,
}),
conversationOptions: JSON.stringify({
conversationId: lastChat === null || lastChat === void 0 ? void 0 : lastChat.conversationId,
model: model,
parentMessageId: lastChat === null || lastChat === void 0 ? void 0 : lastChat.id,
temperature,
}),
});
await this.userBalanceService.deductFromBalance(req.user.id, `model${deductType === 1 ? 3 : 4}`, deduct, total_tokens);
});
if (Number(keyType) === 1) {
const { key, maxToken, maxTokenRes, proxyResUrl } = await this.formatModelToken(currentRequestModelKey);
const { parentMessageId, completionParams, systemMessage } = mergedOptions;
const { model, temperature } = completionParams;
const { context: messagesHistory } = await this.nineStore.buildMessageFromParentMessageId(usingNetwork ? netWorkPrompt : prompt, {
parentMessageId,
systemMessage,
maxModelToken: maxToken,
maxResponseTokens: maxTokenRes,
maxRounds: (0, helper_1.addOneIfOdd)(rounds),
});
let firstChunk = true;
response = await (0, openai_1.sendMessageFromOpenAi)(messagesHistory, {
maxToken,
maxTokenRes,
apiKey: modelKey,
model,
temperature,
proxyUrl: proxyResUrl,
onProgress: (chat) => {
res.write(firstChunk ? JSON.stringify(chat) : `\n${JSON.stringify(chat)}`);
lastChat = chat;
firstChunk = false;
},
});
isSuccess = true;
}
if (Number(keyType) === 2) {
let firstChunk = true;
const { context: messagesHistory } = await this.nineStore.buildMessageFromParentMessageId(usingNetwork ? netWorkPrompt : prompt, {
parentMessageId,
maxRounds: (0, helper_1.addOneIfOdd)(rounds),
});
response = await (0, baidu_1.sendMessageFromBaidu)(usingNetwork ? netWorkPrompt : messagesHistory, {
temperature,
accessToken,
model,
onProgress: (data) => {
res.write(firstChunk ? JSON.stringify(data) : `\n${JSON.stringify(data)}`);
firstChunk = false;
lastChat = data;
},
});
isSuccess = true;
}
if (Number(keyType) === 3) {
let firstChunk = true;
const { context: messagesHistory } = await this.nineStore.buildMessageFromParentMessageId(usingNetwork ? netWorkPrompt : prompt, {
parentMessageId,
maxRounds: (0, helper_1.addOneIfOdd)(rounds),
});
response = await (0, zhipu_1.sendMessageFromZhipu)(usingNetwork ? netWorkPrompt : messagesHistory, {
temperature,
key,
model,
onProgress: (data) => {
res.write(firstChunk ? JSON.stringify(data) : `\n${JSON.stringify(data)}`);
firstChunk = false;
lastChat = data;
},
});
isSuccess = true;
}
const userMessageData = {
id: this.nineStore.getUuid(),
text: prompt,
role: 'user',
name: undefined,
usage: null,
parentMessageId: parentMessageId,
conversationId: response === null || response === void 0 ? void 0 : response.conversationId,
};
othersInfo = { model, parentMessageId };
await this.nineStore.setData(userMessageData);
const assistantMessageData = {
id: response.id,
text: response.text,
role: 'assistant',
name: undefined,
usage: response.usage,
parentMessageId: userMessageData.id,
conversationId: response === null || response === void 0 ? void 0 : response.conversationId,
};
await this.nineStore.setData(assistantMessageData);
othersInfo = { model, parentMessageId: userMessageData.id };
}
else {
const { key, maxToken, maxTokenRes, proxyResUrl } = await this.formatModelToken(currentRequestModelKey);
const { parentMessageId, completionParams, systemMessage } = mergedOptions;
const { model, temperature } = completionParams;
const { context: messagesHistory } = await this.nineStore.buildMessageFromParentMessageId(usingNetwork ? netWorkPrompt : prompt, {
parentMessageId,
systemMessage,
maxRounds: (0, helper_1.addOneIfOdd)(rounds),
});
response = await (0, openai_1.sendMessageFromOpenAi)(messagesHistory, {
apiKey: modelKey,
model,
temperature,
proxyUrl: proxyResUrl,
onProgress: null,
});
}
const formatResponse = await (0, helper_1.unifiedFormattingResponse)(keyType, response, othersInfo);
const { prompt_tokens = 0, completion_tokens = 0, total_tokens = 0 } = formatResponse.usage;
await this.userBalanceService.deductFromBalance(req.user.id, `model${deductType === 1 ? 3 : 4}`, deduct, total_tokens);
await this.modelsService.saveUseLog(keyId, total_tokens);
const curIp = (0, utils_1.getClientIp)(req);
await this.chatLogService.saveChatLog({
appId,
curIp,
userId: req.user.id,
type: balance_constant_1.DeductionKey.CHAT_TYPE,
prompt,
answer: '',
promptTokens: prompt_tokens,
completionTokens: 0,
totalTokens: total_tokens,
model: formatResponse.model,
role: 'user',
groupId,
requestOptions: JSON.stringify({
options: null,
prompt,
}),
});
await this.chatLogService.saveChatLog({
appId,
curIp,
userId: req.user.id,
type: balance_constant_1.DeductionKey.CHAT_TYPE,
prompt: prompt,
answer: formatResponse === null || formatResponse === void 0 ? void 0 : formatResponse.text,
promptTokens: prompt_tokens,
completionTokens: completion_tokens,
totalTokens: total_tokens,
model: model,
role: 'assistant',
groupId,
requestOptions: JSON.stringify({
options: {
model: model,
temperature,
},
prompt,
}),
conversationOptions: JSON.stringify({
conversationId: response.conversationId,
model: model,
parentMessageId: response.id,
temperature,
}),
});
common_1.Logger.debug(`本次调用: ${req.user.id} model: ${model} key -> ${key}, 模型名称: ${modelName}, 最大回复token: ${maxResponseTokens}`, 'ChatgptService');
const userBalance = await this.userBalanceService.queryUserBalance(req.user.id);
response.userBanance = Object.assign({}, userBalance);
response.result && (response.result = '');
response.is_end = true;
if (res) {
return res.write(`\n${JSON.stringify(response)}`);
}
else {
return response.text;
}
}
catch (error) {
console.log('chat-error <----------------------------------------->', modelKey, error);
const code = (error === null || error === void 0 ? void 0 : error.statusCode) || 400;
const status = ((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) || (error === null || error === void 0 ? void 0 : error.statusCode) || 400;
console.log('chat-error-detail <----------------------------------------->', 'code: ', code, 'message', error === null || error === void 0 ? void 0 : error.message, 'statusText:', (_b = error === null || error === void 0 ? void 0 : error.response) === null || _b === void 0 ? void 0 : _b.statusText, 'status', (_c = error === null || error === void 0 ? void 0 : error.response) === null || _c === void 0 ? void 0 : _c.status);
if (error.status && error.status === 402) {
const errMsg = { message: `Catch Error ${error.message}`, code: 402 };
if (res) {
return res.write(JSON.stringify(errMsg));
}
else {
throw new common_1.HttpException(error.message, common_1.HttpStatus.PAYMENT_REQUIRED);
}
}
if (!status) {
if (res) {
return res.write(JSON.stringify({ message: error.message, code: 500 }));
}
else {
throw new common_1.HttpException(error.message, common_1.HttpStatus.BAD_REQUEST);
}
}
let message = errorMessage_constant_1.OpenAiErrorCodeMessage[status] ? errorMessage_constant_1.OpenAiErrorCodeMessage[status] : '服务异常、请重新试试吧!!!';
if ((error === null || error === void 0 ? void 0 : error.message.includes('The OpenAI account associated with this API key has been deactivated.')) && Number(keyType) === 1) {
await this.modelsService.lockKey(keyId, '当前模型key已被封禁、已冻结当前调用Key、尝试重新对话试试吧', -1);
message = '当前模型key已被封禁';
}
if ((error === null || error === void 0 ? void 0 : error.statusCode) === 429 && error.message.includes('billing') && Number(keyType) === 1) {
await this.modelsService.lockKey(keyId, '当前模型key余额已耗尽、已冻结当前调用Key、尝试重新对话试试吧', -3);
message = '当前模型key余额已耗尽';
}
if ((error === null || error === void 0 ? void 0 : error.statusCode) === 429 && (error === null || error === void 0 ? void 0 : error.statusText) === 'Too Many Requests') {
message = '当前模型调用过于频繁、请重新试试吧!';
}
if ((error === null || error === void 0 ? void 0 : error.statusCode) === 401 && error.message.includes('Incorrect API key provided') && Number(keyType) === 1) {
await this.modelsService.lockKey(keyId, '提供了错误的模型秘钥', -2);
message = '提供了错误的模型秘钥、已冻结当前调用Key、请重新尝试对话';
}
if ((error === null || error === void 0 ? void 0 : error.statusCode) === 404 && error.message.includes('This is not a chat model and thus not supported') && Number(keyType) === 1) {
await this.modelsService.lockKey(keyId, '当前模型不是聊天模型', -4);
message = '当前模型不是聊天模型、已冻结当前调用Key、请重新尝试对话';
}
if (code === 400) {
console.log('400 error', error, error.message);
}
const errMsg = { message: message || 'Please check the back-end console', code: code === 401 ? 400 : code || 500 };
if (res) {
return res.write(JSON.stringify(errMsg));
}
else {
throw new common_1.HttpException(errMsg.message, common_1.HttpStatus.BAD_REQUEST);
}
}
finally {
res && res.end();
}
}
async draw(body, req) {
var _a, _b, _c, _d;
await this.badwordsService.checkBadWords(body.prompt, req.user.id);
await this.userService.checkUserStatus(req.user);
const money = (body === null || body === void 0 ? void 0 : body.quality) === 'hd' ? 4 : 2;
await this.userBalanceService.validateBalance(req, 'mjDraw', money);
let images = [];
const detailKeyInfo = await this.modelsService.getRandomDrawKey();
const keyId = detailKeyInfo === null || detailKeyInfo === void 0 ? void 0 : detailKeyInfo.id;
const { key, proxyResUrl } = await this.formatModelToken(detailKeyInfo);
common_1.Logger.log(`draw paompt info <==**==> ${body.prompt}, key ===> ${key}`, 'DrawService');
try {
const api = `${proxyResUrl}/v1/images/generations`;
const params = Object.assign(Object.assign({}, body), { model: 'dall-e-3' });
console.log('dall-e draw params: ', params);
const res = await axios_1.default.post(api, Object.assign(Object.assign({}, params), { response_format: 'b64_json' }), { headers: { Authorization: `Bearer ${key}` } });
images = res.data.data;
const task = [];
for (const item of images) {
const filename = uuid.v4().slice(0, 10) + '.png';
const buffer = Buffer.from(item.b64_json, 'base64');
task.push(this.uploadService.uploadFile({ filename, buffer }));
}
const urls = await Promise.all(task);
await this.userBalanceService.deductFromBalance(req.user.id, 'mjDraw', (params === null || params === void 0 ? void 0 : params.quality) === 'standard' ? 2 : 4, money);
const curIp = (0, utils_1.getClientIp)(req);
const taskLog = [];
const cosType = await this.uploadService.getUploadType();
const [width, height] = body.size.split('x');
urls.forEach((url) => {
taskLog.push(this.chatLogService.saveChatLog({
curIp,
userId: req.user.id,
type: balance_constant_1.DeductionKey.PAINT_TYPE,
prompt: body.prompt,
answer: url,
fileInfo: JSON.stringify({
cosType,
width,
height,
cosUrl: url,
}),
promptTokens: 0,
completionTokens: 0,
totalTokens: 0,
model: 'dall-e-3',
}));
});
await Promise.all(taskLog);
return urls;
}
catch (error) {
const status = ((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) || 500;
console.log('openai-draw error: ', JSON.stringify(error), key, status);
const message = (_d = (_c = (_b = error === null || error === void 0 ? void 0 : error.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.error) === null || _d === void 0 ? void 0 : _d.message;
if (status === 429) {
throw new common_1.HttpException('当前请求已过载、请稍等会儿再试试吧!', common_1.HttpStatus.BAD_REQUEST);
}
if (status === 400 && message.includes('This request has been blocked by our content filters')) {
throw new common_1.HttpException('您的请求已被系统拒绝。您的提示可能存在一些非法的文本。', common_1.HttpStatus.BAD_REQUEST);
}
if (status === 400 && message.includes('Billing hard limit has been reached')) {
await this.modelsService.lockKey(keyId, '当前模型key已被封禁、已冻结当前调用Key、尝试重新对话试试吧', -1);
throw new common_1.HttpException('当前Key余额已不足、请重新再试一次吧', common_1.HttpStatus.BAD_REQUEST);
}
if (status === 500) {
throw new common_1.HttpException('绘制图片失败,请检查你的提示词是否有非法描述!', common_1.HttpStatus.BAD_REQUEST);
}
if (status === 401) {
throw new common_1.HttpException('绘制图片失败,此次绘画被拒绝了!', common_1.HttpStatus.BAD_REQUEST);
}
throw new common_1.HttpException('绘制图片失败,请稍后试试吧!', common_1.HttpStatus.BAD_REQUEST);
}
}
async getAllKeyList() {
const list = await this.gptKeysEntity.find({
where: { status: 1 },
select: ['id', 'key', 'weight', 'model', 'maxModelTokens', 'maxResponseTokens', 'openaiProxyUrl', 'openaiTimeoutMs'],
});
const list3 = list.filter((t) => t.model.includes('gpt-3'));
const list4 = list.filter((t) => t.model.includes('gpt-4'));
this.keyPool = {
list3,
list4,
};
}
async getModelProxyUrl(modelKey) {
const openaiBaseUrl = await this.globalConfigService.getConfigs(['openaiBaseUrl']);
return (modelKey === null || modelKey === void 0 ? void 0 : modelKey.proxyUrl) || openaiBaseUrl || 'https://api.openai.com';
}
async formatModelToken(detailKeyInfo) {
const { openaiModel3MaxTokens = 0, openaiModel3MaxTokensRes = 0, openaiModel3MaxTokens16k = 0, openaiModel3MaxTokens16kRes = 0, openaiModel4MaxTokens = 0, openaiModel4MaxTokensRes = 0, openaiModel4MaxTokens32k = 0, openaiModel4MaxTokens32kRes = 0, openaiBaseUrl = '', } = await this.globalConfigService.getConfigs([
'openaiModel3MaxTokens',
'openaiModel3MaxTokensRes',
'openaiModel3MaxTokens16k',
'openaiModel3MaxTokens16kRes',
'openaiModel4MaxTokens',
'openaiModel4MaxTokensRes',
'openaiModel4MaxTokens32k',
'openaiModel4MaxTokens32kRes',
'openaiBaseUrl',
]);
let maxToken = null;
let maxTokenRes = null;
let proxyResUrl = null;
let { model, maxModelTokens = 0, maxResponseTokens = 0, proxyUrl = '', key } = detailKeyInfo;
if (model.toLowerCase().includes('gpt-4')) {
maxModelTokens >= 8192 && (maxModelTokens = 8192);
maxTokenRes >= 4096 && (maxModelTokens = 4096);
maxToken = maxModelTokens || openaiModel4MaxTokens || 8192;
maxTokenRes = maxResponseTokens || openaiModel4MaxTokensRes || 4096;
if (model.toLowerCase().includes('32k')) {
maxModelTokens >= 32768 && (maxModelTokens = 32768);
maxTokenRes >= 16384 && (maxModelTokens = 16384);
maxToken = maxModelTokens || openaiModel4MaxTokens32k || 32768;
maxTokenRes = maxResponseTokens || openaiModel4MaxTokens32kRes || 16384;
}
if (model.toLowerCase().includes('1106')) {
maxModelTokens >= 16380 && (maxModelTokens = 16380);
maxTokenRes >= 4096 && (maxModelTokens = 4096);
maxToken = maxModelTokens || 16380;
maxTokenRes = maxResponseTokens || 4096;
}
}
if (model.toLowerCase().includes('gpt-3')) {
maxModelTokens >= 4096 && (maxModelTokens = 4096);
maxTokenRes >= 2000 && (maxModelTokens = 2000);
maxToken = maxModelTokens || openaiModel3MaxTokens || 4096;
maxTokenRes = maxResponseTokens || openaiModel3MaxTokensRes || 2000;
if (model.toLowerCase().includes('16k')) {
maxModelTokens >= 16384 && (maxModelTokens = 16384);
maxTokenRes >= 8192 && (maxModelTokens = 8192);
maxToken = maxModelTokens || openaiModel3MaxTokens16k || 16384;
maxTokenRes = maxResponseTokens || openaiModel3MaxTokens16kRes || 8192;
}
if (model.toLowerCase().includes('1106')) {
maxModelTokens >= 16384 && (maxModelTokens = 16384);
maxTokenRes >= 4096 && (maxModelTokens = 4096);
maxToken = maxModelTokens || 16384;
maxTokenRes = maxResponseTokens || 4096;
}
}
proxyResUrl = proxyUrl || openaiBaseUrl || 'https://api.openai.com';
if (maxTokenRes >= maxToken) {
maxTokenRes = Math.floor(maxToken / 2);
}
return {
key,
maxToken,
maxTokenRes,
proxyResUrl,
};
}
async setChatBoxType(req, body) {
try {
const { name, icon, order, id, status } = body;
if (id) {
return await this.chatBoxTypeEntity.update({ id }, { name, icon, order, status });
}
else {
return await this.chatBoxTypeEntity.save({ name, icon, order, status });
}
}
catch (error) {
console.log('error: ', error);
}
}
async delChatBoxType(req, body) {
const { id } = body;
if (!id) {
throw new common_1.HttpException('非法操作!', common_1.HttpStatus.BAD_REQUEST);
}
const count = await this.chatBoxEntity.count({ where: { typeId: id } });
if (count) {
throw new common_1.HttpException('当前分类下有未处理数据不可移除!', common_1.HttpStatus.BAD_REQUEST);
}
return await this.chatBoxTypeEntity.delete({ id });
}
async queryChatBoxType() {
return await this.chatBoxTypeEntity.find({
order: { order: 'DESC' },
});
}
async setChatBox(req, body) {
const { title, prompt, appId, order, status, typeId, id, url } = body;
if (!typeId) {
throw new common_1.HttpException('缺失必要参数!', common_1.HttpStatus.BAD_REQUEST);
}
try {
const params = { title, order, status, typeId, url };
params.appId = appId || 0;
params.prompt = prompt || '';
if (id) {
return await this.chatBoxEntity.update({ id }, params);
}
else {
return await this.chatBoxEntity.save(params);
}
}
catch (error) {
console.log('error: ', error);
}
}
async delChatBox(req, body) {
const { id } = body;
if (!id) {
throw new common_1.HttpException('非法操作!', common_1.HttpStatus.BAD_REQUEST);
}
return await this.chatBoxEntity.delete({ id });
}
async queryChatBox() {
const data = await this.chatBoxEntity.find({
order: { order: 'DESC' },
});
const typeIds = [...new Set(data.map((t) => t.typeId))];
const appIds = [...new Set(data.map((t) => t.appId))];
const typeRes = await this.chatBoxTypeEntity.find({ where: { id: (0, typeorm_1.In)(typeIds) } });
const appRes = await this.appEntity.find({ where: { id: (0, typeorm_1.In)(appIds) } });
return data.map((item) => {
const { typeId, appId } = item;
item.typeInfo = typeRes.find((t) => t.id === typeId);
item.appInfo = appRes.find((t) => t.id === appId);
return item;
});
}
async queryChatBoxFrontend() {
const typeRes = await this.chatBoxTypeEntity.find({ order: { order: 'DESC' }, where: { status: true } });
const boxinfos = await this.chatBoxEntity.find({ where: { status: true } });
const appIds = [...new Set(boxinfos.map((t) => t.appId))];
const appInfos = await this.appEntity.find({ where: { id: (0, typeorm_1.In)(appIds) } });
boxinfos.forEach((item) => {
const app = appInfos.find((k) => k.id === item.appId);
item.coverImg = app === null || app === void 0 ? void 0 : app.coverImg;
return item;
});
return typeRes.map((t) => {
t.childList = boxinfos.filter((box) => box.typeId === t.id && box.status);
return t;
});
}
async setChatPreType(req, body) {
try {
const { name, icon, order, id, status } = body;
if (id) {
return await this.chatPreTypeEntity.update({ id }, { name, icon, order, status });
}
else {
return await this.chatPreTypeEntity.save({ name, icon, order, status });
}
}
catch (error) {
console.log('error: ', error);
}
}
async delChatPreType(req, body) {
const { id } = body;
if (!id) {
throw new common_1.HttpException('非法操作!', common_1.HttpStatus.BAD_REQUEST);
}
const count = await this.chatBoxEntity.count({ where: { typeId: id } });
if (count) {
throw new common_1.HttpException('当前分类下有未处理数据不可移除!', common_1.HttpStatus.BAD_REQUEST);
}
return await this.chatPreTypeEntity.delete({ id });
}
async queryChatPreType() {
return await this.chatPreTypeEntity.find({
order: { order: 'DESC' },
});
}
async setChatPre(req, body) {
const { title, prompt, appId, order, status, typeId, id, url } = body;
if (!typeId) {
throw new common_1.HttpException('缺失必要参数!', common_1.HttpStatus.BAD_REQUEST);
}
try {
const params = { title, prompt, order, status, typeId, url };
if (id) {
return await this.chatPreEntity.update({ id }, params);
}
else {
return await this.chatPreEntity.save(params);
}
}
catch (error) {
console.log('error: ', error);
}
}
async delChatPre(req, body) {
const { id } = body;
if (!id) {
throw new common_1.HttpException('非法操作!', common_1.HttpStatus.BAD_REQUEST);
}
return await this.chatPreEntity.delete({ id });
}
async queryChatPre() {
const data = await this.chatPreEntity.find({
order: { order: 'DESC' },
});
const typeIds = [...new Set(data.map((t) => t.typeId))];
const typeRes = await this.chatPreTypeEntity.find({ where: { id: (0, typeorm_1.In)(typeIds) } });
return data.map((item) => {
const { typeId, appId } = item;
item.typeInfo = typeRes.find((t) => t.id === typeId);
return item;
});
}
async queryChatPreList() {
const typeRes = await this.chatPreTypeEntity.find({ order: { order: 'DESC' }, where: { status: true } });
const chatPreData = await this.chatPreEntity.find({ where: { status: true } });
return typeRes.map((t) => {
t.childList = chatPreData.filter((box) => box.typeId === t.id && box.status);
return t;
});
}
async getMaxTokenFromModelWithOpenAi(model, maxModelToken, maxResToken) {
let maxToken = 4096;
let maxRes = 2048;
if (model.toLowerCase().includes('gpt-4')) {
maxToken = maxModelToken >= 8196 ? 8196 : maxModelToken;
maxRes = maxResToken >= 4096 ? 4096 : maxResToken;
if (model.toLowerCase().includes('32k')) {
maxToken = maxModelToken >= 32768 ? 32768 : maxModelToken;
maxRes = maxResToken >= 16000 ? 16000 : maxResToken;
}
if (model.toLowerCase().includes('gpt-4-1106') || model.toLowerCase().includes('gpt-4-vision-preview')) {
maxToken = maxModelToken >= 128000 ? 128000 : maxModelToken;
maxRes = maxResToken >= 4096 ? 4096 : maxResToken;
}
}
if (model.toLowerCase().includes('gpt-3')) {
maxToken = maxModelToken >= 4096 ? 4096 : maxModelToken;
maxRes = maxResToken >= 2048 ? 2048 : maxResToken;
if (model.toLowerCase().includes('16k')) {
maxToken = maxModelToken >= 16384 ? 16384 : maxModelToken;
maxRes = maxResToken >= 8000 ? 8000 : maxResToken;
}
if (model.toLowerCase().includes('1106')) {
maxToken = maxModelToken >= 16384 ? 16384 : maxModelToken;
maxRes = maxResToken >= 8000 ? 8000 : maxResToken;
}
}
return {
maxToken,
maxRes,
};
}
};
ChatgptService = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, typeorm_2.InjectRepository)(gptkeys_entity_1.GptKeysEntity)),
__param(1, (0, typeorm_2.InjectRepository)(config_entity_1.ConfigEntity)),
__param(2, (0, typeorm_2.InjectRepository)(chatBoxType_entity_1.ChatBoxTypeEntity)),
__param(3, (0, typeorm_2.InjectRepository)(chatBox_entity_1.ChatBoxEntity)),
__param(4, (0, typeorm_2.InjectRepository)(app_entity_1.AppEntity)),
__param(5, (0, typeorm_2.InjectRepository)(chatPreType_entity_1.ChatPreTypeEntity)),
__param(6, (0, typeorm_2.InjectRepository)(chatPre_entity_1.ChatPreEntity)),
__metadata("design:paramtypes", [typeorm_1.Repository,
typeorm_1.Repository,
typeorm_1.Repository,
typeorm_1.Repository,
typeorm_1.Repository,
typeorm_1.Repository,
typeorm_1.Repository,
nestjs_config_1.ConfigService,
userBalance_service_1.UserBalanceService,
chatLog_service_1.ChatLogService,
user_service_1.UserService,
upload_service_1.UploadService,
badwords_service_1.BadwordsService,
autoreply_service_1.AutoreplyService,
globalConfig_service_1.GlobalConfigService,
fanyi_service_1.FanyiService,
chatGroup_service_1.ChatGroupService,
models_service_1.ModelsService])
], ChatgptService);
exports.ChatgptService = ChatgptService;

View File

@@ -0,0 +1,32 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatDrawDto = void 0;
const swagger_1 = require("@nestjs/swagger");
class ChatDrawDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 'Draw a cute little dog', description: '绘画描述信息' }),
__metadata("design:type", String)
], ChatDrawDto.prototype, "prompt", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '绘画张数', required: true }),
__metadata("design:type", Number)
], ChatDrawDto.prototype, "n", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '1024x1024', description: '图片尺寸', required: true }),
__metadata("design:type", String)
], ChatDrawDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'standard', description: '图片质量', required: true }),
__metadata("design:type", String)
], ChatDrawDto.prototype, "quality", void 0);
exports.ChatDrawDto = ChatDrawDto;

View File

@@ -0,0 +1,48 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChatProcessDto = exports.Options = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
const class_transformer_1 = require("class-transformer");
class Options {
}
__decorate([
(0, class_validator_1.IsString)(),
__metadata("design:type", String)
], Options.prototype, "parentMessageId", void 0);
exports.Options = Options;
class ChatProcessDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 'hello, Who are you', description: '对话信息' }),
(0, class_validator_1.IsNotEmpty)({ message: '提问信息不能为空!' }),
__metadata("design:type", String)
], ChatProcessDto.prototype, "prompt", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: '{ parentMessageId: 0 }', description: '上次对话信息', required: false }),
(0, class_transformer_1.Type)(() => Options),
__metadata("design:type", Options)
], ChatProcessDto.prototype, "options", void 0);
__decorate([
(0, swagger_1.ApiProperty)({
example: "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.",
description: '系统预设信息',
}),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], ChatProcessDto.prototype, "systemMessage", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '应用id', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], ChatProcessDto.prototype, "appId", void 0);
exports.ChatProcessDto = ChatProcessDto;

72
dist/modules/chatgpt/gptkeys.entity.js vendored Normal file
View File

@@ -0,0 +1,72 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GptKeysEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let GptKeysEntity = class GptKeysEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ unique: true, comment: 'gpt key', length: 255 }),
__metadata("design:type", String)
], GptKeysEntity.prototype, "key", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '使用的状态: 0:禁用 1启用', default: 0 }),
__metadata("design:type", Number)
], GptKeysEntity.prototype, "status", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '绑定的模型是?', default: 'gpt-3.5-turbo' }),
__metadata("design:type", String)
], GptKeysEntity.prototype, "model", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'key的余额', type: 'decimal', precision: 10, scale: 2, default: 0 }),
__metadata("design:type", String)
], GptKeysEntity.prototype, "balance", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'key的余额类型', default: '', nullable: true }),
__metadata("design:type", String)
], GptKeysEntity.prototype, "type", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'key的状态: 1:有效 2:余额耗尽 -1:被封号', default: 1 }),
__metadata("design:type", Number)
], GptKeysEntity.prototype, "keyStatus", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'key的到期时间', nullable: true }),
__metadata("design:type", Date)
], GptKeysEntity.prototype, "expireTime", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'key权重', default: 1 }),
__metadata("design:type", Number)
], GptKeysEntity.prototype, "weight", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: 'key的使用次数', default: 0 }),
__metadata("design:type", Number)
], GptKeysEntity.prototype, "useCount", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '模型支持的最大Token', nullable: true }),
__metadata("design:type", Number)
], GptKeysEntity.prototype, "maxModelTokens", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '模型设置的最大回复Token', nullable: true }),
__metadata("design:type", Number)
], GptKeysEntity.prototype, "maxResponseTokens", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '当前模型的代理地址', nullable: true }),
__metadata("design:type", String)
], GptKeysEntity.prototype, "openaiProxyUrl", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '当前模型的超时时间单位ms', nullable: true }),
__metadata("design:type", Number)
], GptKeysEntity.prototype, "openaiTimeoutMs", void 0);
GptKeysEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'gpt_keys' })
], GptKeysEntity);
exports.GptKeysEntity = GptKeysEntity;

66
dist/modules/chatgpt/helper.js vendored Normal file
View File

@@ -0,0 +1,66 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.addOneIfOdd = exports.unifiedFormattingResponse = void 0;
function unifiedFormattingResponse(keyType, response, others) {
let formatRes = {
keyType,
model: '',
parentMessageId: '',
text: '',
usage: {
prompt_tokens: 0,
completion_tokens: 0,
total_tokens: 0,
}
};
if ([1].includes(Number(keyType))) {
const { model, parentMessageId } = response === null || response === void 0 ? void 0 : response.detail;
let { usage } = response === null || response === void 0 ? void 0 : response.detail;
if (!usage) {
usage = {
prompt_tokens: 0,
completion_tokens: 0,
total_tokens: 0
};
}
const { prompt_tokens, completion_tokens, total_tokens } = usage;
formatRes = {
keyType,
model,
parentMessageId,
text: response.text,
usage: {
prompt_tokens,
completion_tokens,
total_tokens
}
};
}
if ([2, 3].includes(Number(keyType))) {
const { usage, text } = response;
const { prompt_tokens, completion_tokens, total_tokens } = usage;
const { model, parentMessageId } = others;
formatRes = {
keyType,
model,
parentMessageId,
text,
usage: {
prompt_tokens,
completion_tokens,
total_tokens
}
};
}
return formatRes;
}
exports.unifiedFormattingResponse = unifiedFormattingResponse;
function addOneIfOdd(num) {
if (num % 2 !== 0) {
return num + 1;
}
else {
return num;
}
}
exports.addOneIfOdd = addOneIfOdd;

120
dist/modules/chatgpt/openai.js vendored Normal file
View File

@@ -0,0 +1,120 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTokenCount = exports.sendMessageFromOpenAi = void 0;
const axios_1 = require("axios");
const tiktoken_1 = require("@dqbd/tiktoken");
const utils_1 = require("../../common/utils");
const tokenizer = (0, tiktoken_1.get_encoding)('cl100k_base');
function getFullUrl(proxyUrl) {
const processedUrl = proxyUrl.endsWith('/') ? proxyUrl.slice(0, -1) : proxyUrl;
const baseUrl = processedUrl || 'https://api.openai.com';
return `${baseUrl}/v1/chat/completions`;
}
function sendMessageFromOpenAi(messagesHistory, inputs) {
var _a;
const { onProgress, maxToken, apiKey, model, temperature = 0.95, proxyUrl } = inputs;
console.log('current request options: ', apiKey, model, maxToken, proxyUrl);
const max_tokens = compilerToken(model, maxToken);
const options = {
method: 'POST',
url: getFullUrl(proxyUrl),
responseType: 'stream',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${(0, utils_1.removeSpecialCharacters)(apiKey)}`,
},
data: {
max_tokens,
stream: true,
temperature,
model,
messages: messagesHistory
},
};
const prompt = (_a = messagesHistory[messagesHistory.length - 1]) === null || _a === void 0 ? void 0 : _a.content;
return new Promise(async (resolve, reject) => {
try {
const response = await (0, axios_1.default)(options);
const stream = response.data;
let result = { text: '' };
stream.on('data', (chunk) => {
var _a;
const splitArr = chunk.toString().split('\n\n').filter((line) => line.trim() !== '');
for (const line of splitArr) {
const data = line.replace('data:', '');
let ISEND = false;
try {
ISEND = JSON.parse(data).choices[0].finish_reason === 'stop';
}
catch (error) {
ISEND = false;
}
if (data === '[DONE]' || ISEND) {
result.text = result.text.trim();
return result;
}
try {
const parsedData = JSON.parse(data);
if (parsedData.id) {
result.id = parsedData.id;
}
if ((_a = parsedData.choices) === null || _a === void 0 ? void 0 : _a.length) {
const delta = parsedData.choices[0].delta;
result.delta = delta.content;
if (delta === null || delta === void 0 ? void 0 : delta.content)
result.text += delta.content;
if (delta.role) {
result.role = delta.role;
}
result.detail = parsedData;
}
onProgress && onProgress({ text: result.text });
}
catch (error) {
console.log('parse Error', data);
}
}
});
stream.on('end', () => {
if (result.detail && result.text) {
const promptTokens = getTokenCount(prompt);
const completionTokens = getTokenCount(result.text);
result.detail.usage = {
prompt_tokens: promptTokens,
completion_tokens: completionTokens,
total_tokens: promptTokens + completionTokens,
estimated: true
};
}
return resolve(result);
});
}
catch (error) {
reject(error);
}
});
}
exports.sendMessageFromOpenAi = sendMessageFromOpenAi;
function getTokenCount(text) {
if (!text)
return 0;
text = text.replace(/<\|endoftext\|>/g, '');
return tokenizer.encode(text).length;
}
exports.getTokenCount = getTokenCount;
function compilerToken(model, maxToken) {
let max = 0;
if (model.includes(3.5)) {
max = maxToken > 4096 ? 4096 : maxToken;
}
if (model.includes('gpt-4')) {
max = maxToken > 8192 ? 8192 : maxToken;
}
if (model.includes('preview')) {
max = maxToken > 4096 ? 4096 : maxToken;
}
if (model.includes('32k')) {
max = maxToken > 32768 ? 32768 : maxToken;
}
return max;
}

89
dist/modules/chatgpt/store.js vendored Normal file
View File

@@ -0,0 +1,89 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.NineStore = void 0;
const uuid_1 = require("uuid");
const tiktoken_1 = require("@dqbd/tiktoken");
const tokenizer = (0, tiktoken_1.get_encoding)('cl100k_base');
class NineStore {
constructor(options) {
const { store, namespace, expires } = this.formatOptions(options);
this.store = store;
this.namespace = namespace;
this.expires = expires;
}
formatOptions(options) {
const { store, expires = 1000 * 60 * 60 * 24 * 3, namespace = 'chat' } = options;
return { store, namespace, expires };
}
generateKey(key) {
return this.namespace ? `${this.namespace}-${key}` : key;
}
async getData(id) {
const res = await this.store.get(id);
return res;
}
async setData(message, expires = this.expires) {
await this.store.set(message.id, message, expires);
}
async buildMessageFromParentMessageId(text, options) {
let { maxRounds, maxModelToken, maxResponseTokens, systemMessage = '', name } = options;
let { parentMessageId } = options;
let messages = [];
let nextNumTokensEstimate = 0;
if (systemMessage) {
messages.push({ role: 'system', content: systemMessage });
}
const systemMessageOffset = messages.length;
let round = 0;
let nextMessages = text ? messages.concat([{ role: 'user', content: text, name }]) : messages;
do {
if (!parentMessageId) {
break;
}
const parentMessage = await this.getData(parentMessageId);
if (!parentMessage) {
break;
}
const { text, name, role } = parentMessage;
nextMessages = nextMessages.slice(0, systemMessageOffset).concat([
{ role, content: text, name },
...nextMessages.slice(systemMessageOffset)
]);
round++;
if (maxRounds && round >= maxRounds) {
break;
}
if (maxModelToken && maxResponseTokens) {
const maxNumTokens = maxModelToken - maxResponseTokens;
nextNumTokensEstimate = await this._getTokenCount(nextMessages);
const isValidPrompt = nextNumTokensEstimate + 200 <= maxNumTokens;
if (!isValidPrompt) {
nextMessages = this._recursivePruning(nextMessages, maxNumTokens, systemMessage);
}
}
parentMessageId = parentMessage.parentMessageId;
} while (true);
const maxTokens = Math.max(1, Math.min(maxModelToken - nextNumTokensEstimate, maxResponseTokens));
console.log('本次携带上下文的长度', nextMessages.length, nextNumTokensEstimate);
return { context: nextMessages, round: nextMessages.length, historyToken: nextNumTokensEstimate };
}
_getTokenCount(messages) {
let text = messages.reduce((pre, cur) => {
return pre += cur.content;
}, '');
text = text.replace(/<\|endoftext\|>/g, '');
return tokenizer.encode(text).length;
}
_recursivePruning(messages, maxNumTokens, systemMessage) {
const currentTokens = this._getTokenCount(messages);
if (currentTokens <= maxNumTokens) {
return messages;
}
messages.splice(systemMessage ? 1 : 0, 1);
return this._recursivePruning(messages, maxNumTokens, systemMessage);
}
getUuid() {
return (0, uuid_1.v4)();
}
}
exports.NineStore = NineStore;

View File

@@ -0,0 +1,36 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WhiteListEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let WhiteListEntity = class WhiteListEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ unique: true, comment: '用户ID' }),
__metadata("design:type", Number)
], WhiteListEntity.prototype, "userId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '使用次数限制', default: 0 }),
__metadata("design:type", Number)
], WhiteListEntity.prototype, "count", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '当前用户状态', default: 1 }),
__metadata("design:type", Number)
], WhiteListEntity.prototype, "status", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '已经使用的次数', default: 0 }),
__metadata("design:type", Number)
], WhiteListEntity.prototype, "useCount", void 0);
WhiteListEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'white_list' })
], WhiteListEntity);
exports.WhiteListEntity = WhiteListEntity;

101
dist/modules/chatgpt/zhipu.js vendored Normal file
View File

@@ -0,0 +1,101 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.sendMessageFromZhipu = exports.compilerStream = exports.compilerMetaJsonStr = exports.generateToken = void 0;
const axios = require('axios');
const jwt = require('jsonwebtoken');
function generateToken(apikey, expSeconds = 1000 * 60 * 60 * 24 * 360) {
const [id, secret] = apikey.split('.');
const payload = {
api_key: id,
exp: Math.round(Date.now()) + expSeconds * 1000,
timestamp: Math.round(Date.now()),
};
return jwt.sign(payload, secret, { algorithm: 'HS256', header: { alg: 'HS256', sign_type: 'SIGN' } });
}
exports.generateToken = generateToken;
function compilerMetaJsonStr(data) {
let jsonStr = {};
try {
jsonStr = JSON.parse(data);
}
catch (error) {
jsonStr = {
usage: {
completion_tokens: 49,
prompt_tokens: 333,
total_tokens: 399
},
};
console.error('json parse error from zhipu!', data);
}
return jsonStr;
}
exports.compilerMetaJsonStr = compilerMetaJsonStr;
function compilerStream(streamArr) {
var _a;
if (streamArr.length === 3) {
return {
event: streamArr[0].replace('event:', ''),
id: streamArr[1].replace('id:', ''),
is_end: false,
result: streamArr[2].replace('data:', '').trim()
};
}
if (streamArr.length === 4) {
return {
event: streamArr[0].replace('event:', ''),
id: streamArr[1].replace('id:', ''),
result: streamArr[2].replace('data:', '').trim(),
is_end: true,
usage: (_a = compilerMetaJsonStr(streamArr[3].replace('meta:', ''))) === null || _a === void 0 ? void 0 : _a.usage
};
}
}
exports.compilerStream = compilerStream;
async function sendMessageFromZhipu(messagesHistory, { onProgress, key, model, temperature = 0.95 }) {
const token = await generateToken(key);
return new Promise((resolve, reject) => {
const url = `https://open.bigmodel.cn/api/paas/v3/model-api/${model}/sse-invoke`;
const options = {
method: 'POST',
url,
responseType: 'stream',
headers: {
'Content-Type': 'application/json',
'Authorization': token
},
data: {
prompt: messagesHistory,
temperature
}
};
axios(options)
.then(response => {
const stream = response.data;
let resData;
let cacheResText = '';
stream.on('data', chunk => {
const stramArr = chunk.toString().split("\n").filter((line) => line.trim() !== "");
const parseData = compilerStream(stramArr);
if (!parseData)
return;
const { id, result, is_end } = parseData;
result && (cacheResText += result.trim());
if (is_end) {
parseData.is_end = false;
resData = parseData;
resData.text = cacheResText;
}
onProgress(parseData);
});
stream.on('end', () => {
resolve(resData);
cacheResText = '';
});
})
.catch(error => {
console.log('error: ', error);
});
});
}
exports.sendMessageFromZhipu = sendMessageFromZhipu;

168
dist/modules/crami/crami.controller.js vendored Normal file
View File

@@ -0,0 +1,168 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CramiController = void 0;
const crami_service_1 = require("./crami.service");
const common_1 = require("@nestjs/common");
const swagger_1 = require("@nestjs/swagger");
const createPackage_dto_1 = require("./dto/createPackage.dto");
const updatePackage_dto_1 = require("./dto/updatePackage.dto");
const createCrami_dto_1 = require("./dto/createCrami.dto");
const superAuth_guard_1 = require("../../common/auth/superAuth.guard");
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
const useCrami_dto_1 = require("./dto/useCrami.dto");
const queryAllPackage_dto_1 = require("./dto/queryAllPackage.dto");
const deletePackage_dto_1 = require("./dto/deletePackage.dto");
const queryAllCrami_dto_1 = require("./dto/queryAllCrami.dto");
const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard");
const batchDelCrami_dto_1 = require("./dto/batchDelCrami.dto");
let CramiController = class CramiController {
constructor(cramiService) {
this.cramiService = cramiService;
}
async queryOnePackage(id) {
return this.cramiService.queryOnePackage(id);
}
async queryAllPackage(query) {
return this.cramiService.queryAllPackage(query);
}
async createPackage(body) {
return this.cramiService.createPackage(body);
}
async updatePackage(body) {
return this.cramiService.updatePackage(body);
}
async delPackage(body) {
return this.cramiService.delPackage(body);
}
async createCrami(body) {
return this.cramiService.createCrami(body);
}
async useCrami(req, body) {
return this.cramiService.useCrami(req, body);
}
async queryAllCrami(params, req) {
return this.cramiService.queryAllCrami(params, req);
}
async delCrami(id) {
return this.cramiService.delCrami(id);
}
async batchDelCrami(body) {
return this.cramiService.batchDelCrami(body);
}
};
__decorate([
(0, common_1.Get)('queryOnePackage'),
(0, swagger_1.ApiOperation)({ summary: '查询单个套餐' }),
__param(0, (0, common_1.Query)('id')),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number]),
__metadata("design:returntype", Promise)
], CramiController.prototype, "queryOnePackage", null);
__decorate([
(0, common_1.Get)('queryAllPackage'),
(0, swagger_1.ApiOperation)({ summary: '查询所有套餐' }),
__param(0, (0, common_1.Query)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [queryAllPackage_dto_1.QuerAllPackageDto]),
__metadata("design:returntype", Promise)
], CramiController.prototype, "queryAllPackage", null);
__decorate([
(0, common_1.Post)('createPackage'),
(0, swagger_1.ApiOperation)({ summary: '创建套餐' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [createPackage_dto_1.CreatePackageDto]),
__metadata("design:returntype", Promise)
], CramiController.prototype, "createPackage", null);
__decorate([
(0, common_1.Post)('updatePackage'),
(0, swagger_1.ApiOperation)({ summary: '更新套餐' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [updatePackage_dto_1.UpdatePackageDto]),
__metadata("design:returntype", Promise)
], CramiController.prototype, "updatePackage", null);
__decorate([
(0, common_1.Post)('delPackage'),
(0, swagger_1.ApiOperation)({ summary: '删除套餐' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [deletePackage_dto_1.DeletePackageDto]),
__metadata("design:returntype", Promise)
], CramiController.prototype, "delPackage", null);
__decorate([
(0, common_1.Post)('createCrami'),
(0, swagger_1.ApiOperation)({ summary: '生成卡密' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [createCrami_dto_1.CreatCramiDto]),
__metadata("design:returntype", Promise)
], CramiController.prototype, "createCrami", null);
__decorate([
(0, common_1.Post)('useCrami'),
(0, swagger_1.ApiOperation)({ summary: '使用卡密' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Req)()),
__param(1, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, useCrami_dto_1.UseCramiDto]),
__metadata("design:returntype", Promise)
], CramiController.prototype, "useCrami", null);
__decorate([
(0, common_1.Get)('queryAllCrami'),
(0, swagger_1.ApiOperation)({ summary: '查询所有卡密' }),
(0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Query)()),
__param(1, (0, common_1.Req)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [queryAllCrami_dto_1.QuerAllCramiDto, Object]),
__metadata("design:returntype", Promise)
], CramiController.prototype, "queryAllCrami", null);
__decorate([
(0, common_1.Post)('delCrami'),
(0, swagger_1.ApiOperation)({ summary: '删除卡密' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)('id')),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Number]),
__metadata("design:returntype", Promise)
], CramiController.prototype, "delCrami", null);
__decorate([
(0, common_1.Post)('batchDelCrami'),
(0, swagger_1.ApiOperation)({ summary: '批量删除卡密' }),
(0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [batchDelCrami_dto_1.BatchDelCramiDto]),
__metadata("design:returntype", Promise)
], CramiController.prototype, "batchDelCrami", null);
CramiController = __decorate([
(0, swagger_1.ApiTags)('Crami'),
(0, common_1.Controller)('crami'),
__metadata("design:paramtypes", [crami_service_1.CramiService])
], CramiController);
exports.CramiController = CramiController;

56
dist/modules/crami/crami.entity.js vendored Normal file
View File

@@ -0,0 +1,56 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CramiEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let CramiEntity = class CramiEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ unique: true, comment: '存储卡密CDK编码', length: 50 }),
__metadata("design:type", String)
], CramiEntity.prototype, "code", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '卡密CDK类型1 普通 | 2 单人可使用一次 ', default: 1 }),
__metadata("design:type", Number)
], CramiEntity.prototype, "cramiType", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '卡密CDK类型 默认套餐类型 | 不填就是自定义类型', nullable: true }),
__metadata("design:type", Number)
], CramiEntity.prototype, "packageId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '卡密CDK状态如已使用、未使用等', default: 0 }),
__metadata("design:type", Number)
], CramiEntity.prototype, "status", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '卡密使用账户用户ID信息', nullable: true }),
__metadata("design:type", Number)
], CramiEntity.prototype, "useId", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '卡密有效期天数、从生成创建的时候开始计算设为0则不限时间', default: 0 }),
__metadata("design:type", Number)
], CramiEntity.prototype, "days", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '卡密模型3额度', nullable: true }),
__metadata("design:type", Number)
], CramiEntity.prototype, "model3Count", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '卡密模型4额度', nullable: true }),
__metadata("design:type", Number)
], CramiEntity.prototype, "model4Count", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '卡密MJ绘画额度', nullable: true }),
__metadata("design:type", Number)
], CramiEntity.prototype, "drawMjCount", void 0);
CramiEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'crami' })
], CramiEntity);
exports.CramiEntity = CramiEntity;

55
dist/modules/crami/crami.module.js vendored Normal file
View File

@@ -0,0 +1,55 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CramiModule = void 0;
const common_1 = require("@nestjs/common");
const crami_service_1 = require("./crami.service");
const crami_controller_1 = require("./crami.controller");
const typeorm_1 = require("@nestjs/typeorm");
const crami_entity_1 = require("./crami.entity");
const cramiPackage_entity_1 = require("./cramiPackage.entity");
const user_entity_1 = require("../user/user.entity");
const userBalance_service_1 = require("../userBalance/userBalance.service");
const balance_entity_1 = require("../userBalance/balance.entity");
const accountLog_entity_1 = require("../userBalance/accountLog.entity");
const config_entity_1 = require("../globalConfig/config.entity");
const userBalance_entity_1 = require("../userBalance/userBalance.entity");
const salesUsers_entity_1 = require("../sales/salesUsers.entity");
const whiteList_entity_1 = require("../chatgpt/whiteList.entity");
const fingerprint_entity_1 = require("../userBalance/fingerprint.entity");
const chatLog_entity_1 = require("../chatLog/chatLog.entity");
const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity");
const midjourney_entity_1 = require("../midjourney/midjourney.entity");
let CramiModule = class CramiModule {
};
CramiModule = __decorate([
(0, common_1.Global)(),
(0, common_1.Module)({
imports: [
typeorm_1.TypeOrmModule.forFeature([
salesUsers_entity_1.SalesUsersEntity,
crami_entity_1.CramiEntity,
cramiPackage_entity_1.CramiPackageEntity,
user_entity_1.UserEntity,
balance_entity_1.BalanceEntity,
accountLog_entity_1.AccountLogEntity,
config_entity_1.ConfigEntity,
userBalance_entity_1.UserBalanceEntity,
whiteList_entity_1.WhiteListEntity,
fingerprint_entity_1.FingerprintLogEntity,
chatLog_entity_1.ChatLogEntity,
chatGroup_entity_1.ChatGroupEntity,
midjourney_entity_1.MidjourneyEntity
]),
],
providers: [crami_service_1.CramiService, userBalance_service_1.UserBalanceService],
controllers: [crami_controller_1.CramiController],
exports: [crami_service_1.CramiService],
})
], CramiModule);
exports.CramiModule = CramiModule;

214
dist/modules/crami/crami.service.js vendored Normal file
View File

@@ -0,0 +1,214 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CramiService = void 0;
const common_1 = require("@nestjs/common");
const crami_entity_1 = require("./crami.entity");
const typeorm_1 = require("@nestjs/typeorm");
const typeorm_2 = require("typeorm");
const cramiPackage_entity_1 = require("./cramiPackage.entity");
const utils_1 = require("../../common/utils");
const user_entity_1 = require("../user/user.entity");
const userBalance_service_1 = require("../userBalance/userBalance.service");
const balance_constant_1 = require("../../common/constants/balance.constant");
let CramiService = class CramiService {
constructor(cramiEntity, cramiPackageEntity, userEntity, userBalanceService) {
this.cramiEntity = cramiEntity;
this.cramiPackageEntity = cramiPackageEntity;
this.userEntity = userEntity;
this.userBalanceService = userBalanceService;
}
async queryOnePackage(id) {
return await this.cramiPackageEntity.findOne({ where: { id } });
}
async queryAllPackage(query) {
try {
const { page = 1, size = 10, name, status, type } = query;
const where = {};
name && Object.assign(where, { name: (0, typeorm_2.Like)(`%${name}%`) });
status && Object.assign(where, { status });
if (type) {
if (type > 0) {
Object.assign(where, { days: (0, typeorm_2.MoreThan)(0) });
}
else {
Object.assign(where, { days: (0, typeorm_2.LessThanOrEqual)(0) });
}
}
const [rows, count] = await this.cramiPackageEntity.findAndCount({
skip: (page - 1) * size,
take: size,
where,
order: { order: 'DESC' },
});
return { rows, count };
}
catch (error) {
console.log('error: ', error);
}
}
async createPackage(body) {
const { name, weight } = body;
const p = await this.cramiPackageEntity.findOne({ where: [{ name }, { weight }] });
if (p) {
throw new common_1.HttpException('套餐名称或套餐等级重复、请检查!', common_1.HttpStatus.BAD_REQUEST);
}
try {
return await this.cramiPackageEntity.save(body);
}
catch (error) {
console.log('error: ', error);
throw new common_1.HttpException(error, common_1.HttpStatus.BAD_REQUEST);
}
}
async updatePackage(body) {
const { id, name, weight } = body;
const op = await this.cramiPackageEntity.findOne({ where: { id } });
if (!op) {
throw new common_1.HttpException('当前套餐不存在、请检查你的输入参数!', common_1.HttpStatus.BAD_REQUEST);
}
const count = await this.cramiPackageEntity.count({
where: [
{ name, id: (0, typeorm_2.Not)(id) },
{ weight, id: (0, typeorm_2.Not)(id) },
],
});
if (count) {
throw new common_1.HttpException('套餐名称或套餐等级重复、请检查!', common_1.HttpStatus.BAD_REQUEST);
}
const res = await this.cramiPackageEntity.update({ id }, body);
if (res.affected > 0) {
return '更新套餐成功!';
}
else {
throw new common_1.HttpException('更新套餐失败、请重试!', common_1.HttpStatus.BAD_REQUEST);
}
}
async delPackage(body) {
const { id } = body;
const count = await this.cramiEntity.count({ where: { packageId: id } });
if (count) {
throw new common_1.HttpException('当前套餐下存在卡密、请先删除卡密后才可删除套餐!', common_1.HttpStatus.BAD_REQUEST);
}
return await this.cramiPackageEntity.delete({ id });
}
async createCrami(body) {
const { packageId, count = 1 } = body;
if (packageId) {
const pkg = await this.cramiPackageEntity.findOne({ where: { id: packageId } });
if (!pkg) {
throw new common_1.HttpException('当前套餐不存在、请确认您选择的套餐是否存在!', common_1.HttpStatus.BAD_REQUEST);
}
const { days = -1, model3Count = 0, model4Count = 0, drawMjCount = 0 } = pkg;
const baseCrami = { packageId, days, model3Count, model4Count, drawMjCount };
return await this.generateCrami(baseCrami, count);
}
if (!packageId) {
const { model3Count = 0, model4Count = 0, drawMjCount = 0 } = body;
if ([model3Count, model4Count, drawMjCount].every((v) => !v)) {
throw new common_1.HttpException('自定义卡密必须至少一项余额不为0', common_1.HttpStatus.BAD_REQUEST);
}
const baseCrami = { days: -1, model3Count, model4Count, drawMjCount };
return await this.generateCrami(baseCrami, count);
}
}
async generateCrami(cramiInfo, count) {
const cramiList = [];
for (let i = 0; i < count; i++) {
const code = (0, utils_1.generateCramiCode)();
const crami = this.cramiEntity.create(Object.assign(Object.assign({}, cramiInfo), { code }));
cramiList.push(crami);
}
return await this.cramiEntity.save(cramiList);
}
async useCrami(req, body) {
const { id } = req.user;
const crami = await this.cramiEntity.findOne({ where: { code: body.code } });
if (!crami) {
throw new common_1.HttpException('当前卡密不存在、请确认您输入的卡密是否正确!', common_1.HttpStatus.BAD_REQUEST);
}
const { status, days = -1, model3Count = 0, model4Count = 0, drawMjCount = 0, packageId } = crami;
if (status === 1) {
throw new common_1.HttpException('当前卡密已被使用、请确认您输入的卡密是否正确!', common_1.HttpStatus.BAD_REQUEST);
}
const balanceInfo = { model3Count, model4Count, drawMjCount, packageId };
await this.userBalanceService.addBalanceToUser(id, Object.assign({}, balanceInfo), days);
await this.userBalanceService.saveRecordRechargeLog({
userId: id,
rechargeType: balance_constant_1.RechargeType.PACKAGE_GIFT,
model3Count,
model4Count,
drawMjCount,
days,
});
await this.cramiEntity.update({ code: body.code }, { useId: id, status: 1 });
return '使用卡密成功';
}
async queryAllCrami(params, req) {
const { page = 1, size = 10, status, useId } = params;
const where = {};
status && Object.assign(where, { status });
useId && Object.assign(where, { useId });
const [rows, count] = await this.cramiEntity.findAndCount({
skip: (page - 1) * size,
take: size,
order: { createdAt: 'DESC' },
where,
});
const userIds = rows.map((t) => t.useId);
const packageIds = rows.map((t) => t.packageId);
const userInfos = await this.userEntity.find({ where: { id: (0, typeorm_2.In)(userIds) } });
const packageInfos = await this.cramiPackageEntity.find({ where: { id: (0, typeorm_2.In)(packageIds) } });
rows.forEach((t) => {
var _a, _b, _c;
t.username = (_a = userInfos.find((u) => u.id === t.useId)) === null || _a === void 0 ? void 0 : _a.username;
t.email = (_b = userInfos.find((u) => u.id === t.useId)) === null || _b === void 0 ? void 0 : _b.email;
t.packageName = (_c = packageInfos.find((p) => p.id === t.packageId)) === null || _c === void 0 ? void 0 : _c.name;
});
req.user.role !== 'super' && rows.forEach((t) => (t.email = (0, utils_1.maskEmail)(t.email)));
req.user.role !== 'super' && rows.forEach((t) => (t.code = (0, utils_1.maskCrami)(t.code)));
return { rows, count };
}
async delCrami(id) {
const c = await this.cramiEntity.findOne({ where: { id } });
if (!c) {
throw new common_1.HttpException('当前卡密不存在、请确认您要删除的卡密是否存在!', common_1.HttpStatus.BAD_REQUEST);
}
if (c.status === 1) {
throw new common_1.HttpException('当前卡密已被使用、已使用的卡密禁止删除!', common_1.HttpStatus.BAD_REQUEST);
}
return await this.cramiEntity.delete({ id });
}
async batchDelCrami(body) {
const { ids } = body;
const res = await this.cramiEntity.delete(ids);
if (res.affected > 0) {
return '删除卡密成功!';
}
else {
throw new common_1.HttpException('删除卡密失败、请重试!', common_1.HttpStatus.BAD_REQUEST);
}
}
};
CramiService = __decorate([
(0, common_1.Injectable)(),
__param(0, (0, typeorm_1.InjectRepository)(crami_entity_1.CramiEntity)),
__param(1, (0, typeorm_1.InjectRepository)(cramiPackage_entity_1.CramiPackageEntity)),
__param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)),
__metadata("design:paramtypes", [typeorm_2.Repository,
typeorm_2.Repository,
typeorm_2.Repository,
userBalance_service_1.UserBalanceService])
], CramiService);
exports.CramiService = CramiService;

View File

@@ -0,0 +1,64 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CramiPackageEntity = void 0;
const typeorm_1 = require("typeorm");
const baseEntity_1 = require("../../common/entity/baseEntity");
let CramiPackageEntity = class CramiPackageEntity extends baseEntity_1.BaseEntity {
};
__decorate([
(0, typeorm_1.Column)({ unique: true, comment: '套餐名称' }),
__metadata("design:type", String)
], CramiPackageEntity.prototype, "name", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '套餐介绍详细信息' }),
__metadata("design:type", String)
], CramiPackageEntity.prototype, "des", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '套餐封面图片', nullable: true }),
__metadata("design:type", String)
], CramiPackageEntity.prototype, "coverImg", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '套餐价格¥', type: 'decimal', scale: 2, precision: 10 }),
__metadata("design:type", Number)
], CramiPackageEntity.prototype, "price", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '套餐排序、数字越大越靠前', default: 100 }),
__metadata("design:type", Number)
], CramiPackageEntity.prototype, "order", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '套餐是否启用中 0禁用 1启用', default: 1 }),
__metadata("design:type", Number)
], CramiPackageEntity.prototype, "status", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '套餐权重、数字越大表示套餐等级越高越贵', unique: true }),
__metadata("design:type", Number)
], CramiPackageEntity.prototype, "weight", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '卡密有效期天数、从使用的时候开始计算,设为-1则不限时间', default: 0 }),
__metadata("design:type", Number)
], CramiPackageEntity.prototype, "days", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '套餐包含的模型3数量', default: 0, nullable: true }),
__metadata("design:type", Number)
], CramiPackageEntity.prototype, "model3Count", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '套餐包含的模型4数量', default: 0, nullable: true }),
__metadata("design:type", Number)
], CramiPackageEntity.prototype, "model4Count", void 0);
__decorate([
(0, typeorm_1.Column)({ comment: '套餐包含的MJ绘画数量', default: 0, nullable: true }),
__metadata("design:type", Number)
], CramiPackageEntity.prototype, "drawMjCount", void 0);
CramiPackageEntity = __decorate([
(0, typeorm_1.Entity)({ name: 'crami_package' })
], CramiPackageEntity);
exports.CramiPackageEntity = CramiPackageEntity;

View File

@@ -0,0 +1,23 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.BatchDelCramiDto = void 0;
const swagger_1 = require("@nestjs/swagger");
const class_validator_1 = require("class-validator");
class BatchDelCramiDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '要删除的套餐Ids', required: true }),
(0, class_validator_1.IsArray)({ message: '参数类型为数组' }),
(0, class_validator_1.ArrayMinSize)(1, { message: '最短长度为1' }),
__metadata("design:type", Array)
], BatchDelCramiDto.prototype, "ids", void 0);
exports.BatchDelCramiDto = BatchDelCramiDto;

View File

@@ -0,0 +1,49 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreatCramiDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class CreatCramiDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '套餐类型', required: true }),
(0, class_validator_1.IsNumber)({}, { message: '套餐类型必须是number' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], CreatCramiDto.prototype, "packageId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '单次生成卡密数量' }),
(0, class_validator_1.IsNumber)({}, { message: '创建卡密的张数数量' }),
(0, class_validator_1.Max)(50, { message: '单次创建卡密的张数数量不能超过50张' }),
(0, class_validator_1.Min)(1, { message: '单次创建卡密的张数数量不能少于1张' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], CreatCramiDto.prototype, "count", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 0, description: '卡密携带模型3额度' }),
(0, class_validator_1.IsNumber)({}, { message: '卡密携带的余额必须是number' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], CreatCramiDto.prototype, "model3Count", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 100, description: '卡密携带模型4额度' }),
(0, class_validator_1.IsNumber)({}, { message: '卡密携带额度类型必须是number' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], CreatCramiDto.prototype, "model4Count", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 3, description: '卡密携带MJ绘画额度' }),
(0, class_validator_1.IsNumber)({}, { message: '卡密携带额度类型必须是number' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], CreatCramiDto.prototype, "drawMjCount", void 0);
exports.CreatCramiDto = CreatCramiDto;

View File

@@ -0,0 +1,81 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreatePackageDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
const class_transformer_1 = require("class-transformer");
class CreatePackageDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: '基础套餐100次卡', description: '套餐名称', required: true }),
(0, class_validator_1.IsDefined)({ message: '套餐名称是必传参数' }),
__metadata("design:type", String)
], CreatePackageDto.prototype, "name", void 0);
__decorate([
(0, swagger_1.ApiProperty)({
example: '这是一个100次对话余额的套餐我们将为您额外赠送3次绘画余额活动期间我们将在套餐基础上额外赠送您十次对话余额和1次绘画余额',
description: '套餐详情描述',
required: true,
}),
(0, class_validator_1.IsDefined)({ message: '套餐描述是必传参数' }),
__metadata("design:type", String)
], CreatePackageDto.prototype, "des", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 7, default: 0, description: '套餐等级设置' }),
(0, class_validator_1.IsNumber)({}, { message: '套餐等级权重必须为数字' }),
__metadata("design:type", Number)
], CreatePackageDto.prototype, "weight", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '套餐扣费类型 1按次数 2按Token', required: true }),
__metadata("design:type", Number)
], CreatePackageDto.prototype, "deductionType", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'https://xxxx.png', description: '套餐封面图片' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], CreatePackageDto.prototype, "coverImg", void 0);
__decorate([
(0, class_transformer_1.Transform)(({ value }) => parseFloat(value)),
__metadata("design:type", Number)
], CreatePackageDto.prototype, "price", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 100, description: '套餐排序、数字越大越靠前' }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], CreatePackageDto.prototype, "order", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '套餐状态 0禁用 1启用', required: true }),
(0, class_validator_1.IsNumber)({}, { message: '套餐状态必须是Number' }),
(0, class_validator_1.IsIn)([0, 1], { message: '套餐状态错误' }),
__metadata("design:type", Number)
], CreatePackageDto.prototype, "status", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 7, default: 0, description: '套餐有效期 -1为永久不过期' }),
(0, class_validator_1.IsNumber)({}, { message: '套餐有效期天数类型必须是number' }),
__metadata("design:type", Number)
], CreatePackageDto.prototype, "days", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1000, default: 0, description: '模型3对话次数' }),
(0, class_validator_1.IsNumber)({}, { message: '模型3对话次数必须是number类型' }),
__metadata("design:type", Number)
], CreatePackageDto.prototype, "model3Count", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, default: 0, description: '模型4对话次数' }),
(0, class_validator_1.IsNumber)({}, { message: '模型4对话次数必须是number类型' }),
__metadata("design:type", Number)
], CreatePackageDto.prototype, "model4Count", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, default: 0, description: 'MJ绘画次数' }),
(0, class_validator_1.IsNumber)({}, { message: 'MJ绘画次数必须是number类型' }),
__metadata("design:type", Number)
], CreatePackageDto.prototype, "drawMjCount", void 0);
exports.CreatePackageDto = CreatePackageDto;

View File

@@ -0,0 +1,22 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeletePackageDto = void 0;
const swagger_1 = require("@nestjs/swagger");
const class_validator_1 = require("class-validator");
class DeletePackageDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '要修改的套餐Id', required: true }),
(0, class_validator_1.IsNumber)({}, { message: '套餐ID必须是Number' }),
__metadata("design:type", Number)
], DeletePackageDto.prototype, "id", void 0);
exports.DeletePackageDto = DeletePackageDto;

View File

@@ -0,0 +1,37 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuerAllCramiDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QuerAllCramiDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllCramiDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllCramiDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '使用人Id', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllCramiDto.prototype, "useId", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '卡密状态 0未使用 1已消费', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllCramiDto.prototype, "status", void 0);
exports.QuerAllCramiDto = QuerAllCramiDto;

View File

@@ -0,0 +1,42 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuerAllPackageDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class QuerAllPackageDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllPackageDto.prototype, "page", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllPackageDto.prototype, "size", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 'name', description: '套餐名称', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", String)
], QuerAllPackageDto.prototype, "name", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '套餐状态 0禁用 1启用', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllPackageDto.prototype, "status", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '套餐类型 -1永久套餐 1限时套餐', required: false }),
(0, class_validator_1.IsOptional)(),
__metadata("design:type", Number)
], QuerAllPackageDto.prototype, "type", void 0);
exports.QuerAllPackageDto = QuerAllPackageDto;

View File

@@ -0,0 +1,23 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UpdatePackageDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
const createPackage_dto_1 = require("./createPackage.dto");
class UpdatePackageDto extends createPackage_dto_1.CreatePackageDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 1, description: '要修改的套餐Id', required: true }),
(0, class_validator_1.IsNumber)({}, { message: '套餐ID必须是Number' }),
__metadata("design:type", Number)
], UpdatePackageDto.prototype, "id", void 0);
exports.UpdatePackageDto = UpdatePackageDto;

22
dist/modules/crami/dto/useCrami.dto.js vendored Normal file
View File

@@ -0,0 +1,22 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UseCramiDto = void 0;
const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
class UseCramiDto {
}
__decorate([
(0, swagger_1.ApiProperty)({ example: 'ffar684rv254fs4f', description: '卡密信息', required: true }),
(0, class_validator_1.IsDefined)({ message: '套餐名称是必传参数' }),
__metadata("design:type", String)
], UseCramiDto.prototype, "code", void 0);
exports.UseCramiDto = UseCramiDto;

View File

@@ -0,0 +1,42 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var DatabaseModule_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatabaseModule = void 0;
const common_1 = require("@nestjs/common");
const typeorm_1 = require("@nestjs/typeorm");
const nestjs_config_1 = require("nestjs-config");
const typeorm_2 = require("typeorm");
const database_service_1 = require("./database.service");
let DatabaseModule = DatabaseModule_1 = class DatabaseModule {
constructor(connection, config) {
this.connection = connection;
this.config = config;
this.logger = new common_1.Logger(DatabaseModule_1.name);
}
onModuleInit() {
const { database } = this.connection.options;
this.logger.log(`Your MySQL database named ${database} has been connected`);
}
};
DatabaseModule = DatabaseModule_1 = __decorate([
(0, common_1.Module)({
imports: [
typeorm_1.TypeOrmModule.forRootAsync({
useFactory: (config) => config.get('database'),
inject: [nestjs_config_1.ConfigService],
}),
],
providers: [database_service_1.DatabaseService],
}),
__metadata("design:paramtypes", [typeorm_2.Connection, nestjs_config_1.ConfigService])
], DatabaseModule);
exports.DatabaseModule = DatabaseModule;

View File

@@ -0,0 +1,156 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DatabaseService = void 0;
const common_1 = require("@nestjs/common");
const typeorm_1 = require("typeorm");
const bcrypt = require("bcryptjs");
let DatabaseService = class DatabaseService {
constructor(connection) {
this.connection = connection;
}
async onModuleInit() {
await this.checkSuperAdmin();
await this.checkSiteBaseConfig();
}
async checkSuperAdmin() {
const user = await this.connection.query(`SELECT * FROM users WHERE role = 'super'`);
if (!user || user.length === 0) {
const superPassword = bcrypt.hashSync('nine-super', 10);
const adminPassword = bcrypt.hashSync('123456', 10);
const superEmail = 'default@cooper.com';
const adminEmail = 'defaultAdmin@cooper.com';
const superUserinfo = { username: 'super', password: superPassword, status: 1, email: superEmail, sex: 1, role: 'super' };
const adminUserinfo = { username: 'admin', password: adminPassword, status: 1, email: adminEmail, sex: 1, role: 'admin' };
await this.createDefaultUser(superUserinfo);
await this.createDefaultUser(adminUserinfo);
}
}
async createDefaultUser(userInfo) {
try {
const { username, password, status, email, role } = userInfo;
const user = await this.connection.query(`INSERT INTO users (username, password, status, email, role) VALUES ('${username}', '${password}', '${status}', '${email}', '${role}')`);
const userId = user.insertId;
const balance = await this.connection.query(`INSERT INTO balance (userId, balance, usesLeft, paintCount) VALUES ('${userId}', 0, 1000, 100)`);
common_1.Logger.log(`初始化创建${role}用户成功、用户名为[${username}]、初始密码为[${username === 'super' ? 'nine-super' : '123456'}] ==============> 请注意查阅`, 'DatabaseService');
}
catch (error) {
console.log('error: ', error);
throw new common_1.HttpException('创建默认超级管理员失败!', common_1.HttpStatus.INTERNAL_SERVER_ERROR);
}
}
async checkSiteBaseConfig() {
const keys = ['siteName', 'qqNumber', 'vxNumber', 'robotAvatar', 'userDefautlAvatar'];
const result = await this.connection.query(`
SELECT COUNT(*) AS count FROM config WHERE \`configKey\` IN (${keys.map((k) => `'${k}'`).join(',')})
`);
const count = parseInt(result[0].count);
if (count === 0) {
await this.createBaseSiteConfig();
}
}
async createBaseSiteConfig() {
try {
const code = `
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?cb8c9a3bcadbc200e950b05f9c61a385";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
`;
const noticeInfo = `
#### NineAi 欢迎您
- NineAi唯一官方网站 https://ai.jiangly.com
- NineAi 作者VX J_longyan
- NineAi 作者QQ 927898639
- 欢迎使用Nine
- 初始管理员账号密码 super nine-super 【前台后台登录都可以修改】
- 初始预览账号密码 admin 123456 【为后台查看账号 仅可查看部分非敏感数据】
`;
const defaultConfig = [
{ configKey: 'siteName', configVal: 'Nine Ai', public: 1, encry: 0 },
{ configKey: 'qqNumber', configVal: '840814166', public: 1, encry: 0 },
{ configKey: 'vxNumber', configVal: 'wangpanzhu321', public: 1, encry: 0 },
{ configKey: 'robotAvatar', configVal: '', public: 1, encry: 0 },
{
configKey: 'userDefautlAvatar',
configVal: 'https://public-1300678944.cos.ap-shanghai.myqcloud.com/blog/1682571295452image.png',
public: 0,
encry: 0,
},
{ configKey: 'baiduCode', configVal: code, public: 1, encry: 0 },
{ configKey: 'baiduSiteId', configVal: '19024441', public: 0, encry: 0 },
{
configKey: 'baiduToken',
configVal: '121.a1600b9b60910feea2ef627ea9776a6f.YGP_CWCOA2lNcIGJ27BwXGxa6nZhBQyLUS4XVaD.TWt9TA',
public: 0,
encry: 0,
},
{ configKey: 'buyCramiAddress', configVal: '', public: 1, encry: 0 },
{ configKey: 'openaiBaseUrl', configVal: 'https://api.openai.com', public: 0, encry: 0 },
{ configKey: 'noticeInfo', configVal: noticeInfo, public: 1, encry: 0 },
{ configKey: 'registerVerifyEmailTitle', configVal: 'NineTeam团队账号验证', public: 0, encry: 0 },
{
configKey: 'registerVerifyEmailDesc',
configVal: '欢迎使用Nine Team团队的产品服务,请在五分钟内完成你的账号激活,点击以下按钮激活您的账号,',
public: 0,
encry: 0,
},
{ configKey: 'registerVerifyEmailFrom', configVal: 'NineTeam团队', public: 0, encry: 0 },
{ configKey: 'registerVerifyExpir', configVal: '1800', public: 0, encry: 0 },
{ configKey: 'registerSuccessEmailTitle', configVal: 'NineTeam团队账号激活成功', public: 0, encry: 0 },
{ configKey: 'registerSuccessEmailTeamName', configVal: 'NineTeam团队', public: 0, encry: 0 },
{
configKey: 'registerSuccessEmaileAppend',
configVal: ',请妥善保管您的账号我们将为您赠送50次对话额度和5次绘画额度、祝您使用愉快',
public: 0,
encry: 0,
},
{ configKey: 'registerFailEmailTitle', configVal: 'NineTeam账号激活失败', public: 0, encry: 0 },
{ configKey: 'registerFailEmailTeamName', configVal: 'NineTeam团队', public: 0, encry: 0 },
{ configKey: 'registerSendStatus', configVal: '1', public: 1, encry: 0 },
{ configKey: 'registerSendModel3Count', configVal: '30', public: 1, encry: 0 },
{ configKey: 'registerSendModel4Count', configVal: '3', public: 1, encry: 0 },
{ configKey: 'registerSendDrawMjCount', configVal: '3', public: 1, encry: 0 },
{ configKey: 'firstRegisterSendStatus', configVal: '1', public: 1, encry: 0 },
{ configKey: 'firstRegisterSendRank', configVal: '500', public: 1, encry: 0 },
{ configKey: 'firstRregisterSendModel3Count', configVal: '20', public: 1, encry: 0 },
{ configKey: 'firstRregisterSendModel4Count', configVal: '2', public: 1, encry: 0 },
{ configKey: 'firstRregisterSendDrawMjCount', configVal: '3', public: 1, encry: 0 },
{ configKey: 'inviteSendStatus', configVal: '1', public: 1, encry: 0 },
{ configKey: 'inviteGiveSendModel3Count', configVal: '30', public: 1, encry: 0 },
{ configKey: 'inviteGiveSendModel4Count', configVal: '3', public: 1, encry: 0 },
{ configKey: 'inviteGiveSendDrawMjCount', configVal: '1', public: 1, encry: 0 },
{ configKey: 'invitedGuestSendModel3Count', configVal: '10', public: 1, encry: 0 },
{ configKey: 'invitedGuestSendModel4Count', configVal: '1', public: 1, encry: 0 },
{ configKey: 'invitedGuestSendDrawMjCount', configVal: '1', public: 1, encry: 0 },
{ configKey: 'isVerifyEmail', configVal: '1', public: 1, encry: 0 },
];
const res = await this.connection.query(`INSERT INTO config (configKey, configVal, public, encry) VALUES ${defaultConfig
.map((d) => `('${d.configKey}', '${d.configVal.replace(/'/g, "\\'")}', '${d.public}', '${d.encry}')`)
.join(', ')}`);
common_1.Logger.log(`初始化网站配置信息成功、如您需要修改网站配置信息,请前往管理系统系统配置设置 ==============> 请注意查阅`, 'DatabaseService');
}
catch (error) {
console.log('error: ', error);
throw new common_1.HttpException('创建默认网站配置失败!', common_1.HttpStatus.INTERNAL_SERVER_ERROR);
}
}
};
DatabaseService = __decorate([
(0, common_1.Injectable)(),
__metadata("design:paramtypes", [typeorm_1.Connection])
], DatabaseService);
exports.DatabaseService = DatabaseService;

23
dist/modules/database/initDatabase.js vendored Normal file
View File

@@ -0,0 +1,23 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.initDatabase = void 0;
const mysql = require("mysql2/promise");
const common_1 = require("@nestjs/common");
function initDatabase() {
mysql
.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
port: parseInt(process.env.DB_PORT),
})
.then(async (conn) => {
const [rows] = await conn.execute(`SHOW DATABASES LIKE '${process.env.DB_DATABASE}'`);
if (Array.isArray(rows) && rows.length === 0) {
await conn.execute(`CREATE DATABASE ${process.env.DB_DATABASE}`);
common_1.Logger.log(`数据库创建成功[${process.env.DB_DATABASE}]`);
}
await conn.end();
});
}
exports.initDatabase = initDatabase;

54
dist/modules/draw/draw.controller.js vendored Normal file
View File

@@ -0,0 +1,54 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DrawController = void 0;
const draw_service_1 = require("./draw.service");
const common_1 = require("@nestjs/common");
const swagger_1 = require("@nestjs/swagger");
const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard");
const chatDraw_dto_1 = require("./dto/chatDraw.dto");
let DrawController = class DrawController {
constructor(drawService) {
this.drawService = drawService;
}
getEngines() {
return this.drawService.getEngines();
}
textToImage(body) {
return this.drawService.drawTextToImage(body);
}
};
__decorate([
(0, common_1.Get)('engines'),
(0, swagger_1.ApiOperation)({ summary: '获取stable Diffusion 模型' }),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], DrawController.prototype, "getEngines", null);
__decorate([
(0, common_1.Post)('drawTextToImage'),
(0, swagger_1.ApiOperation)({ summary: 'stable Diffusion绘画' }),
(0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
__param(0, (0, common_1.Body)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [chatDraw_dto_1.StableDrawDto]),
__metadata("design:returntype", void 0)
], DrawController.prototype, "textToImage", null);
DrawController = __decorate([
(0, swagger_1.ApiTags)('draw'),
(0, common_1.Controller)('draw'),
__metadata("design:paramtypes", [draw_service_1.DrawService])
], DrawController);
exports.DrawController = DrawController;

21
dist/modules/draw/draw.module.js vendored Normal file
View File

@@ -0,0 +1,21 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DrawModule = void 0;
const common_1 = require("@nestjs/common");
const draw_controller_1 = require("./draw.controller");
const draw_service_1 = require("./draw.service");
let DrawModule = class DrawModule {
};
DrawModule = __decorate([
(0, common_1.Module)({
controllers: [draw_controller_1.DrawController],
providers: [draw_service_1.DrawService],
})
], DrawModule);
exports.DrawModule = DrawModule;

81
dist/modules/draw/draw.service.js vendored Normal file
View File

@@ -0,0 +1,81 @@
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DrawService = void 0;
const common_1 = require("@nestjs/common");
const axios_1 = require("axios");
const uuid = require("uuid");
const upload_service_1 = require("../upload/upload.service");
let DrawService = class DrawService {
constructor(uploadService) {
this.uploadService = uploadService;
}
async onModuleInit() {
var _a;
this.apiHost = (_a = process.env.API_HOST) !== null && _a !== void 0 ? _a : 'https://api.stability.ai';
this.apiKey = process.env.STABILITY_API_KEY;
if (!this.apiKey) {
this.apiKey = '*********';
}
this.Authorization = `Bearer ${this.apiKey}`;
}
async getEngines() {
var _a, _b;
const url = `${this.apiHost}/v1/engines/list`;
const res = await (0, axios_1.default)(url, {
method: 'GET',
headers: { Authorization: this.Authorization },
});
if (res.status === 401) {
console.log(`stability api key is invalid, ${(_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.message}`);
}
if (res.status !== 200) {
console.log(`${res.status} ${(_b = res === null || res === void 0 ? void 0 : res.data) === null || _b === void 0 ? void 0 : _b.message}}`);
throw new common_1.HttpException('获取列表失败', common_1.HttpStatus.BAD_REQUEST);
}
return res.data;
}
async drawTextToImage(body) {
const { engineId = 'stable-diffusion-768-v2-1' } = body;
const headers = {
'Content-Type': 'application/json',
Accept: 'application/json',
Authorization: this.Authorization,
};
const url = `${this.apiHost}/v1/generation/${engineId}/text-to-image`;
try {
const response = await axios_1.default.post(url, body, { headers });
if (response.status !== 200) {
throw new common_1.HttpException('绘制失败', common_1.HttpStatus.BAD_REQUEST);
}
const resImageBasetask = [];
for (const item of response.data.artifacts) {
const filename = uuid.v4().slice(0, 10) + '.png';
const buffer = Buffer.from(item.base64, 'base64');
resImageBasetask.push(this.uploadService.uploadFile({ filename, buffer }));
}
const urls = await Promise.all(resImageBasetask);
return urls;
}
catch (error) {
if (!(error === null || error === void 0 ? void 0 : error.response)) {
throw new common_1.HttpException('绘制失败', common_1.HttpStatus.BAD_REQUEST);
}
const { status, data } = error.response;
throw new common_1.HttpException(data.message, status);
}
}
};
DrawService = __decorate([
(0, common_1.Injectable)(),
__metadata("design:paramtypes", [upload_service_1.UploadService])
], DrawService);
exports.DrawService = DrawService;

Some files were not shown because too many files have changed in this diff Show More