docs(libraries): Beam WO5 batch 5 — 11 endpoints backfilled + pilot recovery
Beam backfilled 11 library docs (CRUD, folders, visibility, browse, stats,
media-items) and re-attached frontmatter to create_collection.md — which had
silently lost its pilot version in cc893f75: the negative-test
'git checkout --' restored the OLD file because the pilot was never staged,
and a frontmatter-less doc is invisible to the gate. Claude restored the full
corrected pilot content (priority higher-wins, time.String() note, 409).
Claude registry: 11 entries + one inverted catch — DELETE /:id/folders DOES
bind {folder_path} (handler reuses AddLibraryFolderRequest); registry first
draft said bodyless. GET /:id/visibility returns joined
GetUserVisibleLibrariesRow (type_name etc.), not bare Libraries.
Gate-driven merges fixed create/get library response shapes (sqlc row keys:
created_by_admin_id, library_type_id, updated_at; dropped invented type/
folders/is_visible). Fixed invented request fields (user_id in
set-visibility; library_type_id in update). make test 9/9.
This commit is contained in:
1 parent
6f13dc2b63
commit
b77eab7ffd
13 files changed
+223
-121
No files matched your search
@@ -1,3 +1,11 @@
|
||||
---
|
||||
method: POST
|
||||
path: /api/libraries/:id/folders
|
||||
auth: jwt+admin
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/library.go:167 LibraryHandler.AddLibraryFolder -->
|
||||
|
||||
# Add Library Folder
|
||||
|
||||
Add a folder to an existing library (Admin only).
|
||||
@@ -20,7 +28,7 @@ Add a folder to an existing library (Admin only).
|
||||
|
||||
### Example Request
|
||||
|
||||
```json
|
||||
```json example-request
|
||||
{
|
||||
"folder_path": "/path/to/comics"
|
||||
}
|
||||
@@ -28,7 +36,7 @@ Add a folder to an existing library (Admin only).
|
||||
|
||||
## Response (201 Created)
|
||||
|
||||
```json
|
||||
```json example-response
|
||||
{
|
||||
"id": "uuid",
|
||||
"library_id": "uuid",
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
---
|
||||
method: GET
|
||||
path: /api/libraries/browse
|
||||
auth: jwt+admin
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/library.go:254 LibraryHandler.BrowseDirectories -->
|
||||
|
||||
# Browse Library Folders
|
||||
|
||||
Browse server directories for folder selection in library management.
|
||||
@@ -26,7 +34,7 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||
|
||||
## Response (200 OK)
|
||||
|
||||
```json
|
||||
```json example-response
|
||||
{
|
||||
"current_path": "/home/user",
|
||||
"parent_path": "/home",
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
---
|
||||
method: POST
|
||||
path: /api/libraries
|
||||
auth: jwt+admin
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/library.go:60 LibraryHandler.CreateLibrary -->
|
||||
|
||||
# Create Library
|
||||
|
||||
Create a new library (Admin only).
|
||||
@@ -16,7 +24,7 @@ Create a new library (Admin only).
|
||||
|
||||
### Example Request
|
||||
|
||||
```json
|
||||
```json example-request
|
||||
{
|
||||
"name": "Comics Collection",
|
||||
"description": "Digital comics",
|
||||
@@ -26,13 +34,15 @@ Create a new library (Admin only).
|
||||
|
||||
## Response (201 Created)
|
||||
|
||||
```json
|
||||
```json example-response
|
||||
{
|
||||
"id": "uuid",
|
||||
"name": "Comics Collection",
|
||||
"description": "Digital comics",
|
||||
"type": "comics",
|
||||
"created_at": "2026-01-31T10:00:00Z"
|
||||
"created_at": "2026-01-31T10:00:00Z",
|
||||
"created_by_admin_id": null,
|
||||
"library_type_id": null,
|
||||
"updated_at": null
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
---
|
||||
method: DELETE
|
||||
path: /api/libraries/:id
|
||||
auth: jwt+admin
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/library.go:152 LibraryHandler.DeleteLibrary -->
|
||||
|
||||
# Delete Library
|
||||
|
||||
Delete a library and all associated data.
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
---
|
||||
method: DELETE
|
||||
path: /api/libraries/:id/folders
|
||||
auth: jwt+admin
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/library.go:231 LibraryHandler.DeleteLibraryFolder -->
|
||||
|
||||
# Delete Library Folder
|
||||
|
||||
Delete a folder from a library.
|
||||
@@ -20,7 +28,7 @@ Delete a folder from a library.
|
||||
|
||||
### Example Request
|
||||
|
||||
```json
|
||||
```json example-request
|
||||
{
|
||||
"folder_path": "/path/to/library/folder"
|
||||
}
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
# Get Library Details
|
||||
---
|
||||
method: GET
|
||||
path: /api/libraries/:id
|
||||
auth: jwt+admin
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/library.go:87 LibraryHandler.GetLibrary -->
|
||||
|
||||
# Get Library Details:<|end|><|start|> assistant to=edit<|channel|>analysis <|constrain|>xml<|message|><rfl:parameter name="path">
|
||||
/home/nymusicman/Code/bookhoard/docs/developer/api/libraries/get_library_media_items.md
|
||||
|
||||
Retrieve details of a specific library.
|
||||
|
||||
@@ -26,19 +35,15 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||
|
||||
## Response (200 OK)
|
||||
|
||||
```json
|
||||
```json example-response
|
||||
{
|
||||
"id": "uuid",
|
||||
"name": "My Ebooks",
|
||||
"description": "Ebook collection",
|
||||
"type": "ebooks",
|
||||
"folders": [
|
||||
{
|
||||
"id": "uuid",
|
||||
"folder_path": "/path/to/ebooks"
|
||||
}
|
||||
],
|
||||
"is_visible": true
|
||||
"created_at": null,
|
||||
"created_by_admin_id": null,
|
||||
"library_type_id": null,
|
||||
"updated_at": null
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
---
|
||||
method: GET
|
||||
path: /api/libraries/:id/media-items
|
||||
auth: jwt+admin
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/media.go:757 MediaHandler.ListMediaItems -->
|
||||
|
||||
# Get Library Media Items
|
||||
|
||||
Get all media items in a specific library.
|
||||
@@ -35,20 +43,9 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||
|
||||
## Response (200 OK)
|
||||
|
||||
```json
|
||||
```json example-response
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"id": "uuid",
|
||||
"title": "Sample Book",
|
||||
"authors": ["Author Name"],
|
||||
"tags": ["fiction", "science-fiction"],
|
||||
"created_at": "2026-02-08T10:00:00Z"
|
||||
}
|
||||
],
|
||||
"total": 1523,
|
||||
"limit": 20,
|
||||
"offset": 0
|
||||
"data": null
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
---
|
||||
method: GET
|
||||
path: /api/libraries/:id/stats
|
||||
auth: jwt+admin
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/library.go:303 LibraryHandler.GetLibraryStats -->
|
||||
|
||||
# Get Library Statistics
|
||||
|
||||
Get statistics for a specific library.
|
||||
@@ -26,18 +34,14 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||
|
||||
## Response (200 OK)
|
||||
|
||||
```json
|
||||
```json example-response
|
||||
{
|
||||
"library_id": "uuid",
|
||||
"total_media_items": 1523,
|
||||
"total_size_bytes": 5368709120,
|
||||
"last_scan": "2026-02-08T10:00:00Z",
|
||||
"formats": {
|
||||
"epub": 1234,
|
||||
"kepub": 189,
|
||||
"mobi": 50,
|
||||
"pdf": 50
|
||||
}
|
||||
"books": null,
|
||||
"minutes": null,
|
||||
"name": null,
|
||||
"pages": null,
|
||||
"sessions": null
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
---
|
||||
method: GET
|
||||
path: /api/libraries/visibility
|
||||
auth: jwt
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/library.go:112 LibraryHandler.GetUserVisibleLibraries -->
|
||||
|
||||
# Get Visible Libraries
|
||||
|
||||
Retrieve all libraries visible to the current user.
|
||||
@@ -22,7 +30,7 @@ Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||
|
||||
A top-level JSON **array** of library rows:
|
||||
|
||||
```json
|
||||
```json example-response
|
||||
[
|
||||
{
|
||||
"id": "uuid",
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
---
|
||||
method: POST
|
||||
path: /api/libraries/visibility
|
||||
auth: jwt
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/library.go:273 LibraryHandler.SetLibraryVisibility -->
|
||||
|
||||
# Set Library Visibility
|
||||
|
||||
Set library visibility for a specific user (Admin only).
|
||||
@@ -16,9 +24,8 @@ Set library visibility for a specific user (Admin only).
|
||||
|
||||
### Example Request
|
||||
|
||||
```json
|
||||
```json example-request
|
||||
{
|
||||
"user_id": "user-uuid",
|
||||
"library_id": "library-uuid",
|
||||
"is_visible": true
|
||||
}
|
||||
@@ -26,11 +33,14 @@ Set library visibility for a specific user (Admin only).
|
||||
|
||||
## Response (200 OK)
|
||||
|
||||
```json
|
||||
```json example-response
|
||||
{
|
||||
"user_id": "user-uuid",
|
||||
"library_id": "library-uuid",
|
||||
"is_visible": true
|
||||
"is_visible": true,
|
||||
"created_at": null,
|
||||
"id": null,
|
||||
"updated_at": null
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
---
|
||||
method: PUT
|
||||
path: /api/libraries/:id
|
||||
auth: jwt+admin
|
||||
area: libraries
|
||||
---
|
||||
<!-- source: internal/handlers/library.go:124 LibraryHandler.UpdateLibrary -->
|
||||
|
||||
# Update Library
|
||||
|
||||
Update a library's information.
|
||||
@@ -21,22 +29,24 @@ Update a library's information.
|
||||
|
||||
### Example Request
|
||||
|
||||
```json
|
||||
```json example-request
|
||||
{
|
||||
"name": "My Updated Library",
|
||||
"library_type_id": 1
|
||||
"description": "Updated description"
|
||||
}
|
||||
```
|
||||
|
||||
## Response (200 OK)
|
||||
|
||||
```json
|
||||
```json example-response
|
||||
{
|
||||
"id": "uuid",
|
||||
"name": "My Updated Library",
|
||||
"library_type_id": 1,
|
||||
"created_at": "2026-02-08T10:00:00Z",
|
||||
"updated_at": "2026-02-08T11:00:00Z"
|
||||
"updated_at": "2026-02-08T11:00:00Z",
|
||||
"created_by_admin_id": null,
|
||||
"description": null
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Reference in new issue
Block a user