update jamespong14205,

This commit is contained in:
louiscklaw
2025-02-01 02:02:25 +08:00
parent 8bf2589af5
commit c3a16177eb
90 changed files with 9071 additions and 6 deletions

View File

@@ -0,0 +1,21 @@
async function helloworld(req) {
try {
return { status: 'OK' };
} catch (error) {
console.error(error);
return { status: 'ERROR' };
}
}
async function handler(req, res) {
try {
let result = await helloworld(req);
return res.status(200).send(result);
} catch (err) {
console.log(err);
return res.status(200).send({ status: 'error', message: 'helloworld error' });
}
}
export default handler;

View File

@@ -0,0 +1,33 @@
import Auth from './model';
async function login(req) {
try {
console.log({ test: req.body });
const { username: incoming_username, password: incoming_password } = req.body;
const users = await Auth.findAll();
for (let i = 0; i < users.length; i += 1) {
const user = users[i];
console.log(users);
if (user.username === incoming_username && user.password === incoming_password) {
return { success: 'login success' };
}
}
return { message: 'login failed' };
} catch (error) {
console.error(error);
return { message: 'login failed' };
}
}
async function handler(req, res) {
try {
const result = await login(req);
return res.status(200).send(result);
} catch (err) {
console.log(err);
return res.status(200).send({ status: 'error', message: 'helloworld error' });
}
}
export default handler;

View File

@@ -0,0 +1,17 @@
import sequelize_config from 'utils/sequelize_config';
const { DataTypes } = require('sequelize');
const Auth = sequelize_config.define(
'Auths',
{
uid: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, unique: true },
username: { type: DataTypes.STRING, allowNull: false },
password: { type: DataTypes.STRING, allowNull: false },
session: { type: DataTypes.STRING, allowNull: false, defaultValue: '' },
role: { type: DataTypes.STRING, allowNull: false },
},
{ timestamps: false },
);
export default Auth;

View File

@@ -0,0 +1,20 @@
async function helloworld(req) {
try {
return { status: 'OK' };
} catch (error) {
console.error(error);
}
}
async function handler(req, res) {
try {
let result = await helloworld(req);
return res.status(200).send(result);
} catch (err) {
console.log(err);
res.status(200).send({ status: 'error', message: 'helloworld error' });
}
}
export default handler;

View File

@@ -0,0 +1,39 @@
import { NonUrgentQueue, SemiUrgentQueue } from './model';
async function deleteQueueById(req, res) {
try {
const { id } = req.query;
const { queue_type } = req.query;
if (!id || !queue_type) {
return res.status(400).send({ status: 'error', message: 'id and queue_type are required' });
}
switch (queue_type) {
case 'semi-urgent':
await SemiUrgentQueue.destroy({ where: { id } });
return { status: 'OK' };
case 'non-urgent':
await NonUrgentQueue.destroy({ where: { id } });
return { status: 'OK' };
default:
return res.status(400).send({ status: 'error', message: 'invalid queue_type' });
}
} catch (error) {
console.error(error);
return { status: 'error' };
}
}
async function handler(req, res) {
try {
const result = await deleteQueueById(req, res);
return res.status(200).send(result);
} catch (err) {
console.log(err);
return res.status(200).send({ status: 'error', message: 'list error' });
}
}
export default handler;

View File

@@ -0,0 +1,25 @@
import { PatientQueue } from './model';
async function list() {
try {
const patient_queues = await PatientQueue.findAll();
return { status: 'OK', patient_queues };
} catch (error) {
console.error(error);
return { status: 'ERROR' };
}
}
async function handler(req, res) {
try {
const result = await list(req);
return res.status(200).send(result);
} catch (err) {
console.log(err);
return res.status(200).send({ status: 'error', message: 'list error' });
}
}
export default handler;

View File

@@ -0,0 +1,55 @@
const { DataTypes } = require('sequelize');
const sequelize_config = require('../../../utils/sequelize_config');
const PatientQueue = sequelize_config.define(
'PatientQueue',
{
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, unique: true },
description: { type: DataTypes.STRING, allowNull: false },
},
{ timestamps: false },
);
const SemiUrgentQueue = sequelize_config.define(
'SemiUrgentQueue',
{
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, unique: true },
name: { type: DataTypes.STRING, allowNull: false },
hkid: { type: DataTypes.STRING, allowNull: false },
mobile: { type: DataTypes.STRING, allowNull: false },
age: { type: DataTypes.INTEGER, allowNull: false },
description: { type: DataTypes.STRING, allowNull: false },
//
bruisesScratchesMinorBurns: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
chestPain: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
headache: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
myMuiCheck: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
nauseaAndVomiting: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
runnyOrStuffyNose: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
soreThroat: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
},
{ timestamps: false },
);
const NonUrgentQueue = sequelize_config.define(
'NonUrgentQueue',
{
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, unique: true },
name: { type: DataTypes.STRING, allowNull: false },
hkid: { type: DataTypes.STRING, allowNull: false },
mobile: { type: DataTypes.STRING, allowNull: false },
age: { type: DataTypes.INTEGER, allowNull: false },
description: { type: DataTypes.STRING, allowNull: false },
//
bruisesScratchesMinorBurns: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
chestPain: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
headache: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
myMuiCheck: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
nauseaAndVomiting: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
runnyOrStuffyNose: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
soreThroat: { type: DataTypes.BOOLEAN, allowNull: false, defaultValue: false },
},
{ timestamps: false },
);
export { NonUrgentQueue, PatientQueue, SemiUrgentQueue };

View File

@@ -0,0 +1,24 @@
import { NonUrgentQueue } from './model';
async function list() {
try {
const patient_queues = await NonUrgentQueue.findAll();
return { status: 'OK', patient_queues };
} catch (error) {
console.error(error);
}
}
async function handler(req, res) {
try {
const result = await list(req);
return res.status(200).send(result);
} catch (err) {
console.log(err);
return res.status(200).send({ status: 'error', message: 'list error' });
}
}
export default handler;

View File

@@ -0,0 +1,46 @@
import { NonUrgentQueue, SemiUrgentQueue } from './model';
async function readQueueById(req, res) {
try {
const { id } = req.query;
const { queue_type } = req.query;
if (!id || !queue_type) {
return res.status(400).send({ status: 'error', message: 'id and queue_type are required' });
}
let queueItem;
switch (queue_type) {
case 'semi-urgent':
queueItem = await SemiUrgentQueue.findOne({ where: { id } });
break;
case 'non-urgent':
queueItem = await NonUrgentQueue.findOne({ where: { id } });
break;
default:
return res.status(400).send({ status: 'error', message: 'invalid queue_type' });
}
if (!queueItem) {
return res.status(404).send({ status: 'error', message: 'No queue item found' });
}
return { status: 'OK', queueItem };
} catch (error) {
console.error(error);
return { status: 'error' };
}
}
async function handler(req, res) {
try {
const result = await readQueueById(req);
return res.status(200).send(result);
} catch (err) {
console.log(err);
return res.status(200).send({ status: 'error', message: 'list error' });
}
}
export default handler;

View File

@@ -0,0 +1,77 @@
import { NonUrgentQueue, SemiUrgentQueue } from './model';
async function list(req) {
let output = {};
const {
patient_name: name,
patient_hkid: hkid,
patient_age: age,
patient_mobile: mobile,
//
bruisesScratchesMinorBurns,
chestPain,
headache,
myMuiCheck,
nauseaAndVomiting,
runnyOrStuffyNose,
soreThroat,
} = req.body.values;
try {
if (headache || chestPain || bruisesScratchesMinorBurns) {
console.log('headache || chestPain || bruisesScratchesMinorBurns, classified to a SemiUrgentQueue');
const result = await SemiUrgentQueue.create({
name,
hkid,
mobile,
age,
description: '',
bruisesScratchesMinorBurns,
chestPain,
headache,
myMuiCheck,
nauseaAndVomiting,
runnyOrStuffyNose,
soreThroat,
});
output = { success: 'OK', queue: 'semi-urgent', result };
} else {
console.log('headache == false, classified to a NonUrgentQueue');
const result = await NonUrgentQueue.create({
name,
hkid,
mobile,
age,
description: '',
bruisesScratchesMinorBurns,
chestPain,
headache,
myMuiCheck,
nauseaAndVomiting,
runnyOrStuffyNose,
soreThroat,
});
output = { success: 'OK', queue: 'non-urgent', result };
}
} catch (error) {
output = { message: 'error' };
}
return output;
}
async function handler(req, res) {
try {
const result = await list(req);
return res.status(200).send(result);
} catch (err) {
console.log(err);
return res.status(200).send({ status: 'error', message: 'list error' });
}
}
export default handler;

View File

@@ -0,0 +1,51 @@
import { Op, Sequelize } from 'sequelize';
import { NonUrgentQueue, SemiUrgentQueue } from './model';
async function search_queue(req) {
try {
let n_u_result = [];
let s_u_result = [];
const { semi_urgent_case, non_urgent_case } = req.body;
const criteria = ['hkid', 'mobile']
.filter(key => req.body[key] !== '')
.map(key => ({
[key]: Sequelize.where(Sequelize.fn('LOWER', Sequelize.col(key)), 'LIKE', `%${req.body[key].toLowerCase()}%`),
}));
if (non_urgent_case) {
n_u_result = await NonUrgentQueue.findAll({ where: { [Op.or]: criteria } });
// if (n_u_result === undefined) n_u_result = [];
n_u_result.forEach(q => {
q.dataValues.queue_type = 'non-urgent';
});
}
if (semi_urgent_case) {
s_u_result = await SemiUrgentQueue.findAll({ where: { [Op.or]: criteria } });
// if (s_u_result === undefined) s_u_result = [];
s_u_result.forEach(q => {
q.dataValues.queue_type = 'semi-urgent';
});
}
console.log({ s_u_result });
return { status: 'OK', patient_queues: [...n_u_result, ...s_u_result] };
} catch (error) {
console.error(error);
return { status: 'ERROR' };
}
}
async function handler(req, res) {
try {
const result = await search_queue(req);
return res.status(200).send(result);
} catch (err) {
console.log(err);
return res.status(200).send({ status: 'error', message: 'list error' });
}
}
export default handler;

View File

@@ -0,0 +1,25 @@
import { SemiUrgentQueue } from './model';
async function list() {
try {
const patient_queues = await SemiUrgentQueue.findAll();
return { status: 'OK', patient_queues };
} catch (error) {
console.error(error);
return { status: 'ERROR' };
}
}
async function handler(req, res) {
try {
const result = await list(req);
return res.status(200).send(result);
} catch (err) {
console.log(err);
return res.status(200).send({ status: 'error', message: 'list error' });
}
}
export default handler;

View File

@@ -0,0 +1,15 @@
fetch("http://localhost/api/patient_queue/read_queue_item?queue_type=non-urgent&id=4", {
"headers": {
"sec-ch-ua": "\"Google Chrome\";v=\"129\", \"Not=A?Brand\";v=\"8\", \"Chromium\";v=\"129\"",
"sec-ch-ua-mobile": "?1",
"sec-ch-ua-platform": "\"Android\"",
"Referer": "http://localhost/NonUrgentCaseEdit/1",
"Referrer-Policy": "strict-origin-when-cross-origin"
},
"body": null,
"method": "GET"
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

View File

@@ -0,0 +1,23 @@
fetch("http://localhost/api/patient_queue/register", {
"headers": {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9,zh-TW;q=0.8,zh-CN;q=0.7,zh;q=0.6",
"cache-control": "no-cache",
"content-type": "application/json",
"pragma": "no-cache",
"sec-ch-ua": "\"Google Chrome\";v=\"129\", \"Not=A?Brand\";v=\"8\", \"Chromium\";v=\"129\"",
"sec-ch-ua-mobile": "?1",
"sec-ch-ua-platform": "\"Android\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"cookie": "pma_lang=en; phpMyAdmin=51ff7da1fa656cafa38dce7a6be8a79d",
"Referer": "http://localhost/PatientRegister",
"Referrer-Policy": "strict-origin-when-cross-origin"
},
"body": "{\"values\":{\"patient_name\":\"p1\",\"patient_hkid\":\"A123456(7)\",\"patient_age\":\"32\",\"patient_mobile\":\"91234567\",\"bruisesScratchesMinorBurns\":true,\"chestPain\":false,\"headache\":false,\"myMuiCheck\":false,\"nauseaAndVomiting\":false,\"runnyOrStuffyNose\":true,\"soreThroat\":false}}",
"method": "POST"
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

View File

@@ -0,0 +1,23 @@
fetch('http://localhost/api/patient_queue/search', {
headers: {
accept: '*/*',
'accept-language': 'en-US,en;q=0.9,zh-TW;q=0.8,zh-CN;q=0.7,zh;q=0.6',
'cache-control': 'no-cache',
'content-type': 'application/json',
pragma: 'no-cache',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
cookie: 'pma_lang=en',
Referer: 'http://localhost/SearchCase',
'Referrer-Policy': 'strict-origin-when-cross-origin',
},
body: '{"semi_urgent_case":true,"non_urgent_case":false,"hkid":"","mobile":"91234567"}',
method: 'POST',
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

View File

@@ -0,0 +1,21 @@
fetch("http://localhost/api/patient_queue/update_queue_item", {
"headers": {
"accept": "*/*",
"accept-language": "en-US,en;q=0.9,zh-TW;q=0.8,zh-CN;q=0.7,zh;q=0.6",
"content-type": "application/json",
"sec-ch-ua": "\"Google Chrome\";v=\"129\", \"Not=A?Brand\";v=\"8\", \"Chromium\";v=\"129\"",
"sec-ch-ua-mobile": "?1",
"sec-ch-ua-platform": "\"Android\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"cookie": "pma_lang=en; phpMyAdmin=51ff7da1fa656cafa38dce7a6be8a79d",
"Referer": "http://localhost/NonUrgentCaseEdit/4",
"Referrer-Policy": "strict-origin-when-cross-origin"
},
"body": "{\"id\":\"4\",\"queue_type\":\"non-urgent\",\"values\":{\"patient_name\":\"non-urgent-patient 3 update\",\"patient_hkid\":\"A123456(3)\",\"patient_mobile\":\"91234563\",\"patient_age\":13}}",
"method": "POST"
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));

View File

@@ -0,0 +1,89 @@
import { NonUrgentQueue, SemiUrgentQueue } from './model';
async function updateQueueById(req, res) {
try {
const { id, queue_type } = req.body;
console.log({ t: req.body });
if (!id || !queue_type) {
return res.status(400).send({ status: 'error', message: 'id and queue_type are required' });
}
const {
patient_name: name,
patient_hkid: hkid,
patient_age: age,
patient_mobile: mobile,
bruisesScratchesMinorBurns,
chestPain,
headache,
myMuiCheck,
nauseaAndVomiting,
runnyOrStuffyNose,
soreThroat,
} = req.body.values;
switch (queue_type) {
case 'non-urgent':
await NonUrgentQueue.update(
{
name,
hkid,
age,
mobile,
bruisesScratchesMinorBurns,
chestPain,
headache,
myMuiCheck,
nauseaAndVomiting,
runnyOrStuffyNose,
soreThroat,
},
{ where: { id } },
);
return { status: 'OK' };
case 'semi-urgent':
await SemiUrgentQueue.update(
{
name,
hkid,
age,
mobile,
bruisesScratchesMinorBurns,
chestPain,
headache,
myMuiCheck,
nauseaAndVomiting,
runnyOrStuffyNose,
soreThroat,
},
{ where: { id } },
);
return { status: 'OK' };
default:
return res.status(400).send({ status: 'error', message: 'invalid queue_type' });
}
} catch (error) {
console.error(error);
return { status: 'error' };
}
}
async function handler(req, res) {
if (req.method === 'POST') {
try {
const result = await updateQueueById(req, res);
return res.status(200).send(result);
} catch (err) {
console.log(err);
return res.status(200).send({ status: 'error', message: 'list error' });
}
} else {
return res.status(405).send({ status: 'error', message: 'method not allowed' });
}
}
export default handler;