Исходник сайта конкурса КИО. Является переработкой сайта КИО.
- Полезные ссылки
- Установка и запуск
- Формулировка Задачи
- Разработка
- Архитектура
- style guide
- Добавление новых зависимостей
- Создатели
Установка Docker
Установка Nodejs
- Установите NodeJS >= 18.x.x версии
- Установите и запустите docker
- Прописать следующие комманды в bash для запуска backend части
cd ./kio_site/
npm install -g @microsoft/rush
./start.sh
Для запуска frontend части:
cd packages/frontend/
rushx start || npm start
- Переписать существующую платформу КИО
- Заложение основ гибкой архитектуры проекта
- Разработать новый дизайн
- Добавить ряд возможностей в новую оболочку
- Создание личного кабинета с расширенным функционалом
- Создание платформы для конструирования задач
- Создание графического интерфейса для добавления задач
- Создание системы монетизации
В рамках данного проекта мы будем использовать функциональный подход с декларативным стилем написания кода. Выбранный подход требует гораздо большего уровня знаний от программистов в сравнении с ООП подходом, поскольку человек редко в жизни сталкивается с функциональными вещами (в отличии от объектных), но при этом дает нам возможность сильно ускорить наш код и сделать его более лаконичным и простым.
В разработке будем использовать следующие технологии
- Frontend
Основным фреймворком выберем React
+ React Query
для запросов. Также выберем React Router
для роутинга на сайте и typescript
в качестве языка программирования
- Backend
Будем использовать express
и утилитарные для него библиотеки. Остальное возьмем из встроенных модулей в NodeJs
В качестве менеджера и сборщика будем использовать Rush + Vite
Для создания дизайн-макета мы консультировались с несколькими дизайнерами и как результат получили полноценный макет платформы в Figma. В основном мы хотели получить практичный, но при этом эффектный дизайн, который бы привлекал пользователей к участию в проекте.
Таблица в Notion с текущим распределением обязанностей на проекте
Множество отдельных функций имеют документацию в файле к ним, тут только общие сведения об архитектуре
Архитектура backend части состоит из нескольких блоков
- Это блок с
middleware
перед каждый запросом вы мутируем обьект запроса. проверяя токены и пользователя. После управление передается в обработчики - Обработчики в
express
на каждый конкретный маршрут выполняют некоторые действия, после отправляют ответ
Заметим, что вся структура проекта построена в строгую иерархию папок, все константы вынесены в соответствующие им папки и файлы в domain
.
Описание схемы базы данных происходить в /bd/
, там же происходит типизация данных, связанных в БД.
Папка /api/
содержит контроллеры для каждого запроса, каждый контроллер состоит из типов, валидатора маршрута и самого контроллера.
Все внешние интерфейсы экспортируются в index.ts
файле.
Архитектура frontend части также разделена на части, только тут разделение строится на основе функциональности отдельных интерфейсов. Сам проект находится в /src/
директории и разделен на функциональные блоки-компоненты.
/api/
— Пакет для выполнения запросов. Для каждого маршрута создаем отдельный файл в/routes/
. В нем пишем запрос, используя заранее написанную функциюmakeRequest()
и, в нем же, react-хук, использующийreact-query
для выполнения запроса в интерфейсе. Все внешние интерфейсы экспортируются вindex.ts
файле/components/
— Папкаshare
компонентов, актуальные для сайта в целом, а не для конкретной страницы./constants/
— Константы, которые используются по всему проекту/context/
— Контекст проекта, расшареный для каждого компонента. Редьюсеры в/context/reducers
дляuseReducer
/hooks/
— хуки общие для проекта. К примеру создание формы или добавление всплывающей подсказки./pages/
— Каждая страница - отдельная папка, в ней/services/
для компонентов, актуальных только для конкретной страницы. Каждая страница оборачивается в<Layout>
для базовых настроек и запросов./router/
— описание типа маршрут-страница. Обязательно черезlazy()
функцию/styles/
— в общем в проекте используетсяcss modules
, но тут конкретно общие стили/utils/
— утилитарные функции, которые используются для удобства. К примеруclx
-vue-like
условное преобразование классов.
Именование папок и файлов происходит в cebab-case
Если не указано иное использовать Google JS style guide
- Добавить новую запись в необходимый package.json вручную
- Выполнить команду
rush update
Для этого надо находиться в корне того пакета, у которого вы хотите вызвать скрипт.