Skip to content

Feature/domain models#2

Merged
soraiayugulis merged 15 commits into
mainfrom
feature/domain-models
Jun 12, 2026
Merged

Feature/domain models#2
soraiayugulis merged 15 commits into
mainfrom
feature/domain-models

Conversation

@soraiayugulis

Copy link
Copy Markdown
Owner

Summary

Implements all core domain entities and value objects for the Credit Card Authorizer API following TDD principles, as specified in Phase 1 of the implementation plan.

Changes

Entities

  • Card — Card entity with 16-digit number validation, holder name validation, category balance management, and ACTIVE/INACTIVE status
  • Merchant — Merchant entity with name validation, single category assignment, and ACTIVE/INACTIVE status
  • Transaction — Transaction entity tracking requested category, source category (for fallback), APPROVED/DENIED status, authorization codes, and rejection reasons

Value Objects

  • Balance — Immutable value object with add/subtract operations, negative amount rejection, and timestamp tracking
  • AuthorizationResult — Immutable result object with factory methods approved() and denied(), carrying authorization code, rejection reason, and source category

Enums

  • Category — FOOD, MEAL, TRANSPORTATION, CULTURE, PHARMACY, GENERAL with MEAL → FOOD → GENERAL fallback chain
  • CardStatus — ACTIVE, INACTIVE
  • MerchantStatus — ACTIVE, INACTIVE
  • TransactionStatus — APPROVED, DENIED

Tests

  • 30 unit tests — all passing
  • Covers creation, validation, immutability, fallback chain, and edge cases

Spec Coverage

Fact/Rule Status
Fact 1: Card Registration ✅ Card entity with zero-balance init
Fact 8: Merchant Classification ✅ Merchant with single category
Rule 1: Card Number Validation ✅ 16-digit numeric validation
Rule 3: Category Fallback ✅ MEAL → FOOD → GENERAL chain
Rule 4: Merchant Category Mapping ✅ Immutable category assignment

@soraiayugulis soraiayugulis self-assigned this Jun 12, 2026
@soraiayugulis soraiayugulis added the good first issue Good for newcomers label Jun 12, 2026
@soraiayugulis soraiayugulis merged commit d11294d into main Jun 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

good first issue Good for newcomers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant