Skip to content

dimaPolonez/blogs_platform_API

Repository files navigation

Проект: BlogPlatform API

О проекте

Реализация API Блогера, со следующим функционалом:

  1. Полноценная авторизация и регистрация. Работа с почтовыми ящиками(nodeMailer) и кодами активации учетной записи(uuid). Работа с шифрованием паролей пользователя(bcrypt). Работа с различными сессиями пользователя. Работа с Access и Refresh токенами(jwt)
  2. CRUD блогов, постов, комментариев и пользователей
  3. В комментариях и постах реализована структура Лайков и Дизлайков, дополнительно в постах отображаются 3 последних лайкнувших пользователя
  4. Все GET запросы на получение массива данных, поддерживают пагинацию, которую можно задавать через URI параметры
  5. Весь проект, на всех стадиях проводит валидацию входящих данных(middleware) и запрограммированы исключения в случае если данные неправильные(400), не найдены(404), защищены(401), или пользователь пытается работать не со своими данными(403)

Стек технологий:

Express, mongoDB, typeScript, jwt, bcrypt, jest, supertest

Заметки разработчика:

  1. Весь проект реализован на Express и TypeScript(причем any в коде вы скорее всего не найдете)
  2. Авторизация и регистрация сделана через nodemailer, через gmail transport со всем стеком восстановления пароля и почты, повторной отправки кода и проверкой на уникальности логина и почты при регистрации
  3. Исключения улетают на фронт, определенного вида, реализовал с помощью самописной обработки исключений
  4. Весь проект реализован через раздельные роуты, с использованием различных middleware, для разных ендпоинтов.
  5. Все сервисы представляют собой классы с методами. Вся логика строго по принципу роут => контроллер => сервис => репозиторий => БД
  6. Защищенность ендпоинтов, реализована через Middleware, с помощью Access и Refresh токенов.
  7. Access токен отдается в качестве response, а Refresh зашивается в Cookie not only, время жизни 10 минут и 10 часов соответственно
  8. Защита от DDOS, реализована через самописный класс не больше 5 запросов за 10 секунд и стоит только на ендпоинтах связанными с почтой и отправкой писем
  9. Работа со скрытыми данными, настройками и паролями, реализована через env файл локально и удаленно
  10. Есть тесты покрывающие часть логики в основном e2e
  11. Работа над проектом велась, по предоставленной Swagger документации из которой взяты все требования к входящим данным и эти требования проверяются на уровне Middleware(с помощью встроенных методов и самописных) и на уровне Raw запросов к MongoDB
  12. В проекте реализован обычный repository, для внутренней работы связанной больше с CRUD операциями, а также реализован queryRepository для более быстрой работы GET запросов напрямую, обходя дополнительную логику сервисов.
  13. Работа организована на обычном Mongo драйвере, с прямыми запросами в БД. В данном проекте реализованы помимо основных коллекций дополнительные коллекции, в виде коллекций лайков и сессий.
  14. Код полностью асинхронный(async/await) и легкочитаемый, структура папок выбрана мной исходя из практик подобных проектов других более опытных разработчиков.

About

Stack: express, node js, typecript, mongodb, jest, jwt

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published