ingredient composition
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
# Test Ingredient Composition Endpoints
|
||||
|
||||
## 1. Add Compositions (Bulk)
|
||||
|
||||
```bash
|
||||
POST http://localhost:4000/api/v1/ingredients/{ingredient_id}/compositions
|
||||
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNmM2ZDI0MjAtNzA0MS00ZWE5LWE3MjYtYTM0MDAxNGJiMjRkIiwiZW1haWwiOiJhZG1pbkBnb2t1bmEuaWQiLCJyb2xlIjoiYWRtaW4iLCJvcmdhbml6YXRpb25faWQiOiIwMzIwNWQ4Zi0yYzA2LTQ1MTMtYTk1Mi0yMWQxMTA5Zjc4ZmYiLCJpc3MiOiJhcHNrZWwtcG9zIiwic3ViIjoiNmM2ZDI0MjAtNzA0MS00ZWE5LWE3MjYtYTM0MDAxNGJiMjRkIiwiZXhwIjoxNzg1OTE0ODQ4LCJuYmYiOjE3NzcyNzQ4NDgsImlhdCI6MTc3NzI3NDg0OH0.prO4mU1zjVUZLgi5c8hj10A6ODETCMjnEP8wUQikZ30
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"compositions": [
|
||||
{
|
||||
"child_ingredient_id": "CHILD_INGREDIENT_UUID_1",
|
||||
"quantity": 2.5
|
||||
},
|
||||
{
|
||||
"child_ingredient_id": "CHILD_INGREDIENT_UUID_2",
|
||||
"quantity": 1.0
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**Expected Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"parent_ingredient": {
|
||||
"id": "uuid",
|
||||
"name": "Semi-Finished Product",
|
||||
"cost": 15.50,
|
||||
"compositions": [...]
|
||||
},
|
||||
"compositions": [
|
||||
{
|
||||
"id": "COMPOSITION_ID_1",
|
||||
"child_ingredient_id": "...",
|
||||
"quantity": 2.5,
|
||||
"child_ingredient": {...},
|
||||
"parent_ingredient": {...}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 2. Update Composition
|
||||
|
||||
```bash
|
||||
PUT http://localhost:4000/api/v1/ingredients/compositions/{composition_id}
|
||||
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNmM2ZDI0MjAtNzA0MS00ZWE5LWE3MjYtYTM0MDAxNGJiMjRkIiwiZW1haWwiOiJhZG1pbkBnb2t1bmEuaWQiLCJyb2xlIjoiYWRtaW4iLCJvcmdhbml6YXRpb25faWQiOiIwMzIwNWQ4Zi0yYzA2LTQ1MTMtYTk1Mi0yMWQxMTA5Zjc4ZmYiLCJpc3MiOiJhcHNrZWwtcG9zIiwic3ViIjoiNmM2ZDI0MjAtNzA0MS00ZWE5LWE3MjYtYTM0MDAxNGJiMjRkIiwiZXhwIjoxNzg1OTE0ODQ4LCJuYmYiOjE3NzcyNzQ4NDgsImlhdCI6MTc3NzI3NDg0OH0.prO4mU1zjVUZLgi5c8hj10A6ODETCMjnEP8wUQikZ30
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"quantity": 3.5
|
||||
}
|
||||
```
|
||||
|
||||
**Expected Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"id": "composition_id",
|
||||
"child_ingredient_id": "...",
|
||||
"quantity": 3.5,
|
||||
"child_ingredient": {...},
|
||||
"parent_ingredient": {
|
||||
"id": "...",
|
||||
"cost": 18.75,
|
||||
"compositions": [...]
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 3. Delete Composition
|
||||
|
||||
```bash
|
||||
DELETE http://localhost:4000/api/v1/ingredients/compositions/{composition_id}
|
||||
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNmM2ZDI0MjAtNzA0MS00ZWE5LWE3MjYtYTM0MDAxNGJiMjRkIiwiZW1haWwiOiJhZG1pbkBnb2t1bmEuaWQiLCJyb2xlIjoiYWRtaW4iLCJvcmdhbml6YXRpb25faWQiOiIwMzIwNWQ4Zi0yYzA2LTQ1MTMtYTk1Mi0yMWQxMTA5Zjc4ZmYiLCJpc3MiOiJhcHNrZWwtcG9zIiwic3ViIjoiNmM2ZDI0MjAtNzA0MS00ZWE5LWE3MjYtYTM0MDAxNGJiMjRkIiwiZXhwIjoxNzg1OTE0ODQ4LCJuYmYiOjE3NzcyNzQ4NDgsImlhdCI6MTc3NzI3NDg0OH0.prO4mU1zjVUZLgi5c8hj10A6ODETCMjnEP8wUQikZ30
|
||||
```
|
||||
|
||||
**Expected Response:**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"id": "parent_ingredient_id",
|
||||
"name": "Semi-Finished Product",
|
||||
"cost": 12.25,
|
||||
"compositions": [
|
||||
// remaining compositions after deletion
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Steps to Test:
|
||||
|
||||
1. **Get a semi-finished ingredient ID** (or create one first)
|
||||
2. **Get child ingredient IDs** (raw ingredients to add as compositions)
|
||||
3. **Add compositions** using the bulk endpoint
|
||||
4. **Copy composition ID** from the response
|
||||
5. **Update or Delete** using that composition ID
|
||||
|
||||
## cURL Commands:
|
||||
|
||||
### Delete Composition:
|
||||
```bash
|
||||
curl --request DELETE \
|
||||
--url 'http://localhost:4000/api/v1/ingredients/compositions/YOUR_COMPOSITION_ID_HERE' \
|
||||
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiNmM2ZDI0MjAtNzA0MS00ZWE5LWE3MjYtYTM0MDAxNGJiMjRkIiwiZW1haWwiOiJhZG1pbkBnb2t1bmEuaWQiLCJyb2xlIjoiYWRtaW4iLCJvcmdhbml6YXRpb25faWQiOiIwMzIwNWQ4Zi0yYzA2LTQ1MTMtYTk1Mi0yMWQxMTA5Zjc4ZmYiLCJpc3MiOiJhcHNrZWwtcG9zIiwic3ViIjoiNmM2ZDI0MjAtNzA0MS00ZWE5LWE3MjYtYTM0MDAxNGJiMjRkIiwiZXhwIjoxNzg1OTE0ODQ4LCJuYmYiOjE3NzcyNzQ4NDgsImlhdCI6MTc3NzI3NDg0OH0.prO4mU1zjVUZLgi5c8hj10A6ODETCMjnEP8wUQikZ30'
|
||||
```
|
||||
|
||||
## Notes:
|
||||
|
||||
- Replace `{ingredient_id}` with actual parent ingredient UUID
|
||||
- Replace `{composition_id}` with actual composition UUID
|
||||
- Replace `CHILD_INGREDIENT_UUID_1` and `CHILD_INGREDIENT_UUID_2` with actual child ingredient UUIDs
|
||||
- Parent ingredient must have `is_semi_finished: true`
|
||||
- All responses now include the updated parent ingredient with recalculated cost
|
||||
Reference in New Issue
Block a user