yapi/server/models/project.js
2017-08-09 16:16:35 +08:00

145 lines
3.3 KiB
JavaScript

import yapi from '../yapi.js';
import baseModel from './base.js';
class projectModel extends baseModel {
getName() {
return 'project';
}
getSchema() {
return {
uid: {type: Number, required: true},
name: { type: String, required: true },
basepath: {type: String },
desc: String,
group_id: { type: Number, required: true },
project_type: {type:String, required: true, enum: ['public', 'private']},
members: [
{uid: Number, role: {type: String, enum:['owner', 'dev'], username: String, email: String}}
],
protocol: { type: String, required: true },
prd_host: { type: String, required: true },
env: [
{ name: String, domain: String }
],
add_time: Number,
up_time: Number
};
}
save(data) {
let m = new this.model(data);
return m.save();
}
get(id) {
return this.model.findOne({
_id: id
}).exec();
}
getByDomain(domain) {
return this.model.find({
prd_host: domain
}).exec();
}
checkNameRepeat(name) {
return this.model.count({
name: name
});
}
checkDomainRepeat(domain, basepath) {
return this.model.count({
prd_host: domain,
basepath: basepath
});
}
list(group_id, auth) {
let params = {group_id: group_id}
if(!auth) params.project_type = 'public';
return this.model.find(params).sort({ _id: -1 }).exec();
}
listWithPaging(group_id, page, limit) {
page = parseInt(page);
limit = parseInt(limit);
return this.model.find({
group_id: group_id
}).sort({ _id: -1 }).skip((page - 1) * limit).limit(limit).exec();
}
listCount(group_id) {
return this.model.count({
group_id: group_id
});
}
countByGroupId(group_id) {
return this.model.count({
group_id: group_id
});
}
del(id) {
return this.model.deleteOne({
_id: id
});
}
up(id, data) {
data.up_time = yapi.commons.time();
return this.model.update({
_id: id
}, data, { runValidators: true });
}
addMember(id, data) {
return this.model.update(
{
_id: id
}, {
$push: { members: data }
}
);
}
delMember(id, uid) {
return this.model.update(
{
_id: id
}, {
$pull: { members: uid }
}
);
}
checkMemberRepeat(id, uid) {
return this.model.count({
_id: id,
"members.uid": uid
});
}
changeMemberRole(id, uid, role) {
return this.model.update(
{
_id: id,
"members.uid": uid
}, {
"$set": { "members.$.uid": role}
}
);
}
search(keyword) {
return this.model.find({
name: new RegExp(keyword, 'ig')
})
.limit(10);
}
}
module.exports = projectModel;