{"swagger":"2.0","info":{"title":"joglog api","description":"JogLog API documentation","version":"0.0.1-dev"},"host":"localhost:8081","basePath":"/","schemes":["http"],"consumes":["application/json"],"produces":["application/json"],"paths":{"/times":{"post":{"description":"Create a time entry","parameters":[{"name":"time.minimal","in":"body","schema":{"$ref":"#/definitions/time.minimal"}}],"responses":{"201":{"description":"Created time entry","schema":{"$ref":"#/definitions/time"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"400":{"description":"Bad request error","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if user is not authenticated","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}},"get":{"description":"List all times","parameters":[],"responses":{"200":{"description":"List of all times (for specific user if not admin)","schema":{"type":"array","items":{"$ref":"#/definitions/time"}},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if user is not authenticated","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}},"patch":{"description":"Patch a time entry","parameters":[{"name":"[time.patch.entry]","in":"body","schema":{"type":"array","items":{"$ref":"#/definitions/time.patch.entry"}}}],"responses":{"200":{"description":"Updated time entry","schema":{"$ref":"#/definitions/time"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if user role is not admin or himself","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}}},"/times/{id}":{"get":{"description":"Get a specific time entry","parameters":[{"name":"id","in":"path","description":"Time entry ID","required":true,"type":"integer","format":"int32"}],"responses":{"200":{"description":"Selected User","schema":{"$ref":"#/definitions/time"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if user role is not admin or user doesn't own this time entry","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"404":{"description":"Not found error","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}},"delete":{"description":"Remove a specific time entry","parameters":[{"name":"id","in":"path","description":"Time ID","required":true,"type":"integer","format":"int32"}],"responses":{"200":{"description":"Removed Time entry","schema":{"$ref":"#/definitions/time"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if user role is not admin or himself","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"404":{"description":"Not found error","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}}},"/users/authenticate":{"post":{"description":"Authentication","parameters":[{"name":"user.minimal","in":"body","schema":{"$ref":"#/definitions/user.minimal"}}],"responses":{"201":{"description":"JWT Token","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if authentication failed","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}}},"/users":{"post":{"description":"Create a user","parameters":[{"name":"user.minimal","in":"body","schema":{"$ref":"#/definitions/user.minimal"}}],"responses":{"201":{"description":"Created user","schema":{"$ref":"#/definitions/user"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"400":{"description":"Bad request error (username exists or doesn't pass regexp test)","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if user is authenticated","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}},"get":{"description":"List all users","parameters":[],"responses":{"200":{"description":"List of all users","schema":{"type":"array","items":{"$ref":"#/definitions/user"}},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if user role is not admin or manager","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}},"patch":{"description":"Patch a user","parameters":[{"name":"[user.patch.entry]","in":"body","schema":{"type":"array","items":{"$ref":"#/definitions/user.patch.entry"}}}],"responses":{"200":{"description":"Updated user","schema":{"$ref":"#/definitions/user"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if user role is not admin, manager or himself","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}}},"/users/{id}":{"get":{"description":"Get a specific user","parameters":[{"name":"id","in":"path","description":"User ID","required":true,"type":"integer","format":"int32"}],"responses":{"200":{"description":"Selected User","schema":{"$ref":"#/definitions/user"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if user role is not admin, manager or himself","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"404":{"description":"Not found error","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}},"delete":{"description":"Remove a specific user","parameters":[{"name":"id","in":"path","description":"User ID","required":true,"type":"integer","format":"int32"}],"responses":{"200":{"description":"Removed User","schema":{"$ref":"#/definitions/user"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"403":{"description":"Forbidden error if user role is not admin, manager or himself","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}},"404":{"description":"Not found error","schema":{"$ref":"#/definitions/string"},"headers":{"Authorization":{"description":"A base64-encoded JWT token looking like 'Authorization : Bearer {token}'","type":"string"}}}}}}},"definitions":{"time":{"type":"object","description":"Time entry","title":"time","required":["id","distance","time","createdAt","updatedAt"],"properties":{"id":{"description":"Unique time id","type":"integer","format":"int32"},"distance":{"description":"Distance in meters","type":"integer","format":"int32"},"time":{"description":"Time in seconds","type":"integer","format":"int32"},"createdAt":{"description":"Creation date-time","type":"string","format":"date-time"},"updatedAt":{"description":"Last update date-time","type":"string","format":"date-time"}}},"time.minimal":{"type":"object","description":"Time entry","title":"time.minimal","required":["distance","time"],"properties":{"distance":{"description":"Distance in meters","type":"integer","format":"int32"},"time":{"description":"Time in seconds","type":"integer","format":"int32"}}},"time.patch.entry":{"type":"object","description":"Time patch entry","title":"time.patch.entry","required":["op","path","value"],"properties":{"op":{"type":"string","enum":["test","replace"]},"path":{"type":"string","enum":["distance","time","id"]},"value":{"type":"integer","format":"int32"}}},"user":{"type":"object","description":"User","title":"user","required":["id","username","role","createdAt","updatedAt"],"properties":{"id":{"description":"Unique user id","type":"integer","format":"int32"},"username":{"description":"Username","type":"string"},"role":{"type":"string","enum":["user","manager","admin"]},"createdAt":{"description":"Creation date-time","type":"string","format":"date-time"},"updatedAt":{"description":"Last update date-time","type":"string","format":"date-time"}}},"user.minimal":{"type":"object","description":"User","title":"user.minimal","required":["username","password"],"properties":{"username":{"description":"Username","type":"string"},"password":{"description":"Password","type":"string"}}},"user.patch.entry":{"type":"object","description":"User patch entry","title":"user.patch.entry","required":["op","path","value"],"properties":{"op":{"type":"string","enum":["test","replace"]},"path":{"type":"string","enum":["username","password","role","id"]},"value":{"type":"string","enum":["string","integer"]}}}}}