Проект состоит из двух частей:
client
- код для работы с клиентом.server
- код работы с сервером.
О клиенте рассуждать нечего - свалочный код, который нужный, только чтобы показать, каким может быть GUI. Сервер состоит из следующих директорий:
- config - конфигурации и приватные переменные.
- data - база данных, в которой хранятся различные документы.
- src - програмный код.
- test - файлы с тестами.
Серверная архитектура состоит из следующих директорий:
core
- функции и сущности, которые формируют ядро приложения.modules
- различные модули - сегменты работы приложения.utils
- специфические функции, которые имеют узкое предназначение.
Ядро приложения наличивают различные перечисления, которые используются по всему приложению, а также файлы с логикой работы с файловой системой.
К примеру в файла statusCode.js
перечислены все HTTP код статуса, который используются во всём приложения. Возникает вопрос, зачем его создавать? Если у Вас есть много мест, где используются одни и те же сущности, зачем повышать вероятность ошибок и опечаток вручную вставлять стрингу? Создавая переменную с значением этого статус код, по всему коду программы будет использоватся одна и таже переменная, что формирует чистоту кода.
Приложения находит следующие модули:
- Application programming interface (API) - эндпоинты связи с сервером, которые используются в графическом интерфейсе и предоставляют функционал работы с данными.
- Command line interface (CLI) - модуль работы с интерфейсом командной строки.
- Graphical user interface (GUI) - модуль работы с HTML страничками.
- Logger - модуль работы с файлами логирования, их сжатия, разжатия, чтения и т.д.
- Worker - системные файлы, которые регулярно создают файлы логирования.
API состоит из трёх различных сущностей, каждая из которых едина в своей файловой архитектуре:
Существуют следующие сущности:
- 404 - если произошло использование несуществущего эндпоинта - пользователь попадёт на страничку 404
- check - модуль чеков. Каждый пользователь может сформировать чек. Реализовывает CRUD функционал с зависимостями по токену авторизациию и сущности пользователя.
- token - модуль авторизации, отвечает за токены, которые имеют свои сроки годноти и создаются для каждого пользователя отдельно. Явялется организатором сессий.
- user - модуль пользователя.
Каждая стандартная сущность (на примере модуля user) состоит из следующих файлов:
user.constants.js
- все константы, которые используются в модуле вынесены в отдельный файл. Таким образом унифицируя ответа с сервера и очищая код.user.controller.js
- класс логики получения данных по эндпоинтам, передача их в сервис, а так же реализация ответов по эндпоинту обратно на клиент.user.exception.js
- все варианты ответов от сервера.user.helper.js
- класс со специфическими функциями, которые не касаются работы с базой данных, валидации или маршрутизацией данных.user.module.js
- класс с итоговыми методами, которые могут быть использованы в других модулям.user.router.js
- описание всех методов приложения.user.service.js
- класс по работе с базой данных.user.validator.js
- класс валидации данных, которые приходят на сервер по различным эндпоинтом.
Интерфейс командной строки позволяет получить данные путём введения различных ключей. Структура самого модуля:
Где:
constants
- ярчащий пример понимание масштабируемости - если константы можно сгрупировать, то сами константы разделяются по файлам, а файлы падают в папку общей направленности - константы.cli.constants.js
- константы, которые используются по всему модулю CLI.messages.constants.js
- константы которые относятся к коммандеhelp
.row.constants.js
- костанты, которые относятся к коммандам со списками.stats.constants.js
- константы, котоыре онтосятся к коммандеstats
.
cli.commands.js
- перечень всех комманд, которые могут быть использованы в CLI.cli.controller.js
- класс логики получения данных по ключевым словами, передача их в сервис, а так же реализация ответов обратно в командною строку.cli.debug.js
- все варианты ответов ответов в командную строку.cli.events.js
- чтобы CLI понимал, ключевые слова, ему нужны подписки - привязки на ключевые слова, а также функции обратного вызова, которые применяются при срабатывании того или иного ключевого слова.cli.graphical.js
- CLI имеет графические свойства, такие как отступы, разделяющие линии и прочее. Эти методы описываются в классе CLIHraphiccli.helper.js
- класс со специфическими функциями, которые не касаются работы с базой данных, валидации или маршрутизацией данных.cli.logger.js
- класс, отвечающий за взаимодействие с модулем логера.cli.module.js
- класс с итоговыми методами, которые могут быть использованы в других модулям.cli.service.js
- класс по работе с базой данных.cli.utils.js
- различные утилиты, которые вынесены за скобки и не являются обработчиками данных.cli.validador.js
- класс валидации данных, которые приходят на сервер с различных команд.
Примеры использования различных команд и запуска самой CLI смотрите на главной странице - Главная страница
Графический интерфейс представляет из себя несколько страничек, организация маршутизации между ними, а также отдельную работу кнопок ведущих на те или иные эндпоинты.
Где:
templates
- директория со всеми шаблонами - страничками, которые отрисовываются и составляют GUIgui.base.js
- класс с функциями замыканиями, которые принимают данные различных страничек и путь к ним.gui.constants.js
- константы, которые применяются по всему модулю.gui.controller.js
- класс логики получения данных по эндпоинтам, передача их в сервис, а так же реализация ответов по эндпоинту обратно на клиент.gui.data.js
- данные каждого шаблона - странички.gui.helper.js
- класс со специфическими функциями, которые не касаются работы с базой данных, валидации или маршрутизацией данных.gui.module.js
- класс с итоговыми методами, которые могут быть использованы в других модулям.gui.pages.js
- перечень всех страничек приложения.gui.public.js
- методы по работе с публичными, статическими файлами, такими как Favicon.gui.service.js
- класс по работе с базой данных.gui.validator.js
- класс валидации данных, которые приходят на сервер с клиента.
Вид страничек смотрите на главной странице - Главная страница
Логер необходим для логирования файлов базы данных, таким образом позволяя их в дальнейшем восстановить в случае ошибок в последней.
Где:
logger.constants.js
- константы, которые применяются по всему модулю.logger.controller.js
- класс логики получения, передачи в сервис необходимых данных и возврат нужного ответа.logger.module.js
- класс с итоговыми методами, которые могут быть использованы в других модулям.logger.service.js
- класс по работе с базой данных.
Модуль отвечающий за переодическое логирование файлов и их пред / пост обработку при компресии / декомпресии их в работе проекта.