Skip to content

Feature/authorization service#4

Merged
soraiayugulis merged 12 commits into
mainfrom
feature/authorization-service
Jun 12, 2026
Merged

Feature/authorization service#4
soraiayugulis merged 12 commits into
mainfrom
feature/authorization-service

Conversation

@soraiayugulis

Copy link
Copy Markdown
Owner

Summary

Implements the core authorization logic for the Credit Card Authorizer API, including validators, balance checking with MEAL fallback chain, daily transaction limits, and authorization code generation — all following TDD.

Changes

Validators

  • CardNumberValidator — validates 16-digit numeric format
  • TransactionAmountValidator — validates amount range (0.01–10000.00) with specific error codes (INVALID_AMOUNT, AMOUNT_EXCEEDED)
  • ValidationResult — value object for validation outcomes

Authorization Components

  • CategoryBalanceChecker — checks balance with MEAL → FOOD → GENERAL fallback chain; non-MEAL categories denied immediately on insufficient balance
  • DailyTransactionLimitChecker — enforces 2000.00 daily limit per card, counting only today's APPROVED transactions
  • AuthorizationCodeGenerator — generates unique 12-char alphanumeric codes in XXXX-XXXX-XXXX format using SecureRandom

Authorization Service

  • AuthorizationService — orchestrates the full authorization flow:
    1. Card active check → CARD_INACTIVE
    2. Amount validation → INVALID_AMOUNT / AMOUNT_EXCEEDED
    3. Daily limit check → DAILY_LIMIT_EXCEEDED
    4. Balance check with fallback → INSUFFICIENT_BALANCE
    5. Balance deduction + code generation on success

Tests

  • 65 unit tests — all passing
  • Covers: valid/invalid card numbers, amount boundaries, all fallback scenarios, daily limit accumulation, code uniqueness, full authorization flow

Spec Coverage

Fact/Rule Status
Fact 3: Successful Authorization
Fact 4: Insufficient Balance
Fact 5: Invalid/Inactive Card
Fact 6: MEAL Fallback Chain
Fact 7: Direct Category Authorization
Rule 2: Amount Validation
Rule 3: Balance Check with Fallback
Rule 5: Authorization Code
Rule 6: Concurrent Handling ✅ (atomic balance ops)
Rule 8: Daily Transaction Limit

@soraiayugulis soraiayugulis self-assigned this Jun 12, 2026
@soraiayugulis soraiayugulis merged commit 8874f2a into main Jun 12, 2026
2 checks passed
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.

1 participant