Merge pull request #4 from kfnawaz/feat/new-models-1
Feat: Added models for Inventory, Material, Item & User
This commit is contained in:
16
package-lock.json
generated
16
package-lock.json
generated
@@ -15,7 +15,8 @@
|
||||
"express": "^4.17.2",
|
||||
"helmet": "^4.6.0",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"mongoose": "^6.1.2"
|
||||
"mongoose": "^6.1.2",
|
||||
"validator": "^13.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8.5.0",
|
||||
@@ -3089,6 +3090,14 @@
|
||||
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/validator": {
|
||||
"version": "13.7.0",
|
||||
"resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz",
|
||||
"integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==",
|
||||
"engines": {
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/vary": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||
@@ -5549,6 +5558,11 @@
|
||||
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
|
||||
"dev": true
|
||||
},
|
||||
"validator": {
|
||||
"version": "13.7.0",
|
||||
"resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz",
|
||||
"integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw=="
|
||||
},
|
||||
"vary": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||
|
||||
@@ -26,7 +26,8 @@
|
||||
"express": "^4.17.2",
|
||||
"helmet": "^4.6.0",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"mongoose": "^6.1.2"
|
||||
"mongoose": "^6.1.2",
|
||||
"validator": "^13.7.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^8.5.0",
|
||||
|
||||
46
src/config/constants.js
Normal file
46
src/config/constants.js
Normal file
@@ -0,0 +1,46 @@
|
||||
const UserActions = [
|
||||
"Read",
|
||||
"Add",
|
||||
"Delete",
|
||||
"Edit",
|
||||
"Pick",
|
||||
"Put Away",
|
||||
"Cycle Count",
|
||||
"Query",
|
||||
"Report",
|
||||
"Order",
|
||||
"Receive",
|
||||
];
|
||||
|
||||
const WarehouseScopes = [
|
||||
"Warehouse",
|
||||
"Zone",
|
||||
"Area",
|
||||
"Bay",
|
||||
"Row",
|
||||
"Level",
|
||||
"Sublevel",
|
||||
];
|
||||
|
||||
const InventoryTypes = [
|
||||
"Perishable",
|
||||
"Material",
|
||||
"Product",
|
||||
"Equipment",
|
||||
"Fleet",
|
||||
];
|
||||
|
||||
const CustomAttributeTypes = [
|
||||
"Date",
|
||||
"Number",
|
||||
"Decimal",
|
||||
"String",
|
||||
"Enumerable",
|
||||
];
|
||||
|
||||
module.exports = {
|
||||
UserActions,
|
||||
WarehouseScopes,
|
||||
InventoryTypes,
|
||||
CustomAttributeTypes,
|
||||
};
|
||||
39
src/models/Inventory.js
Normal file
39
src/models/Inventory.js
Normal file
@@ -0,0 +1,39 @@
|
||||
const mongoose = require("mongoose");
|
||||
const { InventoryTypes } = require("./../config/constants");
|
||||
|
||||
const schema = new mongoose.Schema(
|
||||
{
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
enum: InventoryTypes,
|
||||
},
|
||||
policies: {
|
||||
tracking: {
|
||||
type: Object, // Create a different model and reference it here once more details available
|
||||
required: true,
|
||||
},
|
||||
alerting: {
|
||||
type: Object, // Create a different model and reference it here once more details available
|
||||
required: true,
|
||||
},
|
||||
replenishment: {
|
||||
type: Object, // Create a different model and reference it here once more details available
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
timestamps: true,
|
||||
}
|
||||
);
|
||||
|
||||
const Inventory = mongoose.model("Inventory", schema);
|
||||
|
||||
module.exports = Inventory;
|
||||
93
src/models/Item.js
Normal file
93
src/models/Item.js
Normal file
@@ -0,0 +1,93 @@
|
||||
const mongoose = require("mongoose");
|
||||
const { CustomAttributeTypes } = require("./../config/constants");
|
||||
|
||||
const schema = new mongoose.Schema(
|
||||
{
|
||||
commonName: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
formalName: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
description: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
manufacturer: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
size: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
unitOfMaterial: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
unitCost: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
unitQuantity: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
packageCount: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
countPerPallet: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
countPerPalletPackage: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
customAttributes: [
|
||||
{
|
||||
fieldName: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
fieldType: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
enum: CustomAttributeTypes,
|
||||
},
|
||||
fieldValue: {
|
||||
type: mongoose.Schema.Types.Mixed,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
timestamps: true,
|
||||
}
|
||||
);
|
||||
|
||||
const Item = mongoose.model("Item", schema);
|
||||
|
||||
module.exports = Item;
|
||||
33
src/models/Material.js
Normal file
33
src/models/Material.js
Normal file
@@ -0,0 +1,33 @@
|
||||
const mongoose = require("mongoose");
|
||||
|
||||
const schema = new mongoose.Schema(
|
||||
{
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
family: [
|
||||
{
|
||||
name: {
|
||||
type: String,
|
||||
required: true,
|
||||
trim: true,
|
||||
},
|
||||
depth: {
|
||||
type: Number,
|
||||
required: true,
|
||||
min: 1,
|
||||
max: 10
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
timestamps: true,
|
||||
}
|
||||
);
|
||||
|
||||
const Material = mongoose.model("Material", schema);
|
||||
|
||||
module.exports = Material;
|
||||
71
src/models/User.js
Normal file
71
src/models/User.js
Normal file
@@ -0,0 +1,71 @@
|
||||
const mongoose = require("mongoose");
|
||||
const { isEmail } = require("validator");
|
||||
const { UserActions, WarehouseScopes } = require("./../config/constants");
|
||||
|
||||
const schema = new mongoose.Schema(
|
||||
{
|
||||
fullName: {
|
||||
type: String,
|
||||
trim: true,
|
||||
},
|
||||
email: {
|
||||
type: String,
|
||||
required: [true, "Please enter an email"],
|
||||
unique: true,
|
||||
lowercase: true,
|
||||
validate: [isEmail, "Please enter a valid email"],
|
||||
},
|
||||
password: {
|
||||
type: String,
|
||||
required: [true, "Please enter a password"],
|
||||
minlength: [6, "Minimum password length is 6 characters"],
|
||||
},
|
||||
refreshToken: {
|
||||
type: String,
|
||||
},
|
||||
forgotPasswordOTP: {
|
||||
type: Number,
|
||||
min: 1000,
|
||||
max: 9999,
|
||||
},
|
||||
forgotPasswordOTPRetries: {
|
||||
type: Number,
|
||||
min: 0,
|
||||
max: 3,
|
||||
},
|
||||
passwordResetToken: {
|
||||
type: String,
|
||||
},
|
||||
authPolicies: [
|
||||
{
|
||||
inventory: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
ref: "Inventory",
|
||||
},
|
||||
warehouseScope: {
|
||||
on: {
|
||||
type: mongoose.Schema.Types.ObjectId,
|
||||
refPath: "onModel",
|
||||
},
|
||||
onModel: {
|
||||
type: String,
|
||||
required: true,
|
||||
enum: WarehouseScopes,
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
type: String,
|
||||
required: true,
|
||||
enum: UserActions,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
timestamps: true,
|
||||
}
|
||||
);
|
||||
|
||||
const User = mongoose.model("User", schema);
|
||||
|
||||
module.exports = User;
|
||||
Reference in New Issue
Block a user