# Project AI Backend for Frontend
# 1. Run DB and RabbitMQ (skip ì you already install)
`docker compose -f docker-persistent up --build`
# 2. Migrate Database Schema ( If needed )
1.1 Make migration file `python manage.py makemigrations` 

1.2 Apply to database `python manage.py migrate`

# 3. Run Project

## 2.1 Run with Docker
### 2.1.1 Add file `.env` at same folder level with docker-compose.yml. 
Sample at `env_sample/example_{OS}_env` (Window / Linux)
### 2.1.2 Build & Run Image By Command 
`docker compose up --build`

## 2.2 Local Development Run
### 2.2.1 Add file `.env` at same folder level with docker-compose.yml. 
Sample at `env_sample/example_local_env`
### 2.2.2 Run API 
`python manage.py runserver 0.0.0.0:8000`
### 2.2.3 Run Worker
`celery -A fwd_api.proj.worker worker -l INFO --without-gossip --without-mingle --without-heartbeat -Ofair --pool=solo`



## Feature
### Semi correction
**API URL**: /api/automation/
#### **Exclaimer**: This process will overwrite all request files (images) reason and counter measure with the provided rule
#### How to use
Example: 
	subsidiary: SESP \
    Invoice_Purchase Date_Accuracy: 100% \
    Invoice_Sold_To_Party_OCR: != "" \
    Invoice_Retailer_OCR: Samsung Brand Store \
    Reason to fill:	Wrong Feedback \
    Counter Measure: Update revised resutl and re-calculate accuracy \
The config would be as following
```
  {
    "subsidiary": "SESP",
    "predict_result": {
      "retailername": "Samsung Brand Store",
      "sold_to_party": "notEmpty"
    },
    "feedback_accuracy": {
      "purchase_date": 1
    },
    "reason": "Wrong Feedback",
    "counter_measures": "Update revised result and re-calculate accuracy"
  },
```

Supported special commands: ["<", "Empty", "notEmpty", "starts_with"] \
To use the commands with values, you need to sperate it with the value by `||` for example: "<||1.0" means <100% and "starts_with||Shopee" means Shopee*

#### Modify a duration with a rule:
```
curl -X 'POST' \
  '<server_url>/api/automation/<rule_id>/scan/' \
  -H 'accept: application/json' \
  -H 'Authorization: <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "start_date": "2024-05-17T07:27:19.087Z",
  "end_date": "2024-07-17T07:27:19.087Z"
}'
```

To get the list of URLS:
```
curl -X 'GET' \
  '<server_url>/api/automation/' \
  -H 'accept: application/json' \
  -H 'Authorization: <token>'
```
More infomation, please refer to the swagger page