✨ feat(37需求): 注销账号
This commit is contained in:
@@ -54,6 +54,8 @@ export const STATUS = {
|
|||||||
CHANNEL_ERR: { code: 10018, simStr: '无此渠道' },
|
CHANNEL_ERR: { code: 10018, simStr: '无此渠道' },
|
||||||
VALIDATE_ERR: { code: 10019, simStr: '渠道校验错误' },
|
VALIDATE_ERR: { code: 10019, simStr: '渠道校验错误' },
|
||||||
SERVER_STOP_REGISTER: { code: 10020, simStr: '服务器已停止注册' },
|
SERVER_STOP_REGISTER: { code: 10020, simStr: '服务器已停止注册' },
|
||||||
|
ROLE_CLOSE_TIME_OVER: { code: 10021, simStr: '该账号已注销不可再取消' },
|
||||||
|
ROLE_CLOSED: { code: 10022, simStr: '该账号已注销' },
|
||||||
// 战斗相关状态 20000 - 29999
|
// 战斗相关状态 20000 - 29999
|
||||||
// 战斗通用 20000 - 20099
|
// 战斗通用 20000 - 20099
|
||||||
BATTLE_MISS_INFO: { code: 20001, simStr: '缺少关卡信息' },
|
BATTLE_MISS_INFO: { code: 20001, simStr: '缺少关卡信息' },
|
||||||
|
|||||||
+14
-1
@@ -355,8 +355,11 @@ export default class Role extends BaseModel {
|
|||||||
@prop({ required: false })
|
@prop({ required: false })
|
||||||
hasComment: boolean;
|
hasComment: boolean;
|
||||||
|
|
||||||
|
@prop({ required: true, select: false })
|
||||||
|
closeTime: number;
|
||||||
|
|
||||||
public static async findAllByUid(uid: number, getters = false, virtuals = true) {
|
public static async findAllByUid(uid: number, getters = false, virtuals = true) {
|
||||||
const role: RoleType[] = await RoleModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId head frame spine heads frames spines lv updatedAt createTime').lean({ getters, virtuals });
|
const role: RoleType[] = await RoleModel.find({ 'userInfo.uid': uid }).select('roleId roleName serverId head frame spine heads frames spines lv updatedAt createTime +closeTime').lean({ getters, virtuals });
|
||||||
return role;
|
return role;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -858,6 +861,16 @@ export default class Role extends BaseModel {
|
|||||||
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $set: { hasComment } }, { new: true }).select('-_id roleId hasComment').lean();
|
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $set: { hasComment } }, { new: true }).select('-_id roleId hasComment').lean();
|
||||||
return role;
|
return role;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static async closeAccount(roleId: string, closeTime: number) {
|
||||||
|
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $set: { closeTime } }, { new: true }).select('roleId +closeTime').lean();
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async cancelCloseAccount(roleId: string, now: number) {
|
||||||
|
let role: RoleType = await RoleModel.findOneAndUpdate({ roleId, closeTime: { $gte: now } }, { $set: { closeTime: 0 } }, { new: true }).select('roleId +closeTime').lean();
|
||||||
|
return role;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const RoleModel = getModelForClass(Role);
|
export const RoleModel = getModelForClass(Role);
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { nowSeconds } from 'app/pubUtils/timeUtil';
|
||||||
import { RoleType } from '../../db/Role';
|
import { RoleType } from '../../db/Role';
|
||||||
import { ServerlistType } from '../../db/Serverlist';
|
import { ServerlistType } from '../../db/Serverlist';
|
||||||
|
|
||||||
@@ -55,6 +56,8 @@ export class ServerParamWithRole extends ServerParam {
|
|||||||
spine: number; // 形象
|
spine: number; // 形象
|
||||||
lv: number; // 等级
|
lv: number; // 等级
|
||||||
updatedAt: Date;
|
updatedAt: Date;
|
||||||
|
isClose: boolean; // 是否已经注销
|
||||||
|
closeTime: number; // 注销生效时间
|
||||||
|
|
||||||
constructor(role: RoleType, server: ServerlistType) {
|
constructor(role: RoleType, server: ServerlistType) {
|
||||||
super(server);
|
super(server);
|
||||||
@@ -68,5 +71,7 @@ export class ServerParamWithRole extends ServerParam {
|
|||||||
this.spine = role.spine;
|
this.spine = role.spine;
|
||||||
this.lv = role.lv;
|
this.lv = role.lv;
|
||||||
this.updatedAt = role.updatedAt;
|
this.updatedAt = role.updatedAt;
|
||||||
|
this.isClose = role.closeTime > 0 && role.closeTime < nowSeconds();
|
||||||
|
this.closeTime = role.closeTime||0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,4 +72,16 @@ export default class AccountController extends Controller {
|
|||||||
const { roleId, magicWord } = ctx.request.body;
|
const { roleId, magicWord } = ctx.request.body;
|
||||||
ctx.body = await ctx.service.auth.deleteRole(roleId, magicWord);
|
ctx.body = await ctx.service.auth.deleteRole(roleId, magicWord);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async closeAccount() {
|
||||||
|
const { ctx } = this;
|
||||||
|
const { roleId } = ctx.request.body;
|
||||||
|
ctx.body = await ctx.service.auth.closeAccount(roleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async cancelCloseAccount() {
|
||||||
|
const { ctx } = this;
|
||||||
|
const { roleId } = ctx.request.body;
|
||||||
|
ctx.body = await ctx.service.auth.cancelCloseAccount(roleId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ export default (app: Application) => {
|
|||||||
router.post('/user/checkversion', tokenParser, controller.game.checkVersion);
|
router.post('/user/checkversion', tokenParser, controller.game.checkVersion);
|
||||||
router.post('/user/checkv', tokenParser, controller.game.checkVersion); // 增加一个接口,规避 iOS 敏感词
|
router.post('/user/checkv', tokenParser, controller.game.checkVersion); // 增加一个接口,规避 iOS 敏感词
|
||||||
router.post('/user/deleterole', controller.account.deleteRole);
|
router.post('/user/deleterole', controller.account.deleteRole);
|
||||||
|
router.post('/user/closeaccount', controller.account.closeAccount);
|
||||||
|
router.post('/user/cancelcloseaccount', controller.account.cancelCloseAccount);
|
||||||
router.post('/game/getserverlist', tokenParser, controller.game.getServerList);
|
router.post('/game/getserverlist', tokenParser, controller.game.getServerList);
|
||||||
router.post('/game/getnotice', tokenParser, controller.game.getnotice);
|
router.post('/game/getnotice', tokenParser, controller.game.getnotice);
|
||||||
router.post('/gate/queryenter', tokenParser, controller.game.queryEnter);
|
router.post('/gate/queryenter', tokenParser, controller.game.queryEnter);
|
||||||
|
|||||||
@@ -307,11 +307,14 @@ export default class Auth extends Service {
|
|||||||
let canLogin = await this.ctx.service.utils.validateCanLogin();
|
let canLogin = await this.ctx.service.utils.validateCanLogin();
|
||||||
if(!canLogin) return this.ctx.service.utils.resResult(STATUS.ONLINE_USER_MAX);
|
if(!canLogin) return this.ctx.service.utils.resResult(STATUS.ONLINE_USER_MAX);
|
||||||
|
|
||||||
const role = await RoleModel.findByUid(uid, serverId);
|
const role = await RoleModel.findByUid(uid, serverId, 'roleId blockType +closeTime');
|
||||||
if (role) {
|
if (role) {
|
||||||
if(role.blockType == BLOCK_TYPE.BLOCK) {
|
if(role.blockType == BLOCK_TYPE.BLOCK) {
|
||||||
return ctx.service.utils.resResult(STATUS.BLOCKED);
|
return ctx.service.utils.resResult(STATUS.BLOCKED);
|
||||||
}
|
}
|
||||||
|
if(role.closeTime > 0 && role.closeTime < nowSeconds()) {
|
||||||
|
return ctx.service.utils.resResult(STATUS.ROLE_CLOSED);
|
||||||
|
}
|
||||||
return ctx.service.utils.resResult(STATUS.SUCCESS, { roleId: role.roleId });
|
return ctx.service.utils.resResult(STATUS.SUCCESS, { roleId: role.roleId });
|
||||||
}
|
}
|
||||||
return ctx.service.utils.resResult(STATUS.ROLE_NOT_FOUND);
|
return ctx.service.utils.resResult(STATUS.ROLE_NOT_FOUND);
|
||||||
@@ -481,4 +484,18 @@ export default class Auth extends Service {
|
|||||||
return ctx.service.utils.resResult(STATUS.SUCCESS);
|
return ctx.service.utils.resResult(STATUS.SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async closeAccount(roleId: string) {
|
||||||
|
const ctx = this.ctx;
|
||||||
|
let role = await RoleModel.closeAccount(roleId, nowSeconds() + 15 * 24 * 60 * 60);
|
||||||
|
if(!role) return ctx.service.utils.resResult(STATUS.ROLE_NOT_FOUND);
|
||||||
|
return ctx.service.utils.resResult(STATUS.SUCCESS, { closeTime: role.closeTime });
|
||||||
|
}
|
||||||
|
|
||||||
|
public async cancelCloseAccount(roleId: string) {
|
||||||
|
const ctx = this.ctx;
|
||||||
|
let role = await RoleModel.cancelCloseAccount(roleId, nowSeconds() + 15 * 24 * 60 * 60);
|
||||||
|
if(!role) return ctx.service.utils.resResult(STATUS.ROLE_CLOSE_TIME_OVER);
|
||||||
|
return ctx.service.utils.resResult(STATUS.SUCCESS, { closeTime: role.closeTime });
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -560,7 +560,9 @@ export default class Sdk extends Service {
|
|||||||
let redisClient: RedisClient = this.ctx.app.context.redisClient;
|
let redisClient: RedisClient = this.ctx.app.context.redisClient;
|
||||||
let servers = await redisClient.hgetallAsync(REDIS_KEY.SERVER);
|
let servers = await redisClient.hgetallAsync(REDIS_KEY.SERVER);
|
||||||
let roles = await RoleModel.findAllByUid(user.uid);
|
let roles = await RoleModel.findAllByUid(user.uid);
|
||||||
let result = roles.map(role => ({
|
let result = roles
|
||||||
|
.filter(role => role.closeTime > 0 && role.closeTime < nowSeconds())
|
||||||
|
.map(role => ({
|
||||||
id: role.roleId,
|
id: role.roleId,
|
||||||
name: role.roleName,
|
name: role.roleName,
|
||||||
level: role.lv.toString(),
|
level: role.lv.toString(),
|
||||||
|
|||||||
Reference in New Issue
Block a user