diff --git a/Documentation/cli.md b/Documentation/cli.md new file mode 100644 index 0000000..852b003 --- /dev/null +++ b/Documentation/cli.md @@ -0,0 +1,101 @@ +## Command structure +``` +rpnc +├── batch +│ ├── update # 1. Recalculate all values of batch using data from transactions table +│ │ # 2. Update batch values +│ └── list # list all batches in DB +│ +├── card +│ ├── create # add card to DB +│ │ # - require customer +│ │ # - require status +│ │ # - require description +│ │ # - require pin +│ ├── read # fetch card details +│ ├── update # modify card +│ ├── delete # delete card +│ │ # only allowed on cards not referenced by any transactions +│ └── list # list all cards +│ # allow filtering by customer, status +│ +├── customer +│ ├── create # add customer +│ │ # - require customer number (ID) and name +│ ├── read # fetch customer details +│ ├── update # modify customer +│ ├── delete # delete customer +│ │ # only allowed on customers not referenced by any transactions +│ └── list # list all customers +│ +├── daemon +│ ├── start # start the web server daemon +│ ├── status # check status of daemon +│ │ # - running? +│ │ # - port? +│ │ # - db access? +│ │ # - accessible from internet? +│ │ # - fqdn? +│ └── stop # stop daemon +│ +├── db +│ ├── setup # create database and schema +│ ├── reset # drop and recreate database +│ ├── status # check if connection to db is ok +│ ├── backup # create a backup of database +│ └── restore # recreate database from backup +│ +├── file +│ ├── import # read CSV into DB: +│ │ # 1. create any missing customers +│ │ # 2. create any missing cards +│ │ # 3. create transactions +│ │ # 4. create any missing batches +│ │ # 5. verify batch values match calculated value +│ ├── list # list all files stored in DB +│ └── export # export file to specified format +│ +├── invoice +│ ├── create # add invoice to DB: +│ │ # - require batch OR date range +│ │ # - require "all" or specific customer +│ ├── read # fetch invoice details +│ ├── update # modify invoice +│ │ # - only allowed on invoices with "draft" status +│ ├── delete # delete invoice +│ │ # - only allowed on invoice with the highest ID number +│ │ # - only allowed if invoice status is "draft" +│ ├── credit # create a credit invoice +│ │ # - required if errors is needed to be fixed on a sent invoice +│ ├── export # write HTML files to disk +│ └── list # list all invoices +│ # - allow filtering list by customer, date +│ +└── transaction # CRUD not needed via cli, transactions will only be added via "file import" + ├── read # fetch transaction details + │ # - CREATE not needed, they will only be created via "file import" function + │ # - UPDATE not needed, transactions are immutable + │ # - DELETE not needed, transactions are immutable + └── list # list transactions (with filtering) +``` + +## Global flags: +--env=[dev,test] # production assumed +--quiet # for scripts only caring about exit codes +--help # display basic usage information +--format=[raw,json,csv,columns] # columns assumed + +## Implementation Notes (added during CLI expansion) + +The following clarifications were made while implementing the CLI stubs: + +- **Positional IDs**: `read`, `update`, `delete`, and `credit` subcommands that operate on a single entity take a positional `id` argument (e.g., `card read `, `invoice credit `). +- **Card create**: Uses flags `--customer`, `--status`, `--description`, `--pin`. +- **Card list**: Optional filters `--customer` and `--status`. +- **Customer create**: Uses flags `--id` and `--name`. +- **File export**: Takes `--format` to specify the target export format. +- **Invoice create**: Uses flags `--batch`, `--from`, `--to`, `--customer`, and `--all`. The caller must supply either `--batch` or a `--from`/`--to` date range, and either `--customer` or `--all`. +- **Invoice list**: Optional filters `--customer` and `--date`. +- **Transaction list**: Optional filters `--customer`, `--card`, `--batch`, `--from`, `--to`. +- **Global `--env`**: Accepts `dev` or `test`; omitted means production. +- **Global `--format`**: Defaults to `columns`.