nxtgauge-backend-rust/apps/payments/Cargo.toml

25 lines
633 B
TOML
Raw Normal View History

[package]
name = "payments"
version = "0.1.0"
edition.workspace = true
[dependencies]
axum.workspace = true
serde.workspace = true
serde_json.workspace = true
tokio.workspace = true
tracing.workspace = true
tracing-subscriber.workspace = true
reqwest = { version = "0.12", features = ["json", "stream"] }
anyhow.workspace = true
contracts = { path = "../../crates/contracts" }
db = { path = "../../crates/db" }
feat: generate a GST invoice automatically after a successful Tracecoin/PayU purchase crates/invoice (InvoiceService, GST computation, HTML rendering) was fully built but never wired to anything and never had its tables — invoices/invoice_line_items/billing_profiles/invoice_number_seq never existed in any active migration (same root cause as everything else this session: only in scripts/init-db.sql, which the real db-migrate job never runs). Created them, matching InvoiceService's actual columns exactly rather than init-db.sql's older, simpler invoices shape. Fixed a real bug in InvoiceService::create while at it: four money fields (total, and three line-item amounts) were bound as i64 against columns/read-models that are i32 everywhere else — would have failed every insert with a Postgres type mismatch the first time this code ever actually ran against a real table. Wired invoice generation into apps/payments' PayU verify_payment handler (the actual success callback) — right after the wallet is credited, a one-line-item GST invoice is generated from the purchased package and PayU's billing fields (firstname/email/phone), using a new INVOICE_SELLER_* env-configurable seller identity. Generation failures are logged, not surfaced to the buyer, since the payment and wallet credit have already succeeded by that point. Also added the missing user-facing endpoints to fetch what got generated: GET /api/payments/invoices (list) and GET /api/payments/invoices/{id} (detail + line items) — previously only admin-side invoice viewing existed. NOTE: the frontend (nxtgauge-frontend-solid, a separate repo) has an existing invoice-viewing page at src/routes/dashboard/wallet/invoices/ but it calls /wallet/me/invoices (no /api/ prefix) via a different, apparently-dead API helper (api.get, not apiFetch) that every other live page avoids — same dead-code pattern as the earlier apps/leads discovery. The live purchase flow (CreditsPage.tsx) has no invoice UI at all yet. Not fixed here since it's out of this repo's scope this session — flagging for a frontend pass.
2026-07-21 03:02:47 +05:30
invoice = { path = "../../crates/invoice" }
sqlx.workspace = true
uuid.workspace = true
chrono.workspace = true
2026-06-26 20:47:31 +02:00
sha2 = "0.10"
hex = "0.4"
rand = "0.8"
rust_decimal = { version = "1.35", features = ["db-tokio-postgres"] }