kritsana135-hooray-server
Version:
for server
450 lines (437 loc) • 9.91 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _mongoose = _interopRequireDefault(require("mongoose"));
var _apolloServer = require("apollo-server");
var _mongoosejsSoftDelete = _interopRequireDefault(require("mongoosejs-soft-delete"));
var _utils = require("../constants/errors/utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
var mongoosePaginate = require("mongoose-paginate-v2");
var tokenExpired = new _mongoose.default.Schema({
accessTokenExpired: {
type: String,
required: [false, "accessToken expired is required"],
default: "3m",
trim: true
},
refreshTokenExpired: {
type: String,
required: [false, "refreshToken expired is required"],
default: "15m",
trim: true
}
});
var notify = new _mongoose.default.Schema({
notifyToken: {
type: String,
required: [false, "notifyToken is required"],
trim: true
},
isSendNotify: {
type: Boolean,
required: [false, "isSendNotify is required"],
default: false,
trim: true
},
notificationDisabled: {
type: Boolean,
required: [false, "notificationDisabled is required"],
default: false,
trim: true
}
});
var login = new _mongoose.default.Schema({
clientId: {
type: String,
required: [false, "clientId is required"],
trim: true
},
clientSecret: {
type: String,
required: [false, "clientSecret is required"],
trim: true
},
redirectUri: {
type: String,
required: [false, "redirectUri is required"],
trim: true
}
});
var line = new _mongoose.default.Schema({
notify,
login
});
var aws = new _mongoose.default.Schema({
cloudWatchEnable: {
type: Boolean,
required: [false, "cloudWatchEnable is required"],
default: false,
trim: true
},
accessKey: {
type: String,
required: [false, "accessKey is required"],
trim: true
},
secretKey: {
type: String,
required: [false, "secretKey is required"],
trim: true
},
region: {
type: String,
required: [false, "region is required"],
trim: true
},
bucketName: {
type: String,
required: [false, "bucketName is required"],
trim: true
},
endpoint: {
type: String,
required: [false, "endpoint is required"],
trim: true
}
});
var smtp = new _mongoose.default.Schema({
host: {
type: String,
required: [false, "host is required"],
trim: true
},
port: {
type: Number,
required: [false, "port is required"],
trim: true
},
tls: {
type: String,
required: [false, "tls is required"],
default: "no",
trim: true
},
username: {
type: String,
required: [false, "username is required"],
trim: true
},
password: {
type: String,
required: [false, "password is required"],
trim: true
},
senderEmail: {
type: String,
required: [false, "senderEmail is required"],
trim: true
}
});
var socialContact = new _mongoose.default.Schema({
platform: {
type: String,
required: [true, "Platform is required"]
},
logo: {
type: String,
required: [true, "Logo is required"]
},
title: {
type: String,
required: [true, "Title is required"]
},
link: {
type: String,
required: [true, "Link is required"]
}
});
var contact = new _mongoose.default.Schema({
address: {
type: String,
required: [true, "Address is required"]
},
companyName: {
type: String,
required: [true, "Company is required"]
},
email: {
type: String,
required: [true, "Email is required"]
},
tel: {
type: String,
required: [true, "Tel is required"]
},
socialContact: [socialContact],
officeDay: {
type: String,
required: [true, "Office day is required"]
},
detail: {
type: String
}
});
var option = new _mongoose.default.Schema({
defaultLanguage: {
type: String,
required: [false, "defaultLanguage is required"],
default: "en",
trim: true
},
line,
aws,
smtp,
contact
});
var key = new _mongoose.default.Schema({
code: {
type: String,
required: [false, "code is required"],
trim: true
},
value: {
type: String,
required: [false, "value is required"],
default: "",
trim: true
},
description: {
type: String,
required: [false, "description is required"],
trim: true
}
});
var template = new _mongoose.default.Schema({
name: {
type: String,
required: [false, "name is required"],
trim: true
},
content: {
type: String,
required: [false, "content is required"],
trim: true
},
keys: [key]
});
var attribute = new _mongoose.default.Schema({
key: {
type: String,
required: [true, "key is required"],
trim: true
},
value: {
type: String,
required: [true, "value is required"],
trim: true
}
});
var featureOption = new _mongoose.default.Schema({
key: {
type: String,
required: [true, "key is required"],
trim: true
},
enable: {
type: Boolean,
required: [false, "Enable is required"],
default: true
},
description: {
type: String,
required: [false, "description is required"],
trim: true
}
});
var feature = new _mongoose.default.Schema({
serviceId: {
type: _mongoose.default.Schema.Types.ObjectId,
ref: "services"
},
key: {
type: String,
required: [false, "Key is required"],
trim: true
},
description: {
type: String,
required: [false, "Description is required"],
trim: true
},
enable: {
type: Boolean,
required: [false, "Enable is required"],
default: true
},
featureOptions: [featureOption]
});
var permission = new _mongoose.default.Schema({
permissionName: {
type: String,
trim: true
},
code: {
type: String,
trim: true
},
scopes: [String]
});
var userPermission = new _mongoose.default.Schema({
permissionType: {
type: String,
default: "DEFAULT",
trim: true
},
permissions: [permission]
});
var services = new _mongoose.default.Schema({
isCoreService: {
type: Boolean,
default: false
},
service: {
type: _mongoose.default.Schema.Types.ObjectId,
ref: "services"
},
featureKeys: [feature],
userPermissions: [{
type: _mongoose.default.Schema.Types.ObjectId,
ref: "permissions"
}]
});
var credential = new _mongoose.default.Schema({
isAdminCredential: {
type: Boolean,
default: false
},
name: {
type: String,
required: [true, "name is required"],
trim: true
},
secretKey: {
type: String,
required: [true, "secret key is required"],
trim: true
},
credentialKey: {
type: String,
required: [true, "credential key is required"],
trim: true
},
tokenExpired
});
var Option = new _mongoose.default.Schema({
optionKey: {
type: String
},
value: {
type: String
}
});
var Config = new _mongoose.default.Schema({
configKey: {
type: String
},
options: [Option]
});
var Setting = new _mongoose.default.Schema({
key: {
type: String,
trim: true
},
description: {
type: String,
trim: true
},
value: {
type: String,
trim: true
},
values: [attribute]
});
var Role = new _mongoose.default.Schema({
roleName: {
type: String,
required: [false, "roleName is required"]
},
roleKey: {
type: String,
required: [false, "roleKey is required"]
},
status: {
type: String,
required: [false, "status is required"]
},
default: {
type: String,
required: [false, "default is required"]
},
replaceable: {
type: String,
required: [false, "replaceable is required"],
enum: ["YES", "NO"],
default: "NO"
}
});
var PermissionRole = new _mongoose.default.Schema({
roleKey: {
type: String,
required: [true, "roleKey is required"]
},
permissions: [permission]
});
var schema = new _mongoose.default.Schema({
name: {
type: String,
required: [true, "Name is required"],
trim: true
},
appKey: {
type: String,
required: [true, "appKey is required"],
trim: true
},
option,
settings: [Setting],
templates: [template],
attributes: [attribute],
services: [services],
roles: [Role],
permissionRoles: [PermissionRole],
credentials: [credential],
resourceOwners: [{
type: _mongoose.default.Schema.Types.ObjectId,
ref: "resource_owners"
}],
theme: {
type: _mongoose.default.Schema.Types.ObjectId,
ref: "themes"
},
configs: [Config],
whitelist: [String]
}, {
timestamps: true,
versionKey: false
});
schema.plugin(_mongoosejsSoftDelete.default);
schema.plugin(mongoosePaginate);
schema.pre("save", /*#__PURE__*/function () {
var _ref = _asyncToGenerator(function* (next) {
next();
});
return function (_x) {
return _ref.apply(this, arguments);
};
}());
schema.post("save", (error, doc, next) => {
if (error.code === 11000) {
next(new _apolloServer.ApolloError(_utils.CAN_NOT_SAVE_TO_DB.message.en, _utils.CAN_NOT_SAVE_TO_DB.code));
} else next(error);
});
var _default = connection => connection.model("applications", schema, "applications");
exports.default = _default;