-function getModelFiles (modelDirectory: string, callback: (err: Error, filePaths: string[]) => void) {
- fs.readdir(modelDirectory, function (err, files) {
- if (err) throw err
-
- const directories = files.filter(function (directory) {
- // Find directories
- if (
- directory.endsWith('.js.map') ||
- directory === 'index.js' || directory === 'index.ts' ||
- directory === 'utils.js' || directory === 'utils.ts'
- ) return false
-
- return true
- })
-
- let modelFilePaths: string[] = []
-
- // For each directory we read it and append model in the modelFilePaths array
- each(directories, function (directory: string, eachCallback: ErrorCallback<Error>) {
- const modelDirectoryPath = join(modelDirectory, directory)
-
- fs.readdir(modelDirectoryPath, function (err, files) {
- if (err) return eachCallback(err)
-
- const filteredFiles = files.filter(file => {
- if (
- file === 'index.js' || file === 'index.ts' ||
- file === 'utils.js' || file === 'utils.ts' ||
- file.endsWith('-interface.js') || file.endsWith('-interface.ts') ||
- file.endsWith('.js.map')
- ) return false
-
- return true
- }).map(file => {
- return join(modelDirectoryPath, file)
- })
-
- modelFilePaths = modelFilePaths.concat(filteredFiles)
-
- return eachCallback(null)
- })
- }, function (err: Error) {
- return callback(err, modelFilePaths)
- })
- })
+async function checkPostgresExtensions () {
+ const extensions = [
+ 'pg_trgm',
+ 'unaccent'
+ ]
+
+ for (const extension of extensions) {
+ const query = `SELECT true AS enabled FROM pg_available_extensions WHERE name = '${extension}' AND installed_version IS NOT NULL;`
+ const [ res ] = await sequelizeTypescript.query(query, { raw: true })
+
+ if (!res || res.length === 0 || res[ 0 ][ 'enabled' ] !== true) {
+ // Try to create the extension ourself
+ try {
+ await sequelizeTypescript.query(`CREATE EXTENSION ${extension};`, { raw: true })
+
+ } catch {
+ const errorMessage = `You need to enable ${extension} extension in PostgreSQL. ` +
+ `You can do so by running 'CREATE EXTENSION ${extension};' as a PostgreSQL super user in ${CONFIG.DATABASE.DBNAME} database.`
+ throw new Error(errorMessage)
+ }
+ }
+ }
+}
+
+async function createFunctions () {
+ const query = `CREATE OR REPLACE FUNCTION immutable_unaccent(varchar)
+ RETURNS text AS $$
+ SELECT unaccent($1)
+ $$ LANGUAGE sql IMMUTABLE;`
+
+ return sequelizeTypescript.query(query, { raw: true })