All files / server/src/utils initializeDatabase.ts

0% Statements 0/29
0% Branches 0/8
0% Functions 0/1
0% Lines 0/29

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66                                                                                                                                   
import { logger } from "server/utils/logger";
import { saveProgramItems } from "server/features/program-item/programItemRepository";
import { db } from "server/db/mongodb";
import {
  createAdminUser,
  createHelpUser,
  createTestUsers,
} from "server/test/test-data-generation/generators/createUsers";
import { cleanupDatabase } from "server/utils/cleanupDatabase";
import { addSignupQuestions } from "server/features/program-item/utils/addSignupQuestions";
import { findSettings } from "server/features/settings/settingsRepository";
import { getProgramItemsForEvent } from "server/features/program-item/programItemService";
 
const ADMIN_PASSWORD = "";
const HELP_PASSWORD = "";
const CREATE_TEST_USERS = false;
const UPDATE_PROGRAM_ITEMS = true;
 
const initializeDatabase = async (): Promise<void> => {
  if (process.env.NODE_ENV === "production") {
    // eslint-disable-next-line no-restricted-syntax -- Data generation script
    throw new Error("Data creation not allowed in production");
  }
 
  await db.connectToDb();
 
  logger.info("Clean all data");
  await cleanupDatabase();
 
  logger.info("Create admin user");
  await createAdminUser(ADMIN_PASSWORD);
 
  logger.info("Create helper user");
  await createHelpUser(HELP_PASSWORD);
 
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
  if (CREATE_TEST_USERS) {
    logger.info("Create test users");
    await createTestUsers({ userCount: 5 });
  }
 
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
  if (UPDATE_PROGRAM_ITEMS) {
    logger.info("Download program items from Kompassi");
 
    const programItemsResult = await getProgramItemsForEvent();
    if (!programItemsResult.ok) {
      // eslint-disable-next-line no-restricted-syntax -- Data generation script
      throw new Error("Unable to load Kompassi program items");
    }
    await saveProgramItems(programItemsResult.value);
  }
 
  // This will create default settings
  await findSettings();
  await addSignupQuestions();
 
  await db.gracefulExit();
};
 
try {
  await initializeDatabase();
} catch (error: unknown) {
  logger.error(new Error("Script initializeDatabase failed", { cause: error }));
}