@@ -17,6 +17,10 @@ File này chỉ lưu sự thật và quyết định dài hạn giúp các phiê
qua API; category người dùng được kiểm soát ownership, dùng archive thay cho xóa vật lý.
- Transaction dùng số tiền dương và `type` để xác định chiều biến động số dư; create,
update và delete giao dịch cập nhật Wallet trong Prisma transaction mức Serializable.
- Transfer lưu riêng lịch sử chuyển tiền giữa hai ví cùng tiền tệ. Create yêu cầu hai ví đang hoạt động,
khác nhau, thuộc cùng người dùng và ví nguồn đủ số dư; create/delete cập nhật cả hai số dư cùng bản ghi
Transfer trong Prisma transaction mức Serializable. Delete là thao tác hiệu chỉnh nên vẫn hoàn tác được
vào ví đã archive; mọi thay đổi Transfer đều xóa cache báo cáo tài chính của người dùng.
- Hóa đơn Transaction được lưu cục bộ dưới `storage/receipts`, chỉ đọc qua API có auth;
hỗ trợ JPEG, PNG, WebP, PDF và giới hạn mặc định 5 MB.
- Upload file mới dùng mô hình browser tải trực tiếp lên Cloudflare R2 qua presigned PUT URL
...
...
@@ -71,6 +75,8 @@ File này chỉ lưu sự thật và quyết định dài hạn giúp các phiê
- Hệ thống linting đã được cấu hình qua eslint.config.mjs (flat config, bỏ qua các tệp test & configs liên quan) và chạy sạch sẽ khi gọi pnpm run lint.
-`env.config.ts` dùng port fallback `8888`, còn `.env.example` dùng `7777`; README
ghi rõ cả hai và dùng `7777` cho hướng dẫn chạy theo file env mẫu.
- Transfer đã có API theo ownership dưới `/api/v1/transfers`; migration
`20260814120000_add_transfer_management` thêm lịch sử chuyển tiền, quan hệ hai ví và các index truy vấn.
- Wallet, Category, Transaction và Budget đã có API theo ownership; Category đồng
thời trả các category hệ thống dùng chung.
- Financial Reports có API tổng quan, chuỗi dòng tiền, cơ cấu chi tiêu theo danh mục và
@@ -18,6 +18,7 @@ Backend API cho **FinWise - Sổ tay Chi tiêu & Báo cáo Tài chính**, phục
- Quản trị người dùng theo role.
- Quản lý ví, danh mục thu/chi và giao dịch theo ownership.
- Tự động cập nhật số dư ví khi tạo, sửa hoặc xóa giao dịch.
- Chuyển tiền giữa hai ví cùng tiền tệ và cập nhật hai số dư nguyên tử.
- Lưu hóa đơn giao dịch dạng JPEG, PNG, WebP hoặc PDF.
- Swagger UI và health check.
...
...
@@ -228,6 +229,16 @@ Toàn bộ nhóm này yêu cầu access token và chỉ thao tác trên dữ li
| `GET` | `/transactions/:id/receipt` | Xem hoặc tải hóa đơn |
| `DELETE` | `/transactions/:id/receipt` | Xóa hóa đơn |
### Transfers
Toàn bộ nhóm này yêu cầu access token. Hai ví phải thuộc người dùng, đang hoạt động, khác nhau, cùng tiền tệ và ví nguồn phải đủ số dư. Bản ghi chuyển tiền cùng hai thay đổi số dư được commit nguyên tử.
| `GET` | `/transfers` | Lịch sử có tìm kiếm, lọc ví/ngày, sort và pagination |
| `POST` | `/transfers` | Chuyển tiền và cập nhật nguyên tử số dư của cả hai ví |
| `DELETE` | `/transfers/:id` | Xóa giao dịch chuyển tiền và hoàn tác cả hai thay đổi dư |
### Budgets
Toàn bộ nhóm này yêu cầu access token và chỉ thao tác trên ngân sách của chính người dùng. Dữ liệu sử dụng được tổng hợp từ giao dịch chi tiêu theo thời gian thực.
description:'Backend API cho FinWise - Sổ tay Chi tiêu & Báo cáo Tài chính (Zalo Mini App). API cung cấp xác thực, quản lý người dùng, ví, danh mục, giao dịch, ngân sách, mục tiêu tiết kiệm và Trợ lý Tài chính AI.',
description:'Backend API cho FinWise - Sổ tay Chi tiêu & Báo cáo Tài chính (Zalo Mini App). API cung cấp xác thực, quản lý người dùng, ví, danh mục, giao dịch, chuyển tiền, ngân sách, mục tiêu tiết kiệm và Trợ lý Tài chính AI.',
description:'Requires two distinct active wallets owned by the user, the same currency, and sufficient source balance. The transfer record and both balance changes commit atomically in a serializable transaction.',
description:'Deletes an owned transfer and reverses both wallet balance changes atomically. Archived wallets may still receive the reversal to preserve accounting history.',