Skip to content

Repair Order & Invoice Management API#265

Open
claudiualbu wants to merge 14 commits intoTekmetric:masterfrom
claudiualbu:master
Open

Repair Order & Invoice Management API#265
claudiualbu wants to merge 14 commits intoTekmetric:masterfrom
claudiualbu:master

Conversation

@claudiualbu
Copy link

REST API for managing auto repair orders, invoices, and line items.

Features

Core CRUD Operations

  • Repair Orders: create, list, get, update, delete
  • Invoices: create, list (paginated), details, update status
  • Line Items: create, list, update, delete

Business Rules

  • Each RepairOrder can have one Invoice
  • Invoices start as DRAFT, can transition to ISSUED
  • ISSUED invoices cannot be modified (line items protected)
  • Cannot issue invoice without line items
  • Cannot delete RepairOrder with associated Invoice

Technical Highlights

  • Optimistic locking (@Version) for concurrent updates
  • Pessimistic locking for invoice modifications during line item creation
  • EntityGraph and JOIN FETCH to prevent N+1 queries
  • RFC 7807 Problem Details for error responses
  • Correlation ID header for request tracing
  • Flyway migrations for schema versioning
  • Integration tests for all endpoints and business rules

API Endpoints

Method Endpoint Description
POST /api/v1/repair-orders Create repair order
GET /api/v1/repair-orders List all
GET /api/v1/repair-orders/{id} Get by id
PUT /api/v1/repair-orders/{id} Update
DELETE /api/v1/repair-orders/{id} Delete
POST /api/v1/invoices Create invoice
GET /api/v1/invoices/paginated List (paginated)
GET /api/v1/invoices/{id}/details Get with line items
PUT /api/v1/invoices/{id} Update status
POST /api/v1/invoices/{id}/line-items Add line item
GET /api/v1/invoices/{id}/line-items List line items
PUT /api/v1/line-items/{id} Update line item
DELETE /api/v1/line-items/{id} Delete line item

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