Select Git revision
index.ts 1.70 KiB
import {
Application,
Context,
Router,
} from "https://deno.land/x/oak@v12.6.1/mod.ts";
import { Client } from "https://deno.land/x/postgres@v0.17.0/mod.ts";
import { load } from "https://deno.land/std@0.209.0/dotenv/mod.ts";
import { updateProfile } from "./lib/update_profile.ts";
import {
isProfilesTableEmpty,
runCsplusImport,
waitForTableCreation,
} from "./lib/utils.ts";
let dbUser, dbDatabase, dbPassword, dbHostname, importCsplusData;
const dbPort = 5432;
const isProduction = Deno.env.get("PRODUCTION") === "true";
if (isProduction) {
dbUser = Deno.env.get("DB_USER");
dbDatabase = Deno.env.get("DB_DATABASE");
dbPassword = Deno.env.get("DB_PASSWORD");
importCsplusData = Deno.env.get("IMPORT_CSPLUS_DATA") === "true";
dbHostname = "postgres-datapod";
} else {
const env = await load();
dbUser = env["DB_USER"];
dbDatabase = env["DB_DATABASE"];
dbPassword = env["DB_PASSWORD"];
importCsplusData = env["IMPORT_CSPLUS_DATA"] === "true";
dbHostname = "localhost";
}
const client = new Client({
user: dbUser,
database: dbDatabase,
hostname: dbHostname,
password: dbPassword,
port: dbPort,
});
await client.connect();
const app = new Application();
const router = new Router();
// Wait for table creation before continue
await waitForTableCreation(client, "public.profiles");
// Import Cs+ data
const profilesEmpty = await isProfilesTableEmpty(client);
if (profilesEmpty && importCsplusData) {
await runCsplusImport(isProduction);
}
// Manage routes
router.post(
"/update-profile-data",
async (ctx: Context) => await updateProfile(ctx, client),
);
app.use(router.routes());
app.use(router.allowedMethods());
console.log("\nDatapod is started");
await app.listen({ port: 3000 });