/ITMO-ICT-Backend-2024

Репозиторий по моему курсу бэкенд-разработки в ИТМО (2024).

Primary LanguageTypeScript

ITMO-ICT-Backend-2024

Курс по бэкенд-разработке в среде Node.JS для Университета ИТМО

1. Введение в проблематику серверной веб-разработки

1.1. Знакомство со средой Node.JS, пакетным менеджером npm

Вводная презентация

ДЗ1 (срок: 29.02.2024)

Задание:

  • Установка npm (10.2.4), node.js (18.19.1 / 20.11.1)
  • Инициализация npm-пакета
  • Установка express
  • Удаление express/попытка его обновить
  • Написание кастомной команды для npm, чтобы можно удалить express командой “npm run rme”

Необходимо сделать отчёт по шаблону

1.2. Знакомство с микрофреймворком Express

1.3. Знакомство с ORM Sequelize

Презентация Express + Sequelize

Документация Express Документация Sequelize Документация sequelize-cli

Пример, который делали на паре

ДЗ2 (срок 14.03.2024)

Задание:

  • Продумать свою собственную модель пользователя
  • Реализовать набор из CRUD-методов для работы с пользователями средствами Express + Sequelize
  • Написать запрос для получения пользователя по id/email

Необходимо сделать отчёт по шаблону

1.4. Typescript: основы языка

1.5. Автоматизация рутинных действий средствами Makefile

Презентация "Основы TypeScript, работа с Makefile" Презентация "Основы TypeScript, Sequelize + TypeScript"

Статья по основам синтаксиса на Хабре
Статья на Nuances of Programming
Карманная книжка по TS
Видео от Хекслет про утилиту make
Makefile для самых маленьких, но это больше про C
Введение в make: история

Пример, который делали на паре

Источники по поводу использования typescript в ORM:

Документация пакета sequelize-typescript
Мануал по использованию typescript внутри sequelize
Документация TypeORM (можно использовать в качестве альтернативы Sequelize)

ЛР1 (срок: 04.04.2024)

Нужно написать свой boilerplate на express + sequelize / TypeORM + typescript.

Должно быть явное разделение на:

  • модели
  • контроллеры
  • роуты
  • сервисы для работы с моделями (реализуем паттерн “репозиторий”)

Пример: https://github.com/kantegory/express-sequelize-boilerplate

Другие примеры можно поискать на github, набрав в поиске: "express boilerplate".

ДЗ3 (срок: 04.04.2024)

Составьте Makefile, который будет автоматизировать ваши рутинные действия, такие как:

  • запуск приложения;
  • установка зависимостей и сборка приложения.

2. Тестирование, разработка и документирование RESTful API

2.1 REST, RESTful, SOAP, GraphQL

Презентация: REST, RESTful, SOAP, GraphQL
Видео

ЛР2 (срок: 18.04.2024)

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

По выбранному варианту необходимо будет реализовать RESTful API средствами express + typescript (используя ранее написанный boilerplate).

Доступные варианты
  1. Платформа для проведения онлайн-хакатонов (пример: https://devpost.com)

Есть несколько сущностей: жюри хакатона, участники, главный администратор, кураторы задач. У участников есть возможность выбрать одну из задач (регистрируется и имеет доступ к системе только капитан команды), после выбора задачи капитан может предложить решение, скачать какие-то файлы, которые ему предложены, посмотреть на ссылки, которые есть в задаче.

Ссылки и файлы к задачам добавляют кураторы задач через отдельный админский интерфейс, кроме того у них есть доступ к решениям, как и у членов жюри. Куратор может назначаться только на одну задачу и проводить консультации (например, в Zoom, ссылку на консультацию он крепит к самой задаче и это выводится у команды в ЛК). Жюри может оценивать решения участников, с комментариями, сортировать решения по дате публикации.

Капитан при регистрации заполняет только свои учётные данные, после в кабинете команды — он может заполнить данные по каждому участнику, название команды и какой-нибудь условный девиз/описание.

У главного админа есть доступ ко всему, но он не может добавлять команды и редактировать их решения. Так же, не имеет права оценивать решения участников. Только просматривать. Ещё он может создавать задачи, которые потом будут дополнять кураторы. Ну и назначать кураторов на задачи, разумеется.

Поскольку этот вариант является довольно объёмным и сложным — для его выполнения можно объединиться в команды по 2-3 человека, но нужно об этом заранее предупредить.

  1. Сервис для буккроссинга. Требуемый функционал: регистрация, авторизация, создание профиля, создание списка своих книг, создание заявок на обмен книгами, работа с заявками на обмен.

  2. Сервис-помощник в планировании путешествий. Требуемый функционал: регистрация, авторизация, создание профиля, создание поездки с заполнением информации о ней, поиск по существующим предложениям для поездок, предложения для новой созданной поездки на основе интересов пользователя.

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

  1. Сервис для управления умным домом. Требуемый функционал: регистрация, авторизация, создание профиля, добавление нового устройства, настройка устройства, создание сценариев, запуск сценариев по триггерам/либо по времени (запуск сценариев можно сымитировать, главное, чтобы о запуске сохранилась информация в логах).

  2. Сервис для работы с магазином одежды. Требуемый функционал: регистрация, авторизация, создание профиля, работа с товарами, просмотр количества единиц товара, управление скидками и акциями, работа с базой клиентов.

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

  1. Любое API, которое вам интересно реализовать

Да, всё верно. Вы можете предложить свой вариант, необходимо отдельно его согласовать со мной.

Он обязательно должен включать в себя следующий функционал:

  • Вход

  • Регистрация

  • Личный кабинет пользователя

  • Поиск с возможностью фильтрации

2.2 Тестирование, документация

Презентация

ДЗ4 (срок: 25.04.2024)

Документирование API из ЛР2 средствами Swagger, Postman

ДЗ5 (срок 25.04.2024)

Тестирование API из ЛР2 средствами Postman

3. DI, IoC, Развёртывание, микросервисы, CI/CD

3.1 DI, IoC

Презентация по DI, IoC

3.2 Микросервисы

Презентация по микросервисам

ЛР3 (срок: 02.05.2024)

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

3.3 Docker, docker compose, docker swarm

Презентация по docker

ЛР4 (срок: 16.05.2024)

Необходимо упаковать ваше приложение в docker-контейнеры и обеспечить сетевое взаимодействие между различными частями вашего приложения. Делать это можно как с помощью docker-compose так и с помощью docker swarm. При разумном использовании swirl вы получите дополнительные баллы.

3.4 CI/CD

Вводную информацию по Github Actions и Gitlab CI можно подчерпнуть из документации:

ДЗ6 (срок: 23.05.2024)

Необходимо настроить автодеплой (с триггером на обновление кода в вашем репозитории, на определённой ветке) для вашего приложения на удалённый сервер с использованием Github Actions или Gitlab CI (любая другая CI-система также может быть использована).

В случае, если у вас нет возможности арендовать удалённый сервер, можно воспользоваться временной квотой в Yandex.Cloud, или любым другим аналогичным сервисом, на котором предоставляют бесплатные ресурсы на время тестирования. В том же случае, если у вас все эти квоты уже исчерпаны и нет возможности арендовать удалённый сервер самостоятельно - обратитесь ко мне лично, постараюсь предоставить вам мощности, но не делайте этого в последний момент, так шансов у вас крайне мало.