Update docs

This commit is contained in:
2025-03-13 23:30:05 +01:00
parent 8452650613
commit 77bc81a2f6
2 changed files with 91 additions and 44 deletions
+85 -44
View File
@@ -3,74 +3,115 @@
SlotDB is an application designed to store information about property or assets, to
be able to query on that information, and implement basic schemas.
Use cases:
- **Warehousing** — Keep track of warehouse locations, available stock and more.
- **Hospitality** — Manage inventory of rooms or camping spots, together with availability,
price rates, available amenities, current guest etc.
- **Restaurants** — Keep track of tables and orders.
- **Shows and Events** — Allocate seating, with information on the guest and what level
ticket was purchased.
## Installing
### Docker
```bash
$ docker run -it \
-p 8080:8080
-v $PWD/slotdb.json:/app/slotdb.json \
dev.noccylabs.info/slotdb/slotdb
```
## Configuration
## API
## Security
### /api/slotdb/v1/slots [GET]
> [!NOTE]
> Security is not yet implemented. This section is a draft of how things may work.
**Get a list of all slots, or slots matching conditions**
Security is configured using an ACL embedded in the JWT. Each entry in the ACL follows
the following format:
```json
GET /api/slotdb/v1/slots
HTTP 200 OK
Content-Type: application/json
{
"slots": [
{
"id": "1.1",
"name": "First thing",
"available": true
}
]
}
```text
[groupid#][slot][.prop][/access]
¯¯¯¯¯¯¯¯\¯¯¯¯¯¯\¯¯¯¯¯\ ¯¯¯¯¯¯¯\
\ \ \ Can be either '/rw' (default), '/r' or '/w'
\ \ Property name or wildcard pattern (default: .*)
\ Slot ID or wildcard pattern (default: *)
Group ID
```
```json
GET /api/slotdb/v1/slots?get=id&where[]=available:1
Examples:
HTTP 200 OK
Content-Type: application/json
| ACE | Meaning
| --------------- | ------------------------------------------
| `/rw` | Read and write everything
| `A#` | Read and write everything in group 'A'
| `room*:x-*` | Read and write all properties starting with 'x-' on slots starting with 'room'
| `*/r` | Read-only access to everything
| `.available/rw` | Read and write the 'available' property on all slots, and nothing else
{
"slots": [
{
"id": "1.1"
},
{
"id": "1.2"
}
]
}
## Using the API
For the full API, see [doc/slotdb.openapi.yaml](doc/slotdb.openapi.yaml).
### Creating some slots
To create slot:
```bash
$ curl -XPOST -Hcontent-type:application/json --data \
'[{"slot":"A1","name":"Room A1"},{"slot":"A2","name":"Room A2"}]' \
http://127.0.0.1:8080/api/slotdb/v1/slots
```
| Params | Value
| -------------------- | --------
| page | Page
| limit | The number of results (per page) to return
| get | Comma-separated list of keys to return
| {key}:[cond]{match} | Match condition
The created slots will be returned.
Combine like: `?where[]=available:1&where[]=rate-group:<=2`
### Creating groups
### /api/slotdb/v1/slots [POST]
To create group:
**Create one or more new slots**
```bash
$ curl -XPOST -Hcontent-type:application/json --data \
'[{"group":"A","name":"Building A"}]' \
http://127.0.0.1:8080/api/slotdb/v1/groups
```
### /api/slotdb/v1/slot/{slot} [GET]
Add members using the special `_members` property, and set some properties
while we're at it:
### /api/slotdb/v1/slot/{slot} [PUT]
```bash
$ curl -XPOST -Hcontent-type:application/json --data \
'{"_members":{"A1":true,"A2":true},"rate":399,"available":true}' \
http://127.0.0.1:8080/api/slotdb/v1/group/A
```
### Updating slots
Set properties:
```bash
$ curl -XPOST -Hcontent-type:application/json --data \
'{"available":false}' \
http://127.0.0.1:8080/api/slotdb/v1/slot/A1
```
Get all slots:
```bash
$ curl http://127.0.0.1:8080/api/slotdb/v1/slots
```
Only get the available slots:
```bash
$ curl http://127.0.0.1:8080/api/slotdb/v1/slots?where[]=available:1
```
Get the slots in a group:
```bash
$ curl http://127.0.0.1:8080/api/slotdb/v1/group/A/members
```
### /api/slotdb/v1/slot/{slot} [DELETE]
+6
View File
@@ -0,0 +1,6 @@
# SlotDB TODO
- [ ] Security
- [ ] JWT authentication
- [ ] Access control on groups, slots and props
- [ ] Token authentication