Skip to content

opsflowhq/expense-backend

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

👋 Вступ

Цей проект слугує підготовкою перед реальним проектом.

Тут у вас буде змога попрактикувати вже набутті, та здобути нові навички та знання, познайомитись з новими бібліотеками тощо.

В наступних розділах буде розписана вся необхідна інформація, яка знадобиться для виконання завдання.

🚀 Не бійтесь проявити себе, якщо у вас є пропозиції по додатковому функціоналу, то сміливо пишіть, узгодимо!

👩‍💻 Технічне завдання

Потрібно створити бекенд-сервер для веб-додатку контролю доходів та витрат.

Додаток має містити CRUD ендпоінти для основних сутностей (деталі в розділі - Сутності), та систему авторизації (деталі в розділі - Авторизація)

Список технологій які мають бути застосовані, описані в розділі - Технології. Використання будь-яких додаткових бібліотек дозволено. Але не потрібно засмічувати проект "зайвими" бібліотеками, без яких можна спокійно обійтись.

Основні "сущності" які є в проекті, описані в розділі - Сущності. Ви можете розширювати як основні, так і створювати нові "сущності", якщо є бажання додати більше функціоналу.

Усі бібліотеки мають бути останньої версії (на момент створення додатку).

🛠 Технології

⚡️ Основні

  • Nodejs + TypeScript
  • Express.js або NestJS але краще нест
  • ESLint + Prettier
  • OpenAPI/Swagger

Для typescript рекомендовано використовувати темплейт Node 18 + Strictest з https://github.com/tsconfig/bases

Приклад готового конфігу можна знайти в файлі tsconfig.json

⚡️ Бази даних

  • PostgreSQL/MySQL або MongoDB. Якщо хочете використати іншу базу, то повідомте ту людину, яка дала вам це завдання

⚡️ Робота з Git

  • husky
  • commitlint

🗃️ Сутності

У додатку є три основні сутності:

⚡️ Користувач

Являє собою одного користувача.

Обовʼязкові поля обʼєкту Користувач:

{
	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) та зміни паролю

✏️ Робочий процес з Git

Має бути дві основні гілки: main та development.

  • main - гілка в якій мають бути тільки релізні версії проекту.
  • development - гілка в якій відбувається увесь процес розробки.

Найменування комітів мають бути стандартизовані.

Рекомендована бібліотека: commitlint, для вашої IDE скоріше за все є плагін для більш зручного написання таких комітів

Наприклад: для VSCode, для JetBrains

Також не забувайте про автоматичний виклик prettier та eslint перед комітом. Для цього використовуйте бібліотеку по типу husky

Окрім цього потрібно умовно розділити весь процес розробки на основні етапи.

На приклад: Створення User entity, Створення авторизації, тощо. Також ви можете додати підпункти до цих етапів, по бажанню.

Далі для кожного етапу створити окрему гілку (відгалужену від development). І після завершення усіх задач, які були закладені в конкретний етап, створити pull request та здійснити послідуючий merge в гілку development.

Бажано, якщо є така можливість, щоб хтось зробив короткий code review вашого pull request, перед тим як відбудеться merge.

📌 Порядок виконання завдання

Всього є 4 простих кроки:

  1. Зробити fork цього репозиторію.
  2. Виконати завдання в вашому репозиторії.
  3. Зробити deploy проєкту на Heroku або іншому схожому сервісі.

🔔 І не забудьте повідомити про успішне виконання завдання ту людину, яка дала вам це завдання.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published