Цей проект слугує підготовкою перед реальним проектом.
Тут у вас буде змога попрактикувати вже набутті, та здобути нові навички та знання, познайомитись з новими бібліотеками тощо.
В наступних розділах буде розписана вся необхідна інформація, яка знадобиться для виконання завдання.
🚀 Не бійтесь проявити себе, якщо у вас є пропозиції по додатковому функціоналу, то сміливо пишіть, узгодимо!
Потрібно створити бекенд-сервер для веб-додатку контролю доходів та витрат.
Додаток має містити CRUD ендпоінти для основних сутностей (деталі в розділі - Сутності), та систему авторизації (деталі в розділі - Авторизація)
Список технологій які мають бути застосовані, описані в розділі - Технології. Використання будь-яких додаткових бібліотек дозволено. Але не потрібно засмічувати проект "зайвими" бібліотеками, без яких можна спокійно обійтись.
Основні "сущності" які є в проекті, описані в розділі - Сущності. Ви можете розширювати як основні, так і створювати нові "сущності", якщо є бажання додати більше функціоналу.
Усі бібліотеки мають бути останньої версії (на момент створення додатку).
⚡️ Основні
Nodejs+TypeScriptExpress.jsабоNestJSале краще нестESLint+PrettierOpenAPI/Swagger
Для typescript рекомендовано використовувати темплейт
Node 18 + Strictestз https://github.com/tsconfig/basesПриклад готового конфігу можна знайти в файлі tsconfig.json
⚡️ Бази даних
PostgreSQL/MySQLабоMongoDB. Якщо хочете використати іншу базу, то повідомте ту людину, яка дала вам це завдання
⚡️ Робота з Git
huskycommitlint
У додатку є три основні сутності:
⚡️ Користувач
Являє собою одного користувача.
Обовʼязкові поля обʼєкту Користувач:
{
id,
username - string, unique
displayName - string
}
*деякі користувачі є адміністраторами та мають підвищені права, це треба враховувати
Можуть бути додані додаткові поля для розширення функціоналу.
⚡️ Категорія
Являє собою одну категорію.
Приклади категорій: Зарплата, Подарунки, Їжа, Подорож, Інше.
Кожен користувач має унікальні категорії, незалежні від інших юзерів
Користувач повинен мати можливість створювати нові та видаляти або перейменовувати існуючі категорії.
Виключенням є категорія Інше, вона має існувати завжди та є незмінною, не підлягає видаленню або перейменуванню.
При створенні нового користувача також створювати й набір стандартних категорій
Бонусна задача: створити ендпоінт для задання стандартних категорій
Обовʼязкові поля обʼєкту Категорія:
{
id,
label - string,
}
Можуть бути додані додаткові поля для розширення функціоналу.
⚡️ Транзакція
Являє собою одну транзакцію (має залежність від категорії).
При видаленні категорії, всі її залежні транзакції мають переходити в категорію Інше
Обовʼязкові поля обʼєкту Транзакція:
{
id,
label - string,
date - date,
amount (негативне значення - витрата, позитивне – дохід) - number,
}
Можуть бути додані додаткові поля для розширення функціоналу.
⚡️ Інші сутності
Якщо ви бачите, що для виконання завдання вам потрібно створити більше сутностей, то додавайте їх на ваш розсуд.
Авторизація має бути реалізована через JWT токени. Усього є два токени - JWT Auth Token та JWT Refresh Token
🔻️ JWT Auth Token
Це токен за яким користувач отримує доступ до ендпоінтів системи.
Має дуже низький лайфтайм, і після закінчення терміну, користувач має отримати новий за допомогою JWT Refresh Token
🔻️ JWT Refresh Token
Цей токен користувач використовує для оновлення JWT Auth Token.
Має довгий лайфтайм, і після закінчення терміну, користувач має отримати новий за допомогою логіна та паролю
При зміні пароля, всі активні токени користувача мають втрачати свою валідність.
За бажанням, можна також створити ендпоінт що інвалідує всі активні токени без зміни паролю
Також потрібно створити ендпоінти для виходу з системи (інвалідує лише поточний JWT Refresh Token) та зміни паролю
Має бути дві основні гілки: main та development.
main- гілка в якій мають бути тільки релізні версії проекту.development- гілка в якій відбувається увесь процес розробки.
Найменування комітів мають бути стандартизовані.
Рекомендована бібліотека: commitlint, для вашої IDE скоріше за все є плагін для більш зручного написання таких комітів
Наприклад: для VSCode, для JetBrains
Також не забувайте про автоматичний виклик prettier та eslint перед комітом. Для цього використовуйте бібліотеку по типу husky
Окрім цього потрібно умовно розділити весь процес розробки на основні етапи.
На приклад:
Створення User entity,Створення авторизації, тощо. Також ви можете додати підпункти до цих етапів, по бажанню.
Далі для кожного етапу створити окрему гілку (відгалужену від development). І після завершення усіх задач, які були закладені в конкретний етап, створити pull request та здійснити послідуючий merge в гілку development.
Бажано, якщо є така можливість, щоб хтось зробив короткий
code reviewвашогоpull request, перед тим як відбудетьсяmerge.
Всього є 4 простих кроки:
- Зробити
forkцього репозиторію. - Виконати завдання в вашому репозиторії.
- Зробити
deployпроєкту наHerokuабо іншому схожому сервісі.
🔔 І не забудьте повідомити про успішне виконання завдання ту людину, яка дала вам це завдання.