m
This commit is contained in:
+20
@@ -0,0 +1,20 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { UserModel } from 'src/model/user.model';
|
||||
import { AuthService } from 'src/app/common/service/auth.service';
|
||||
import { CaptchaService } from 'src/app/common/service/captcha.service';
|
||||
import { UserLogService } from '../../common/service/user_log.service';
|
||||
export declare class ApiAuthService {
|
||||
private authService;
|
||||
private captchaService;
|
||||
private userModel;
|
||||
private userLogService;
|
||||
constructor(authService: AuthService, captchaService: CaptchaService, userModel: Repository<UserModel>, userLogService: UserLogService);
|
||||
login(phone: string, password: string, captchaKey?: string, captchaCode?: string): Promise<import("src/app/common/api").ApiResponseVo<null> | import("src/app/common/api").ApiResponseVo<{
|
||||
token: string;
|
||||
} | undefined>>;
|
||||
createToken(payload: Buffer | object): Promise<string>;
|
||||
register(phone: string, password: string, inviteCode: string, captchaKey: string, captchaCode: string): Promise<import("src/app/common/api").ApiResponseVo<null> | import("src/app/common/api").ApiResponseVo<{
|
||||
token: string;
|
||||
} | undefined>>;
|
||||
private importUserAndJoinGroup;
|
||||
}
|
||||
+178
@@ -0,0 +1,178 @@
|
||||
"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.ApiAuthService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const user_model_1 = require("../../../model/user.model");
|
||||
const auth_service_1 = require("../../common/service/auth.service");
|
||||
const app_env_1 = require("../../../app.env");
|
||||
const api_1 = require("../../common/api");
|
||||
const captcha_service_1 = require("../../common/service/captcha.service");
|
||||
const invite_code_pool_model_1 = require("../../../model/invite_code_pool.model");
|
||||
const wallet_model_1 = require("../../../model/wallet.model");
|
||||
const team_relation_model_1 = require("../../../model/team_relation.model");
|
||||
const user_sign_in_model_1 = require("../../../model/user_sign_in.model");
|
||||
const data_source_context_1 = require("../../common/context/data_source.context");
|
||||
const app_info_context_1 = require("../context/app_info.context");
|
||||
const im_help_1 = require("../../common/util/im_help");
|
||||
const user_log_service_1 = require("../../common/service/user_log.service");
|
||||
let ApiAuthService = class ApiAuthService {
|
||||
authService;
|
||||
captchaService;
|
||||
userModel;
|
||||
userLogService;
|
||||
constructor(authService, captchaService, userModel, userLogService) {
|
||||
this.authService = authService;
|
||||
this.captchaService = captchaService;
|
||||
this.userModel = userModel;
|
||||
this.userLogService = userLogService;
|
||||
}
|
||||
async login(phone, password, captchaKey, captchaCode) {
|
||||
if (captchaKey && captchaCode) {
|
||||
const isValid = await this.captchaService.validate(captchaKey, captchaCode);
|
||||
if (!isValid) {
|
||||
return api_1.Api.error('验证码错误', 400);
|
||||
}
|
||||
}
|
||||
const user = await this.userModel.findOne({
|
||||
where: { phone, password },
|
||||
});
|
||||
if (!user) {
|
||||
return api_1.Api.error('账号或密码错误');
|
||||
}
|
||||
await this.userModel.update({
|
||||
id: user.id,
|
||||
}, {
|
||||
device: app_info_context_1.AppInfoContext.getAppInfo().device,
|
||||
});
|
||||
await this.userLogService.logLogin(user.id);
|
||||
await this.userLogService.logStarted(user.id);
|
||||
const token = await this.createToken({ sub: user.id });
|
||||
return api_1.Api.success({ token });
|
||||
}
|
||||
async createToken(payload) {
|
||||
return await this.authService.create(payload, {
|
||||
secret: app_env_1.AppEnv.JWT_API_SECRET,
|
||||
});
|
||||
}
|
||||
async register(phone, password, inviteCode, captchaKey, captchaCode) {
|
||||
const isValid = await this.captchaService.validate(captchaKey, captchaCode);
|
||||
if (!isValid) {
|
||||
return api_1.Api.error('验证码错误', 400);
|
||||
}
|
||||
const ip = app_info_context_1.AppInfoContext.getAppInfo().ip;
|
||||
if (ip) {
|
||||
const ipCount = await this.userModel.count({
|
||||
where: { registerIp: ip },
|
||||
});
|
||||
if (ipCount >= 5) {
|
||||
return api_1.Api.error('该 IP 已注册满 5 个账号,无法继续注册');
|
||||
}
|
||||
}
|
||||
return data_source_context_1.DataSourceContext.startTransaction(async (transaction) => {
|
||||
const userRepo = transaction.getRepository(user_model_1.UserModel);
|
||||
const inviteCodeRepo = transaction.getRepository(invite_code_pool_model_1.InviteCodePoolModel);
|
||||
const walletRepo = transaction.getRepository(wallet_model_1.WalletModel);
|
||||
const teamRelationRepo = transaction.getRepository(team_relation_model_1.TeamRelationModel);
|
||||
const userSignInRepo = transaction.getRepository(user_sign_in_model_1.UserSignInModel);
|
||||
const existingUser = await userRepo.findOne({
|
||||
where: { phone },
|
||||
});
|
||||
if (existingUser) {
|
||||
return api_1.Api.error('手机号已被注册');
|
||||
}
|
||||
const sponsorUser = await userRepo.findOne({
|
||||
where: { inviteCode },
|
||||
});
|
||||
if (!sponsorUser) {
|
||||
return api_1.Api.error('邀请码无效');
|
||||
}
|
||||
const user = userRepo.create({
|
||||
nick: `${phone.slice(0, 3)}****${phone.slice(7)}`,
|
||||
phone,
|
||||
password,
|
||||
inviteCode,
|
||||
device: app_info_context_1.AppInfoContext.getAppInfo().device,
|
||||
registerIp: ip,
|
||||
});
|
||||
const newUser = await userRepo.save(user);
|
||||
const inviteCodeRecord = await inviteCodeRepo.findOneByOrFail({
|
||||
id: newUser.id,
|
||||
});
|
||||
await userRepo.update({ id: newUser.id }, { inviteCode: inviteCodeRecord.code });
|
||||
await walletRepo.insert({
|
||||
userId: newUser.id,
|
||||
});
|
||||
let sponsorTeamRelation = null;
|
||||
if (sponsorUser.id) {
|
||||
sponsorTeamRelation = await teamRelationRepo.findOne({
|
||||
where: { userId: sponsorUser.id },
|
||||
});
|
||||
}
|
||||
const teamRelation = teamRelationRepo.create({
|
||||
userId: newUser.id,
|
||||
parentId: sponsorUser.id,
|
||||
grandparentId: sponsorTeamRelation?.parentId || 0,
|
||||
greatGrandparentId: sponsorTeamRelation?.grandparentId ?? 0,
|
||||
path: sponsorTeamRelation
|
||||
? `${sponsorTeamRelation.path}/${newUser.id}`
|
||||
: `${newUser.id}`,
|
||||
level: (sponsorTeamRelation?.level ?? 0) + 1,
|
||||
});
|
||||
await teamRelationRepo.save(teamRelation);
|
||||
const userSignIn = userSignInRepo.create({
|
||||
userId: newUser.id,
|
||||
consecutiveDays: 0,
|
||||
makeUpCount: 2,
|
||||
});
|
||||
await userSignInRepo.save(userSignIn);
|
||||
await this.userLogService.logRegister(newUser.id);
|
||||
await this.userLogService.logStarted(newUser.id);
|
||||
await this.importUserAndJoinGroup(newUser);
|
||||
const token = await this.createToken({ sub: newUser.id });
|
||||
return api_1.Api.success({ token });
|
||||
});
|
||||
}
|
||||
async importUserAndJoinGroup(user) {
|
||||
const imUid = app_env_1.AppEnv.IM_USER_ID_PREFIX + user.id;
|
||||
const arr = [
|
||||
{
|
||||
UserID: imUid,
|
||||
Nick: user.nick,
|
||||
FaceUrl: user.avatar,
|
||||
},
|
||||
];
|
||||
await im_help_1.IMHelp.multiaccountImportUser(arr);
|
||||
await im_help_1.IMHelp.importGroupMember({
|
||||
GroupId: app_env_1.AppEnv.IM_DEFAULT_GROUP_ID,
|
||||
MemberList: [
|
||||
{
|
||||
Member_Account: imUid,
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
};
|
||||
exports.ApiAuthService = ApiAuthService;
|
||||
exports.ApiAuthService = ApiAuthService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(2, (0, typeorm_1.InjectRepository)(user_model_1.UserModel)),
|
||||
__metadata("design:paramtypes", [auth_service_1.AuthService,
|
||||
captcha_service_1.CaptchaService,
|
||||
typeorm_2.Repository,
|
||||
user_log_service_1.UserLogService])
|
||||
], ApiAuthService);
|
||||
//# sourceMappingURL=api-auth.service.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { AppVersionModel, SystemType } from 'src/model/app_version.model';
|
||||
import { Api } from 'src/app/common/api';
|
||||
export declare class AppVersionService {
|
||||
private appVersionModel;
|
||||
constructor(appVersionModel: Repository<AppVersionModel>);
|
||||
checkUpdate(currentVersion: string, systemType: SystemType): Promise<Api>;
|
||||
private compareVersion;
|
||||
}
|
||||
+64
@@ -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);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.AppVersionService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const app_version_model_1 = require("../../../model/app_version.model");
|
||||
const api_1 = require("../../common/api");
|
||||
let AppVersionService = class AppVersionService {
|
||||
appVersionModel;
|
||||
constructor(appVersionModel) {
|
||||
this.appVersionModel = appVersionModel;
|
||||
}
|
||||
async checkUpdate(currentVersion, systemType) {
|
||||
const latestVersion = await this.appVersionModel.findOne({
|
||||
where: { systemType },
|
||||
order: { id: 'DESC' },
|
||||
});
|
||||
if (!latestVersion) {
|
||||
return api_1.Api.success({
|
||||
hasUpdate: false,
|
||||
});
|
||||
}
|
||||
const needsUpdate = this.compareVersion(currentVersion, latestVersion.latestVersion) < 0;
|
||||
return api_1.Api.success({
|
||||
hasUpdate: needsUpdate,
|
||||
latestVersion: needsUpdate ? latestVersion.latestVersion : undefined,
|
||||
title: needsUpdate ? latestVersion.title : undefined,
|
||||
downloadUrl: needsUpdate ? latestVersion.downloadUrl : undefined,
|
||||
});
|
||||
}
|
||||
compareVersion(v1, v2) {
|
||||
const parts1 = v1.split('.').map((p) => parseInt(p, 10));
|
||||
const parts2 = v2.split('.').map((p) => parseInt(p, 10));
|
||||
const len = Math.max(parts1.length, parts2.length);
|
||||
for (let i = 0; i < len; i++) {
|
||||
const n1 = parts1[i] || 0;
|
||||
const n2 = parts2[i] || 0;
|
||||
if (n1 !== n2) {
|
||||
return n1 - n2;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
exports.AppVersionService = AppVersionService;
|
||||
exports.AppVersionService = AppVersionService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(app_version_model_1.AppVersionModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository])
|
||||
], AppVersionService);
|
||||
//# sourceMappingURL=app_version.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"app_version.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/app_version.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,wEAA0E;AAC1E,0CAAyC;AAIlC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAGlB;IAFV,YAEU,eAA4C;QAA5C,oBAAe,GAAf,eAAe,CAA6B;IACnD,CAAC;IAKJ,KAAK,CAAC,WAAW,CACf,cAAsB,EACtB,UAAsB;QAGtB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YACvD,KAAK,EAAE,EAAE,UAAU,EAAE;YACrB,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,SAAG,CAAC,OAAO,CAAC;gBACjB,SAAS,EAAE,KAAK;aACA,CAAC,CAAC;QACtB,CAAC;QAGD,MAAM,WAAW,GACf,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAEvE,OAAO,SAAG,CAAC,OAAO,CAAC;YACjB,SAAS,EAAE,WAAW;YACtB,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;YACpE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACpD,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;SAChD,CAAC,CAAC;IACtB,CAAC;IAKO,cAAc,CAAC,EAAU,EAAE,EAAU;QAC3C,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACd,OAAO,EAAE,GAAG,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF,CAAA;AAtDY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,mCAAe,CAAC,CAAA;qCACT,oBAAU;GAH1B,iBAAiB,CAsD7B"}
|
||||
@@ -0,0 +1,7 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { DailyMeetingStatsModel } from 'src/model/daily_meeting_stats.model';
|
||||
export declare class DailyMeetingStatsService {
|
||||
private dailyMeetingStatsModel;
|
||||
constructor(dailyMeetingStatsModel: Repository<DailyMeetingStatsModel>);
|
||||
recordMeeting(): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
}
|
||||
@@ -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);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.DailyMeetingStatsService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const daily_meeting_stats_model_1 = require("../../../model/daily_meeting_stats.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const help_1 = require("../../common/util/help");
|
||||
const app_info_context_1 = require("../context/app_info.context");
|
||||
let DailyMeetingStatsService = class DailyMeetingStatsService {
|
||||
dailyMeetingStatsModel;
|
||||
constructor(dailyMeetingStatsModel) {
|
||||
this.dailyMeetingStatsModel = dailyMeetingStatsModel;
|
||||
}
|
||||
async recordMeeting() {
|
||||
const device = app_info_context_1.AppInfoContext.getAppInfo().device;
|
||||
const today = help_1.Help.formatDate(Date.now(), 'YYYY-MM-DD');
|
||||
const existing = await this.dailyMeetingStatsModel.findOne({
|
||||
where: { device, date: today },
|
||||
});
|
||||
if (existing) {
|
||||
return api_1.Api.success();
|
||||
}
|
||||
try {
|
||||
const record = this.dailyMeetingStatsModel.create({
|
||||
device,
|
||||
date: today,
|
||||
});
|
||||
await this.dailyMeetingStatsModel.save(record);
|
||||
}
|
||||
catch {
|
||||
}
|
||||
return api_1.Api.success();
|
||||
}
|
||||
};
|
||||
exports.DailyMeetingStatsService = DailyMeetingStatsService;
|
||||
exports.DailyMeetingStatsService = DailyMeetingStatsService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(daily_meeting_stats_model_1.DailyMeetingStatsModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository])
|
||||
], DailyMeetingStatsService);
|
||||
//# sourceMappingURL=daily_meeting_stats.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"daily_meeting_stats.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/daily_meeting_stats.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,wFAA6E;AAC7E,0CAAyC;AACzC,iDAAgD;AAChD,kEAA6D;AAGtD,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAGzB;IAFV,YAEU,sBAA0D;QAA1D,2BAAsB,GAAtB,sBAAsB,CAAoC;IACjE,CAAC;IAEJ,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAG,iCAAc,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC;QAClD,MAAM,KAAK,GAAG,WAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,YAAY,CAAC,CAAC;QAExD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;YACzD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;SAC/B,CAAC,CAAC;QAEH,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,SAAG,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;gBAChD,MAAM;gBACN,IAAI,EAAE,KAAK;aACZ,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;QAED,OAAO,SAAG,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AA7BY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,kDAAsB,CAAC,CAAA;qCACT,oBAAU;GAHjC,wBAAwB,CA6BpC"}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { DocumentModel } from 'src/model/document.model';
|
||||
export declare class DocumentService {
|
||||
private documentModel;
|
||||
constructor(documentModel: Repository<DocumentModel>);
|
||||
getDocument(type: number): Promise<import("src/app/common/api").ApiResponseVo<DocumentModel | null | undefined>>;
|
||||
}
|
||||
+40
@@ -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);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.DocumentService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const document_model_1 = require("../../../model/document.model");
|
||||
const api_1 = require("../../common/api");
|
||||
let DocumentService = class DocumentService {
|
||||
documentModel;
|
||||
constructor(documentModel) {
|
||||
this.documentModel = documentModel;
|
||||
}
|
||||
async getDocument(type) {
|
||||
const doc = await this.documentModel.findOne({
|
||||
where: { type },
|
||||
order: { createTime: 'DESC' },
|
||||
});
|
||||
return api_1.Api.success(doc);
|
||||
}
|
||||
};
|
||||
exports.DocumentService = DocumentService;
|
||||
exports.DocumentService = DocumentService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(document_model_1.DocumentModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository])
|
||||
], DocumentService);
|
||||
//# sourceMappingURL=document.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"document.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/document.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,kEAAyD;AACzD,0CAAyC;AAGlC,IAAM,eAAe,GAArB,MAAM,eAAe;IAGhB;IAFV,YAEU,aAAwC;QAAxC,kBAAa,GAAb,aAAa,CAA2B;IAC/C,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YAC3C,KAAK,EAAE,EAAE,IAAI,EAAE;YACf,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;SAC9B,CAAC,CAAC;QACH,OAAO,SAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF,CAAA;AAbY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,8BAAa,CAAC,CAAA;qCACT,oBAAU;GAHxB,eAAe,CAa3B"}
|
||||
@@ -0,0 +1,9 @@
|
||||
import { JobHuntingModel } from 'src/model/job_hunting.model';
|
||||
import { Repository } from 'typeorm';
|
||||
import { JobHuntingApplyDto, JobHuntingInfoDto } from '../dto/job_hunting.dto';
|
||||
export declare class JobHuntingService {
|
||||
private jobHuntingModel;
|
||||
constructor(jobHuntingModel: Repository<JobHuntingModel>);
|
||||
info(dto: JobHuntingInfoDto): Promise<import("src/app/common/api").ApiResponseVo<JobHuntingModel | null | undefined>>;
|
||||
apply(dto: JobHuntingApplyDto): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
}
|
||||
+64
@@ -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);
|
||||
};
|
||||
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
||||
return function (target, key) { decorator(target, key, paramIndex); }
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.JobHuntingService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const job_hunting_model_1 = require("../../../model/job_hunting.model");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const user_id_context_1 = require("../../common/context/user_id.context");
|
||||
const api_1 = require("../../common/api");
|
||||
let JobHuntingService = class JobHuntingService {
|
||||
jobHuntingModel;
|
||||
constructor(jobHuntingModel) {
|
||||
this.jobHuntingModel = jobHuntingModel;
|
||||
}
|
||||
async info(dto) {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
const info = await this.jobHuntingModel.findOneBy({
|
||||
userId,
|
||||
type: dto.type,
|
||||
});
|
||||
return api_1.Api.success(info);
|
||||
}
|
||||
async apply(dto) {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
const existingRecord = await this.jobHuntingModel.findOneBy({
|
||||
userId,
|
||||
type: dto.type,
|
||||
});
|
||||
if (existingRecord && existingRecord.status === job_hunting_model_1.JobHuntingStatus.Approved) {
|
||||
return api_1.Api.error('已审核通过,无法重复提交');
|
||||
}
|
||||
if (existingRecord) {
|
||||
await this.jobHuntingModel.update({ id: existingRecord.id }, dto);
|
||||
}
|
||||
else {
|
||||
const verifyRecord = this.jobHuntingModel.create({
|
||||
...dto,
|
||||
status: job_hunting_model_1.JobHuntingStatus.Pending,
|
||||
userId,
|
||||
});
|
||||
await this.jobHuntingModel.save(verifyRecord);
|
||||
}
|
||||
return api_1.Api.success();
|
||||
}
|
||||
};
|
||||
exports.JobHuntingService = JobHuntingService;
|
||||
exports.JobHuntingService = JobHuntingService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(job_hunting_model_1.JobHuntingModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository])
|
||||
], JobHuntingService);
|
||||
//# sourceMappingURL=job_hunting.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"job_hunting.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/job_hunting.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,wEAAgF;AAChF,qCAAqC;AAErC,0EAA0E;AAC1E,0CAAyC;AAGlC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAGlB;IAFV,YAEU,eAA4C;QAA5C,oBAAe,GAAf,eAAe,CAA6B;IACnD,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,GAAsB;QAC/B,MAAM,MAAM,GAAG,IAAA,kCAAgB,GAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;YAChD,MAAM;YACN,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC,CAAC;QACH,OAAO,SAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAuB;QACjC,MAAM,MAAM,GAAG,IAAA,kCAAgB,GAAE,CAAC;QAClC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;YAC1D,MAAM;YACN,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC,CAAC;QAGH,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,oCAAgB,CAAC,QAAQ,EAAE,CAAC;YAC1E,OAAO,SAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YAEnB,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YAEN,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;gBAC/C,GAAG,GAAG;gBACN,MAAM,EAAE,oCAAgB,CAAC,OAAO;gBAChC,MAAM;aACP,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,SAAG,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AA1CY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,mCAAe,CAAC,CAAA;qCACT,oBAAU;GAH1B,iBAAiB,CA0C7B"}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { NewsModel } from 'src/model/news.model';
|
||||
import { NewsListDto } from '../dto/news.dto';
|
||||
export declare class NewsService {
|
||||
private newsModel;
|
||||
constructor(newsModel: Repository<NewsModel>);
|
||||
getNewsList(dto: NewsListDto): Promise<import("src/app/common/api").ApiResponseVo<import("src/app/common/api").PaginatedVo<NewsModel[]>>>;
|
||||
readNews(id: number): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
}
|
||||
Vendored
+69
@@ -0,0 +1,69 @@
|
||||
"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.NewsService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const news_model_1 = require("../../../model/news.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const repository_help_1 = require("../../common/util/repository_help");
|
||||
let NewsService = class NewsService {
|
||||
newsModel;
|
||||
constructor(newsModel) {
|
||||
this.newsModel = newsModel;
|
||||
}
|
||||
async getNewsList(dto) {
|
||||
const where = {};
|
||||
if (dto.isRecommended !== undefined) {
|
||||
where.isRecommended = dto.isRecommended;
|
||||
}
|
||||
if (dto.categoryId !== undefined) {
|
||||
where.categoryId = dto.categoryId;
|
||||
}
|
||||
if (dto.type !== undefined) {
|
||||
where.type = dto.type;
|
||||
}
|
||||
if (dto.isHeadline !== undefined) {
|
||||
where.isHeadline = dto.isHeadline;
|
||||
}
|
||||
const total = await this.newsModel.count({ where });
|
||||
const newsList = await repository_help_1.RepositoryHelp.finePaginatedData(this.newsModel, dto, {
|
||||
where,
|
||||
order: { publishTime: 'DESC' },
|
||||
});
|
||||
const imageTextList = newsList.filter((n) => n.type === news_model_1.NewsType.ImageText);
|
||||
const videoList = newsList.filter((n) => n.type === news_model_1.NewsType.Video);
|
||||
const mixedList = [];
|
||||
const maxLen = Math.max(imageTextList.length, videoList.length);
|
||||
for (let i = 0; i < maxLen; i++) {
|
||||
if (imageTextList[i])
|
||||
mixedList.push(imageTextList[i]);
|
||||
if (videoList[i])
|
||||
mixedList.push(videoList[i]);
|
||||
}
|
||||
return api_1.Api.pagination(mixedList, total);
|
||||
}
|
||||
async readNews(id) {
|
||||
await this.newsModel.increment({ id }, 'readCount', 1);
|
||||
return api_1.Api.success();
|
||||
}
|
||||
};
|
||||
exports.NewsService = NewsService;
|
||||
exports.NewsService = NewsService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(news_model_1.NewsModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository])
|
||||
], NewsService);
|
||||
//# sourceMappingURL=news.service.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"news.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/news.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAuD;AACvD,0DAA2D;AAC3D,0CAAyC;AACzC,uEAAqE;AAI9D,IAAM,WAAW,GAAjB,MAAM,WAAW;IAGZ;IAFV,YAEU,SAAgC;QAAhC,cAAS,GAAT,SAAS,CAAuB;IACvC,CAAC;IAKJ,KAAK,CAAC,WAAW,CAAC,GAAgB;QAChC,MAAM,KAAK,GAAgC,EAAE,CAAC;QAG9C,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;QAC1C,CAAC;QAGD,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACjC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QACpC,CAAC;QAGD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACxB,CAAC;QAGD,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACjC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QACpC,CAAC;QAGD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAGpD,MAAM,QAAQ,GAAG,MAAM,gCAAc,CAAC,iBAAiB,CACrD,IAAI,CAAC,SAAS,EACd,GAAG,EACH;YACE,KAAK;YACL,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;SAC/B,CACF,CAAC;QAGF,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAQ,CAAC,SAAS,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAQ,CAAC,KAAK,CAAC,CAAC;QAEpE,MAAM,SAAS,GAAgB,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,IAAI,aAAa,CAAC,CAAC,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,SAAS,CAAC,CAAC,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,SAAG,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAKD,KAAK,CAAC,QAAQ,CAAC,EAAU;QAEvB,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAEvD,OAAO,SAAG,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AArEY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,sBAAS,CAAC,CAAA;qCACT,oBAAU;GAHpB,WAAW,CAqEvB"}
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { RechargeModel } from 'src/model/recharge.model';
|
||||
export declare class RechargeService {
|
||||
private rechargeModel;
|
||||
constructor(rechargeModel: Repository<RechargeModel>);
|
||||
applyRecharge(amount: string): Promise<import("src/app/common/api").ApiResponseVo<null> | import("src/app/common/api").ApiResponseVo<RechargeModel | undefined>>;
|
||||
cancelOrder(orderId: number): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
}
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
"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.RechargeService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const recharge_model_1 = require("../../../model/recharge.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const user_id_context_1 = require("../../common/context/user_id.context");
|
||||
const order_no_generator_1 = require("../../common/util/order_no_generator");
|
||||
let RechargeService = class RechargeService {
|
||||
rechargeModel;
|
||||
constructor(rechargeModel) {
|
||||
this.rechargeModel = rechargeModel;
|
||||
}
|
||||
async applyRecharge(amount) {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
const amountNum = parseFloat(amount);
|
||||
if (isNaN(amountNum) || amountNum <= 0) {
|
||||
return api_1.Api.error('无效的充值金额');
|
||||
}
|
||||
const pendingOrder = await this.rechargeModel.findOne({
|
||||
where: {
|
||||
userId,
|
||||
status: recharge_model_1.RechargeStatus.Pending,
|
||||
},
|
||||
});
|
||||
if (pendingOrder) {
|
||||
return api_1.Api.error('您有一笔未支付的订单,请先完成支付或取消后再创建新订单');
|
||||
}
|
||||
const innerOrderNo = order_no_generator_1.OrderNoGenerator.generateWithPrefix('RC');
|
||||
const recharge = this.rechargeModel.create({
|
||||
userId,
|
||||
amount,
|
||||
actualAmount: amount,
|
||||
innerOrderNo,
|
||||
status: recharge_model_1.RechargeStatus.Pending,
|
||||
});
|
||||
await this.rechargeModel.save(recharge);
|
||||
return api_1.Api.success(recharge);
|
||||
}
|
||||
async cancelOrder(orderId) {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
const order = await this.rechargeModel.findOne({
|
||||
where: { id: orderId, userId },
|
||||
});
|
||||
if (!order) {
|
||||
return api_1.Api.error('订单不存在');
|
||||
}
|
||||
if (order.status !== recharge_model_1.RechargeStatus.Pending) {
|
||||
return api_1.Api.error('只有待支付订单才能取消');
|
||||
}
|
||||
await this.rechargeModel.update({ id: orderId }, { status: recharge_model_1.RechargeStatus.Closed });
|
||||
return api_1.Api.success();
|
||||
}
|
||||
};
|
||||
exports.RechargeService = RechargeService;
|
||||
exports.RechargeService = RechargeService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(recharge_model_1.RechargeModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository])
|
||||
], RechargeService);
|
||||
//# sourceMappingURL=recharge.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"recharge.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/recharge.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,kEAAyE;AACzE,0CAAyC;AACzC,0EAA0E;AAC1E,6EAA0E;AAGnE,IAAM,eAAe,GAArB,MAAM,eAAe;IAGhB;IAFV,YAEU,aAAwC;QAAxC,kBAAa,GAAb,aAAa,CAA2B;IAC/C,CAAC;IAKJ,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,MAAM,MAAM,GAAG,IAAA,kCAAgB,GAAE,CAAC;QAClC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAGrC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,SAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QAGD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACpD,KAAK,EAAE;gBACL,MAAM;gBACN,MAAM,EAAE,+BAAc,CAAC,OAAO;aAC/B;SACF,CAAC,CAAC;QAEH,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,SAAG,CAAC,KAAK,CACd,6BAA6B,CAC9B,CAAC;QACJ,CAAC;QAGD,MAAM,YAAY,GAAG,qCAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAG/D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YACzC,MAAM;YACN,MAAM;YACN,YAAY,EAAE,MAAM;YACpB,YAAY;YACZ,MAAM,EAAE,+BAAc,CAAC,OAAO;SAC/B,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExC,OAAO,SAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAKD,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,MAAM,MAAM,GAAG,IAAA,kCAAgB,GAAE,CAAC;QAGlC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YAC7C,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAGD,IAAI,KAAK,CAAC,MAAM,KAAK,+BAAc,CAAC,OAAO,EAAE,CAAC;YAC5C,OAAO,SAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClC,CAAC;QAGD,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAC7B,EAAE,EAAE,EAAE,OAAO,EAAE,EACf,EAAE,MAAM,EAAE,+BAAc,CAAC,MAAM,EAAE,CAClC,CAAC;QAEF,OAAO,SAAG,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AA5EY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,8BAAa,CAAC,CAAA;qCACT,oBAAU;GAHxB,eAAe,CA4E3B"}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
import { DataSource, Repository } from 'typeorm';
|
||||
import { UserSignInModel } from 'src/model/user_sign_in.model';
|
||||
import { UserSignInCalendarModel } from 'src/model/user_sign_in_calendar.model';
|
||||
import { UserSignInTaskModel } from 'src/model/user_sign_in_task.model';
|
||||
import { UserSignInTaskRewardModel } from 'src/model/user_sign_in_task_reward.model';
|
||||
import { UserFinancialProductModel } from 'src/model/user_financial_product.model';
|
||||
import { SignInProgressDayVo, TaskStatus } from '../vo/signin.vo';
|
||||
export declare class SignInService {
|
||||
private userSignInModel;
|
||||
private userSignInCalendarModel;
|
||||
private userSignInTaskModel;
|
||||
private userSignInTaskRewardModel;
|
||||
private userFinancialProductModel;
|
||||
private dataSource;
|
||||
constructor(userSignInModel: Repository<UserSignInModel>, userSignInCalendarModel: Repository<UserSignInCalendarModel>, userSignInTaskModel: Repository<UserSignInTaskModel>, userSignInTaskRewardModel: Repository<UserSignInTaskRewardModel>, userFinancialProductModel: Repository<UserFinancialProductModel>, dataSource: DataSource);
|
||||
getSignInInfo(userId: number): Promise<import("src/app/common/api").ApiResponseVo<{
|
||||
signToDay: boolean;
|
||||
userId?: number | undefined;
|
||||
firstSignInDate?: string;
|
||||
lastSignInDate?: string;
|
||||
consecutiveDays?: number | undefined;
|
||||
makeUpCount?: number | undefined;
|
||||
usedMakeUpCount?: number | undefined;
|
||||
maxMakeUpCount?: number | undefined;
|
||||
user?: import("../../../model/user.model").UserModel;
|
||||
id?: number | undefined;
|
||||
createTime?: string | undefined;
|
||||
updateTime?: string | undefined;
|
||||
deleteTime?: string;
|
||||
} | undefined>>;
|
||||
getSignInCalendar(userId: number, year: number, month: number): Promise<import("src/app/common/api").ApiResponseVo<import("src/app/common/api").PaginatedVo<UserSignInCalendarModel[]>>>;
|
||||
getProgress(): Promise<import("src/app/common/api").ApiResponseVo<import("src/app/common/api").PaginatedVo<SignInProgressDayVo[]>>>;
|
||||
getTaskList(userId: number): Promise<import("src/app/common/api").ApiResponseVo<never[] | undefined> | import("src/app/common/api").ApiResponseVo<import("src/app/common/api").PaginatedVo<({
|
||||
id: number;
|
||||
title: string;
|
||||
subtitle: string;
|
||||
requiredDays: number;
|
||||
icon: string;
|
||||
status: TaskStatus;
|
||||
rewardId: number;
|
||||
} | {
|
||||
id: number;
|
||||
title: string;
|
||||
subtitle: string;
|
||||
requiredDays: number;
|
||||
icon: string;
|
||||
status: TaskStatus;
|
||||
rewardId: undefined;
|
||||
})[]>>>;
|
||||
todaySignIn(userId: number): Promise<import("src/app/common/api").ApiResponseVo<null>>;
|
||||
makeUpSignIn(userId: number, date: string): Promise<import("src/app/common/api").ApiResponseVo<null>>;
|
||||
private calcConsecutiveDays;
|
||||
claimReward(userId: number, rewardId: number): Promise<import("src/app/common/api").ApiResponseVo<null>>;
|
||||
}
|
||||
+354
@@ -0,0 +1,354 @@
|
||||
"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.SignInService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const user_sign_in_model_1 = require("../../../model/user_sign_in.model");
|
||||
const user_sign_in_calendar_model_1 = require("../../../model/user_sign_in_calendar.model");
|
||||
const user_sign_in_task_model_1 = require("../../../model/user_sign_in_task.model");
|
||||
const user_sign_in_task_reward_model_1 = require("../../../model/user_sign_in_task_reward.model");
|
||||
const user_financial_product_model_1 = require("../../../model/user_financial_product.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const signin_vo_1 = require("../vo/signin.vo");
|
||||
const user_id_context_1 = require("../../common/context/user_id.context");
|
||||
const data_source_context_1 = require("../../common/context/data_source.context");
|
||||
const help_1 = require("../../common/util/help");
|
||||
const financial_product_model_1 = require("../../../model/financial_product.model");
|
||||
let SignInService = class SignInService {
|
||||
userSignInModel;
|
||||
userSignInCalendarModel;
|
||||
userSignInTaskModel;
|
||||
userSignInTaskRewardModel;
|
||||
userFinancialProductModel;
|
||||
dataSource;
|
||||
constructor(userSignInModel, userSignInCalendarModel, userSignInTaskModel, userSignInTaskRewardModel, userFinancialProductModel, dataSource) {
|
||||
this.userSignInModel = userSignInModel;
|
||||
this.userSignInCalendarModel = userSignInCalendarModel;
|
||||
this.userSignInTaskModel = userSignInTaskModel;
|
||||
this.userSignInTaskRewardModel = userSignInTaskRewardModel;
|
||||
this.userFinancialProductModel = userFinancialProductModel;
|
||||
this.dataSource = dataSource;
|
||||
}
|
||||
async getSignInInfo(userId) {
|
||||
const signInStats = await this.userSignInModel.findOne({
|
||||
where: { userId },
|
||||
});
|
||||
const nowYYYMMDD = help_1.Help.formatDate(Date.now(), 'YYYY-MM-DD');
|
||||
return api_1.Api.success({
|
||||
...signInStats,
|
||||
signToDay: nowYYYMMDD == signInStats?.lastSignInDate,
|
||||
});
|
||||
}
|
||||
async getSignInCalendar(userId, year, month) {
|
||||
const firstDay = `${year}-${String(month).padStart(2, '0')}-01`;
|
||||
const lastDay = new Date(year, month, 0).toISOString().split('T')[0];
|
||||
const signInRecords = await this.userSignInCalendarModel.find({
|
||||
where: {
|
||||
userId,
|
||||
signInDate: (0, typeorm_2.Between)(firstDay, lastDay),
|
||||
},
|
||||
order: { signInDate: 'ASC' },
|
||||
});
|
||||
return api_1.Api.pagination(signInRecords, signInRecords.length);
|
||||
}
|
||||
async getProgress() {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
const userSignIn = await this.userSignInModel.findOneByOrFail({
|
||||
userId,
|
||||
});
|
||||
const existFirst = userSignIn.firstSignInDate != null;
|
||||
const nowDate = new Date();
|
||||
const nowYYYMMDD = help_1.Help.formatDate(nowDate, 'YYYY-MM-DD');
|
||||
const startDate = new Date();
|
||||
startDate.setDate(startDate.getDate() - (existFirst ? 3 : 0));
|
||||
let startYYYMMDD = help_1.Help.formatDate(startDate, 'YYYY-MM-DD');
|
||||
const firstSignDate = userSignIn.firstSignInDate || nowYYYMMDD;
|
||||
if (firstSignDate > startYYYMMDD) {
|
||||
startYYYMMDD = firstSignDate;
|
||||
}
|
||||
const signInCalendars = await this.userSignInCalendarModel.find({
|
||||
where: {
|
||||
userId,
|
||||
signInDate: (0, typeorm_2.Between)(startYYYMMDD, nowYYYMMDD),
|
||||
},
|
||||
});
|
||||
const signedDates = new Map();
|
||||
signInCalendars.forEach((it) => {
|
||||
signedDates.set(it.signInDate, it);
|
||||
});
|
||||
const dates = [];
|
||||
const current = new Date(startYYYMMDD);
|
||||
const endDate = new Date(startYYYMMDD);
|
||||
endDate.setDate(endDate.getDate() + 6);
|
||||
while (current <= endDate) {
|
||||
const dateStr = help_1.Help.formatDate(current, 'YYYY-MM-DD');
|
||||
dates.push(dateStr);
|
||||
current.setDate(current.getDate() + 1);
|
||||
}
|
||||
return api_1.Api.pagination(dates.map((date) => {
|
||||
const vo = new signin_vo_1.SignInProgressDayVo();
|
||||
vo.date = date;
|
||||
vo.isFutureDay = date > nowYYYMMDD;
|
||||
vo.signedIn = signedDates.has(date);
|
||||
vo.isMakeUp = signedDates.get(date)?.isMakeUp || user_sign_in_calendar_model_1.SignInType.Normal;
|
||||
vo.isDay = date == nowYYYMMDD;
|
||||
vo.consecutiveDay = help_1.Help.diffDays(date, firstSignDate) + 1;
|
||||
return vo;
|
||||
}), 0);
|
||||
}
|
||||
async getTaskList(userId) {
|
||||
const tasks = await this.userSignInTaskModel.find({
|
||||
order: { requiredDays: 'ASC' },
|
||||
});
|
||||
if (tasks.length === 0) {
|
||||
return api_1.Api.success([]);
|
||||
}
|
||||
const taskIds = tasks.map((t) => t.id);
|
||||
const rewards = await this.userSignInTaskRewardModel.find({
|
||||
where: {
|
||||
userId,
|
||||
userSignInTaskId: (0, typeorm_2.In)(taskIds),
|
||||
},
|
||||
});
|
||||
const rewardMap = new Map();
|
||||
for (const reward of rewards) {
|
||||
rewardMap.set(reward.userSignInTaskId, reward);
|
||||
}
|
||||
const taskList = tasks.map((task) => {
|
||||
const reward = rewardMap.get(task.id);
|
||||
if (reward) {
|
||||
const status = reward.claimStatus === user_sign_in_task_reward_model_1.ClaimStatus.Claimed
|
||||
? signin_vo_1.TaskStatus.Completed
|
||||
: signin_vo_1.TaskStatus.Pending;
|
||||
return {
|
||||
id: task.id,
|
||||
title: task.title,
|
||||
subtitle: task.subtitle,
|
||||
requiredDays: task.requiredDays,
|
||||
icon: task.icon,
|
||||
status,
|
||||
rewardId: reward.id,
|
||||
};
|
||||
}
|
||||
return {
|
||||
id: task.id,
|
||||
title: task.title,
|
||||
subtitle: task.subtitle,
|
||||
requiredDays: task.requiredDays,
|
||||
icon: task.icon,
|
||||
status: signin_vo_1.TaskStatus.InProgress,
|
||||
rewardId: undefined,
|
||||
};
|
||||
});
|
||||
return api_1.Api.pagination(taskList, taskList.length);
|
||||
}
|
||||
async todaySignIn(userId) {
|
||||
const nowYYYMMDD = help_1.Help.formatDate(Date.now(), 'YYYY-MM-DD');
|
||||
const signInStats = await this.userSignInModel.findOneOrFail({
|
||||
where: { userId },
|
||||
});
|
||||
if (signInStats && signInStats.lastSignInDate === nowYYYMMDD) {
|
||||
return api_1.Api.error('今日已签到');
|
||||
}
|
||||
const yesterday = help_1.Help.formatDate(new Date(Date.now() - 86400000), 'YYYY-MM-DD');
|
||||
let consecutiveDays = 1;
|
||||
if (signInStats && signInStats.lastSignInDate === yesterday) {
|
||||
consecutiveDays = signInStats.consecutiveDays + 1;
|
||||
}
|
||||
else {
|
||||
consecutiveDays = 1;
|
||||
}
|
||||
await data_source_context_1.DataSourceContext.startTransaction(async (tx) => {
|
||||
const signInRepo = tx.getRepository(user_sign_in_model_1.UserSignInModel);
|
||||
const calendarRepo = tx.getRepository(user_sign_in_calendar_model_1.UserSignInCalendarModel);
|
||||
const taskRepo = tx.getRepository(user_sign_in_task_model_1.UserSignInTaskModel);
|
||||
const rewardRepo = tx.getRepository(user_sign_in_task_reward_model_1.UserSignInTaskRewardModel);
|
||||
await signInRepo.update({ userId }, {
|
||||
lastSignInDate: nowYYYMMDD,
|
||||
consecutiveDays,
|
||||
});
|
||||
const calendarRecord = calendarRepo.create({
|
||||
userId,
|
||||
signInDate: nowYYYMMDD,
|
||||
isMakeUp: user_sign_in_calendar_model_1.SignInType.Normal,
|
||||
});
|
||||
await calendarRepo.save(calendarRecord);
|
||||
const tasks = await taskRepo.find({
|
||||
order: { requiredDays: 'ASC' },
|
||||
});
|
||||
for (const task of tasks) {
|
||||
if (consecutiveDays >= task.requiredDays) {
|
||||
const existingReward = await rewardRepo.findOne({
|
||||
where: {
|
||||
userId,
|
||||
userSignInTaskId: task.id,
|
||||
},
|
||||
});
|
||||
if (!existingReward) {
|
||||
const reward = rewardRepo.create({
|
||||
userId,
|
||||
userSignInTaskId: task.id,
|
||||
title: task.title,
|
||||
subtitle: task.subtitle,
|
||||
requiredDays: task.requiredDays,
|
||||
icon: task.icon,
|
||||
financialProductId: task.financialProductId,
|
||||
claimStatus: user_sign_in_task_reward_model_1.ClaimStatus.Pending,
|
||||
});
|
||||
await rewardRepo.save(reward);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return api_1.Api.successMsg('签到成功');
|
||||
}
|
||||
async makeUpSignIn(userId, date) {
|
||||
const nowYYYMMDD = help_1.Help.formatDate(Date.now(), 'YYYY-MM-DD');
|
||||
if (date >= nowYYYMMDD) {
|
||||
return api_1.Api.error('只能补签今天之前的日期');
|
||||
}
|
||||
const signInStats = await this.userSignInModel.findOneOrFail({
|
||||
where: { userId },
|
||||
});
|
||||
const existingRecord = await this.userSignInCalendarModel.findOne({
|
||||
where: { userId, signInDate: date },
|
||||
});
|
||||
if (existingRecord) {
|
||||
return api_1.Api.error('该日期已签到,无需补签');
|
||||
}
|
||||
const makeUpCount = signInStats.makeUpCount;
|
||||
if (makeUpCount <= 0) {
|
||||
return api_1.Api.error('补签次数已用完');
|
||||
}
|
||||
if (!signInStats.lastSignInDate) {
|
||||
return api_1.Api.error('请先完成首次签到');
|
||||
}
|
||||
await data_source_context_1.DataSourceContext.startTransaction(async (tx) => {
|
||||
const calendarRepo = tx.getRepository(user_sign_in_calendar_model_1.UserSignInCalendarModel);
|
||||
const signInRepo = tx.getRepository(user_sign_in_model_1.UserSignInModel);
|
||||
const taskRepo = tx.getRepository(user_sign_in_task_model_1.UserSignInTaskModel);
|
||||
const rewardRepo = tx.getRepository(user_sign_in_task_reward_model_1.UserSignInTaskRewardModel);
|
||||
const calendarRecord = calendarRepo.create({
|
||||
userId,
|
||||
signInDate: date,
|
||||
isMakeUp: user_sign_in_calendar_model_1.SignInType.MakeUp,
|
||||
});
|
||||
await calendarRepo.save(calendarRecord);
|
||||
const newConsecutiveDays = await this.calcConsecutiveDays(tx, userId, signInStats.lastSignInDate, signInStats.consecutiveDays);
|
||||
await signInRepo.update({ userId }, {
|
||||
consecutiveDays: newConsecutiveDays,
|
||||
makeUpCount: () => `makeUpCount - 1`,
|
||||
usedMakeUpCount: () => `usedMakeUpCount + 1`,
|
||||
});
|
||||
const tasks = await taskRepo.find({
|
||||
order: { requiredDays: 'ASC' },
|
||||
});
|
||||
for (const task of tasks) {
|
||||
if (newConsecutiveDays >= task.requiredDays) {
|
||||
const existingReward = await rewardRepo.findOne({
|
||||
where: {
|
||||
userId,
|
||||
userSignInTaskId: task.id,
|
||||
},
|
||||
});
|
||||
if (!existingReward) {
|
||||
const reward = rewardRepo.create({
|
||||
userId,
|
||||
userSignInTaskId: task.id,
|
||||
title: task.title,
|
||||
subtitle: task.subtitle,
|
||||
requiredDays: task.requiredDays,
|
||||
icon: task.icon,
|
||||
financialProductId: task.financialProductId,
|
||||
claimStatus: user_sign_in_task_reward_model_1.ClaimStatus.Pending,
|
||||
});
|
||||
await rewardRepo.save(reward);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return api_1.Api.successMsg('补签成功');
|
||||
}
|
||||
async calcConsecutiveDays(tx, userId, endDate, expectedDays) {
|
||||
const startDate = help_1.Help.formatDate(new Date(endDate).getTime() - expectedDays * 86400000, 'YYYY-MM-DD');
|
||||
const calendarRepo = tx.getRepository(user_sign_in_calendar_model_1.UserSignInCalendarModel);
|
||||
const count = await calendarRepo.count({
|
||||
where: {
|
||||
userId,
|
||||
signInDate: (0, typeorm_2.Between)(startDate, endDate),
|
||||
},
|
||||
});
|
||||
return count === expectedDays + 1 ? expectedDays + 1 : expectedDays;
|
||||
}
|
||||
async claimReward(userId, rewardId) {
|
||||
await data_source_context_1.DataSourceContext.startTransaction(async (tx) => {
|
||||
const rewardRepo = tx.getRepository(user_sign_in_task_reward_model_1.UserSignInTaskRewardModel);
|
||||
const financialProductRepo = tx.getRepository(financial_product_model_1.FinancialProductModel);
|
||||
const financialRepo = tx.getRepository(user_financial_product_model_1.UserFinancialProductModel);
|
||||
const reward = await rewardRepo.findOne({
|
||||
where: { id: rewardId, userId },
|
||||
});
|
||||
if (!reward) {
|
||||
throw new Error('奖励记录不存在');
|
||||
}
|
||||
if (reward.claimStatus === user_sign_in_task_reward_model_1.ClaimStatus.Claimed) {
|
||||
throw new Error('该奖励已领取');
|
||||
}
|
||||
const financialProduct = await financialProductRepo.findOneBy({
|
||||
id: reward.financialProductId,
|
||||
});
|
||||
if (!financialProduct) {
|
||||
throw new Error('理财产品不存在');
|
||||
}
|
||||
const now = Date.now();
|
||||
const periodDays = financialProduct.period;
|
||||
const expireTime = Math.floor((now + periodDays * 86400000) / 1000);
|
||||
const userFinancialProduct = financialRepo.create({
|
||||
userId,
|
||||
financialProductId: reward.financialProductId,
|
||||
name: reward.title,
|
||||
period: periodDays,
|
||||
principal: financialProduct.principal,
|
||||
yieldRate: financialProduct.yieldRate,
|
||||
source: user_financial_product_model_1.HoldingSource.Gift,
|
||||
status: user_financial_product_model_1.HoldingStatus.Earning,
|
||||
expireTime,
|
||||
});
|
||||
await financialRepo.save(userFinancialProduct);
|
||||
await rewardRepo.update({ id: rewardId }, {
|
||||
userFinancialProductId: userFinancialProduct.id,
|
||||
claimStatus: user_sign_in_task_reward_model_1.ClaimStatus.Claimed,
|
||||
});
|
||||
});
|
||||
return api_1.Api.successMsg('领取成功');
|
||||
}
|
||||
};
|
||||
exports.SignInService = SignInService;
|
||||
exports.SignInService = SignInService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(user_sign_in_model_1.UserSignInModel)),
|
||||
__param(1, (0, typeorm_1.InjectRepository)(user_sign_in_calendar_model_1.UserSignInCalendarModel)),
|
||||
__param(2, (0, typeorm_1.InjectRepository)(user_sign_in_task_model_1.UserSignInTaskModel)),
|
||||
__param(3, (0, typeorm_1.InjectRepository)(user_sign_in_task_reward_model_1.UserSignInTaskRewardModel)),
|
||||
__param(4, (0, typeorm_1.InjectRepository)(user_financial_product_model_1.UserFinancialProductModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.DataSource])
|
||||
], SignInService);
|
||||
//# sourceMappingURL=signin.service.js.map
|
||||
+1
File diff suppressed because one or more lines are too long
+53
@@ -0,0 +1,53 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { TeamRelationModel } from 'src/model/team_relation.model';
|
||||
import { GetTeamMembersDto } from '../dto/team.dto';
|
||||
import { UserSignInModel } from 'src/model/user_sign_in.model';
|
||||
export declare class TeamService {
|
||||
private teamRelationModel;
|
||||
private userSignInModel;
|
||||
constructor(teamRelationModel: Repository<TeamRelationModel>, userSignInModel: Repository<UserSignInModel>);
|
||||
getTeamStats(userId: number): Promise<import("src/app/common/api").ApiResponseVo<null> | import("src/app/common/api").ApiResponseVo<{
|
||||
directChildrenCount: number;
|
||||
grandchildrenCount: number;
|
||||
greatGrandchildrenCount: number;
|
||||
} | undefined>>;
|
||||
getTodayNewStats(userId: number): Promise<{
|
||||
directChildrenCount: number;
|
||||
grandchildrenCount: number;
|
||||
greatGrandchildrenCount: number;
|
||||
}>;
|
||||
getTodayNewStatsSimple(userId: number): Promise<import("src/app/common/api").ApiResponseVo<{
|
||||
directChildrenCount: number;
|
||||
grandchildrenCount: number;
|
||||
greatGrandchildrenCount: number;
|
||||
} | undefined>>;
|
||||
getTeamMembers(userId: number, dto: GetTeamMembersDto): Promise<import("src/app/common/api").ApiResponseVo<import("src/app/common/api").PaginatedVo<{
|
||||
level: number;
|
||||
createTime: string;
|
||||
signIn: UserSignInModel | undefined;
|
||||
nick?: string | undefined;
|
||||
avatar?: string;
|
||||
grade?: number | undefined;
|
||||
phone?: string | undefined;
|
||||
password?: string | undefined;
|
||||
tradePassword?: string | undefined;
|
||||
stocks?: number | undefined;
|
||||
inviteCode?: string | undefined;
|
||||
device?: string;
|
||||
registerIp?: string | undefined;
|
||||
isFrozen?: number | undefined;
|
||||
wallet?: import("../../../model/wallet.model").WalletModel;
|
||||
teamRelation?: TeamRelationModel;
|
||||
userVerify?: import("../../../model/user_verify.model").UserVerifyModel;
|
||||
enabledCreateGroup?: number | undefined;
|
||||
isRedEnvelope?: number | undefined;
|
||||
redEnvelopeMaxAmount?: string | undefined;
|
||||
redEnvelope?: string | undefined;
|
||||
autoRedEnvelope?: number | undefined;
|
||||
redPacketRecords?: import("../../../model/red_packet_record.model").RedPacketRecordModel[];
|
||||
redPackets?: import("../../../model/red_packet.model").RedPacketModel[];
|
||||
id?: number | undefined;
|
||||
updateTime?: string | undefined;
|
||||
deleteTime?: string;
|
||||
}[]>>>;
|
||||
}
|
||||
Vendored
+128
@@ -0,0 +1,128 @@
|
||||
"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.TeamService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const team_relation_model_1 = require("../../../model/team_relation.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const repository_help_1 = require("../../common/util/repository_help");
|
||||
const help_1 = require("../../common/util/help");
|
||||
const user_sign_in_model_1 = require("../../../model/user_sign_in.model");
|
||||
let TeamService = class TeamService {
|
||||
teamRelationModel;
|
||||
userSignInModel;
|
||||
constructor(teamRelationModel, userSignInModel) {
|
||||
this.teamRelationModel = teamRelationModel;
|
||||
this.userSignInModel = userSignInModel;
|
||||
}
|
||||
async getTeamStats(userId) {
|
||||
const userRelation = await this.teamRelationModel.findOne({
|
||||
where: { userId },
|
||||
});
|
||||
if (!userRelation) {
|
||||
return api_1.Api.error('用户团队关系不存在');
|
||||
}
|
||||
const directChildrenCount = await this.teamRelationModel.count({
|
||||
where: { parentId: userId },
|
||||
});
|
||||
const grandchildrenCount = await this.teamRelationModel.count({
|
||||
where: { grandparentId: userId },
|
||||
});
|
||||
const greatGrandchildrenCount = await this.teamRelationModel.count({
|
||||
where: { greatGrandparentId: userId },
|
||||
});
|
||||
return api_1.Api.success({
|
||||
directChildrenCount,
|
||||
grandchildrenCount,
|
||||
greatGrandchildrenCount,
|
||||
});
|
||||
}
|
||||
async getTodayNewStats(userId) {
|
||||
const todayStr = help_1.Help.formatDate(new Date(), 'YYYY-MM-DD');
|
||||
const tomorrow = new Date(Date.now() + 24 * 60 * 60 * 1000);
|
||||
const tomorrowStr = help_1.Help.formatDate(tomorrow, 'YYYY-MM-DD');
|
||||
const directChildrenCount = await this.teamRelationModel.count({
|
||||
where: {
|
||||
parentId: userId,
|
||||
createTime: (0, typeorm_2.Between)(todayStr, tomorrowStr),
|
||||
},
|
||||
});
|
||||
const grandchildrenCount = await this.teamRelationModel.count({
|
||||
where: {
|
||||
grandparentId: userId,
|
||||
createTime: (0, typeorm_2.Between)(todayStr, tomorrowStr),
|
||||
},
|
||||
});
|
||||
const greatGrandchildrenCount = await this.teamRelationModel.count({
|
||||
where: {
|
||||
greatGrandparentId: userId,
|
||||
createTime: (0, typeorm_2.Between)(todayStr, tomorrowStr),
|
||||
},
|
||||
});
|
||||
return {
|
||||
directChildrenCount,
|
||||
grandchildrenCount,
|
||||
greatGrandchildrenCount,
|
||||
};
|
||||
}
|
||||
async getTodayNewStatsSimple(userId) {
|
||||
const stats = await this.getTodayNewStats(userId);
|
||||
return api_1.Api.success(stats);
|
||||
}
|
||||
async getTeamMembers(userId, dto) {
|
||||
let whereCondition = {};
|
||||
if (dto.level === 1) {
|
||||
whereCondition = { parentId: userId };
|
||||
}
|
||||
else if (dto.level === 2) {
|
||||
whereCondition = { grandparentId: userId };
|
||||
}
|
||||
else if (dto.level === 3) {
|
||||
whereCondition = { greatGrandparentId: userId };
|
||||
}
|
||||
const { data, total } = await repository_help_1.RepositoryHelp.findPaginated(this.teamRelationModel, dto, {
|
||||
where: whereCondition,
|
||||
order: { createTime: 'DESC' },
|
||||
relations: ['user'],
|
||||
});
|
||||
const userIds = data.map((r) => r.userId);
|
||||
let signInRecords = [];
|
||||
if (userIds.length > 0) {
|
||||
signInRecords = await this.userSignInModel.find({
|
||||
where: { userId: (0, typeorm_2.Between)(Math.min(...userIds), Math.max(...userIds)) },
|
||||
});
|
||||
}
|
||||
const members = data.map((relation) => {
|
||||
const signIn = signInRecords.find((r) => r.userId === relation.userId);
|
||||
return {
|
||||
...relation.user,
|
||||
level: relation.level,
|
||||
createTime: relation.createTime,
|
||||
signIn,
|
||||
};
|
||||
});
|
||||
return api_1.Api.pagination(members, total);
|
||||
}
|
||||
};
|
||||
exports.TeamService = TeamService;
|
||||
exports.TeamService = TeamService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(team_relation_model_1.TeamRelationModel)),
|
||||
__param(1, (0, typeorm_1.InjectRepository)(user_sign_in_model_1.UserSignInModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository,
|
||||
typeorm_2.Repository])
|
||||
], TeamService);
|
||||
//# sourceMappingURL=team.service.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"team.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/team.service.ts"],"names":[],"mappings":"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"}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { UserModel } from 'src/model/user.model';
|
||||
import { ImVo } from '../vo/user.vo';
|
||||
import { UserVerifyModel } from 'src/model/user_verify.model';
|
||||
import { UserLogService } from '../../common/service/user_log.service';
|
||||
export declare class UserService {
|
||||
private userModel;
|
||||
private userVerifyModel;
|
||||
private userLogService;
|
||||
constructor(userModel: Repository<UserModel>, userVerifyModel: Repository<UserVerifyModel>, userLogService: UserLogService);
|
||||
changePassword(userId: number, oldPassword: string, newPassword: string): Promise<import("src/app/common/api").ApiResponseVo<null>>;
|
||||
getProfile(userId: number): Promise<import("src/app/common/api").ApiResponseVo<null> | import("src/app/common/api").ApiResponseVo<{
|
||||
phone: string | null;
|
||||
hasTradePassword: boolean;
|
||||
nick: string;
|
||||
avatar?: string;
|
||||
grade: number;
|
||||
password: string;
|
||||
stocks: number;
|
||||
inviteCode: string;
|
||||
device?: string;
|
||||
registerIp: string;
|
||||
isFrozen: number;
|
||||
wallet?: import("../../../model/wallet.model").WalletModel;
|
||||
teamRelation?: import("../../../model/team_relation.model").TeamRelationModel;
|
||||
userVerify?: UserVerifyModel;
|
||||
enabledCreateGroup: number;
|
||||
isRedEnvelope: number;
|
||||
redEnvelopeMaxAmount: string;
|
||||
redEnvelope: string;
|
||||
autoRedEnvelope: number;
|
||||
redPacketRecords?: import("../../../model/red_packet_record.model").RedPacketRecordModel[];
|
||||
redPackets?: import("../../../model/red_packet.model").RedPacketModel[];
|
||||
id: number;
|
||||
createTime: string;
|
||||
updateTime: string;
|
||||
deleteTime?: string;
|
||||
} | undefined>>;
|
||||
im(userId: number): Promise<import("src/app/common/api").ApiResponseVo<ImVo | undefined>>;
|
||||
started(): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
}
|
||||
Vendored
+109
@@ -0,0 +1,109 @@
|
||||
"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.UserService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const user_model_1 = require("../../../model/user.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const tls_sig_api_v2_typescript_1 = require("tls-sig-api-v2-typescript");
|
||||
const app_env_1 = require("../../../app.env");
|
||||
const im_help_1 = require("../../common/util/im_help");
|
||||
const user_vo_1 = require("../vo/user.vo");
|
||||
const user_verify_model_1 = require("../../../model/user_verify.model");
|
||||
const user_log_service_1 = require("../../common/service/user_log.service");
|
||||
let UserService = class UserService {
|
||||
userModel;
|
||||
userVerifyModel;
|
||||
userLogService;
|
||||
constructor(userModel, userVerifyModel, userLogService) {
|
||||
this.userModel = userModel;
|
||||
this.userVerifyModel = userVerifyModel;
|
||||
this.userLogService = userLogService;
|
||||
}
|
||||
async changePassword(userId, oldPassword, newPassword) {
|
||||
const user = await this.userModel.findOne({
|
||||
where: { id: userId },
|
||||
select: {
|
||||
password: true,
|
||||
},
|
||||
});
|
||||
console.log(user?.password, oldPassword);
|
||||
if (!user) {
|
||||
return api_1.Api.error('用户不存在');
|
||||
}
|
||||
if (user.password !== oldPassword) {
|
||||
return api_1.Api.error('旧密码错误');
|
||||
}
|
||||
await this.userModel.update({ id: userId }, { password: newPassword });
|
||||
return api_1.Api.successMsg('密码修改成功');
|
||||
}
|
||||
async getProfile(userId) {
|
||||
const user = await this.userModel
|
||||
.createQueryBuilder('user')
|
||||
.addSelect('user.tradePassword')
|
||||
.where('user.id = :id', { id: userId })
|
||||
.getOne();
|
||||
if (!user) {
|
||||
return api_1.Api.error('用户不存在');
|
||||
}
|
||||
const { tradePassword, ...result } = user;
|
||||
const maskedPhone = user.phone
|
||||
? user.phone.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
|
||||
: null;
|
||||
return api_1.Api.success({
|
||||
...result,
|
||||
phone: maskedPhone,
|
||||
hasTradePassword: !!tradePassword,
|
||||
});
|
||||
}
|
||||
async im(userId) {
|
||||
const user = await this.userModel.findOneByOrFail({
|
||||
id: userId,
|
||||
});
|
||||
const userVerify = await this.userVerifyModel.findOneBy({ userId });
|
||||
const uid = userId;
|
||||
const api = new tls_sig_api_v2_typescript_1.Api(app_env_1.AppEnv.IM_APP_ID, app_env_1.AppEnv.IM_SECRET_KEY);
|
||||
const imUid = app_env_1.AppEnv.IM_USER_ID_PREFIX + uid;
|
||||
const expire = 86400 * 180;
|
||||
const sign = api.genSig(imUid, expire);
|
||||
await im_help_1.IMHelp.updateUserProfile(imUid, user.phone, '');
|
||||
const vo = new user_vo_1.ImVo();
|
||||
vo.uid = imUid;
|
||||
vo.sign = sign;
|
||||
vo.isAuth =
|
||||
userVerify != null && userVerify.status == user_verify_model_1.VerifyAuditStatus.Approved;
|
||||
vo.appId = app_env_1.AppEnv.IM_APP_ID;
|
||||
vo.username = user.phone;
|
||||
vo.avatar = '';
|
||||
vo.prefix = app_env_1.AppEnv.IM_USER_ID_PREFIX;
|
||||
vo.enabledCreateGroup = user.enabledCreateGroup == 1;
|
||||
return api_1.Api.success(vo);
|
||||
}
|
||||
async started() {
|
||||
await this.userLogService.logStarted();
|
||||
return api_1.Api.success();
|
||||
}
|
||||
};
|
||||
exports.UserService = UserService;
|
||||
exports.UserService = UserService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(user_model_1.UserModel)),
|
||||
__param(1, (0, typeorm_1.InjectRepository)(user_verify_model_1.UserVerifyModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
user_log_service_1.UserLogService])
|
||||
], UserService);
|
||||
//# sourceMappingURL=user.service.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/user.service.ts"],"names":[],"mappings":"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"}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { UserBankModel } from 'src/model/user_bank.model';
|
||||
export declare class UserBankService {
|
||||
private userBankModel;
|
||||
constructor(userBankModel: Repository<UserBankModel>);
|
||||
bindBankCard(cardNo: string, bankName: string, phone: string): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
"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.UserBankService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const user_bank_model_1 = require("../../../model/user_bank.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const user_id_context_1 = require("../../common/context/user_id.context");
|
||||
let UserBankService = class UserBankService {
|
||||
userBankModel;
|
||||
constructor(userBankModel) {
|
||||
this.userBankModel = userBankModel;
|
||||
}
|
||||
async bindBankCard(cardNo, bankName, phone) {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
const count = await this.userBankModel.count({
|
||||
where: { userId },
|
||||
});
|
||||
if (count >= 3) {
|
||||
return api_1.Api.error('每个用户最多绑定 3 张银行卡');
|
||||
}
|
||||
const existingCard = await this.userBankModel.findOne({
|
||||
where: { userId, cardNo },
|
||||
});
|
||||
if (existingCard) {
|
||||
return api_1.Api.error('该银行卡已被绑定');
|
||||
}
|
||||
const userBank = this.userBankModel.create({
|
||||
userId,
|
||||
cardNo,
|
||||
bankName,
|
||||
phone,
|
||||
});
|
||||
await this.userBankModel.save(userBank);
|
||||
return api_1.Api.success();
|
||||
}
|
||||
};
|
||||
exports.UserBankService = UserBankService;
|
||||
exports.UserBankService = UserBankService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(user_bank_model_1.UserBankModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository])
|
||||
], UserBankService);
|
||||
//# sourceMappingURL=user_bank.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"user_bank.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/user_bank.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,oEAA0D;AAC1D,0CAAyC;AACzC,0EAA0E;AAGnE,IAAM,eAAe,GAArB,MAAM,eAAe;IAGhB;IAFV,YAEU,aAAwC;QAAxC,kBAAa,GAAb,aAAa,CAA2B;IAC/C,CAAC;IAKJ,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,QAAgB,EAAE,KAAa;QAChE,MAAM,MAAM,GAAG,IAAA,kCAAgB,GAAE,CAAC;QAGlC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAC3C,KAAK,EAAE,EAAE,MAAM,EAAE;SAClB,CAAC,CAAC;QAEH,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,OAAO,SAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACtC,CAAC;QAGD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACpD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;SAC1B,CAAC,CAAC;QAEH,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,SAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/B,CAAC;QAGD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YACzC,MAAM;YACN,MAAM;YACN,QAAQ;YACR,KAAK;SACN,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExC,OAAO,SAAG,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AA1CY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,+BAAa,CAAC,CAAA;qCACT,oBAAU;GAHxB,eAAe,CA0C3B"}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { Cache } from 'cache-manager';
|
||||
import { UserModel } from 'src/model/user.model';
|
||||
import { PaginatedDto } from 'src/app/common/api';
|
||||
import { UserCreateRedPacketDto, UserInfoDto, UserLikeDto, UserRedPacketDetailDto, UserUpdateUserProfileDto } from '../dto/user_im.dto';
|
||||
import { UserClaimedVo, UserLikeVo } from '../vo/user_im.vo';
|
||||
import { RedPacketModel } from 'src/model/red_packet.model';
|
||||
import { RedPacketRecordModel } from 'src/model/red_packet_record.model';
|
||||
import { DBTransaction } from 'src/app/common/context/data_source.context';
|
||||
import { UserVerifyModel } from 'src/model/user_verify.model';
|
||||
export declare class UserImService {
|
||||
private userRepos;
|
||||
private redPacketRepos;
|
||||
private redPacketRecordRepos;
|
||||
private userVerifyModel;
|
||||
private cacheManager;
|
||||
constructor(userRepos: Repository<UserModel>, redPacketRepos: Repository<RedPacketModel>, redPacketRecordRepos: Repository<RedPacketRecordModel>, userVerifyModel: Repository<UserVerifyModel>, cacheManager: Cache);
|
||||
like(dto: UserLikeDto): Promise<import("src/app/common/api").ApiResponseVo<import("src/app/common/api").PaginatedVo<UserLikeVo[]>>>;
|
||||
info(dto: UserInfoDto): Promise<import("src/app/common/api").ApiResponseVo<UserModel | null | undefined>>;
|
||||
redPackeDetail(dto: UserRedPacketDetailDto): Promise<import("src/app/common/api").ApiResponseVo<RedPacketModel | null | undefined>>;
|
||||
redPackeRecords(dto: UserRedPacketDetailDto, page: PaginatedDto): Promise<import("src/app/common/api").ApiResponseVo<import("src/app/common/api").PaginatedVo<RedPacketRecordModel[]>>>;
|
||||
createRedPacket(dto: UserCreateRedPacketDto): Promise<import("src/app/common/api").ApiResponseVo<null> | import("src/app/common/api").ApiResponseVo<RedPacketModel | undefined>>;
|
||||
autoClaimedRedPacket(trx: DBTransaction, redPacket: RedPacketModel): Promise<void>;
|
||||
claimedPrepare(dto: UserRedPacketDetailDto): Promise<import("src/app/common/api").ApiResponseVo<null> | import("src/app/common/api").ApiResponseVo<UserClaimedVo | undefined>>;
|
||||
claimed(dto: UserRedPacketDetailDto): Promise<import("src/app/common/api").ApiResponseVo<null> | import("src/app/common/api").ApiResponseVo<UserClaimedVo | undefined>>;
|
||||
private calculateRandomAmount;
|
||||
updateUserProfile(dto: UserUpdateUserProfileDto): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
getUserGradeByImUid(): import("src/app/common/api").ApiResponseVo<import("src/app/common/api").PaginatedVo<never[]>>;
|
||||
}
|
||||
+400
@@ -0,0 +1,400 @@
|
||||
"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.UserImService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const cache_manager_1 = require("@nestjs/cache-manager");
|
||||
const user_model_1 = require("../../../model/user.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const app_env_1 = require("../../../app.env");
|
||||
const user_im_vo_1 = require("../vo/user_im.vo");
|
||||
const red_packet_model_1 = require("../../../model/red_packet.model");
|
||||
const red_packet_record_model_1 = require("../../../model/red_packet_record.model");
|
||||
const repository_help_1 = require("../../common/util/repository_help");
|
||||
const user_id_context_1 = require("../../common/context/user_id.context");
|
||||
const data_source_context_1 = require("../../common/context/data_source.context");
|
||||
const help_1 = require("../../common/util/help");
|
||||
const decimal_help_1 = require("../../common/util/decimal_help");
|
||||
const im_help_1 = require("../../common/util/im_help");
|
||||
const user_verify_model_1 = require("../../../model/user_verify.model");
|
||||
let UserImService = class UserImService {
|
||||
userRepos;
|
||||
redPacketRepos;
|
||||
redPacketRecordRepos;
|
||||
userVerifyModel;
|
||||
cacheManager;
|
||||
constructor(userRepos, redPacketRepos, redPacketRecordRepos, userVerifyModel, cacheManager) {
|
||||
this.userRepos = userRepos;
|
||||
this.redPacketRepos = redPacketRepos;
|
||||
this.redPacketRecordRepos = redPacketRecordRepos;
|
||||
this.userVerifyModel = userVerifyModel;
|
||||
this.cacheManager = cacheManager;
|
||||
}
|
||||
async like(dto) {
|
||||
const users = await this.userRepos.find({
|
||||
where: [
|
||||
{
|
||||
phone: dto.keyword,
|
||||
},
|
||||
],
|
||||
});
|
||||
return api_1.Api.pagination(users.map((it) => {
|
||||
const vo = new user_im_vo_1.UserLikeVo();
|
||||
vo.uid = app_env_1.AppEnv.IM_USER_ID_PREFIX + it.id;
|
||||
vo.user = it;
|
||||
return vo;
|
||||
}), 0);
|
||||
}
|
||||
async info(dto) {
|
||||
const user = await this.userRepos.findOneBy({ id: dto.id });
|
||||
return api_1.Api.success(user);
|
||||
}
|
||||
async redPackeDetail(dto) {
|
||||
const data = await this.redPacketRepos.findOne({
|
||||
where: {
|
||||
id: dto.id,
|
||||
},
|
||||
relations: ['user'],
|
||||
});
|
||||
return api_1.Api.success(data);
|
||||
}
|
||||
async redPackeRecords(dto, page) {
|
||||
const list = await repository_help_1.RepositoryHelp.finePaginatedData(this.redPacketRecordRepos, page, {
|
||||
where: {
|
||||
redPacketId: dto.id,
|
||||
},
|
||||
order: {
|
||||
id: 'desc',
|
||||
},
|
||||
relations: ['user'],
|
||||
});
|
||||
return api_1.Api.pagination(list, 0);
|
||||
}
|
||||
async createRedPacket(dto) {
|
||||
const uid = (0, user_id_context_1.getUserIdContext)();
|
||||
const user = await this.userRepos.findOneByOrFail({
|
||||
id: uid,
|
||||
});
|
||||
const userVerify = await this.userVerifyModel.findOneBy({
|
||||
userId: uid,
|
||||
});
|
||||
const redEnvelope = user.redEnvelope;
|
||||
const redEnvelopeMaxAmount = user.redEnvelopeMaxAmount;
|
||||
const amount = Number(dto.amount);
|
||||
if (userVerify?.status != user_verify_model_1.VerifyAuditStatus.Approved) {
|
||||
return api_1.Api.error('您还未实名,无法发送红包');
|
||||
}
|
||||
if (!user.isRedEnvelope) {
|
||||
return api_1.Api.error('您发送红包资格被管理员取下,请联系客服');
|
||||
}
|
||||
if (amount <= 0) {
|
||||
return api_1.Api.error('金额必须大于0');
|
||||
}
|
||||
if (help_1.Help.phpmymd5(dto.password) != '123456') {
|
||||
return api_1.Api.error('支付密码错误');
|
||||
}
|
||||
if (dto.type == red_packet_model_1.RedPacketType.Luck) {
|
||||
if (!dto.count) {
|
||||
return api_1.Api.error('红包个数必须大于0');
|
||||
}
|
||||
}
|
||||
if (!redEnvelope || Number(redEnvelope) < amount) {
|
||||
return api_1.Api.error('红包资产余额不足');
|
||||
}
|
||||
if (redEnvelopeMaxAmount && Number(redEnvelopeMaxAmount) < amount) {
|
||||
return api_1.Api.error(`最大可发送红包金额(${redEnvelopeMaxAmount})`);
|
||||
}
|
||||
return data_source_context_1.DataSourceContext.startTransaction(async (trx) => {
|
||||
const userRepos = trx.getRepository(user_model_1.UserModel);
|
||||
const redPacketRepos = trx.getRepository(red_packet_model_1.RedPacketModel);
|
||||
const totalAmount = Math.round(amount * 100);
|
||||
const totalCount = dto.type == red_packet_model_1.RedPacketType.Luck ? dto.count : 1;
|
||||
const now = help_1.Help.getSecondTimestamp();
|
||||
const affected = await repository_help_1.RepositoryHelp.update(userRepos, {
|
||||
id: uid,
|
||||
redEnvelope: (0, typeorm_2.MoreThanOrEqual)(`${amount}`),
|
||||
}, {
|
||||
redEnvelope: () => `redEnvelope - ${amount}`,
|
||||
});
|
||||
if (!affected) {
|
||||
await trx.rollback();
|
||||
return api_1.Api.error('红包资产余额不足01');
|
||||
}
|
||||
const claimedUserId = dto.claimedUserId?.replace(app_env_1.AppEnv.IM_USER_ID_PREFIX, '') || '';
|
||||
const redPacket = redPacketRepos.create({
|
||||
totalAmount,
|
||||
totalCount,
|
||||
remainingAmount: totalAmount,
|
||||
remainingCount: totalCount,
|
||||
userId: uid,
|
||||
groupId: dto.groupId,
|
||||
claimedUserId: dto.type == red_packet_model_1.RedPacketType.Ordinary ? Number(claimedUserId) : 0,
|
||||
status: red_packet_model_1.RedPacketStatus.Unclaimed,
|
||||
type: dto.type,
|
||||
createdAt: now,
|
||||
expireTime: now + 60 * 60 * 24,
|
||||
});
|
||||
await redPacketRepos.insert(redPacket);
|
||||
await this.autoClaimedRedPacket(trx, redPacket);
|
||||
return api_1.Api.success(redPacket);
|
||||
});
|
||||
}
|
||||
async autoClaimedRedPacket(trx, redPacket) {
|
||||
const sendUserIds = app_env_1.AppEnv.IM_AUTO_CLAIMED_RED_PACKET_SEND_UIDS.split(',').map((it) => Number(it));
|
||||
const sendGroupIds = app_env_1.AppEnv.IM_AUTO_CLAIMED_RED_PACKET_SEND_GROUPIDS.split(',').map((it) => {
|
||||
return decodeURIComponent(it);
|
||||
});
|
||||
if (redPacket.type != red_packet_model_1.RedPacketType.Luck) {
|
||||
return;
|
||||
}
|
||||
if (!sendUserIds.includes(redPacket.userId)) {
|
||||
return;
|
||||
}
|
||||
if (!sendGroupIds.includes(redPacket.groupId)) {
|
||||
return;
|
||||
}
|
||||
const remainingAmount = redPacket.remainingAmount;
|
||||
const remainingCount = redPacket.remainingCount;
|
||||
const rate = help_1.Help.getRandomInt(70, 75) / 100;
|
||||
let maxAmount = remainingAmount * rate;
|
||||
const maxCount = Math.floor(remainingCount * rate);
|
||||
const userRepos = trx.getRepository(user_model_1.UserModel);
|
||||
const redPacketRepos = trx.getRepository(red_packet_model_1.RedPacketModel);
|
||||
const redPacketRecordRepos = trx.getRepository(red_packet_record_model_1.RedPacketRecordModel);
|
||||
const users = await userRepos
|
||||
.createQueryBuilder('u')
|
||||
.where('user_type = 2 and autoRedEnvelope = 1 and avatar is not null')
|
||||
.orderBy('RAND()')
|
||||
.limit(maxCount)
|
||||
.getMany();
|
||||
for (let i = 0, len = users.length; i < len; i++) {
|
||||
const user = users[i];
|
||||
const uid = user.id;
|
||||
const now = help_1.Help.getSecondTimestamp() + 1;
|
||||
const amount = this.calculateRandomAmount(maxAmount, len - i);
|
||||
maxAmount -= amount;
|
||||
redPacket.remainingAmount -= amount;
|
||||
redPacket.remainingCount -= 1;
|
||||
const record = redPacketRecordRepos.create({
|
||||
amount: decimal_help_1.DecimalHelp.div(amount, 100),
|
||||
redPacketId: redPacket.id,
|
||||
userId: uid,
|
||||
createdAt: now,
|
||||
});
|
||||
await redPacketRecordRepos.insert(record);
|
||||
await userRepos.update({
|
||||
id: uid,
|
||||
}, {
|
||||
redEnvelope: () => `redEnvelope + ${record.amount}`,
|
||||
});
|
||||
}
|
||||
await redPacketRepos.save(redPacket);
|
||||
}
|
||||
async claimedPrepare(dto) {
|
||||
const uid = (0, user_id_context_1.getUserIdContext)();
|
||||
const userVerify = await this.userVerifyModel.findOneBy({
|
||||
userId: uid,
|
||||
});
|
||||
if (userVerify?.status != user_verify_model_1.VerifyAuditStatus.Approved) {
|
||||
return api_1.Api.error('您还未实名,无法领取红包');
|
||||
}
|
||||
const redPacket = await this.redPacketRepos.findOne({
|
||||
where: {
|
||||
id: dto.id,
|
||||
},
|
||||
relations: ['user'],
|
||||
});
|
||||
if (!redPacket) {
|
||||
return api_1.Api.error(`红包不存在`);
|
||||
}
|
||||
if (redPacket.status == red_packet_model_1.RedPacketStatus.Expire) {
|
||||
return api_1.Api.success(new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Expired, redPacket));
|
||||
}
|
||||
const existingRecord = await this.redPacketRecordRepos.findOneBy({
|
||||
redPacketId: redPacket.id,
|
||||
userId: uid,
|
||||
});
|
||||
if (existingRecord) {
|
||||
const vo = new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Success, redPacket, existingRecord);
|
||||
return api_1.Api.success(vo);
|
||||
}
|
||||
if (redPacket.status == red_packet_model_1.RedPacketStatus.Claimed) {
|
||||
return api_1.Api.success(new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Finished, redPacket));
|
||||
}
|
||||
const now = help_1.Help.getSecondTimestamp();
|
||||
if (redPacket.expireTime < now) {
|
||||
return api_1.Api.success(new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Expired, redPacket));
|
||||
}
|
||||
if (redPacket.type == red_packet_model_1.RedPacketType.Ordinary) {
|
||||
if (redPacket.userId == uid) {
|
||||
return api_1.Api.success(new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Own, redPacket));
|
||||
}
|
||||
if (redPacket.type == red_packet_model_1.RedPacketType.Ordinary) {
|
||||
if (redPacket.claimedUserId != uid) {
|
||||
return api_1.Api.error(`这个红包不是发给你的`);
|
||||
}
|
||||
}
|
||||
}
|
||||
return api_1.Api.success(new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Unclaimed, redPacket));
|
||||
}
|
||||
async claimed(dto) {
|
||||
const uid = (0, user_id_context_1.getUserIdContext)();
|
||||
const userVerify = await this.userVerifyModel.findOneBy({
|
||||
userId: uid,
|
||||
});
|
||||
if (userVerify?.status != user_verify_model_1.VerifyAuditStatus.Approved) {
|
||||
return api_1.Api.error('您还未实名,无法领取红包');
|
||||
}
|
||||
return data_source_context_1.DataSourceContext.startTransaction(async (trx) => {
|
||||
const userRepos = trx.getRepository(user_model_1.UserModel);
|
||||
const redPacketRepos = trx.getRepository(red_packet_model_1.RedPacketModel);
|
||||
const redPacketRecordRepos = trx.getRepository(red_packet_record_model_1.RedPacketRecordModel);
|
||||
const redPacket = await redPacketRepos.findOne({
|
||||
where: {
|
||||
id: dto.id,
|
||||
},
|
||||
relations: ['user'],
|
||||
});
|
||||
if (!redPacket) {
|
||||
await trx.rollback();
|
||||
return api_1.Api.error(`红包不存在`);
|
||||
}
|
||||
if (redPacket.status == red_packet_model_1.RedPacketStatus.Expire) {
|
||||
await trx.rollback();
|
||||
return api_1.Api.success(new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Expired, redPacket));
|
||||
}
|
||||
if (redPacket.status == red_packet_model_1.RedPacketStatus.Claimed ||
|
||||
redPacket.remainingCount <= 0) {
|
||||
await trx.rollback();
|
||||
return api_1.Api.success(new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Finished, redPacket));
|
||||
}
|
||||
const now = help_1.Help.getSecondTimestamp();
|
||||
if (redPacket.expireTime < now) {
|
||||
await trx.rollback();
|
||||
return api_1.Api.success(new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Expired, redPacket));
|
||||
}
|
||||
const existingRecord = await this.redPacketRecordRepos.findOneBy({
|
||||
redPacketId: redPacket.id,
|
||||
userId: uid,
|
||||
});
|
||||
if (existingRecord) {
|
||||
await trx.rollback();
|
||||
const vo = new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Success, redPacket, existingRecord);
|
||||
return api_1.Api.success(vo);
|
||||
}
|
||||
if (redPacket.type == red_packet_model_1.RedPacketType.Ordinary) {
|
||||
if (redPacket.userId == uid) {
|
||||
await trx.rollback();
|
||||
return api_1.Api.success(new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Own, redPacket));
|
||||
}
|
||||
if (redPacket.claimedUserId != uid) {
|
||||
await trx.rollback();
|
||||
return api_1.Api.error(`这个红包不是发给你的`);
|
||||
}
|
||||
await redPacketRepos.update({
|
||||
id: redPacket.id,
|
||||
}, {
|
||||
status: red_packet_model_1.RedPacketStatus.Claimed,
|
||||
remainingAmount: 0,
|
||||
remainingCount: 0,
|
||||
});
|
||||
const record = redPacketRecordRepos.create({
|
||||
amount: decimal_help_1.DecimalHelp.div(redPacket.totalAmount, 100),
|
||||
redPacketId: redPacket.id,
|
||||
userId: uid,
|
||||
createdAt: now,
|
||||
});
|
||||
await redPacketRecordRepos.insert(record);
|
||||
await userRepos.update({
|
||||
id: uid,
|
||||
}, {
|
||||
redEnvelope: () => `redEnvelope + ${record.amount}`,
|
||||
});
|
||||
await trx.commit();
|
||||
const vo = new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Success, redPacket, record);
|
||||
return api_1.Api.success(vo);
|
||||
}
|
||||
else {
|
||||
const amount = this.calculateRandomAmount(redPacket.remainingAmount, redPacket.remainingCount);
|
||||
const affected = await repository_help_1.RepositoryHelp.update(redPacketRepos, {
|
||||
id: redPacket.id,
|
||||
remainingAmount: (0, typeorm_2.MoreThanOrEqual)(amount),
|
||||
remainingCount: (0, typeorm_2.MoreThanOrEqual)(1),
|
||||
}, {
|
||||
remainingAmount: () => `remainingAmount - ${amount}`,
|
||||
remainingCount: () => `remainingCount - 1`,
|
||||
status: redPacket.remainingCount <= 1
|
||||
? red_packet_model_1.RedPacketStatus.Claimed
|
||||
: red_packet_model_1.RedPacketStatus.Claiming,
|
||||
});
|
||||
if (!affected) {
|
||||
return api_1.Api.error('网络错误,请稍后重试');
|
||||
}
|
||||
const record = redPacketRecordRepos.create({
|
||||
amount: decimal_help_1.DecimalHelp.div(amount, 100),
|
||||
redPacketId: redPacket.id,
|
||||
userId: uid,
|
||||
createdAt: now,
|
||||
});
|
||||
await redPacketRecordRepos.insert(record);
|
||||
await userRepos.update({
|
||||
id: uid,
|
||||
}, {
|
||||
redEnvelope: () => `redEnvelope + ${record.amount}`,
|
||||
});
|
||||
await trx.commit();
|
||||
const vo = new user_im_vo_1.UserClaimedVo(user_im_vo_1.UserClaimedStats.Success, redPacket, record);
|
||||
return api_1.Api.success(vo);
|
||||
}
|
||||
});
|
||||
}
|
||||
calculateRandomAmount(remainingAmount, remainingCount) {
|
||||
if (remainingCount === 1) {
|
||||
return remainingAmount;
|
||||
}
|
||||
const max = Math.floor((remainingAmount / remainingCount) * 2);
|
||||
const amount = Math.floor(Math.random() * max) + 1;
|
||||
return Math.min(amount, remainingAmount);
|
||||
}
|
||||
async updateUserProfile(dto) {
|
||||
const uid = (0, user_id_context_1.getUserIdContext)();
|
||||
const imUid = app_env_1.AppEnv.IM_USER_ID_PREFIX + uid;
|
||||
const res = await im_help_1.IMHelp.updateUserProfile(imUid, dto.nick, dto.avatar);
|
||||
if (res.ErrorCode == 0) {
|
||||
return api_1.Api.success();
|
||||
}
|
||||
else {
|
||||
return api_1.Api.error(res.ErrorInfo);
|
||||
}
|
||||
}
|
||||
getUserGradeByImUid() {
|
||||
return api_1.Api.pagination([], 0);
|
||||
}
|
||||
};
|
||||
exports.UserImService = UserImService;
|
||||
exports.UserImService = UserImService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(user_model_1.UserModel)),
|
||||
__param(1, (0, typeorm_1.InjectRepository)(red_packet_model_1.RedPacketModel)),
|
||||
__param(2, (0, typeorm_1.InjectRepository)(red_packet_record_model_1.RedPacketRecordModel)),
|
||||
__param(3, (0, typeorm_1.InjectRepository)(user_verify_model_1.UserVerifyModel)),
|
||||
__param(4, (0, common_1.Inject)(cache_manager_1.CACHE_MANAGER)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository, Object])
|
||||
], UserImService);
|
||||
//# sourceMappingURL=user_im.service.js.map
|
||||
+1
File diff suppressed because one or more lines are too long
@@ -0,0 +1,7 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { UserMessageModel } from 'src/model/user_message.model';
|
||||
export declare class UserMessageService {
|
||||
private userMessageModel;
|
||||
constructor(userMessageModel: Repository<UserMessageModel>);
|
||||
markAsRead(id: number): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
"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.UserMessageService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const user_message_model_1 = require("../../../model/user_message.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const user_id_context_1 = require("../../common/context/user_id.context");
|
||||
let UserMessageService = class UserMessageService {
|
||||
userMessageModel;
|
||||
constructor(userMessageModel) {
|
||||
this.userMessageModel = userMessageModel;
|
||||
}
|
||||
async markAsRead(id) {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
await this.userMessageModel.update({ id, userId }, { isRead: 1 });
|
||||
return api_1.Api.success();
|
||||
}
|
||||
};
|
||||
exports.UserMessageService = UserMessageService;
|
||||
exports.UserMessageService = UserMessageService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(user_message_model_1.UserMessageModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository])
|
||||
], UserMessageService);
|
||||
//# sourceMappingURL=user_message.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"user_message.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/user_message.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,0EAAgE;AAChE,0CAAyC;AACzC,0EAA0E;AAGnE,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAGnB;IAFV,YAEU,gBAA8C;QAA9C,qBAAgB,GAAhB,gBAAgB,CAA8B;IACrD,CAAC;IAKJ,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,MAAM,GAAG,IAAA,kCAAgB,GAAE,CAAC;QAElC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAElE,OAAO,SAAG,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AAhBY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,qCAAgB,CAAC,CAAA;qCACT,oBAAU;GAH3B,kBAAkB,CAgB9B"}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { UserVerifyModel } from 'src/model/user_verify.model';
|
||||
export declare class UserVerifyService {
|
||||
private userVerifyModel;
|
||||
constructor(userVerifyModel: Repository<UserVerifyModel>);
|
||||
getVerifyInfo(): Promise<import("src/app/common/api").ApiResponseVo<{
|
||||
hasUpload: boolean;
|
||||
isApproved: boolean;
|
||||
} | undefined>>;
|
||||
submitVerifyInfo(realName: string, idCardNo: string, idCardFront: string, idCardBack: string, handHoldIdCard: string): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
}
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
"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.UserVerifyService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const user_verify_model_1 = require("../../../model/user_verify.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const user_id_context_1 = require("../../common/context/user_id.context");
|
||||
let UserVerifyService = class UserVerifyService {
|
||||
userVerifyModel;
|
||||
constructor(userVerifyModel) {
|
||||
this.userVerifyModel = userVerifyModel;
|
||||
}
|
||||
async getVerifyInfo() {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
const verifyRecord = await this.userVerifyModel.findOne({
|
||||
where: { userId },
|
||||
});
|
||||
if (!verifyRecord) {
|
||||
return api_1.Api.success({
|
||||
hasUpload: false,
|
||||
isApproved: false,
|
||||
});
|
||||
}
|
||||
return api_1.Api.success({
|
||||
hasUpload: true,
|
||||
isApproved: verifyRecord.status === user_verify_model_1.VerifyAuditStatus.Approved,
|
||||
status: verifyRecord.status,
|
||||
realName: verifyRecord.realName,
|
||||
idCardNo: verifyRecord.idCardNo,
|
||||
idCardFront: verifyRecord.idCardFront,
|
||||
idCardBack: verifyRecord.idCardBack,
|
||||
handHoldIdCard: verifyRecord.handHoldIdCard,
|
||||
rejectReason: verifyRecord.rejectReason,
|
||||
});
|
||||
}
|
||||
async submitVerifyInfo(realName, idCardNo, idCardFront, idCardBack, handHoldIdCard) {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
const existingRecord = await this.userVerifyModel.findOne({
|
||||
where: { userId },
|
||||
});
|
||||
if (existingRecord &&
|
||||
existingRecord.status === user_verify_model_1.VerifyAuditStatus.Approved) {
|
||||
return api_1.Api.error('实名认证已审核通过,无法重复提交');
|
||||
}
|
||||
if (existingRecord) {
|
||||
await this.userVerifyModel.update({ id: existingRecord.id }, {
|
||||
realName,
|
||||
idCardNo,
|
||||
idCardFront,
|
||||
idCardBack,
|
||||
handHoldIdCard,
|
||||
status: user_verify_model_1.VerifyAuditStatus.Pending,
|
||||
rejectReason: undefined,
|
||||
});
|
||||
}
|
||||
else {
|
||||
const verifyRecord = this.userVerifyModel.create({
|
||||
userId,
|
||||
realName,
|
||||
idCardNo,
|
||||
idCardFront,
|
||||
idCardBack,
|
||||
handHoldIdCard,
|
||||
status: user_verify_model_1.VerifyAuditStatus.Pending,
|
||||
});
|
||||
await this.userVerifyModel.save(verifyRecord);
|
||||
}
|
||||
return api_1.Api.success();
|
||||
}
|
||||
};
|
||||
exports.UserVerifyService = UserVerifyService;
|
||||
exports.UserVerifyService = UserVerifyService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(user_verify_model_1.UserVerifyModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository])
|
||||
], UserVerifyService);
|
||||
//# sourceMappingURL=user_verify.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"user_verify.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/user_verify.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAAmD;AACnD,qCAAqC;AACrC,wEAGqC;AACrC,0CAAyC;AACzC,0EAA0E;AAGnE,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAGlB;IAFV,YAEU,eAA4C;QAA5C,oBAAe,GAAf,eAAe,CAA6B;IACnD,CAAC;IAKJ,KAAK,CAAC,aAAa;QACjB,MAAM,MAAM,GAAG,IAAA,kCAAgB,GAAE,CAAC;QAElC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YACtD,KAAK,EAAE,EAAE,MAAM,EAAE;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,SAAG,CAAC,OAAO,CAAC;gBACjB,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,SAAG,CAAC,OAAO,CAAC;YACjB,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,YAAY,CAAC,MAAM,KAAK,qCAAiB,CAAC,QAAQ;YAC9D,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,cAAc,EAAE,YAAY,CAAC,cAAc;YAC3C,YAAY,EAAE,YAAY,CAAC,YAAY;SACxC,CAAC,CAAC;IACL,CAAC;IAKD,KAAK,CAAC,gBAAgB,CACpB,QAAgB,EAChB,QAAgB,EAChB,WAAmB,EACnB,UAAkB,EAClB,cAAsB;QAEtB,MAAM,MAAM,GAAG,IAAA,kCAAgB,GAAE,CAAC;QAGlC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;YACxD,KAAK,EAAE,EAAE,MAAM,EAAE;SAClB,CAAC,CAAC;QAGH,IACE,cAAc;YACd,cAAc,CAAC,MAAM,KAAK,qCAAiB,CAAC,QAAQ,EACpD,CAAC;YACD,OAAO,SAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YAEnB,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAC/B,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,EACzB;gBACE,QAAQ;gBACR,QAAQ;gBACR,WAAW;gBACX,UAAU;gBACV,cAAc;gBACd,MAAM,EAAE,qCAAiB,CAAC,OAAO;gBACjC,YAAY,EAAE,SAAS;aACxB,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YAEN,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;gBAC/C,MAAM;gBACN,QAAQ;gBACR,QAAQ;gBACR,WAAW;gBACX,UAAU;gBACV,cAAc;gBACd,MAAM,EAAE,qCAAiB,CAAC,OAAO;aAClC,CAAC,CAAC;YACH,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,SAAG,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;CACF,CAAA;AA3FY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,0BAAgB,EAAC,mCAAe,CAAC,CAAA;qCACT,oBAAU;GAH1B,iBAAiB,CA2F7B"}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { WalletModel } from 'src/model/wallet.model';
|
||||
import { SystemConfigService } from 'src/app/common/service/system_config.service';
|
||||
export declare class WalletService {
|
||||
private walletModel;
|
||||
private systemConfigService;
|
||||
constructor(walletModel: Repository<WalletModel>, systemConfigService: SystemConfigService);
|
||||
getWallet(userId: number): Promise<import("src/app/common/api").ApiResponseVo<null> | import("src/app/common/api").ApiResponseVo<WalletModel | undefined>>;
|
||||
transfer(): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
"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.WalletService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const wallet_model_1 = require("../../../model/wallet.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const system_config_service_1 = require("../../common/service/system_config.service");
|
||||
const user_id_context_1 = require("../../common/context/user_id.context");
|
||||
const data_source_context_1 = require("../../common/context/data_source.context");
|
||||
const wallet_bill_model_1 = require("../../../model/wallet_bill.model");
|
||||
const repository_help_1 = require("../../common/util/repository_help");
|
||||
const balance_log_help_1 = require("../../common/util/balance_log_help");
|
||||
let WalletService = class WalletService {
|
||||
walletModel;
|
||||
systemConfigService;
|
||||
constructor(walletModel, systemConfigService) {
|
||||
this.walletModel = walletModel;
|
||||
this.systemConfigService = systemConfigService;
|
||||
}
|
||||
async getWallet(userId) {
|
||||
const wallet = await this.walletModel.findOne({
|
||||
where: { userId },
|
||||
});
|
||||
if (!wallet) {
|
||||
return api_1.Api.error('钱包不存在');
|
||||
}
|
||||
return api_1.Api.success(wallet);
|
||||
}
|
||||
async transfer() {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
const wallet = await this.walletModel.findOneByOrFail({ userId });
|
||||
const config = await this.systemConfigService.readConfig();
|
||||
const publicityFund = wallet.publicityFund;
|
||||
const minTransferPublicityAmount = config.minTransferPublicityAmount;
|
||||
if (Number(publicityFund) < Number(minTransferPublicityAmount)) {
|
||||
return api_1.Api.error(`宣传金满${Number(minTransferPublicityAmount).toLocaleString()}才能划转到余额`);
|
||||
}
|
||||
return data_source_context_1.DataSourceContext.startTransaction(async (ctx) => {
|
||||
const walletRepo = ctx.getRepository(wallet_model_1.WalletModel);
|
||||
const walletBillRepo = ctx.getRepository(wallet_bill_model_1.WalletBillModel);
|
||||
const count = await repository_help_1.RepositoryHelp.update(walletRepo, {
|
||||
userId,
|
||||
publicityFund: (0, typeorm_2.MoreThanOrEqual)(wallet.publicityFund),
|
||||
}, {
|
||||
publicityFund: '0',
|
||||
balance: () => `balance + ${wallet.publicityFund}`,
|
||||
});
|
||||
if (!count) {
|
||||
return api_1.Api.error('宣传进不足');
|
||||
}
|
||||
const updatedWallet = await walletRepo.findOneByOrFail({ id: wallet.id });
|
||||
await balance_log_help_1.BalanceLogHelp.record(walletBillRepo, {
|
||||
userId,
|
||||
type: wallet_bill_model_1.WalletBillType.Transfer,
|
||||
before: wallet.balance,
|
||||
after: updatedWallet.balance,
|
||||
amount: wallet.publicityFund,
|
||||
remark: `宣传金划转,金额 ${wallet.publicityFund}`,
|
||||
});
|
||||
return api_1.Api.success();
|
||||
});
|
||||
}
|
||||
};
|
||||
exports.WalletService = WalletService;
|
||||
exports.WalletService = WalletService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(wallet_model_1.WalletModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository,
|
||||
system_config_service_1.SystemConfigService])
|
||||
], WalletService);
|
||||
//# sourceMappingURL=wallet.service.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"wallet.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/wallet.service.ts"],"names":[],"mappings":"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"}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
import { Repository } from 'typeorm';
|
||||
import { WithdrawModel } from 'src/model/withdraw.model';
|
||||
import { WalletModel } from 'src/model/wallet.model';
|
||||
import { UserBankModel } from 'src/model/user_bank.model';
|
||||
import { WalletBillModel } from 'src/model/wallet_bill.model';
|
||||
import { SystemConfigService } from 'src/app/common/service/system_config.service';
|
||||
export declare class WithdrawService {
|
||||
private withdrawModel;
|
||||
private walletModel;
|
||||
private userBankModel;
|
||||
private walletBillModel;
|
||||
private systemConfigService;
|
||||
constructor(withdrawModel: Repository<WithdrawModel>, walletModel: Repository<WalletModel>, userBankModel: Repository<UserBankModel>, walletBillModel: Repository<WalletBillModel>, systemConfigService: SystemConfigService);
|
||||
applyWithdraw(amount: string, userBankId: number): Promise<import("src/app/common/api").ApiResponseVo<unknown>>;
|
||||
}
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
"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.WithdrawService = void 0;
|
||||
const common_1 = require("@nestjs/common");
|
||||
const typeorm_1 = require("@nestjs/typeorm");
|
||||
const typeorm_2 = require("typeorm");
|
||||
const withdraw_model_1 = require("../../../model/withdraw.model");
|
||||
const wallet_model_1 = require("../../../model/wallet.model");
|
||||
const user_bank_model_1 = require("../../../model/user_bank.model");
|
||||
const wallet_bill_model_1 = require("../../../model/wallet_bill.model");
|
||||
const api_1 = require("../../common/api");
|
||||
const user_id_context_1 = require("../../common/context/user_id.context");
|
||||
const data_source_context_1 = require("../../common/context/data_source.context");
|
||||
const balance_log_help_1 = require("../../common/util/balance_log_help");
|
||||
const system_config_service_1 = require("../../common/service/system_config.service");
|
||||
let WithdrawService = class WithdrawService {
|
||||
withdrawModel;
|
||||
walletModel;
|
||||
userBankModel;
|
||||
walletBillModel;
|
||||
systemConfigService;
|
||||
constructor(withdrawModel, walletModel, userBankModel, walletBillModel, systemConfigService) {
|
||||
this.withdrawModel = withdrawModel;
|
||||
this.walletModel = walletModel;
|
||||
this.userBankModel = userBankModel;
|
||||
this.walletBillModel = walletBillModel;
|
||||
this.systemConfigService = systemConfigService;
|
||||
}
|
||||
async applyWithdraw(amount, userBankId) {
|
||||
const userId = (0, user_id_context_1.getUserIdContext)();
|
||||
const amountNum = parseFloat(amount);
|
||||
if (isNaN(amountNum) || amountNum <= 0) {
|
||||
return api_1.Api.error('无效的提现金额');
|
||||
}
|
||||
const systemConfig = await this.systemConfigService.readConfig();
|
||||
const minWithdrawAmount = systemConfig.minWithdrawAmount;
|
||||
if (parseFloat(amount) < parseFloat(minWithdrawAmount)) {
|
||||
return api_1.Api.error(`最低提现金额为 ${Number(minWithdrawAmount).toLocaleString()} 元`);
|
||||
}
|
||||
const userBank = await this.userBankModel.findOne({
|
||||
where: { id: userBankId, userId },
|
||||
});
|
||||
if (!userBank) {
|
||||
return api_1.Api.error('银行卡不存在');
|
||||
}
|
||||
const wallet = await this.walletModel.findOne({
|
||||
where: { userId },
|
||||
});
|
||||
if (!wallet) {
|
||||
return api_1.Api.error('用户钱包不存在');
|
||||
}
|
||||
await data_source_context_1.DataSourceContext.startTransaction(async (transaction) => {
|
||||
const walletRepo = transaction.getRepository(wallet_model_1.WalletModel);
|
||||
const walletBillRepo = transaction.getRepository(wallet_bill_model_1.WalletBillModel);
|
||||
const withdrawRepo = transaction.getRepository(withdraw_model_1.WithdrawModel);
|
||||
const updateResult = await walletRepo
|
||||
.createQueryBuilder('wallet')
|
||||
.update(wallet_model_1.WalletModel)
|
||||
.set({
|
||||
balance: () => `balance - ${amount}`,
|
||||
frozenBalance: () => `frozenBalance + ${amount}`,
|
||||
})
|
||||
.where('id = :id', { id: wallet.id })
|
||||
.andWhere('balance >= :amount', { amount })
|
||||
.execute();
|
||||
if (updateResult.affected === 0) {
|
||||
throw new common_1.HttpException('余额不足', common_1.HttpStatus.BAD_REQUEST);
|
||||
}
|
||||
const updatedWallet = await walletRepo.findOne({
|
||||
where: { id: wallet.id },
|
||||
});
|
||||
if (!updatedWallet) {
|
||||
throw new Error('钱包不存在');
|
||||
}
|
||||
await balance_log_help_1.BalanceLogHelp.record(walletBillRepo, {
|
||||
userId,
|
||||
type: wallet_bill_model_1.WalletBillType.Withdrawal,
|
||||
before: wallet.balance,
|
||||
after: updatedWallet.balance,
|
||||
amount,
|
||||
remark: `提现申请,金额 ${amount}`,
|
||||
});
|
||||
const withdraw = withdrawRepo.create({
|
||||
userId,
|
||||
amount,
|
||||
actualAmount: amount,
|
||||
userBankId,
|
||||
status: withdraw_model_1.WithdrawStatus.Pending,
|
||||
cardNo: userBank.cardNo,
|
||||
bankName: userBank.bankName,
|
||||
phone: userBank.phone,
|
||||
});
|
||||
await withdrawRepo.save(withdraw);
|
||||
});
|
||||
return api_1.Api.success();
|
||||
}
|
||||
};
|
||||
exports.WithdrawService = WithdrawService;
|
||||
exports.WithdrawService = WithdrawService = __decorate([
|
||||
(0, common_1.Injectable)(),
|
||||
__param(0, (0, typeorm_1.InjectRepository)(withdraw_model_1.WithdrawModel)),
|
||||
__param(1, (0, typeorm_1.InjectRepository)(wallet_model_1.WalletModel)),
|
||||
__param(2, (0, typeorm_1.InjectRepository)(user_bank_model_1.UserBankModel)),
|
||||
__param(3, (0, typeorm_1.InjectRepository)(wallet_bill_model_1.WalletBillModel)),
|
||||
__metadata("design:paramtypes", [typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
typeorm_2.Repository,
|
||||
system_config_service_1.SystemConfigService])
|
||||
], WithdrawService);
|
||||
//# sourceMappingURL=withdraw.service.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"withdraw.service.js","sourceRoot":"","sources":["../../../../src/app/api/service/withdraw.service.ts"],"names":[],"mappings":"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"}
|
||||
Reference in New Issue
Block a user