first commit

master
mobinkazemi 3 years ago
commit 9550c8a09f
  1. 10338
      data.json
  2. 2
      playground.js
  3. 199
      sequelize_psql.js
  4. 175
      waterSampleAPI.js
  5. 126
      waterSampleModel.js

10338
data.json

File diff suppressed because it is too large Load Diff

@ -0,0 +1,2 @@
const a = `a\\b`;
console.log(a.split("\\"));

@ -0,0 +1,199 @@
const { Sequelize, DataTypes, Op, literal } = require("sequelize");
const sequelize = new Sequelize(
"postgres://postgres:postgres@localhost:5432/drink-water-unit"
);
const data = require("./data.json");
//----------------------- MODELS
const waterSample = sequelize.define("waterSample", {
pid: {
type: DataTypes.INTEGER,
allowNull: true,
},
ord: {
type: DataTypes.INTEGER,
allowNull: true,
},
type: {
type: DataTypes.STRING,
allowNull: false,
desc: `:نوع نمونه
1.آب آشامیدنی
2. آب سامانه نمک زدایی
3.آب معدنی طبیعی
4.آب بسته بندی
5.آب استخر
6.آب شناگاه های طبیعی
7.فاضلاب/پساب
8.یخ`,
},
mainGroupTest: {
type: DataTypes.STRING,
allowNull: false,
desc: `:گروه اصلی آزمایش
1.رادیو اکتیو
2.شیمیایی
3.فیزیکی
4.کلرسنجی
5.میکروبی`,
},
subGroupTest: {
type: DataTypes.STRING(128),
allowNull: false,
desc: `گروه فرعی آزمایش`,
},
latinName: {
type: DataTypes.STRING(128),
allowNull: true,
desc: `نام لاتینِ پارامتر`,
},
name: {
type: DataTypes.STRING(128),
allowNull: true,
desc: `نام فارسی پارامتر`,
},
symbol: {
type: DataTypes.STRING(10),
allowNull: true,
desc: `علامت اختصاری`,
},
measureUnit: {
type: DataTypes.STRING(32),
allowNull: true,
desc: "واحد اندازه گیری",
},
paramCode: {
type: DataTypes.STRING(8),
allowNull: true,
desc: "کد پارامتر",
},
minValid: {
type: DataTypes.STRING(128),
allowNull: true,
desc: "حداقل مجاز",
},
maxValid: {
type: DataTypes.STRING(128),
allowNull: true,
desc: "حداکثر مجاز",
},
minOptimal: {
type: DataTypes.STRING(128),
allowNull: true,
desc: "حداقل مطلوب",
},
maxOptimal: {
type: DataTypes.STRING(128),
allowNull: true,
desc: "حداکثر مطلوب",
},
maxTransportTime: {
type: DataTypes.STRING,
allowNull: true,
desc: "حداکثر زمان انتقال نمونه به آزمایشگاه",
},
maxWriteInTime: {
type: DataTypes.STRING(8),
allowNull: true,
desc: "حداکثر زمان ثبت نتیجه نمونه برداری",
sample: `
null => در محل
30 mi => سی دقیقه
1 h => یک ساعت
1 d => یک روز
1 mo => یک ماه
1 y => یک سال
`,
},
containerProperty: {
type: DataTypes.STRING,
allowNull: true,
desc: "ویژگی ظرف نگهداری",
},
keepCondition: {
type: DataTypes.STRING,
allowNull: true,
desc: "شرایط نگهداری",
},
minSampleAmount: {
type: DataTypes.STRING,
allowNull: true,
desc: "حداقل حجم نمونه مورد نیاز ",
},
examinMethod: {
type: DataTypes.TEXT,
allowNull: true,
desc: "روش انجام آزمایش",
},
standardNum: {
type: DataTypes.STRING(64),
allowNull: true,
desc: "شماره استاندارد",
},
workflowId: {
type: DataTypes.INTEGER,
allowNull: false,
desc: "شناسه روند کار",
},
});
const workflowMap = new Map([
["آب آشامیدنی عمومی", 11],
["آب سامانه نمک زدایی", 14],
["آب معدنی طبیعی", 11],
["آب بسته بندی", 11],
["آب استخر", 15],
["آب شناگاه های طبیعی", 17],
["فاضلاب/پساب", 16],
["یخ", 13],
]);
sequelize
.authenticate()
.then(async () => {
console.log("Connection has been established successfully.");
let result;
await sequelize.sync({ force: true });
const arrayToBulk = [];
for (const item of data.array) {
let workflowId;
const typePeaces = item.type.split(" ");
if (typePeaces.includes("آشامیدنی")) workflowId = 11;
else if (typePeaces.includes("سامانه")) workflowId = 14;
else if (typePeaces.includes("معدنی")) workflowId = 11;
else if (typePeaces.includes("بسته")) workflowId = 11;
else if (typePeaces.includes("استخر")) workflowId = 15;
else if (typePeaces.includes("شناگاه")) workflowId = 17;
else if (typePeaces.includes("یخ")) workflowId = 13;
else workflowId = 16;
arrayToBulk.push({
type: item.type,
mainGroupTest: item.mainGroupTest,
subGroupTest: item.subGroupTest,
latinName: item.latinName,
name: item.name,
symbol: item.symbol,
measureUnit: item.measureUnit,
paramCode: item.paramCode,
minValid: item.minValid,
maxValid: item.maxValid,
minOptimal: item.minOptimal,
maxOptimal: item.maxOptimal,
maxTransportTime: item.maxTransportTime,
maxWriteInTime: item.maxWriteInTime,
containerProperty: item.containerProperty,
keepCondition: item.keepCondition,
minSampleAmount: item.minSampleAmount,
examinMethod: item.examinMethod,
standardNum: item.standardNum,
workflowId,
});
}
await waterSample.bulkCreate(arrayToBulk);
sequelize.close();
})
.catch((err) => {
console.error("Unable to connect to the database:", err);
});

@ -0,0 +1,175 @@
import BaseApi from "~/src/api/BaseApi";
import _ from "lodash";
import { Joi } from "celebrate";
import db from "../../database";
const {
description,
request,
test,
response,
GET,
POST,
PUT,
DELETE,
SOCKET,
isPublic,
cache,
PRIVATE,
} = BaseApi;
export default class waterSample extends BaseApi {
description = "سرویس نمونه گیری آب";
///////////////////////////////
@PRIVATE
findWorkFlowId = (type) => {
const typePeaces = type.split(" ");
if (typePeaces.includes("آشامیدنی")) return 11;
else if (typePeaces.includes("سامانه")) return 14;
else if (typePeaces.includes("معدنی")) return 11;
else if (typePeaces.includes("بسته")) return 11;
else if (typePeaces.includes("استخر")) return 15;
else if (typePeaces.includes("شناگاه")) return 17;
else if (typePeaces.includes("یخ")) return 13;
else if (type.split("/").includes("فاضلاب")) return 16;
else return -1;
};
@GET
@description("دریافت لیست نمونه گیری آبها")
@request(
optional({
..._.pick(db.waterSample.validation, db.waterSample.getList),
pageIndex: Joi.number().min(1).description("شمارهی صفحه"),
pageSize: Joi.number().min(1).description("سایز صفحه"),
sort: Joi.string().description("پارامتر مرتب سازی"),
asc: Joi.bool().description("آیا خروجی به صورت صعودی مرتب شود؟"),
processId: Joi.number().description("شناسهی فرایند"),
checklistId: Joi.number().description("شناسهی چکلیست"),
})
)
@response()
list = async (data) => {
data = omitNull(data);
let where = _.pick(data, db.waterSample.getList);
for (const key in where) {
if (db.waterSample.validation[key].type == "string")
where[key] = { [Op.substring]: where[key] };
}
const limit = +data.pageSize || 20;
const offset =
data.pageIndex && data.pageSize
? data.pageSize * (data.pageIndex - 1)
: 0;
let order = ["id"];
if (data.sort && (data.asc == false || data.asc == "false")) {
order = [[data.sort, "DESC"]];
}
if (data.sort && (data.asc == true || data.asc == "true" || !data.asc)) {
order = [[data.sort, "ASC"]];
}
const result = await db.waterSample.findAndCountAll({
where,
order,
offset,
limit,
raw: true,
});
return result;
};
@GET
@description("دریافت اطلاعات نمونه گیری آب")
@request(_.pick(db.waterSample.validation, ["id"]))
@response()
info = async (data) => {
const result = await db.waterSample.findByPk(data.id, {
raw: true,
});
if (!result)
return {
statusCode: 404,
message: "شناسه نمونه گیری آب نامعتبر است.",
};
return result;
};
@POST
@description("افزودن نمونه گیری آب")
@request(_.pick(db.waterSample.validation, db.waterSample.add))
@response(_.pick(db.waterSample.validation, ["id"]))
add = async (data) => {
const checkedData = _.pick(omitNull(data), db.waterSample.add);
checkedData.workflowId = this.findWorkFlowId(checkedData.type);
const result = await db.waterSample.create(checkedData);
if (!result)
return {
statusCode: 400,
message: "بروز خطا. درخواست انجام نشد",
};
return { id: result.dataValues.id };
};
@PUT
@description("ویرایش نمونه گیری آب")
@request({
id: Joi.number().required().description("شناسه نمونه گیری آب"),
...optional(_.pick(db.waterSample.validation, db.waterSample.updateList)),
})
@response({})
update = async (data) => {
const checkedData = _.pick(omitNull(data), db.waterSample.updateList);
if (!Object.keys(checkedData).length)
return {
statusCode: 400,
message: "بروز خطا در اطلاعات ورودی",
};
const { id } = data;
if (checkedData.type)
checkedData.workflowId = this.findWorkFlowId(checkedData.type);
const result = await db.waterSample.update(checkedData, {
where: { id },
});
if (!result)
return {
statusCode: 400,
message: "شناسه واحد آب آشامیدنی نامعتبر است.",
};
return result;
};
@DELETE
@description("حذف نمونه گیری آب")
@request(_.pick(db.waterSample.validation, ["id"]))
@response({})
delete = async (data) => {
const { id } = data;
const result = await db.waterSample.destroy({ where: { id } });
if (!result)
return {
statusCode: 404,
message: "شناسه نمونه گیری آب نامعتبر است.",
};
return {};
};
}

@ -0,0 +1,126 @@
import _ from "lodash";
import BaseModel from "~src/models/BaseModel";
export default class waterSample extends BaseModel {
schema = {
...this.schema,
type: {
type: this.DataTypes.STRING,
allowNull: false,
desc: `نوع نمونه`,
},
mainGroupTest: {
type: this.DataTypes.STRING,
allowNull: false,
desc: `:گروه اصلی آزمایش
1.رادیو اکتیو
2.شیمیایی
3.فیزیکی
4.کلرسنجی
5.میکروبی`,
},
subGroupTest: {
type: this.DataTypes.STRING(128),
allowNull: false,
desc: `گروه فرعی آزمایش`,
},
latinName: {
type: this.DataTypes.STRING(128),
allowNull: true,
desc: `نام لاتینِ پارامتر`,
},
name: {
type: this.DataTypes.STRING(128),
allowNull: true,
desc: `نام فارسی پارامتر`,
},
symbol: {
type: this.DataTypes.STRING(10),
allowNull: true,
desc: `علامت اختصاری`,
},
measureUnit: {
type: this.DataTypes.STRING(32),
allowNull: true,
desc: "واحد اندازه گیری",
},
paramCode: {
type: this.DataTypes.STRING(8),
allowNull: true,
desc: "کد پارامتر",
},
minValid: {
type: this.DataTypes.STRING(128),
allowNull: true,
desc: "حداقل مجاز",
},
maxValid: {
type: this.DataTypes.STRING(128),
allowNull: true,
desc: "حداکثر مجاز",
},
minOptimal: {
type: this.DataTypes.STRING(128),
allowNull: true,
desc: "حداقل مطلوب",
},
maxOptimal: {
type: this.DataTypes.STRING(128),
allowNull: true,
desc: "حداکثر مطلوب",
},
maxTransportTime: {
type: this.DataTypes.STRING,
allowNull: true,
desc: "حداکثر زمان انتقال نمونه به آزمایشگاه",
},
maxWriteInTime: {
type: this.DataTypes.STRING(8),
allowNull: true,
desc: "حداکثر زمان ثبت نتیجه نمونه برداری",
sample: `
null => در محل
30 mi => سی دقیقه
1 h => یک ساعت
1 d => یک روز
1 mo => یک ماه
1 y => یک سال
`,
},
containerProperty: {
type: this.DataTypes.STRING,
allowNull: true,
desc: "ویژگی ظرف نگهداری",
},
keepCondition: {
type: this.DataTypes.STRING,
allowNull: true,
desc: "شرایط نگهداری",
},
minSampleAmount: {
type: this.DataTypes.STRING,
allowNull: true,
desc: "حداقل حجم نمونه مورد نیاز ",
},
examinMethod: {
type: this.DataTypes.TEXT,
allowNull: true,
desc: "روش انجام آزمایش",
},
standardNum: {
type: this.DataTypes.STRING(64),
allowNull: true,
desc: "شماره استاندارد",
},
workflowId: {
type: this.DataTypes.INTEGER,
allowNull: false,
desc: "شناسه روند کار",
},
};
add = Object.keys(_.omit(this.schema, ["id", "workflowId"]));
updateList = Object.keys(_.omit(this.schema, ["id"]));
getList = this.updateList;
}
Loading…
Cancel
Save