Skip to content

[US05] Expense Category Editing #3

@ViniPeralta

Description

@ViniPeralta

✏️ Expense Category Editing

As a User
I want to be able to edit an existing expense category
So that I can update its name, color, and manage related tags

🛠 Functional Requirements

Category Editing Screen

A new screen will allow the user to edit an existing category. This screen can be accessed via the edit action in the category list.

Editable Fields

  • Description: must be unique among all categories; required field;
  • Color: optional field for visual grouping;
  • Tags: the user can add or remove multiple tags associated with the category;
    • A tag is a text string up to 20 characters;
    • Tags must be unique within the same category (case-insensitive);
    • Tags are only saved when the form is submitted;

Behaviors

  • Editing a category updates the existing record in the database;
  • The system must validate that the new description does not conflict with other existing categories;
  • On save, tags are fully synchronized — removed tags are deleted, and new ones are created;
  • Feedback must be shown to the user upon success or failure;
  • Tags are shown as chips/pills with an "x" to remove them individually;
  • An input with autocomplete or creation behavior will be used to enter new tags;

📏 Non-Functional Requirements

  • Tags should be saved using a normalized relational structure:
    • Create a separate tags table with fields: id, name (unique), category_id (FK);
    • Enforce uniqueness of name + category_id using a composite unique constraint;
    • Prefer transactional updates when syncing tags to avoid partial data inconsistency;
  • All changes must be persisted via a RESTful PUT /categories/{id} endpoint;
  • Database queries for tag insertion/deletion must be optimized to avoid unnecessary writes (compare existing vs incoming list);

✅ Definition of Done (DoD)

  • All the functional and non functional requirements were developed and tested;
  • Documentation is complete;

Sub-issues

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

Status

User Stories

Relationships

None yet

Development

No branches or pull requests

Issue actions