Skip to content

Commit

Permalink
Merge pull request #107 from bcgov/effectivedate
Browse files Browse the repository at this point in the history
Effectivedate
  • Loading branch information
shaunlumbcgov authored Nov 19, 2023
2 parents ec5f343 + 30b6d93 commit 8be46d7
Show file tree
Hide file tree
Showing 6 changed files with 228 additions and 110 deletions.
8 changes: 6 additions & 2 deletions backend/src/components/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const ALLOWED_FILENAMES = new Set([
'offshoreschoolcontacts',
'independentschoolcontacts',
'allschoolcontacts',
'allschoolmailing',
'authoritycontacts',
'authoritymailing',
'offshoreschoolrepresentatives'
Expand Down Expand Up @@ -143,7 +144,6 @@ function addDistrictLabels(jsonData, districtList) {
if (district) {
dataItem.districtNumber = district.districtNumber;
dataItem.districtName = district.displayName;

}
});
}
Expand Down Expand Up @@ -238,6 +238,9 @@ function addDistrictLabels(jsonData, districtList) {
function filterRemoveByField(data, field, valuesToExclude) {
return data.filter(item => !valuesToExclude.includes(item[field]));
}
function filterIncludeByField(data, field, valuesToInclude) {
return data.filter(item => valuesToInclude.includes(item[field]));
}

function filterByPubliclyAvailableCodes(jsonArray, fieldName, publicCodes) {
// Filter the array based on the condition
Expand All @@ -263,6 +266,7 @@ function addDistrictLabels(jsonData, districtList) {

return filteredArray;
}

function filterByExpiryDate(data) {
const currentDate = new Date();

Expand Down Expand Up @@ -388,4 +392,4 @@ function addDistrictLabels(jsonData, districtList) {
return school;
});
}
module.exports = {filterByPubliclyAvailableCodes, getArrayofPubliclyAvailableCodes, filterByExpiryDate, filterRemoveByField, sortByProperty,getArrayofNonPubliclyAvailableCodes,filterByField,appendMailingAddressDetailsAndRemoveAddresses,sortJSONBySchoolCode,sortJSONByDistrictNumber,normalizeJsonObject, removeFieldsByCriteria, createList, isSafeFilePath,isAllowedSchoolCategory, addDistrictLabels, districtNumberSort, createSchoolCache, formatGrades, rearrangeAndRelabelObjectProperties};
module.exports = {filterByPubliclyAvailableCodes, getArrayofPubliclyAvailableCodes, filterByExpiryDate, filterRemoveByField,filterIncludeByField, sortByProperty,getArrayofNonPubliclyAvailableCodes,filterByField,appendMailingAddressDetailsAndRemoveAddresses,sortJSONBySchoolCode,sortJSONByDistrictNumber,normalizeJsonObject, removeFieldsByCriteria, createList, isSafeFilePath,isAllowedSchoolCategory, addDistrictLabels, districtNumberSort, createSchoolCache, formatGrades, rearrangeAndRelabelObjectProperties};
3 changes: 2 additions & 1 deletion backend/src/config/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ nconf.defaults({
maxAge: +process.env.SESSION_MAX_AGE
},
instituteAPIURL: process.env.INSTITUTE_API_URL,
instituteAPITokenExpiry: process.env.INSTITUTE_API_EXPIRY
instituteAPITokenExpiry: process.env.INSTITUTE_API_EXPIRY,
clearFilesToken: process.env.CLEAR_FILES_TOKEN
},
oidc: {
clientId: process.env.SOAM_CLIENT_ID,
Expand Down
36 changes: 29 additions & 7 deletions backend/src/routes/district-router.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ const fs = require("fs");
const path = require("path");
const { checkToken } = require("../components/auth");
const { listCache } = require("../components/cache");
const {filterRemoveByField, filterByExpiryDate, getArrayofNonPubliclyAvailableCodes, filterByField,appendMailingAddressDetailsAndRemoveAddresses, rearrangeAndRelabelObjectProperties, addDistrictLabels, normalizeJsonObject, sortJSONByDistrictNumber, removeFieldsByCriteria} = require("../components/utils.js")
const {getArrayofPubliclyAvailableCodes,filterRemoveByField, filterByExpiryDate, getArrayofNonPubliclyAvailableCodes, filterByField,appendMailingAddressDetailsAndRemoveAddresses, rearrangeAndRelabelObjectProperties, addDistrictLabels, normalizeJsonObject, sortJSONByDistrictNumber, removeFieldsByCriteria, filterByPubliclyAvailableCodes} = require("../components/utils.js")

//Batch Routes
router.get("/all-contacts", checkToken, getAllDistrictContacts);
Expand Down Expand Up @@ -112,7 +112,7 @@ async function getAllDistrictContacts(req, res) {
let currentDate = new Date().toISOString().substring(0, 19)
const params = [
{
condition: null,
condition: 'AND',
searchCriteriaList: [
{
key: 'expiryDate',
Expand All @@ -129,6 +129,18 @@ async function getAllDistrictContacts(req, res) {
condition: 'OR'
}
]
},
{
condition: 'AND',
searchCriteriaList: [
{
key: 'effectiveDate',
operation: 'lte',
value: currentDate,
valueType: 'DATE_TIME',
condition: 'AND'
}
]
}
];
const jsonString = JSON.stringify(params);
Expand All @@ -148,21 +160,23 @@ async function getAllDistrictContacts(req, res) {
{ property: "firstName", label: "Contact First Name" },
{ property: "lastName", label: "Contact Last name" },
{ property: "jobTitle", label: "Position Title" },
{ property: "label", label: "Contact Type" },
{ property: "phoneNumber", label: "Contact Phone" },
{ property: "phoneExtension", label: "Contact Phone Extension" },
{ property: "email", label: "Contact Email" },
{ property: "effective", label: "Effective Date" },
{ property: "expiryDate", label: "Expiry Date" },
{ property: "districtContactTypeCode", label: "CONTACT TYPE CODE" },
];

//let content = addDistrictLabels(districtContactResponse.data,districtList);

const includedFields = ['createUser', 'updateUser', 'districtContactTypeCode', 'label', 'description'];
let content = normalizeJsonObject(districtContactResponse.data.content, contactTypeCodes.codesList.districtContactTypeCodes, 'districtContactTypeCode', (info) => info.publiclyAvailable === true, includedFields);
content = normalizeJsonObject(content, districtList, 'districtId', null, ['displayName', 'districtNumber']);
//console.log(contactTypeCodes.codesList.districtContactTypeCodes)
//console.log(getArrayofNonPubliclyAvailableCodes(contactTypeCodes.codesList.districtContactTypeCodes, "districtContactTypeCode"))
//let filteredData = filterByField(content, 'districtContactTypeCode', getArrayofNonPubliclyAvailableCodes(contactTypeCodes.codesList.districtContactTypeCodes, "districtContactTypeCode"));
content = filterByPubliclyAvailableCodes(content,"districtContactTypeCode",getArrayofPubliclyAvailableCodes(contactTypeCodes.codesList.districtContactTypeCodes, "districtContactTypeCode"))
content = filterByExpiryDate(content)

let filteredData = filterByField(content, 'districtNumber', ['']);
filteredData.forEach((currentElement, index, array) => {
const rearrangedElement = rearrangeAndRelabelObjectProperties(currentElement, propertyOrder);
Expand Down Expand Up @@ -265,7 +279,13 @@ async function getDistrict(req, res) {
valueType: "STRING",
condition: "AND",
},

{
key: "schoolCategoryCode",
operation: "neq",
value: "FED_BAND",
valueType: "STRING",
condition: "AND",
},
{
key: "facilityTypeCode",
operation: "neq",
Expand Down Expand Up @@ -296,7 +316,7 @@ async function getDistrict(req, res) {
});

const contactTypeCodes = await getDistrictCodes(req);

const districtContactCodeTypes = await listCache.get("codesList")
const nonPublicContactTypeCodes = getNonPublicContactTypeCodes(contactTypeCodes);
const districtDataPublic = removeContacts(
districtDataResponse.data,
Expand All @@ -306,9 +326,11 @@ async function getDistrict(req, res) {
districtDataPublic,
contactTypeCodes
);
districtDataPublicWithLabels.contacts = filterByPubliclyAvailableCodes(districtDataPublicWithLabels.contacts,"districtContactTypeCode",getArrayofPubliclyAvailableCodes(districtContactCodeTypes.codesList.districtContactTypeCodes, "districtContactTypeCode"))
districtDataPublicWithLabels.contacts = filterByExpiryDate(districtDataPublicWithLabels.contacts)



const districtJSON = {
districtData: districtDataPublicWithLabels,
districtSchools: districtSchoolsResponse.data.content,
Expand Down
27 changes: 27 additions & 0 deletions backend/src/routes/download-router.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,36 @@ const path = require('path');
const {isSafeFilePath} = require("../components/utils")
const { listCache } = require("../components/cache");


const FILE_STORAGE_DIR = path.join(__dirname, '../..', 'public');

router.get('/csv/*', checkToken, getDownload, addDistrictLabels, createCSVFile, getCSVDownload);
router.get('/clear-files/:token', clearCSVFiles);

async function clearCSVFiles(req, res) {
try {
const providedToken = req.params.token;
const configuredToken = config.get('server:clearFilesToken');

if (providedToken !== configuredToken) {
return res.status(403).send('Invalid token');
}
const directoryPath = FILE_STORAGE_DIR ;
// Read all files in the directory
fs.readdirSync(directoryPath).forEach((file) => {
const filePath = path.join(directoryPath, file);

// Delete each file
fs.unlinkSync(filePath);
});

res.status(200).send('All files in the directory deleted successfully.');
} catch (error) {
console.error(error);
res.status(500).send('Internal Server Error');
}
}


async function createCSVFile(req,res, next){
try {
Expand Down
Loading

0 comments on commit 8be46d7

Please sign in to comment.