Skip to content

Instantly share code, notes, and snippets.

@vunb
Last active September 6, 2016 03:01
Show Gist options
  • Save vunb/3a50de5b74e7186019a7b053f93602d4 to your computer and use it in GitHub Desktop.
Save vunb/3a50de5b74e7186019a7b053f93602d4 to your computer and use it in GitHub Desktop.
Demo sails (hồ sơ y tế)
var _ = require('lodash')
, async = require("async")
, logger = sails.log
;
module.exports = {
_config: {
actions: true,
shortcuts: false,
rest: false
},
create: function (req, res, next) {
var user = req.user;
var code = req.param("code");
var patient = req.param("patient");
var patientName = req.param("patientName");
var doctor = req.param("doctor");
var selectedTreatments = req.param("selectedTreatments");
var selectedMedicines = req.param("selectedMedicines");
var numTreatments = 0;
var numMedicines = 0;
if (selectedMedicines) {
numMedicines = selectedMedicines.length;
}
if (selectedTreatments) {
numTreatments = selectedTreatments.length;
}
async.waterfall([
function getDoctorInfo(callback) {
Doctor.findOne({
appUser: user.id
}).then(function (result) {
callback(null, result);
}).catch(function (err) {
callback(err);
})
},
function createHealthRecord(doctor, callback) {
// save a new health record
HealthRecords.create({
appUser: user.id,
code: code,
patient: patient,
patientName: patientName,
doctor: doctor.id,
numMedicines: numMedicines,
numTreatments: numTreatments
}).then(function addTreatments(record) {
callback(null, record, doctor);
}).catch(function (err) {
callback(err);
});
},
function addTreatments(record, doctor, callback) {
if (selectedTreatments) {
var items = selectedTreatments.map(function (item) {
item.code = record.code;
item.patient = record.patient;
item.doctor = record.doctor;
item.appUser = record.appUser;
item.healthRecord = record.id;
item.treatment = item.id;
item.treatmentCode = item.code;
item.treatmentName = item.name;
return item;
});
HealthTreatmentRecord.createEach(items).exec(function (err, results) {
if (!err) {
logger.info("addTreatments ok");
callback(null, record, doctor);
} else {
logger.error("addTreatments error", err);
callback(err);
}
});
} else {
callback(null, record, doctor);
}
},
function addMedicines(record, doctor, callback) {
if (selectedMedicines) {
var items = selectedMedicines.map(function (item) {
item.code = record.code;
item.patient = record.patient;
item.doctor = record.doctor;
item.appUser = record.appUser;
item.healthRecord = record.id;
item.medicine = item.id;
item.medCode = item.code;
item.medName = item.name;
return item;
});
HealthMedicineRecord.createEach(items).exec(function (err, results) {
if (!err) {
logger.info("addMedicines ok");
callback(null, record);
} else {
logger.error("addMedicines error", err);
callback(err);
}
});
} else {
callback(null, record, doctor);
}
}
], function (err, result) {
if (!err) {
logger.info("Create health record successfully");
res.ok(result);
} else {
logger.error("ERROR: Create health record", err);
res.serverError(err);
}
});
},
update: function (req, res, next) {
var user = req.user;
var code = req.param("code");
var patient = req.param("patient");
var doctor = req.param("doctor");
var id = req.param("id");
if (!id) {
res.badRequest("ID must not be empty");
}
HealthRecords.update({ id: id, appUser: user.id }, {
code: code,
patient: patient,
doctor: doctor
}).then(function (results) {
logger.info("Update HealthRecords successfully");
res.ok({
data: results
});
}).catch(function (err) {
logger.error("ERROR: Update HealthRecords", err);
res.serverError(err);
});
},
delete: function (req, res, next) {
var user = req.user;
var id = req.param("id");
HealthRecords.destroy({
id: id,
appUser: user.id
}).then(function (results) {
logger.info("Delete HealthRecords successfully");
res.ok({
data: results
});
}).catch(function (err) {
logger.error("ERROR: Delete HealthRecords", err);
res.serverError(err);
});
},
get: function (req, res, next) {
var user = req.user;
var page = req.param("page") || 1;
var limit = req.param("limit") || 5;
HealthRecords.find({
appUser: user.id
}).sort('createdAt DESC')
.paginate({ page: page, limit: limit })
.populate("patient")
.then(function (records) {
var count = HealthRecords.count({ appUser: user.id })
.then(function (result) {
return result;
});
return [count, records];
}).spread(function (count, records) {
res.ok({
count: count,
data: records
});
}).catch(function (err) {
res.serverError(err);
});
},
}
var _ = require('lodash')
, logger = sails.log;
module.exports = {
_config: {
actions: true,
shortcuts: false,
rest: false
},
updateConfig: function (req, res, next) {
var module = req.param("module");
var key = req.param("key");
var value = req.param("value");
var user = req.user;
var creator = user.id;
var recordInfo = {
creator: creator,
module: module,
key: key,
value: value
};
// log info
logger.info("UserSettings model:", recordInfo);
if (!module) {
res.badRequest("Module is required");
} else if (!key) {
res.badRequest("Key is required");
} else if (!value) {
res.badRequest("Value is required");
}
UserSettings.findOne({
creator: creator,
module: module,
key: key
}).then(function (settings) {
if (!settings) {
// create new settings
return UserSettings
.create(recordInfo)
.then(function (result) {
res.ok(result);
});
} else {
var updateValue = settings.value;
for (var i in value) {
if (!i.startsWith("$")) {
// not system config
updateValue[i] = value[i];
}
}
return UserSettings
.update({ id: settings.id, creator: creator }, { value: updateValue })
.then(function (result) {
var record = result.length > 0 ? result[0] : false;
return record;
});
}
}).then(function (result) {
res.ok(result);
}).catch(function (err) {
logger.error("ERROR: update UserSettings", err);
res.serverError(err);
});
},
/**
* Get all user settings
*/
getAllOrDefault: function (req, res, next) {
var user = req.user;
var module = req.param("module");
var key = req.param("key");
var query = {
creator: user.id,
module: module,
key: key
}
if (!key) {
delete query.key;
}
UserSettings.find(query)
.then(function (result) {
if (!result || result.length == 0) {
var query = {
creator: -1,
module: module,
key: key
};
if (!key) {
delete query.key;
}
logger.info("get default UserSettings: ", query);
var getDefault = UserSettings.find(query);
return [false, getDefault];
} else {
return [true, result];
}
}).spread(function (isPersonal, settings) {
if (!isPersonal) {
// create user personal settings
for (var setting of settings) {
var cloned = setting.toObject();
logger.info("Clone user settings: ", cloned.key);
delete cloned.id;
cloned.creator = user.id;
UserSettings.create(cloned)
.then(function (result) {
logger.info("Create user setting: ", result.key, ", User:", result.creator);
});
}
}
// return data
return settings;
}).then(function (settings) {
logger.info("User settings: ", settings);
res.ok(settings);
}).catch(function (err) {
res.serverError(err);
})
},
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment