Skip to content

Enhance features, tests, and documentation for transactions and vaults - #272

Merged
ali-ahnaf merged 63 commits into
mainfrom
develop
Jul 20, 2026
Merged

Enhance features, tests, and documentation for transactions and vaults#272
ali-ahnaf merged 63 commits into
mainfrom
develop

Conversation

@ali-ahnaf

@ali-ahnaf ali-ahnaf commented Jul 20, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • New Features
    • Added Google OAuth and Gmail bank-alert integration, including label selection, vault watchers, parsing scripts, and automatic transaction creation.
    • Added backup export and import with validation.
    • Added transfers between vaults.
    • Added debt due dates and dashboard date sorting.
    • Added Google sign-in callback handling, settings links, and an attributions page.
  • Documentation
    • Added deployment and Gmail integration setup guides.
  • Tests
    • Expanded unit, integration, and end-to-end coverage across authentication, backups, Gmail, debts, and UI components.

ali-ahnaf and others added 30 commits July 7, 2026 17:13
Debts can now record an optional due date so users know when a payment
is expected. The field is nullable end-to-end so existing debts and
quick entries without a date keep working.

- shared: extend CreateDebtInput, UpdateDebtInput, DebtDto with dueDate
- api: nullable dueDate column on Debt entity + generated migration,
  persisted through create/update service paths, validated as ISO date
  in the Joi schemas
- ui: due-date row in AddDebtModal pairs a native date input with the
  PixelDatePicker (shared state so they stay in sync); debts page
  renders the formatted due date on each card

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Diyaaa-12 and others added 22 commits July 15, 2026 14:03
- Move formatCurrency, formatDate, formatTime from page.tsx into
  packages/ui/src/lib/helpers/formatters.ts
- Update dashboard page to import formatters instead of defining
  them inline
- Add formatters.test.ts with happy-path coverage for each function

Closes #61
The PromptService has been updated to handle vaults alongside tags in transaction parsing. The changes include:
- Added vault handling in the PromptService, allowing the model to return vault names.
- Updated the schema to require vault information in parsed transactions.
- Modified tests to validate the new vault functionality, ensuring correct resolution of vault names to IDs and handling of null values for non-identified vaults.

This enhancement improves the transaction management capabilities of the application.
Pre-select the transaction vault when the API returns a vaultId,
matching the backend's natural language vault detection.
…nid/email scopes, log webhooks, and refine OAuth UI settings.
@github-actions

Copy link
Copy Markdown
Contributor

Greetings, @ali-ahnaf. Thy scroll hath arrived unblemished — the runes align and no conflict bars the path. The council shall now convene over its contents, weighing each incantation by candlelight. Tarry a while, brave adventurer; we shall investigate and return to thee with our verdict.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: d7667b1a-8da5-4bc1-9088-a0003fb45def

📥 Commits

Reviewing files that changed from the base of the PR and between 6f1dcb6 and 31c0ee8.

⛔ Files ignored due to path filters (4)
  • assets/banner.png is excluded by !**/*.png
  • assets/ss_analytics.png is excluded by !**/*.png
  • assets/ss_home.png is excluded by !**/*.png
  • assets/ss_login_screen.png is excluded by !**/*.png
📒 Files selected for processing (135)
  • .agents/agents/quick-refactor.md
  • .agents/rules/loop-engineering.md
  • .agents/rules/typescript.md
  • .agents/settings.json
  • .agents/skills/backend-engineer/SKILL.md
  • .agents/skills/backend-engineer/references/auth.md
  • .agents/skills/backend-engineer/references/conventions.md
  • .agents/skills/backend-engineer/references/database.md
  • .agents/skills/backend-engineer/references/repo-shape.md
  • .agents/skills/backend-engineer/references/service-style.md
  • .agents/skills/frontend-engineer/SKILL.md
  • .agents/skills/gmail-parse-script/SKILL.md
  • .agents/skills/migration/SKILL.md
  • .agents/skills/scaffold-resource/SKILL.md
  • .agents/skills/write-service-test/SKILL.md
  • .agents/workflows/security-audit.js
  • .coderabbit.yaml
  • .gitignore
  • AGENTS.md
  • README.md
  • documentation/deployment.md
  • documentation/gmail-integration.md
  • ecosystem.config.js
  • package.json
  • packages/api/.env.example
  • packages/api/src/data-source.ts
  • packages/api/src/entities/Debt.entity.ts
  • packages/api/src/entities/ProcessedGmailMessage.entity.ts
  • packages/api/src/entities/User.entity.ts
  • packages/api/src/entities/UserOAuthCredential.entity.ts
  • packages/api/src/entities/VaultGmailWatcher.entity.ts
  • packages/api/src/index.ts
  • packages/api/src/middleware/auth.ts
  • packages/api/src/migrations/1783695914180-Migration.ts
  • packages/api/src/migrations/1783773777965-Migration.ts
  • packages/api/src/migrations/1784395274749-AddUserOAuthCredentials.ts
  • packages/api/src/migrations/1784459811702-AddGmailTokensToUserOAuthCredential.ts
  • packages/api/src/migrations/1784480567265-Migration.ts
  • packages/api/src/migrations/1784541914604-Migration.ts
  • packages/api/src/migrations/1784546344887-Migration.ts
  • packages/api/src/migrations/1784547526916-Migration.ts
  • packages/api/src/repositories/index.ts
  • packages/api/src/repositories/processed-gmail-message.repository.ts
  • packages/api/src/repositories/user-oauth-credential.repository.ts
  • packages/api/src/repositories/vault-gmail-watchers.repository.ts
  • packages/api/src/routes/backup.routes.ts
  • packages/api/src/routes/backup/export.route.ts
  • packages/api/src/routes/backup/import.route.ts
  • packages/api/src/routes/debts/post-debt.route.ts
  • packages/api/src/routes/debts/put-debt.route.ts
  • packages/api/src/routes/oauth-credentials.routes.ts
  • packages/api/src/routes/oauth-credentials/authorize-oauth-credentials.route.ts
  • packages/api/src/routes/oauth-credentials/get-gmail-labels.route.ts
  • packages/api/src/routes/oauth-credentials/get-gmail-watch.route.ts
  • packages/api/src/routes/oauth-credentials/get-oauth-credentials.route.ts
  • packages/api/src/routes/oauth-credentials/put-oauth-credentials.route.ts
  • packages/api/src/routes/oauth.routes.ts
  • packages/api/src/routes/oauth/gmail-webhook.route.ts
  • packages/api/src/routes/oauth/google-callback.route.ts
  • packages/api/src/routes/transactions.routes.ts
  • packages/api/src/routes/transactions/post-transfer.route.ts
  • packages/api/src/routes/vault-watchers.routes.ts
  • packages/api/src/routes/vault-watchers/delete-vault-watcher.route.ts
  • packages/api/src/routes/vault-watchers/get-vault-watchers.route.ts
  • packages/api/src/routes/vault-watchers/put-vault-watcher.route.ts
  • packages/api/src/routes/vault-watchers/test-parse-script.route.ts
  • packages/api/src/scheduler/gmail-watch-scheduler.ts
  • packages/api/src/services/auth.service.ts
  • packages/api/src/services/backup.service.ts
  • packages/api/src/services/debts.service.ts
  • packages/api/src/services/gmail-script-runner.service.ts
  • packages/api/src/services/gmail.service.ts
  • packages/api/src/services/index.ts
  • packages/api/src/services/prompt.service.ts
  • packages/api/src/services/transactions.service.ts
  • packages/api/src/services/user-oauth-credential.service.ts
  • packages/api/src/services/vault-watchers.service.ts
  • packages/api/src/tests/auth.service.test.ts
  • packages/api/src/tests/backup.service.test.ts
  • packages/api/src/tests/debts.service.test.ts
  • packages/api/src/tests/gmail-script-runner.service.test.ts
  • packages/api/src/tests/gmail-watch-scheduler.test.ts
  • packages/api/src/tests/gmail-webhook.util.test.ts
  • packages/api/src/tests/gmail.service.test.ts
  • packages/api/src/tests/prompt.service.test.ts
  • packages/api/src/tests/tags.service.test.ts
  • packages/api/src/tests/user-oauth-credential.service.test.ts
  • packages/api/src/tests/vault-watchers.service.test.ts
  • packages/api/src/tests/vaults.service.test.ts
  • packages/api/src/types/backup.ts
  • packages/api/src/utils/gmail-message.util.ts
  • packages/api/src/utils/gmail-webhook.util.ts
  • packages/api/src/utils/google-oauth.util.ts
  • packages/api/src/utils/oauth-credentials-encryption.util.ts
  • packages/shared/src/constants.ts
  • packages/shared/src/contracts/ai.ts
  • packages/shared/src/contracts/debts.ts
  • packages/shared/src/contracts/index.ts
  • packages/shared/src/contracts/oauth-credentials.ts
  • packages/shared/src/contracts/transactions.ts
  • packages/shared/src/contracts/vault-watchers.ts
  • packages/shared/src/index.ts
  • packages/ui/.env.development
  • packages/ui/e2e/signup.spec.ts
  • packages/ui/public/sw.js
  • packages/ui/src/app/auth/google/callback/page.tsx
  • packages/ui/src/app/debts/page.tsx
  • packages/ui/src/app/page.tsx
  • packages/ui/src/app/settings/attributions/page.tsx
  • packages/ui/src/app/settings/google-oauth/VaultWatcherCard.tsx
  • packages/ui/src/app/settings/google-oauth/page.tsx
  • packages/ui/src/app/settings/page.tsx
  • packages/ui/src/app/signin/page.tsx
  • packages/ui/src/app/signup/page.tsx
  • packages/ui/src/components/AddDebtModal.test.tsx
  • packages/ui/src/components/AddDebtModal.tsx
  • packages/ui/src/components/AuthGuard.test.tsx
  • packages/ui/src/components/AuthGuard.tsx
  • packages/ui/src/components/Badge.test.tsx
  • packages/ui/src/components/DeleteVaultModal.test.tsx
  • packages/ui/src/components/DesktopSidebar.test.tsx
  • packages/ui/src/components/Dropdown.tsx
  • packages/ui/src/components/EditTransactionModal.test.tsx
  • packages/ui/src/components/Input.test.tsx
  • packages/ui/src/components/LogResourceModal.tsx
  • packages/ui/src/components/PixelDatePicker.tsx
  • packages/ui/src/components/PixelLoader.test.tsx
  • packages/ui/src/components/Sidebar.test.tsx
  • packages/ui/src/lib/api/ApiClient.ts
  • packages/ui/src/lib/api/ProfileApi.ts
  • packages/ui/src/lib/helpers/formatters.test.ts
  • packages/ui/src/lib/helpers/formatters.ts
  • packages/ui/src/lib/helpers/static.ts
  • packages/ui/src/lib/iconMapper.test.ts
  • packages/ui/test-lucide.ts

📝 Walkthrough

Walkthrough

This PR adds Gmail OAuth and bank-alert automation, backup import/export, transfer transactions, debt due dates, UI settings and refinements, shared contracts, extensive tests, agent workflows, and deployment documentation.

Changes

Gmail automation

Layer / File(s) Summary
OAuth, watcher, and Gmail processing flow
packages/api/src/services/*, packages/api/src/routes/oauth*, packages/api/src/routes/vault-watchers*, packages/api/src/entities/*
Adds encrypted per-user OAuth credentials, Gmail Pub/Sub verification, label watchers, parser execution, idempotent message processing, transaction creation, and watch renewal.
Persistence and shared contracts
packages/api/src/migrations/*, packages/api/src/repositories/*, packages/shared/src/contracts/*
Adds Gmail credential, watcher, processed-message schemas, migrations, repositories, and DTOs.
Gmail settings UI
packages/ui/src/app/settings/google-oauth/*, packages/ui/src/lib/api/ProfileApi.ts
Adds OAuth setup, Gmail connection, vault watcher editing, parser testing, and related API client methods.

Backup and transaction features

Layer / File(s) Summary
Backup import/export
packages/api/src/services/backup.service.ts, packages/api/src/routes/backup*, packages/api/src/types/backup.ts
Adds compressed backup serialization, validation, export, transactional replacement import, and size limits.
Transfers and debt due dates
packages/api/src/services/transactions.service.ts, packages/api/src/entities/Debt.entity.ts, packages/ui/src/components/AddDebtModal.tsx
Adds linked source/target transfer transactions and persists, edits, and displays debt due dates.
Vault-aware prompt parsing
packages/api/src/services/prompt.service.ts, packages/shared/src/contracts/ai.ts
Adds vault names to prompt context and resolves model-selected vaults to IDs.

Repository enablement and UI updates

Layer / File(s) Summary
Agent and deployment guidance
.agents/*, AGENTS.md, documentation/*, .coderabbit.yaml
Adds agent rules, migration/scaffolding/test skills, security audit workflow, deployment and Gmail runbooks, and review configuration.
UI foundations and coverage
packages/ui/src/app/*, packages/ui/src/components/*, packages/ui/src/lib/helpers/*, packages/ui/src/**/*.test.*
Adds formatter helpers, settings navigation, OAuth callback handling, date-picker portals, sorting, service-worker cache versioning, and broad component/service tests.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related issues

Possibly related PRs

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch develop

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 Biome (2.5.3)
.agents/workflows/security-audit.js

File contains syntax errors that prevent linting: Line 156: Illegal return statement outside of a function; Line 169: Illegal return statement outside of a function


Comment @coderabbitai help to get the list of available commands.

@ali-ahnaf
ali-ahnaf merged commit ebbc474 into main Jul 20, 2026
5 of 6 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

The quest is sealed, @ali-ahnaf! Thy incantations have been woven into the main path. The realm grows stronger for thy contribution — accept the gratitude of this humble keeper of the codex. May thy commits forever merge cleanly, brave adventurer 💰

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.