Files
bookhoard/bruno/conflicts/api.bru
T
john-okeefe 4d87beb540 test: add Bruno API collections for sync features
- Add device registration and management API tests
- Add conflicts resolution API tests
- Add queue management API tests
- Add KOReader sync protocol tests
- Add Kobo sync protocol tests
2026-01-31 18:25:32 -05:00

128 lines
3.4 KiB
Plaintext

meta {
name: "Bookmann Conflicts API"
type: "collection"
environment: {
development: {
base_url: "http://localhost:8765/api"
},
production: {
base_url: "https://your-domain.com/api"
}
}
}
# List Conflicts
@name("List Unresolved Conflicts")
GET {{environment.base_url}}/conflicts?status=unresolved
Authorization: Bearer {{jwt_token}}
@name("List All Conflicts")
GET {{environment.base_url}}/conflicts?status=all
Authorization: Bearer {{jwt_token}}
@name("List Resolved Conflicts")
GET {{environment.base_url}}/conflicts?status=resolved
Authorization: Bearer {{jwt_token}}
@name("List Progress Conflicts")
GET {{environment.base_url}}/conflicts?status=unresolved&type=progress
Authorization: Bearer {{jwt_token}}
@name("List Note Conflicts")
GET {{environment.base_url}}/conflicts?status=unresolved&type=note
Authorization: Bearer {{jwt_token}}
@name("List Highlight Conflicts")
GET {{environment.base_url}}/conflicts?status=unresolved&type=highlight
Authorization: Bearer {{jwt_token}}
# Get Conflict Details
@name("Get Conflict Details")
GET {{environment.base_url}}/conflicts/{{conflict_id}}
Authorization: Bearer {{jwt_token}}
# Resolve Conflict
@name("Resolve - Keep KOReader Progress")
POST {{environment.base_url}}/conflicts/{{conflict_id}}/resolve
Authorization: Bearer {{jwt_token}}
Content-Type: application/json
{
"winner": "koreader",
"apply_to_all_future_conflicts": false,
"reason": "KOReader was most recently updated"
}
@name("Resolve - Keep Kobo Progress")
POST {{environment.base_url}}/conflicts/{{conflict_id}}/resolve
Authorization: Bearer {{jwt_token}}
Content-Type: application/json
{
"winner": "kobo",
"apply_to_all_future_conflicts": false,
"reason": "Kobo has more progress"
}
@name("Resolve - Keep Web Progress")
POST {{environment.base_url}}/conflicts/{{conflict_id}}/resolve
Authorization: Bearer {{jwt_token}}
Content-Type: application/json
{
"winner": "web",
"apply_to_all_future_conflicts": false,
"reason": "Web interface has most recent data"
}
@name("Resolve - Manual Override")
POST {{environment.base_url}}/conflicts/{{conflict_id}}/resolve
Authorization: Bearer {{jwt_token}}
Content-Type: application/json
{
"winner": "manual",
"manual_data": {
"percentage": 0.43,
"epubcfi": "epubcfi(/6/4/2:20)",
"chapter": 3
},
"apply_to_all_future_conflicts": false,
"reason": "User specified custom progress"
}
@name("Resolve - Manual Override with Page")
POST {{environment.base_url}}/conflicts/{{conflict_id}}/resolve
Authorization: Bearer {{jwt_token}}
Content-Type: application/json
{
"winner": "manual",
"manual_data": {
"percentage": 0.43,
"page": 89,
"epubcfi": "epubcfi(/6/4/2:20)"
},
"apply_to_all_future_conflicts": false,
"reason": "User specified page number"
}
@name("Resolve - Apply to All Future Conflicts")
POST {{environment.base_url}}/conflicts/{{conflict_id}}/resolve
Authorization: Bearer {{jwt_token}}
Content-Type: application/json
{
"winner": "koreader",
"apply_to_all_future_conflicts": true,
"reason": "Always prefer KOReader for future conflicts"
}
# Delete Conflict
@name("Delete Conflict")
DELETE {{environment.base_url}}/conflicts/{{conflict_id}}
Authorization: Bearer {{jwt_token}}
@name("Dismiss Conflict")
DELETE {{environment.base_url}}/conflicts/{{conflict_id}}
Authorization: Bearer {{jwt_token}}
# Batch Operations
@name("Dismiss All Resolved Conflicts")
DELETE {{environment.base_url}}/conflicts/dismiss-resolved
Authorization: Bearer {{jwt_token}}