2023-10-14 12:48:55 +03:00
|
|
|
import { ConfigService } from '@nestjs/config';
|
|
|
|
|
2023-10-14 14:43:45 +03:00
|
|
|
import console from 'console';
|
|
|
|
|
2023-10-14 12:48:55 +03:00
|
|
|
import { config } from 'dotenv';
|
|
|
|
import { DataSource } from 'typeorm';
|
|
|
|
|
|
|
|
config();
|
|
|
|
|
|
|
|
const configService = new ConfigService();
|
|
|
|
|
|
|
|
export const connectionSource = new DataSource({
|
|
|
|
type: 'postgres',
|
|
|
|
logging: false,
|
|
|
|
url: configService.get<string>('PG_DATABASE_URL'),
|
|
|
|
});
|
|
|
|
|
2023-10-14 14:43:45 +03:00
|
|
|
const performQuery = async (query: string, consoleDescription: string) => {
|
|
|
|
try {
|
|
|
|
await connectionSource.query(query);
|
|
|
|
console.log(`Performed '${consoleDescription}' successfully`);
|
|
|
|
} catch (err) {
|
|
|
|
console.error(`Failed to perform '${consoleDescription}':`, err);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2023-10-14 12:48:55 +03:00
|
|
|
connectionSource
|
|
|
|
.initialize()
|
|
|
|
.then(async () => {
|
2023-10-27 18:48:06 +03:00
|
|
|
await performQuery(
|
|
|
|
'CREATE SCHEMA IF NOT EXISTS "public"',
|
|
|
|
'create schema "public"',
|
|
|
|
);
|
2023-10-14 14:43:45 +03:00
|
|
|
await performQuery(
|
|
|
|
'CREATE SCHEMA IF NOT EXISTS "metadata"',
|
|
|
|
'create schema "metadata"',
|
|
|
|
);
|
|
|
|
await performQuery(
|
|
|
|
'CREATE EXTENSION IF NOT EXISTS pg_graphql',
|
|
|
|
'create extension pg_graphql',
|
|
|
|
);
|
|
|
|
|
|
|
|
await performQuery(
|
|
|
|
'CREATE EXTENSION IF NOT EXISTS "uuid-ossp"',
|
|
|
|
'create extension "uuid-ossp"',
|
|
|
|
);
|
|
|
|
|
2023-10-14 23:40:05 +03:00
|
|
|
await performQuery(
|
|
|
|
`COMMENT ON SCHEMA "public" IS '@graphql({"inflect_names": true})';`,
|
|
|
|
'inflect names for graphql',
|
|
|
|
);
|
|
|
|
|
2023-10-14 14:43:45 +03:00
|
|
|
await performQuery(
|
|
|
|
`
|
|
|
|
DROP FUNCTION IF EXISTS graphql;
|
|
|
|
CREATE FUNCTION graphql(
|
|
|
|
"operationName" text default null,
|
|
|
|
query text default null,
|
|
|
|
variables jsonb default null,
|
|
|
|
extensions jsonb default null
|
|
|
|
)
|
|
|
|
returns jsonb
|
|
|
|
language sql
|
|
|
|
as $$
|
|
|
|
select graphql.resolve(
|
|
|
|
query := query,
|
|
|
|
variables := coalesce(variables, '{}'),
|
|
|
|
"operationName" := "operationName",
|
|
|
|
extensions := extensions
|
|
|
|
);
|
|
|
|
$$;
|
|
|
|
`,
|
|
|
|
'create function graphql',
|
|
|
|
);
|
2023-10-14 12:48:55 +03:00
|
|
|
})
|
|
|
|
.catch((err) => {
|
|
|
|
console.error('Error during Data Source initialization:', err);
|
|
|
|
});
|