feat: 删除多余模块

This commit is contained in:
chaosBreaking
2019-08-31 15:01:13 +08:00
parent dc5423d356
commit 8202aa17c3
10 changed files with 0 additions and 491 deletions

View File

@@ -1,104 +0,0 @@
'use strict';
const Estate = require('./estate.model');
const filter = estate => {
// 用于返回前过滤敏感数据
};
let getGlobalState = (() => {
let GlobalState = [];
let lastUpdateAt = Date.now();
let freq = 1000 * 60 * 5; // 5min更新一次
let timezones = Array.from({length:24});
const refresh = async () => {
const jobs= timezones.map(async (v, i) => Estate.find({ startTime: i, status: 1 }).countDocuments());
const data = await Promise.all(jobs).catch(err => {
mylog.error('地产全局状态获取失败:', err);
return null;
});
// eslint-disable-next-line require-atomic-updates
if (data) GlobalState = data;
lastUpdateAt = Date.now();
};
refresh();
return async () => {
if (GlobalState.length === 0 || Date.now() - lastUpdateAt >= freq) {
await refresh();
}
return GlobalState;
};
})();
module.exports = {
getEstateList: async function (req, res) {
const { pageSize, pageIndex, timezone } = req.query;
if (pageSize && pageIndex && timezone) {
const list = await Estate.find({
timezone,
}, {
skip: +pageSize * (+pageIndex - 1),
limit: +pageSize
}).exec();
if (list && Array.isArray(list)) {
res.json({
code: 0,
msg: '',
data: list
});
}
} else {
res.json({
code: 1,
msg: 'Param required'
});
}
},
getEstateDetail: async function (req, res) {
const { id } = req.query;
if (id) {
const estate = await Estate.findById(id).exec();
if (estate) {
res.json({
code: 0,
msg: '',
data: estate
});
}
}
res.json({
code: 1,
msg: 'Cannot find estate, invalid id',
data: null
});
},
publishEstate: function (req, res) {
const { data = {}} = req.body;
const invalidEstate = !data || !data.name || (!data.basePrice && !data.price) || !data.startTime || !data.profit || data.profit > 1;
if (!data.basePrice && data.price) data.basePrice = data.price;
if (!data.price && data.basePrice) data.price = data.basePrice;
if (invalidEstate) {
return res.json({
code: 1,
msg: 'Invalid parameter'
});
}
const estate = new Estate(data);
return estate.save().then(newEstate => {
res.json({
code: 0,
msg: 'success',
data: newEstate
});
}).catch(err => {
res.json({
code: 1,
msg: JSON.stringify(err)
});
});
},
getState: async function (req, res) {
return res.json({
code: 0,
data: await getGlobalState()
});
}
};

View File

@@ -1,102 +0,0 @@
'use strict';
const mongoose = require('mongoose');
const EstateSchema = new mongoose.Schema({
name: {
// 地皮名
type: String,
required: true,
unique: true
},
type: {
// 为edition 2保留分为系统生成的地皮和玩家自建的地皮
type: String,
default: 'v1'
},
basePrice: {
type: String,
required: true
},
price: {
// 地皮的市场标价
type: Number,
required: true
},
profit: {
// 收益率
type: Number,
required: true
},
startTime: {
// 开始抢购时间
type: String,
required: true
},
period: {
// 换手周期目前默认为24(hour)
type: Number,
default: 24,
},
status: {
// 当前状态 不可买:可买 -> 0 : 1
type: Number,
default: 1
},
desc: {
// 地皮描述
type: String,
default: ''
},
image: {
// 图片链接
type: String
},
currentOwner: {
type: String
},
lastTurnAt: {
type: String
},
turnTimes: {
type: Number,
default: 0
},
option: {
type: {}
}
}, {
timestamps: {
createdAt: 'createdAt',
updatedAt: 'updatedAt'
}
});
const EstateModel = mongoose.model('Estate', EstateSchema);
EstateModel.prototype.purchase = async function (userId, option = {}) {
return EstateModel.findByIdAndUpdate(this.id, {
status: 0,
currentOwner: userId,
lastTurnAt: new Date().toISOString(),
$inc: { turnTimes: 1 }
}, option).exec().catch(err => {
mylog.error(err);
return null;
});
};
EstateModel.prototype.sell = async function (option = {}) {
const price = +this.price * (1 + +this.profit);
return EstateModel.findByIdAndUpdate(this.id, {
$set: {
status: 1,
currentOwner: '',
price,
}
}, option).exec().catch(err => {
mylog.error(err);
return null;
});
};
module.exports = EstateModel;

View File

@@ -1,31 +0,0 @@
const indexRoute = '/estate';
const controller = require('./estate.controller');
const services = [
{
url: '/list',
method: 'GET',
controller: controller.getEstateList
},
{
url: '/detail',
method: 'GET',
controller: controller.getEstateDetail
},
{
url: '/publish',
method: 'POST',
controller: controller.publishEstate
},
{
url: '/state',
method: 'GET',
controller: controller.getState
},
];
module.exports = services.map(service => {
// 可以在此处对要导出的服务map进行统一处理
service.url = indexRoute + service.url;
return service;
});

View File

@@ -1,60 +0,0 @@
'use strict';
const EstateOrder = require('./estateOrder.model');
const { purchase } = require('./estateOrder.handler');
module.exports = {
purchase: async function (req, res) {
const actorId = res.locals.user.userId;
const { estate } = req.body;
const exec = await purchase(actorId, estate);
if (exec.code === 0 && exec.res) {
return res.json({
code: 0,
msg: 'success',
data: exec.res
});
}
return res.json({
code: exec.code,
msg: exec.msg
});
},
getUserEstateList (req, res) {
const { userId } = res.locals.user;
const { pageSize, pageIndex, type } = req.query;
// 只返回detail内容
EstateOrder.find({ type, userId }, 'detail').skip((+pageIndex - 1) * +pageSize).limit(+pageSize)
.then(list => {
res.json({
code: 0,
msg: '',
data: list
});
})
.catch(err => {
res.json({
code: 1,
msg: err
});
});
},
getUserEstateDetail (req, res) {
const { userId } = res.locals.user;
const option = req.query;
EstateOrder.find({ userId, ...option }, 'detail')
.then(list => {
res.json({
code: 0,
msg: '',
data: list
});
})
.catch(err => {
res.json({
code: 1,
msg: err
});
});
}
};

View File

@@ -1,73 +0,0 @@
'use strict';
const mongoose = require('mongoose');
const User = require('../user/user.model');
const Estate = require('../estate/estate.model');
const EstateOrder = require('./estateOrder.model');
const { createAction } = require('../action/action.handler');
module.exports = {
purchase: async function (actorId, estateId) {
/*
* 1. 生成对应的action
* 2. 将目标estate打上用户印记
* 3. 在estateOrder内记录用户买入情况
* 4. 对用户扣款
*/
try {
const [actor, estate] = await Promise.all([
User.findById(actorId).exec(),
Estate.findById(estateId).exec()
]);
if (!actor) return { res: null, code: 1, msg: 'unknow user' };
if (!estate || estate.status !== 1) return { res: null, code: 1, msg: 'estate unavailable' };
const action = createAction(2, { actor: actorId, estate, amount: estate.price, remain: actor.asset });
const order = new EstateOrder({ userId: actorId, estateId, type: '0', status: 'holding', amount: estate.price , detail: { ...estate } });
if (!Number.isFinite(+estate.price)) throw new Error('非法的地产价格!');
let [ estateSession, orderSession, actorSession ] = await Promise.all([
mongoose.startSession(),
mongoose.startSession(),
mongoose.startSession()
]);
await Promise.all([
estateSession.startTransaction(),
orderSession.startTransaction(),
actorSession.startTransaction()
]);
const estateOpts = { session: estateSession, returnOriginal: false };
const orderOpts = { session: orderSession, returnOriginal: false };
const actorOpts = { session: actorSession, returnOriginal: false };
try {
await Promise.all([
estate.purchase(actorId, estateOpts),
order.save(orderOpts),
actor.decrease('log', +estate.price, actorOpts),
action.save()
]);
await Promise.all([
estateSession.commitTransaction(),
orderSession.commitTransaction(),
actorSession.commitTransaction()
]);
return { res : action.toJSON(), code: 0 };
} catch (error) {
// mylog.error(error);
await Promise.all([
action.remove(),
estateSession.abortTransaction(),
orderSession.abortTransaction(),
actorSession.abortTransaction()
]);
return { res: null, code: 3, msg: 'Insufficient funds' };
} finally {
await Promise.all([
estateSession.endSession(),
orderSession.endSession(),
actorSession.endSession()
]);
}
} catch (error) {
mylog.error(error);
return { res: null, code: 500, msg: JSON.stringify(error) };
}
}
};

View File

@@ -1,58 +0,0 @@
'use strict';
const mongoose = require('mongoose');
const EstateOrderSchema = new mongoose.Schema({
userId: {
// 订单所属用户的objId
type: String,
required: true
},
estateId: {
type: String,
required: true
},
type: {
// 订单类型
type: String,
required: true
},
amount: {
type: Number,
required: true
},
status: {
// 订单状态
/**
* holding: 持有
* sold: 卖出
*/
type: String,
},
detail: {
// 订单详情/快照
type: {},
required: true
},
option: {
type: {}
}
}, {
timestamps: {
createdAt: 'createdAt',
updatedAt: 'updatedAt'
}
});
const EstateOrderModel = mongoose.model('estateOrder', EstateOrderSchema);
EstateOrderModel.prototype.finish = async function (option) {
return this.updateOne({
$set: {
status: 'sold'
}
}, option).exec().catch(err => {
throw new Error('订单完成状态转换失败', JSON.stringify(err));
});
};
module.exports = EstateOrderModel;

View File

@@ -1,25 +0,0 @@
const indexRoute = '/estateorder';
const controller = require('./estateOrder.controller');
const services = [
{
url: '/list',
method: 'GET',
controller: controller.getUserEstateList
},
{
url: '/detail',
method: 'GET',
controller: controller.getUserEstateDetail
},
{
url: '/purchase',
method: 'POST',
controller: controller.purchase
},
];
module.exports = services.map(service => {
// 可以在此处对要导出的服务map进行统一处理
service.url = indexRoute + service.url;
return service;
});

View File

@@ -1,5 +0,0 @@
const { inject } = require('../../common/Provider');
module.exports = {
};

View File

@@ -1,22 +0,0 @@
'use strict';
const mongoose = require('mongoose');
const MarketSchema = new mongoose.Schema({
name: {
type: String,
required: true,
unique: true
},
type: {
type: String,
required: true
},
price: {
type: String,
required: true
},
});
const marketSchema = mongoose.model('Market', MarketSchema);
module.exports = marketSchema;

View File

@@ -1,11 +0,0 @@
const indexRoute = '/market';
const controller = require('./market.controller');
const services = [
];
module.exports = services.map(service => {
// 可以在此处对要导出的服务map进行统一处理
service.url = indexRoute + service.url;
return service;
});