{ "name": "joglog api", "description": "JogLog API documentation", "base_url": "http://localhost:8081", "enums": { "user.role": { "description": "User Role", "values": [ { "name": "user", "description": "Regular user" }, { "name": "manager", "description": "User manager" }, { "name": "admin", "description": "The God himself" } ] }, "patch.operation": { "description": "Patch operation", "values": [ { "name": "test" }, { "name": "replace" } ] }, "user.patch.path": { "description": "User patch field path (id only for test)", "values": [ { "name": "username" }, { "name": "password" }, { "name": "role" }, { "name": "id" } ] }, "time.patch.path": { "description": "Time patch field path (id only for test)", "values": [ { "name": "distance" }, { "name": "time" }, { "name": "id" } ] }, "stringOrInteger": { "description": "Integer for ID or string for any other", "values": [ { "name": "string" }, { "name": "integer" } ] } }, "models": { "user": { "description": "User", "fields": [ { "name": "id", "type": "integer", "description": "Unique user id" }, { "name": "username", "type": "string", "description": "Username" }, { "name": "role", "type": "user.role", "description": "User Role" }, { "name": "createdAt", "type": "date-time-iso8601", "description": "Creation date-time" }, { "name": "updatedAt", "type": "date-time-iso8601", "description": "Last update date-time" } ] }, "user.minimal": { "description": "User", "fields": [ { "name": "username", "type": "string", "description": "Username" }, { "name": "password", "type": "string", "description": "Password" } ] }, "user.patch.entry": { "description": "User patch entry", "fields": [ { "name": "op", "type": "patch.operation", "required": true }, { "name": "path", "type": "user.patch.path", "required": true }, { "name": "value", "type": "stringOrInteger", "required": true } ] }, "time": { "description": "Time entry", "fields": [ { "name": "id", "type": "integer", "description": "Unique time id" }, { "name": "distance", "type": "integer", "description": "Distance in meters" }, { "name": "time", "type": "integer", "description": "Time in seconds" }, { "name": "createdAt", "type": "date-time-iso8601", "description": "Creation date-time" }, { "name": "updatedAt", "type": "date-time-iso8601", "description": "Last update date-time" } ] }, "time.minimal": { "description": "Time entry", "fields": [ { "name": "distance", "type": "integer", "description": "Distance in meters" }, { "name": "time", "type": "integer", "description": "Time in seconds" } ] }, "time.patch.entry": { "description": "Time patch entry", "fields": [ { "name": "op", "type": "patch.operation", "required": true }, { "name": "path", "type": "time.patch.path", "required": true }, { "name": "value", "type": "integer", "required": true } ] } }, "resources": { "user": { "operations": [ { "method": "POST", "description": "Authentication", "path": "/authenticate", "body": { "type": "user.minimal" }, "responses": { "201": { "type": "string", "description": "JWT Token" }, "403": { "type": "string", "description": "Forbidden error if authentication failed" } } }, { "method": "POST", "description": "Create a user", "body": { "type": "user.minimal" }, "responses": { "201": { "type": "user", "description": "Created user" }, "400": { "type": "string", "description": "Bad request error (username exists or doesn't pass regexp test)" }, "403": { "type": "string", "description": "Forbidden error if user is authenticated" } } }, { "method": "GET", "description": "List all users", "responses": { "200": { "type": "[user]", "description": "List of all users" }, "403": { "type": "string", "description": "Forbidden error if user role is not admin or manager" } } }, { "method": "GET", "path": "/:id", "description": "Get a specific user", "parameters": [ { "name": "id", "type": "integer", "description": "User ID", "location": "path" } ], "responses": { "200": { "type": "user", "description": "Selected User" }, "403": { "type": "string", "description": "Forbidden error if user role is not admin, manager or himself" }, "404": { "type": "string", "description": "Not found error" } } }, { "method": "PATCH", "description": "Patch a user", "body": { "type": "[user.patch.entry]" }, "responses": { "200": { "type": "user", "description": "Updated user" }, "403": { "type": "string", "description": "Forbidden error if user role is not admin, manager or himself" } } }, { "method": "DELETE", "path": "/:id", "description": "Remove a specific user", "parameters": [ { "name": "id", "type": "integer", "description": "User ID", "location": "path" } ], "responses": { "200": { "type": "user", "description": "Removed User" }, "403": { "type": "string", "description": "Forbidden error if user role is not admin, manager or himself" }, "404": { "type": "string", "description": "Not found error" } } } ] }, "time": { "operations": [ { "method": "POST", "description": "Create a time entry", "body": { "type": "time.minimal" }, "responses": { "201": { "type": "time", "description": "Created time entry" }, "400": { "type": "string", "description": "Bad request error" }, "403": { "type": "string", "description": "Forbidden error if user is not authenticated" } } }, { "method": "GET", "description": "List all times", "responses": { "200": { "type": "[time]", "description": "List of all times (for specific user if not admin)" }, "403": { "type": "string", "description": "Forbidden error if user is not authenticated" } } }, { "method": "GET", "path": "/:id", "description": "Get a specific time entry", "parameters": [ { "name": "id", "type": "integer", "description": "Time entry ID", "location": "path" } ], "responses": { "200": { "type": "time", "description": "Selected User" }, "403": { "type": "string", "description": "Forbidden error if user role is not admin or user doesn't own this time entry" }, "404": { "type": "string", "description": "Not found error" } } }, { "method": "PATCH", "description": "Patch a time entry", "body": { "type": "[time.patch.entry]" }, "responses": { "200": { "type": "time", "description": "Updated time entry" }, "403": { "type": "string", "description": "Forbidden error if user role is not admin or himself" } } }, { "method": "DELETE", "path": "/:id", "description": "Remove a specific time entry", "parameters": [ { "name": "id", "type": "integer", "description": "Time ID", "location": "path" } ], "responses": { "200": { "type": "time", "description": "Removed Time entry" }, "403": { "type": "string", "description": "Forbidden error if user role is not admin or himself" }, "404": { "type": "string", "description": "Not found error" } } } ] } }, "headers": [ { "name": "Authorization", "type": "string", "description": "A base64-encoded JWT token looking like 'Authorization : Bearer {token}'", "required": false } ] }