78 lines
2.5 KiB
JavaScript
78 lines
2.5 KiB
JavaScript
const fs = require("fs");
|
|
const path = require("path");
|
|
const logger = require("./server/utils/logger"); // Assuming same logger utility
|
|
const s3Client = require("./server/utils/s3"); // Using the S3 client utilities with LocalStack support
|
|
|
|
// Set bucket name for development with LocalStack
|
|
const S3_BUCKET_NAME = "imex-job-totals";
|
|
|
|
// Set fixtures directory path
|
|
const FIXTURES_DIR = path.join(__dirname, "server", "job", "test", "fixtures", "job-totals");
|
|
|
|
const ensureFixturesDirectory = () => {
|
|
if (!fs.existsSync(FIXTURES_DIR)) {
|
|
fs.mkdirSync(FIXTURES_DIR, { recursive: true });
|
|
logger.log(`Created fixtures directory: ${FIXTURES_DIR}`, "info");
|
|
}
|
|
};
|
|
|
|
const downloadJsonFiles = async (userInfo = { email: "system" }) => {
|
|
logger.log(`Starting download of JSON files from bucket: ${S3_BUCKET_NAME}`, "debug", userInfo.email);
|
|
|
|
try {
|
|
ensureFixturesDirectory();
|
|
const contents = await s3Client.listFilesInS3Bucket(S3_BUCKET_NAME);
|
|
|
|
if (!contents.length) {
|
|
logger.log("No files found in bucket", "info", userInfo.email);
|
|
return;
|
|
}
|
|
|
|
logger.log(`Found ${contents.length} files in bucket`, "info", userInfo.email);
|
|
|
|
for (const item of contents) {
|
|
if (!item.Key.endsWith(".json")) {
|
|
logger.log(`Skipping non-JSON file: ${item.Key}`, "debug", userInfo.email);
|
|
continue;
|
|
}
|
|
|
|
logger.log(`Downloading: ${item.Key}`, "debug", userInfo.email);
|
|
const fileData = await s3Client.downloadFileFromS3({
|
|
bucketName: S3_BUCKET_NAME,
|
|
key: item.Key
|
|
});
|
|
|
|
const fileContent = await fileData.transformToString();
|
|
const fileName = path.basename(item.Key);
|
|
const filePath = path.join(FIXTURES_DIR, fileName);
|
|
|
|
fs.writeFileSync(filePath, fileContent);
|
|
logger.log(`Saved: ${filePath}`, "info", userInfo.email);
|
|
}
|
|
|
|
logger.log("Download completed successfully", "info", userInfo.email);
|
|
} catch (error) {
|
|
logger.log("Failed to download JSON files", "error", userInfo.email, null, {
|
|
error: error?.message,
|
|
stack: error?.stack
|
|
});
|
|
throw error; // Re-throw to trigger process exit with error code
|
|
}
|
|
};
|
|
|
|
// Run the download if script is executed directly
|
|
if (require.main === module) {
|
|
(async () => {
|
|
try {
|
|
await downloadJsonFiles();
|
|
console.log("Script completed successfully");
|
|
process.exit(0); // Explicitly exit with success code
|
|
} catch (error) {
|
|
console.error("Fatal error downloading files:", error);
|
|
process.exit(1); // Explicitly exit with error code
|
|
}
|
|
})();
|
|
}
|
|
|
|
module.exports = downloadJsonFiles;
|