---
# System prepended metadata

title: Assurance Order Management System V2

---

# Assurance Order Management System V2

## Overview

Assurance Order Management System (AOMS) manages orders for the assurance protection products suite.

The product suite includes

* Post Sale Inspection (PSI)
* DealShield (TBD)

This document will focus addressing the PSI product.

## Architecture

The architecture consists of

1. CDC
2. Product Service (PS)
3. Assurance Product API (API)

Here's a visual overview:

```sequence
CDC -> PS: SQS FIFO Queue
```

### Change Data Capture (CDC)

CDC transmits data changes that occur at the AS400 boxes. These changes are enqueued to a SQS FIFO queue as XML messages based on the filter set by Wolman's Team *(this needs to be updated)*

### Product Service (PS)

PS is composed of two logical components:
* Message Processor
* API
    * eligibility
    * dealer subscription
    * orders


#### Message Processor
Message Processor dequeues XML message from SQS FIFO queue, persists it (for auditing purposes) and gives it business context.

The three business contexts (or business events) are
* **sale**: if dealer has subscription and vehicle is eligible, then order
* **sale backdown**: If order associated with sale backdown, cancel
* **buyer change**: If previous buyer has an existing order, cancel. If new buyer subscribed and vehicle is eligible, then order

If this message fails, it gets sent to SQS Dead Letter Queue (DLQ).

#### API
This service will also host an API that will do the following:
* eligibility
    * **POST /eligibility/vehicle/{ID}**: check vehicle product eligibility
* dealer subscription
    * **GET /dealers/{5M}/subscription**: show dealer subscription
    * **POST /dealers/{5M}/subscription**: create dealer subscription
    * **PUT /dealers/{5M}/subscription**: update dealer subscription
    * **DELETE /dealers/{5M}/subscription**: delete dealer subscription
* orders
    * **GET /orders/{ID}**: show order
    * **POST /orders**: place an order
    * **PUT /orders/{ID}**: update order
    * **DELETE /order/{ID}**: cancel order
    * **GET /orders/dealer/{5M}**: list orders by dealer
    * **GET /orders/auction/{ID}**: list orders by auction location

## API Layer

The API Layer acts a facade for communicating with all Product Service APIs.
For example, a client service wanted to check customer eligibilty for products

```sequence
Client -> API: POST /orders
API -> PS (PSI): POST /orders
API -> PS (DS): POST /orders
PS (PSI) -> API: response
PS (DS) -> API: response
API -> Client: response
```

## Tooling
* Github Enteprise
* Jenkins
* Java
* AWS Fargate
* AWS RDS MySQL
* AWS SQS
* Docker

## Todo
SQS FIFO DLQ processing