| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- const yapi = require('../yapi.js');
- const baseModel = require('./base.js');
- class projectModel extends baseModel {
- getName() {
- return 'project';
- }
- constructor(){
- super()
- this.handleEnvNullData = this.handleEnvNullData.bind(this)
- }
- getAuthList(uid){
- return this.model.find({
- $or: [{
- 'members.uid': uid,
- project_type: 'private'
- }, {
- uid,
- project_type: 'private'
- }, {
- project_type: 'public'
- }]
- }).select('group_id')
- .exec();
- }
- getSchema() {
- return {
- uid: { type: Number, required: true },
- name: { type: String, required: true },
- basepath: { type: String },
- switch_notice: { type: Boolean, default: true },
- 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,
- email_notice: { type: Boolean, default: true }
- }
- ],
- env: [{ name: String, domain: String, header: Array, global: [{
- name: String,
- value: String
- }] }],
- icon: String,
- color: String,
- add_time: Number,
- up_time: Number,
- pre_script: String,
- after_script: String,
- project_mock_script: String,
- is_mock_open: { type: Boolean, default: false },
- strice: { type: Boolean, default: false },
- is_json5: { type: Boolean, default: true },
- tag: [{name: String, desc: String}]
- };
- }
- updateMember(data) {
- return this.model.update(
- {
- 'members.uid': data.uid
- },
- {
- $set: {
- 'members.$.username': data.username,
- 'members.$.email': data.email
- }
- }
- );
- }
- save(data) {
- let m = new this.model(data);
- return m.save();
- }
- handleEnvNullData(data){
- data = data.toObject();
- data.toObject = ()=> data;
- let isFix = false;
- if(Array.isArray(data.env)){
- data.env = data.env.map(item=>{
- item.global = item.global.filter(g=>{
- if(!g || typeof g !== 'object'){
- isFix = true;
- return false;
- }
- return true;
- })
- return item;
- })
- }
-
- if(isFix){
- this.model.update(
- {
- _id: data._id
- },
- {
- $set: { env: data.env }
- },
- { runValidators: true }
- );
- }
- return data;
- }
- get(id) {
- return this.model
- .findOne({
- _id: id
- })
- .exec().then(this.handleEnvNullData)
- }
- getByEnv(id) {
- return this.model
- .findOne({
- _id: id
- })
- .select('env')
- .exec().then(this.handleEnvNullData);
- }
- getProjectWithAuth(group_id, uid) {
- return this.model.countDocuments({
- group_id: group_id,
- 'members.uid': uid
- });
- }
- getBaseInfo(id, select) {
- select =
- select ||
- '_id uid name basepath switch_notice desc group_id project_type env icon color add_time up_time pre_script after_script project_mock_script is_mock_open strice is_json5 tag';
- return this.model
- .findOne({
- _id: id
- })
- .select(select)
- .exec().then(this.handleEnvNullData);
- }
- getByDomain(domain) {
- return this.model
- .find({
- prd_host: domain
- })
- .exec().then(this.handleEnvNullData);
- }
- checkNameRepeat(name, groupid) {
- return this.model.countDocuments({
- name: name,
- group_id: groupid
- });
- }
- checkDomainRepeat(domain, basepath) {
- return this.model.countDocuments({
- prd_host: domain,
- basepath: basepath
- });
- }
- list(group_id) {
- let params = { group_id: group_id };
- return this.model
- .find(params)
- .select(
- '_id uid name basepath switch_notice desc group_id project_type color icon env add_time up_time'
- )
- .sort({ _id: -1 })
- .exec();
- }
- // 获取项目数量统计
- getProjectListCount() {
- return this.model.countDocuments();
- }
- countWithPublic(group_id) {
- let params = { group_id: group_id, project_type: 'public' };
- return this.model.countDocuments(params);
- }
- 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.countDocuments({
- group_id: group_id
- });
- }
- countByGroupId(group_id) {
- return this.model.countDocuments({
- group_id: group_id
- });
- }
- del(id) {
- return this.model.remove({
- _id: id
- });
- }
- delByGroupid(groupId) {
- return this.model.remove({
- group_id: groupId
- });
- }
- 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 }
- $push: { members: { $each: data } }
- }
- );
- }
- delMember(id, uid) {
- return this.model.update(
- {
- _id: id
- },
- {
- $pull: { members: { uid: uid } }
- }
- );
- }
- checkMemberRepeat(id, uid) {
- return this.model.countDocuments({
- _id: id,
- 'members.uid': uid
- });
- }
- changeMemberRole(id, uid, role) {
- return this.model.update(
- {
- _id: id,
- 'members.uid': uid
- },
- {
- $set: { 'members.$.role': role }
- }
- );
- }
- changeMemberEmailNotice(id, uid, notice) {
- return this.model.update(
- {
- _id: id,
- 'members.uid': uid
- },
- {
- $set: { 'members.$.email_notice': notice }
- }
- );
- }
- search(keyword) {
- return this.model
- .find({
- name: new RegExp(keyword, 'ig')
- })
- .limit(10);
- }
- }
- module.exports = projectModel;
|