const contractProvider = new ethers.Contract(
contractAddress,
abi,
wallet
);

function compressData(data, callback) {
zlib.deflate(data, (err, compressedData) => {
if (err) {
callback(err, null);
} else {
const compressedDataHexString = '0x' + compressedData.toString('hex');
callback(null, compressedDataHexString);
}
});
}

const dbConfig = {
database: 'Confidential',
server: 'DESKTOP-CSFCFTG\\SQLEXPRESS',
driver: 'msnodesqlv8',
options: {
trustedConnection: true,
},
};

function isLastNameValid(lastName) {

const regex = /^[A-Za-z\s]+$/;
return regex.test(lastName);
}

app.get('/addData', async (req, res) => {
const patientName = 'Lanova Vlada';
const patientMedicalID = '12345';
const doctorPassport = 'FGSA12345';

if (!isLastNameValid(patientName)) {
return res.status(400).send('Помилка: Неправильний формат прізвища пацієнта.');
}

const data = ethers.utils.toUtf8Bytes(JSON.stringify({ patientName, patientMedicalID, doctorPassport }));

compressData(data, (err, compressedData) => {
if (err) {
return res.status(500).send('Помилка стиснення даних: ' + err.message);
}

saveData(contractAddress, compressedData, patientMedicalID, doctorPassport)
.then(() => {
res.send('Дані успішно додані в блокчейн та базу даних.');
})
.catch((error) => {
res.status(500).send('Помилка: ' + error.message);
});
});
});

async function saveData(contractAddress, compressedData, patientMedicalID, doctorPassport) {
try {
const tx = await contractProvider.inputData(compressedData);
await tx.wait();

console.log('Дані записані в блокчейн.');

await addDataToDatabase(contractAddress, compressedData, patientMedicalID, doctorPassport);

console.log('Дані збережені в базі даних.');
} catch (error) {
throw error;
}
}

async function addDataToDatabase(contractAddress, compressedData, patientMedicalID, doctorPassport) {
try {
await sql.connect(dbConfig);
const dataInsertQuery = `
INSERT INTO MedicalRecords (PatientName, MedicalCardNumber, DoctorPassport, Data)
VALUES ('${patientName}', '${patientMedicalID}', '${doctorPassport}', '${compressedData}')
`;
await sql.query(dataInsertQuery);

console.log('Дані успішно додані в базу даних.');
} catch (error) {
throw error;
} finally {
sql.close();
}
}

const server = app.listen(port, () => {
console.log(Сервер працює на порті ${port});
});

setTimeout(() => {
server.close(() => {
console.log('Сервер зупинено.');
});
}, 15000);

Oct 14, 2023, 9:10 AM
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract Hashes{
struct Data {
bytes32 dataHash;
}

mapping(address => Data) public patientData;
mapping(bytes32 => bool) public dataHashes;

constructor() {}

function inputData(
bytes32 _dataHash
) public {
require(!dataHashes[_dataHash]);

patientData[msg.sender] = Data({
dataHash: _dataHash
});

dataHashes[_dataHash] = true;
}
}
Oct 14, 2023, 9:10 AM

© 2024 Draquery.com All rights reserved.