Реализация API Блогера, со следующим функционалом:
- Полноценная авторизация и регистрация. Работа с почтовыми ящиками(nodeMailer) и кодами активации учетной записи(uuid). Работа с шифрованием паролей пользователя(bcrypt). Работа с различными сессиями пользователя. Работа с Access и Refresh токенами(jwt)
- CRUD блогов, постов, комментариев и пользователей
- В комментариях и постах реализована структура Лайков и Дизлайков, дополнительно в постах отображаются 3 последних лайкнувших пользователя
- Все GET запросы на получение массива данных, поддерживают пагинацию, которую можно задавать через URI параметры
- Весь проект, на всех стадиях проводит валидацию входящих данных(middleware) и запрограммированы исключения в случае если данные неправильные(400), не найдены(404), защищены(401), или пользователь пытается работать не со своими данными(403)
Express, mongoDB, typeScript, jwt, bcrypt, jest, supertest
- Весь проект реализован на Express и TypeScript(причем any в коде вы скорее всего не найдете)
- Авторизация и регистрация сделана через nodemailer, через gmail transport со всем стеком восстановления пароля и почты, повторной отправки кода и проверкой на уникальности логина и почты при регистрации
- Исключения улетают на фронт, определенного вида, реализовал с помощью самописной обработки исключений
- Весь проект реализован через раздельные роуты, с использованием различных middleware, для разных ендпоинтов.
- Все сервисы представляют собой классы с методами. Вся логика строго по принципу роут => контроллер => сервис => репозиторий => БД
- Защищенность ендпоинтов, реализована через Middleware, с помощью Access и Refresh токенов.
- Access токен отдается в качестве response, а Refresh зашивается в Cookie not only, время жизни 10 минут и 10 часов соответственно
- Защита от DDOS, реализована через самописный класс не больше 5 запросов за 10 секунд и стоит только на ендпоинтах связанными с почтой и отправкой писем
- Работа со скрытыми данными, настройками и паролями, реализована через env файл локально и удаленно
- Есть тесты покрывающие часть логики в основном e2e
- Работа над проектом велась, по предоставленной Swagger документации из которой взяты все требования к входящим данным и эти требования проверяются на уровне Middleware(с помощью встроенных методов и самописных) и на уровне Raw запросов к MongoDB
- В проекте реализован обычный repository, для внутренней работы связанной больше с CRUD операциями, а также реализован queryRepository для более быстрой работы GET запросов напрямую, обходя дополнительную логику сервисов.
- Работа организована на обычном Mongo драйвере, с прямыми запросами в БД. В данном проекте реализованы помимо основных коллекций дополнительные коллекции, в виде коллекций лайков и сессий.
- Код полностью асинхронный(async/await) и легкочитаемый, структура папок выбрана мной исходя из практик подобных проектов других более опытных разработчиков.