verify
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
const User = require('./user.model');
|
||||
const Fund = require('../fund/fund.model');
|
||||
const VReq = require('../vreq/vreq.model');
|
||||
const MsgCode = require('../msgCode/msgCode.controller');
|
||||
const changePwd = require('../sign/sign.controller').changePasswd;
|
||||
const Crypto = require('../../utils/crypto');
|
||||
const { parseForm } = require('../../utils/form');
|
||||
const { USER_FILE_DIR: userFileDir } = require('../../../configSec.js');
|
||||
const { createAction } = require('../action/action.handler');
|
||||
const { createTicket } = require('../ticket/ticket.handler');
|
||||
const { createVerifyReq } = require('../vreq/vreq.handler');
|
||||
const fs = require('fs');
|
||||
|
||||
if (!fs.existsSync(userFileDir)) {
|
||||
@@ -152,11 +153,35 @@ module.exports = {
|
||||
data: list
|
||||
});
|
||||
},
|
||||
async getVerifyInfo (req, res) {
|
||||
const { userId } = res.locals.user;
|
||||
return await Promise.all([User.findById(userId), VReq.find({ userId })])
|
||||
.then(([user, reqs]) => {
|
||||
const verifyLevel = user.verifyLevel;
|
||||
let verifyStatus = 'unknow';
|
||||
for (let i = 0, len = reqs.length; i < len; ++i) {
|
||||
if (reqs[i].verifyLevel === verifyLevel) {
|
||||
verifyStatus = reqs[i].verifyStatus;
|
||||
}
|
||||
}
|
||||
return res.json({
|
||||
code: 0,
|
||||
data: {
|
||||
verified: +user.verifyLevel > 0,
|
||||
verifyLevel: user.verifyLevel,
|
||||
verifyData: user.verifyData[user.verifyLevel],
|
||||
verifyStatus
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
},
|
||||
async verify (req, res) {
|
||||
const { userId } = res.locals.user;
|
||||
const user = await User.findById(userId);
|
||||
if (!user.verified) {
|
||||
if (!user.verifyLevel || user.verifyLevel < 0) {
|
||||
// 未进行过认证
|
||||
// 一级认证
|
||||
const verifyLevel = 1;
|
||||
const form = await parseForm(req, {
|
||||
tag: userId,
|
||||
@@ -173,17 +198,62 @@ module.exports = {
|
||||
});
|
||||
const action = createAction(5, {
|
||||
userId,
|
||||
level: verifyLevel,
|
||||
detail: { name, nation, idType, idNo, pic1: pic1.path, pic2: pic2.path }
|
||||
detail: { verifyLevel, name, nation, idType, idNo, pic1: pic1.path, pic2: pic2.path }
|
||||
});
|
||||
action.save();
|
||||
const verifyReq = createVerifyReq({ userId, verifyLevel, name, nation, idType, idNo, pic1: pic1.path, pic2: pic2.path });
|
||||
await Promise.all([
|
||||
action.save(),
|
||||
verifyReq.save(),
|
||||
User.findByIdAndUpdate(userId, {
|
||||
verifyData: {
|
||||
[verifyLevel]: { name, nation, idType, idNo, pic1: pic1.path, pic2: pic2.path }
|
||||
}
|
||||
})
|
||||
])
|
||||
.catch(err => mylog.error(userId, '认证信息保存失败 ',err.msg));
|
||||
return res.json({
|
||||
code: 0,
|
||||
msg: '审核信息已提交'
|
||||
});
|
||||
}
|
||||
if (user.verified && +user.verifyLevel === 1) {
|
||||
|
||||
else if (user.verified && +user.verifyLevel === 1) {
|
||||
// 二级认证
|
||||
const verifyLevel = 2;
|
||||
const form = await parseForm(req, {
|
||||
tag: userId,
|
||||
uploadDir: userFileDir,
|
||||
maxFileSize: 20 * 1024 * 1024, // 限制文件体积最大20m
|
||||
keepExtensions: true,
|
||||
encoding: 'utf-8'
|
||||
});
|
||||
const { pic } = form.data;
|
||||
if (!pic) return res.json({
|
||||
code: 1,
|
||||
msg: '缺少必要信息'
|
||||
});
|
||||
const action = createAction(5, {
|
||||
userId,
|
||||
detail: { verifyLevel, pic: pic.path }
|
||||
});
|
||||
const verifyReq = createVerifyReq({ userId, verifyLevel, pic: pic.path });
|
||||
await Promise.all([
|
||||
action.save(),
|
||||
verifyReq.save(),
|
||||
User.findByIdAndUpdate(userId, {
|
||||
verifyData: {
|
||||
[verifyLevel]: { pic: pic.path }
|
||||
}
|
||||
})
|
||||
])
|
||||
.catch(err => mylog.error(userId, '认证信息保存失败 ',err.msg));
|
||||
return res.json({
|
||||
code: 0,
|
||||
msg: '审核信息已提交'
|
||||
});
|
||||
}
|
||||
return res.json({
|
||||
code: 404,
|
||||
msg: '已经完成认证'
|
||||
});
|
||||
}
|
||||
};
|
||||
@@ -32,6 +32,14 @@ const UserSchema = new mongoose.Schema({
|
||||
avatar: {
|
||||
type: String
|
||||
},
|
||||
verifyLevel: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
verifyData: {
|
||||
type: {},
|
||||
default: {}
|
||||
},
|
||||
option: {
|
||||
type: {}
|
||||
},
|
||||
|
||||
@@ -53,6 +53,11 @@ const services = [
|
||||
method: 'POST',
|
||||
controller: controller.verify
|
||||
},
|
||||
{
|
||||
url: '/verifyInfo',
|
||||
method: 'GET',
|
||||
controller: controller.getVerifyInfo
|
||||
},
|
||||
];
|
||||
|
||||
module.exports = services.map(service => {
|
||||
|
||||
67
src/modules/vreq/vreq.controller.js
Normal file
67
src/modules/vreq/vreq.controller.js
Normal file
@@ -0,0 +1,67 @@
|
||||
'use strict';
|
||||
|
||||
const Vreq = require('./vreq.model');
|
||||
const handleTicket = require('./vreq.handler');
|
||||
|
||||
module.exports = {
|
||||
// 处理工单请求的api
|
||||
async reqHandle (req, res) {
|
||||
const { adminId } = res.locals.user;
|
||||
if (!adminId) return res.json({ code: 1, msg: '非法访问' });
|
||||
const { id } = req.body;
|
||||
// 存在性检查
|
||||
const ticket = await Vreq.findById(id).exec().catch(err => {
|
||||
mylog.error(err);
|
||||
return null;
|
||||
});
|
||||
if (!ticket) return res.json({
|
||||
code: 1,
|
||||
msg: 'unknow ticket'
|
||||
});
|
||||
// 调用处理函数
|
||||
handleTicket(ticket, adminId).then(data => {
|
||||
return res.json({
|
||||
code: 0,
|
||||
msg: 'success',
|
||||
data: JSON.stringify(data)
|
||||
});
|
||||
}).catch(err => {
|
||||
return res.json({
|
||||
code: 1,
|
||||
error: JSON.stringify(err)
|
||||
});
|
||||
});
|
||||
},
|
||||
async getReqList (req, res) {
|
||||
const { adminId } = res.locals.user;
|
||||
if (!adminId) return res.json({ code: 1, msg: '非法访问' });
|
||||
const { pageSize = 0, pageIndex = 1} = req.query;
|
||||
return Vreq.find({}).skip((+pageIndex - 1) * +pageSize).limit(+pageSize).then(data => {
|
||||
return res.json({
|
||||
code: 0,
|
||||
data
|
||||
});
|
||||
}).catch(err => {
|
||||
return res.json({
|
||||
code: 1,
|
||||
error: JSON.stringify(err)
|
||||
});
|
||||
});
|
||||
},
|
||||
async getReqDetail (req, res) {
|
||||
const { adminId } = res.locals.user;
|
||||
if (!adminId) return res.json({ code: 1, msg: '非法访问' });
|
||||
const { ticketId } = req.query;
|
||||
return Vreq.findById(ticketId).then(data => {
|
||||
return res.json({
|
||||
code: 0,
|
||||
data
|
||||
});
|
||||
}).catch(err => {
|
||||
return res.json({
|
||||
code: 1,
|
||||
error: JSON.stringify(err)
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
30
src/modules/vreq/vreq.handler.js
Normal file
30
src/modules/vreq/vreq.handler.js
Normal file
@@ -0,0 +1,30 @@
|
||||
'use strict';
|
||||
const VReq = require('./vreq.model');
|
||||
const User = require('../user/user.model');
|
||||
|
||||
function createVerifyReq (data) {
|
||||
const { userId, verifyLevel, ...rest } = data;
|
||||
return new VReq({
|
||||
userId, verifyLevel, data: rest
|
||||
});
|
||||
}
|
||||
|
||||
async function handleReq (ticket, handlerId) {
|
||||
// 所有工单在此处理,只要状态未完结(status !== 'finished'),就可以多次调用改变状态。
|
||||
ticket = await ticket.next(handlerId);
|
||||
if (ticket.status === 'processing') {
|
||||
await dealTicket(ticket);
|
||||
await ticket.next(handlerId);
|
||||
return ticket;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
async function dealTicket (ticket, user) {
|
||||
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
createVerifyReq,
|
||||
handleReq
|
||||
};
|
||||
47
src/modules/vreq/vreq.model.js
Normal file
47
src/modules/vreq/vreq.model.js
Normal file
@@ -0,0 +1,47 @@
|
||||
'use strict';
|
||||
|
||||
const mongoose = require('mongoose');
|
||||
// 实名认证工单
|
||||
const VreqSchema = new mongoose.Schema({
|
||||
userId: {
|
||||
type: String,
|
||||
},
|
||||
verifyLevel: {
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
status: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
data: {
|
||||
type: {}
|
||||
},
|
||||
info: {
|
||||
type: String,
|
||||
default: '审核中'
|
||||
},
|
||||
option: {
|
||||
type: {}
|
||||
}
|
||||
},{
|
||||
timestamps: {}
|
||||
});
|
||||
|
||||
const VreqModel = mongoose.model('Vreq', VreqSchema);
|
||||
/**
|
||||
* status: created -> processing -> finished
|
||||
*/
|
||||
VreqModel.prototype.next = async function (handler = '') {
|
||||
// handler 表示处理人
|
||||
if (+this.status === 1) return this;
|
||||
if (this.status === 0) {
|
||||
await this.update({
|
||||
status: 'processing',
|
||||
handler
|
||||
});
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
module.exports = VreqModel;
|
||||
27
src/modules/vreq/vreq.service.js
Normal file
27
src/modules/vreq/vreq.service.js
Normal file
@@ -0,0 +1,27 @@
|
||||
'use strict';
|
||||
|
||||
const indexRoute = '/vreq';
|
||||
const controller = require('./vreq.controller');
|
||||
const services = [
|
||||
{
|
||||
url: '/handle',
|
||||
method: 'POST',
|
||||
controller: controller.reqHandle
|
||||
},
|
||||
{
|
||||
url: '/list',
|
||||
method: 'GET',
|
||||
controller: controller.getReqList
|
||||
},
|
||||
{
|
||||
url: '/detail',
|
||||
method: 'GET',
|
||||
controller: controller.getReqDetail
|
||||
},
|
||||
];
|
||||
|
||||
module.exports = services.map(service => {
|
||||
// 可以在此处对要导出的服务map进行统一处理
|
||||
service.url = indexRoute + service.url;
|
||||
return service;
|
||||
});
|
||||
Reference in New Issue
Block a user