Учебник по NestJS + Angular

Эта статья является частью серии, в которой я описываю систему синхронизации входа / выхода. Если вы хотите узнать больше, вы можете прочитать следующее:

В предыдущих частях я описал разработку серверной части системы синхронизации, но нет данных, подтверждающих, что наша серверная часть была успешно разработана.

В этой части я собираюсь описать, как я создал серию скриптов (TypeScript), которые позволяют заполнять базу данных из листа Excel, предоставленного клиентом из его старого программного обеспечения (MS Excel).

Первым шагом является добавление сценария npm в package.json , который позволяет выполнять наш сценарий в TypeScript, используя ts-node .

Выполнение нашего скрипта выполнит команду npm run init:db .

Сценарий create-data-fixture - это самоисполняющаяся функция, которая создает новый объект на основе DatabaseTest и вызывает метод db.reload().

Функция DatabaseTest создается с использованием двух параметров:

  • Соединение с базой данных, используемое для хранения данных, которое будет отличаться при каждом выполнении, если мы хотим использовать разные базы данных. Этот факт интересен, когда мы хотим иметь разные базы данных параллельно, выполняя тесты e2e (end-to-end) с фиктивными данными.
  • DataFixture - объект, содержащий информацию, которая будет вставлена ​​в базу данных (Users и Users-schedule).

Самый простой файл - это TestFixture, который экспортирует данные после того, как они были импортированы и загружены из файла XLS сценария сопоставления данных (который также будет разработан нами).

С другой стороны, файл database.test.ts отвечает за загрузку поддельных данных в базу данных. То есть Users и UsersSchedule будут взяты из test.fixture файла.

Опишем этот файл, так как он достаточно важный:

  • Класс DatabaseTest получает соединение с базой данных и имитируемые данные из файла test.fixture с помощью DI (внедрение зависимостей).
  • Инициализируется атрибут modelsCharged, в котором хранятся модели, которые уже были загружены в базу данных, и нет необходимости их перезагружать.
  • Метод createConnectionDB является статическим для подключения к базе данных извне класса. Таким образом, когда класс внедряется, соединение уже установлено успешно.

Следующим шагом является создание основных методов для инициализации, перезагрузки и синхронизации базы данных.

Затем загружаются модели, которые рекурсивно выполняются одна за другой, принимая информацию о существующих зависимостях между различными моделями.

Подводя итог, показан полный файл database.test:

Бонус

Далее мы покажем метод XLSToJson, который просто состоит из преобразования каждой строки Excel в различные объекты JSON, которые необходимо импортировать с помощью TypeORM.

Важно отметить, что каждому разработчику придется адаптировать функцию XLSToJson из своего XLS.

Прежде всего, нам нужно установить пакет node-xlsx , который позволяет нам взаимодействовать с файлами XLS. Ниже представлена ​​первая версия, которая использует несколько forEach циклов для прохождения и построения структуры данных, подобной следующей: [планировщики, пользователи], где scheduler - объект следующего типа:

А user - это объект следующего типа:

{ uid: string, name: string, }

Я не считаю, что следующий код находится в его самой чистой версии, что он не в самой чистой версии, и я планирую хороший рефакторинг, когда система будет завершена, в одной из будущих частей.

Если кто-то хочет приступить к этой задаче, предлагаются следующие пункты:

  1. Извлеките функции в соответствии с выполняемыми задачами, а не одну большую отдельную функцию.
  2. Замените forEach методы, скрывающие классическую структуру данных, более функциональными и подходящими методами, такими как reduce.

migration.ts:

Заключение

В этой части я объяснил свою исходную базу данных, которая состоит из серии скриптов, которые позволяют мне загружать любую структуру данных в базу данных.

Для импорта из Excel был создан специальный скрипт, конвертирующий файл XLS в JSON.

Проект GitHub - это https://github.com/Caballerog/clock-in-out.

Ветвь GitHub этой статьи: https://github.com/Caballerog/clock-in-out/tree/part5-seed-database