Skip to content
Snippets Groups Projects
Select Git revision
  • ce7eeeca958dac403a93b14edbb5f4222d7dc56e
  • master default protected
  • hugo/ipfs-input
  • dev
4 results

index.ts

Blame
  • 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 });