70 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const path = require("path");
 | |
| const fs = require("fs");
 | |
| const fsPromises = require("fs/promises");
 | |
| 
 | |
| if (global.__base == undefined)
 | |
|   global.__base = path.join(__dirname, "../..");
 | |
| 
 | |
| const db = require("../index.js");
 | |
| 
 | |
| const posts = `posts.sql`;
 | |
| const seed = `seed.sql`;
 | |
| 
 | |
| // TODO this is not used
 | |
| const schemas = [
 | |
|   posts,
 | |
|   seed
 | |
| ];
 | |
| 
 | |
| 
 | |
| const handleExit = (error=undefined) => {
 | |
|   if (error != undefined) {
 | |
|     console.log(`🚫 Exited with error: ${error}`);
 | |
|     process.exit(1);
 | |
|   }
 | |
| 
 | |
|   console.log("✅ Exited setup successfully!");
 | |
|   process.exit(0);
 | |
| };
 | |
| 
 | |
| 
 | |
| const readSchemaFiles = () => {
 | |
|   const schemaFolder = path.join(__base, "database/schemas");
 | |
|   console.log("Reading schemas from folder:", schemaFolder);
 | |
| 
 | |
|   return fsPromises.readdir(schemaFolder)
 | |
|     .then(files => files.map(filename => {
 | |
|       const filePath = path.join(schemaFolder, filename);
 | |
|       return fs.readFileSync(filePath, 'utf-8');
 | |
|     }))
 | |
| }
 | |
| 
 | |
| const applyAll = schemas => {
 | |
|   schemas = schemas.reverse();
 | |
| 
 | |
|   return schemas.reduce(async (prevPromise, schema) => {
 | |
|     const tableName = schema.split("CREATE TABLE IF NOT EXISTS ").pop().split(" (")[0];
 | |
|     console.log(`✏️  Applying schema: ${tableName}`);
 | |
| 
 | |
|     await prevPromise;
 | |
|     return db.query(schema);
 | |
|   }, Promise.resolve());
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Runner
 | |
|  */
 | |
| readSchemaFiles()
 | |
|   .then(schemas => applyAll(schemas))
 | |
|   .catch(err => handleExit(err))
 | |
|   .then(_ => process.exit(0))
 | |
| 
 | |
| 
 | |
| 
 | |
| // db.connect()
 | |
| //   .then(client => setup(client, schemas))
 | |
| 
 | |
| module.exports = db;
 |