У Льоні сьогодні

Історія однієї фічі: коректування накопичень

Контекст: в Сінтрі скоро будуть накопичення; внески на накопичення створюються як витрати з бюджету. Але зʼявилася потреба також додавати коректування накопичень, які фактично є теж внесками, але вже без відповідної витрати: таке коректування моделює зовнішню зміну до накопичення. Ось мій процес розробки по кроках.

  • Починається все з типу GoalDeposit; такий тип визначений для Redux та є єдиним місцем, де явно описана структура внеску. Оскільки коректування це майже внесок, то я розширю той тип, що вже існує.
GoalDeposit = { isCorrection: true } | { expenseID: string }; // та інші поля
  • Далі, коли ця зміна зафіксована, оновлюю правила безпеки, щоб вони приймали внесок без витрати. Це робиться з покриттям тестами, які фактично є інтеграційними для бази даних — бо тут типи ніяк не допоможуть уникнути помилок. Правила бази існують окремо від решти додатка, як я вчора писав.

  • А запуск tsc повідомить мені про розбіжності в коді додатка, тобто ті місця, де потрібно поміняти логіку. Таких виявляється небагато: це видалення внеску (бо воно видаляє й відповідну витрату) та форма внеску — тут, зрозуміло, відбудеться головна робота над фічею. (Цікаво, що інші місця, де внесок розглядається як доповнення до витрати, не потребують змін, бо зазвичай TypeScript сам звужує тип через використання поля expenseID.)

  • Нарешті, залишається оновити форму — тут нічого цікавого, звичайна робота над інтерфейсом.