From 9098b3a2ba07259a180dec1d0698b71a164002fc Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:10:38 +0700 Subject: [PATCH 01/13] refactor: normalize API paths and move payloads to request body - Rename RPC-style paths to REST conventions: /event/new -> POST /event, /event/modifications -> PUT /event/{event_id}, /event -> DELETE /event/{event_id}, /event/list_details -> POST /event/search. Same pattern for all 9 resource types. - Move creation and search payloads from qry query params to requestBody - Move resource IDs from query params to path params - Remove requestor_id and request_token query params (security scheme in next commit) - Add operationId to all 37 operations (camelCase verb+Resource convention) - Fix content-type key from "json" to "application/json" on all search responses --- api/Govstack_scheduler_BB_APIs.json | 5548 ++++++++++++--------------- 1 file changed, 2461 insertions(+), 3087 deletions(-) diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index 40cc39a..25b9492 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -1,3756 +1,3130 @@ { - "openapi" : "3.0.1", - "info" : { - "title" : "Govstack Scheduler API", - "description" : "Interfaces to services rendered by Scheduler building block", - "termsOfService" : "TBD", - "contact" : { - "email" : "psramkumar2@gmail.com" + "openapi": "3.0.1", + "info": { + "title": "Govstack Scheduler API", + "description": "Interfaces to services rendered by Scheduler building block", + "termsOfService": "TBD", + "contact": { + "email": "psramkumar2@gmail.com" }, - "license" : { - "name" : "Apache 2.0", - "url" : "http://www.apache.org/licenses/LICENSE-2.0.html" + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" }, - "version" : "1.0.0" + "version": "1.0.0" }, - "externalDocs" : { - "description" : "Find out more about scheduler", - "url" : "https://www.govstack.global/" + "externalDocs": { + "description": "Find out more about scheduler", + "url": "https://www.govstack.global/" }, - "servers" : [ { - "url" : "http://ss2.egovstack.net/r1/eGovStack/COM/11222456/SchedulerBB/creg/", - "description" : "Scheduler BB Security server" - } ], - "tags" : [ { - "name" : "event", - "description" : "event management API" - }, { - "name" : "entity", - "description" : "entity management API" - }, { - "name" : "alert_schedule", - "description" : "alert_schedule management API" - }, { - "name" : "resource", - "description" : "resource management API" - }, { - "name" : "subscribers", - "description" : "subscriber management API" - }, { - "name" : "message", - "description" : "message management API" - }, { - "name" : "log", - "description" : "log management API" - }, { - "name" : "affiliation", - "description" : "affiliation management API" - }, { - "name" : "appointment", - "description" : "appointment management API" - } ], - "paths" : { - "/event/new" : { - "post" : { - "tags" : [ "event" ], - "summary" : "create a new event, in event_list with given event_details, returns new event id or failure error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/event_new_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success", - "content" : { - "application/json" : { - "schema" : { - "type" : "string", - "description" : "ID of created event", - "example" : "event_id:12345" + "servers": [ + { + "url": "http://ss2.egovstack.net/r1/eGovStack/COM/11222456/SchedulerBB/creg/", + "description": "Scheduler BB Security server" + } + ], + "tags": [ + { + "name": "event", + "description": "event management API" + }, + { + "name": "entity", + "description": "entity management API" + }, + { + "name": "alert_schedule", + "description": "alert_schedule management API" + }, + { + "name": "resource", + "description": "resource management API" + }, + { + "name": "subscribers", + "description": "subscriber management API" + }, + { + "name": "message", + "description": "message management API" + }, + { + "name": "log", + "description": "log management API" + }, + { + "name": "affiliation", + "description": "affiliation management API" + }, + { + "name": "appointment", + "description": "appointment management API" + } + ], + "paths": { + "/event": { + "post": { + "tags": [ + "event" + ], + "summary": "create a new event, in event_list with given event_details, returns new event id or failure error code", + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created event", + "example": "event_id:12345" } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } - } - }, - "/event/modifications" : { - "put" : { - "tags" : [ "event" ], - "summary" : "changes values of specific details (as given by event_details) of given event (selected by event_filter)in event_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "event_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "12345" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/event_modify_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success, event updated" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/event_new_qry" + } + } } - } + }, + "operationId": "createEvent" } }, - "/event" : { - "delete" : { - "tags" : [ "event" ], - "summary" : "delete a predefined event in event_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "event_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "12345" - } - } ], - "responses" : { - "200" : { - "description" : "success, event cancelled" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + "/event/{event_id}": { + "put": { + "tags": [ + "event" + ], + "summary": "changes values of specific details (as given by event_details) of given event (selected by event_filter)in event_list and returns success or error code", + "parameters": [ + { + "name": "event_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the event" } - } + ], + "responses": { + "200": { + "description": "success, event updated" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/event_modify_qry" + } + } + } + }, + "operationId": "updateEvent" + }, + "delete": { + "tags": [ + "event" + ], + "summary": "delete a predefined event in event_list and returns success or error code", + "parameters": [ + { + "name": "event_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the event" + } + ], + "responses": { + "200": { + "description": "success, event cancelled" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "operationId": "deleteEvent" } }, - "/event/list_details" : { - "get" : { - "tags" : [ "event" ], - "summary" : "get list of events filetered by criteria in event_filter and return info specified by event_details_required with success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/event_get_details_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success,event_list", - "content" : { - "json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/event_list" + "/event/search": { + "post": { + "tags": [ + "event" + ], + "summary": "get list of events filetered by criteria in event_filter and return info specified by event_details_required with success or error code", + "responses": { + "200": { + "description": "success,event_list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/event_list" } } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/event_get_details_qry" + } + } + } + }, + "operationId": "searchEvents" } }, - "/appointment/new" : { - "post" : { - "tags" : [ "appointment" ], - "summary" : "create a new appointment, in appointment_list with given appointment_details, returns new appointment id or failure error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/appointment_new_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success", - "content" : { - "application/json" : { - "schema" : { - "type" : "string", - "description" : "ID of created appointment", - "example" : "[Event_id:12345,appointment_id:1]" + "/entity": { + "post": { + "tags": [ + "entity" + ], + "summary": "create a new entity, in entity_list with given entity_details, returns new entity id or entity error code", + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created entity", + "example": "entity_name:xyz hospital,entity_id:67890" } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } - } - }, - "/appointment/modifications" : { - "put" : { - "tags" : [ "appointment" ], - "summary" : "changes values of specific details (as given by appointment_details) of given appointment (selected by appointment_filter)in appointment_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "appointment_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "1" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/appointment_modify_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success, appointment updated" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/entity_new_qry" + } + } } - } + }, + "operationId": "createEntity" } }, - "/appointment" : { - "delete" : { - "tags" : [ "appointment" ], - "summary" : "delete a predefined appointment in appointment_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "appointment_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "1" - } - } ], - "responses" : { - "200" : { - "description" : "success, appointment cancelled" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + "/entity/{entity_id}": { + "put": { + "tags": [ + "entity" + ], + "summary": "changes values of specific details (as given by entity_details) of given entity (selected by entity_filter)in entity_list and returns success or error code", + "parameters": [ + { + "name": "entity_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the entity" } - } + ], + "responses": { + "200": { + "description": "success, entity updated" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/entity_modify_qry" + } + } + } + }, + "operationId": "updateEntity" + }, + "delete": { + "tags": [ + "entity" + ], + "summary": "delete a predefined entity in entity_list and returns success or error code", + "parameters": [ + { + "name": "entity_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the entity" + } + ], + "responses": { + "200": { + "description": "success, entity cancelled" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "operationId": "deleteEntity" } }, - "/appointment/list_details" : { - "get" : { - "tags" : [ "appointment" ], - "summary" : "get list of appointments filetered by criteria in appointment_filter and return info specified by appointment_details_required with success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/appointment_get_details_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success,appointment_list", - "content" : { - "json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/appointment_list" + "/entity/search": { + "post": { + "tags": [ + "entity" + ], + "summary": "get list of entities filetered by criteria in entity_filter and return info specified by entity_details_required with success or error code", + "responses": { + "200": { + "description": "success,entity list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/entity_list" } } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/entity_get_details_qry" + } + } + } + }, + "operationId": "searchEntities" } }, - "/entity/new" : { - "post" : { - "tags" : [ "entity" ], - "summary" : "create a new entity, in entity_list with given entity_details, returns new entity id or entity error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/entity_new_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success", - "content" : { - "application/json" : { - "schema" : { - "type" : "string", - "description" : "ID of created entity", - "example" : "entity_name:xyz hospital,entity_id:67890" + "/resource": { + "post": { + "tags": [ + "resource" + ], + "summary": "create a new resource, in resource_list with given resource_details, returns new resource id or error code", + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created resource", + "example": "resource_name:xyz hospital,resource_id:54321" } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } - } - }, - "/entity/modifications" : { - "put" : { - "tags" : [ "entity" ], - "summary" : "changes values of specific details (as given by entity_details) of given entity (selected by entity_filter)in entity_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "entity_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "67890" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/entity_modify_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success, entity updated" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/resource_new_qry" + } + } } - } + }, + "operationId": "createResource" } }, - "/entity" : { - "delete" : { - "tags" : [ "entity" ], - "summary" : "delete a predefined entity in entity_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "entity_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "67890" - } - } ], - "responses" : { - "200" : { - "description" : "success, entity cancelled" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + "/resource/{resource_id}": { + "put": { + "tags": [ + "resource" + ], + "summary": "changes values of specific details (as given by resource_details) of given resource (selected by resource_filter)in resource_list and returns success or error code", + "parameters": [ + { + "name": "resource_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the resource" } - } + ], + "responses": { + "200": { + "description": "success, resource updated" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/resource_modify_qry" + } + } + } + }, + "operationId": "updateResource" + }, + "delete": { + "tags": [ + "resource" + ], + "summary": "delete a predefined resource in resource_list and returns success or error code", + "parameters": [ + { + "name": "resource_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the resource" + } + ], + "responses": { + "200": { + "description": "success, resource cancelled" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "operationId": "deleteResource" } }, - "/entity/list_details" : { - "get" : { - "tags" : [ "entity" ], - "summary" : "get list of entities filetered by criteria in entity_filter and return info specified by entity_details_required with success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/entity_get_details_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success,entity list", - "content" : { - "json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/entity_list" + "/resource/search": { + "post": { + "tags": [ + "resource" + ], + "summary": "get list of entities filetered by criteria in resource_filter and return info specified by resource_details_required with success or error code", + "responses": { + "200": { + "description": "success,resource list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resource_list" } } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/resource_get_details_qry" + } + } + } + }, + "operationId": "searchResources" } }, - "/resource/new" : { - "post" : { - "tags" : [ "resource" ], - "summary" : "create a new resource, in resource_list with given resource_details, returns new resource id or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/resource_new_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success", - "content" : { - "application/json" : { - "schema" : { - "type" : "string", - "description" : "ID of created resource", - "example" : "resource_name:xyz hospital,resource_id:54321" + "/resource/availability": { + "post": { + "tags": [ + "resource" + ], + "summary": "get details of resources matching criteria given by free_resource_filter, that are free(unallocated) in a given date range and entity and returns success or error code", + "responses": { + "200": { + "description": "success,resource list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/free_resource_list" + } } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } - } - }, - "/resource/modifications" : { - "put" : { - "tags" : [ "resource" ], - "summary" : "changes values of specific details (as given by resource_details) of given resource (selected by resource_filter)in resource_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "resource_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "54321" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/resource_modify_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success, resource updated" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/resource_get_availability_qry" + } + } } - } + }, + "operationId": "searchResourceAvailability" } }, - "/resource" : { - "delete" : { - "tags" : [ "resource" ], - "summary" : "delete a predefined resource in resource_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "resource_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "54321" - } - } ], - "responses" : { - "200" : { - "description" : "success, resource cancelled" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + "/subscriber": { + "post": { + "tags": [ + "subscriber" + ], + "summary": "create a new subscriber, in subscriber_list with given subscriber_details, returns new subscriber id or error code", + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created subscriber", + "example": "subscriber_name:xyz hospital,subscriber_id:12345" + } + } + } + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" } - } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/subscriber_new_qry" + } + } + } + }, + "operationId": "createSubscriber" } }, - "/resource/list_details" : { - "get" : { - "tags" : [ "resource" ], - "summary" : "get list of entities filetered by criteria in resource_filter and return info specified by resource_details_required with success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/resource_get_details_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success,resource list", - "content" : { - "json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/resource_list" - } - } + "/subscriber/{subscriber_id}": { + "put": { + "tags": [ + "subscriber" + ], + "summary": "changes values of specific details (as given by subscriber_details) of given subscriber (selected by subscriber_filter)in subscriber_list and returns success or error code", + "parameters": [ + { + "name": "subscriber_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the subscriber" + } + ], + "responses": { + "200": { + "description": "success, subscriber updated" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/subscriber_modify_qry" } } + } + }, + "operationId": "updateSubscriber" + }, + "delete": { + "tags": [ + "subscriber" + ], + "summary": "delete a predefined subscriber in subscriber_list and returns success or error code", + "parameters": [ + { + "name": "subscriber_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the subscriber" + } + ], + "responses": { + "200": { + "description": "success, subscriber cancelled" }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } + }, + "operationId": "deleteSubscriber" } }, - "/resource/availability" : { - "get" : { - "tags" : [ "resource" ], - "summary" : "get details of resources matching criteria given by free_resource_filter, that are free(unallocated) in a given date range and entity and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/resource_get_availability_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success,resource list", - "content" : { - "json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/free_resource_list" + "/subscriber/search": { + "post": { + "tags": [ + "subscriber" + ], + "summary": "get list of entities filetered by criteria in subscriber_filter and return info specified by subscriber_details_required with success or error code", + "responses": { + "200": { + "description": "success,message list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/subscriber_list" } } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/subscriber_get_details_qry" + } + } + } + }, + "operationId": "searchSubscribers" } }, - "/subscriber/new" : { - "post" : { - "tags" : [ "subscriber" ], - "summary" : "create a new subscriber, in subscriber_list with given subscriber_details, returns new subscriber id or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/subscriber_new_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success", - "content" : { - "application/json" : { - "schema" : { - "type" : "string", - "description" : "ID of created subscriber", - "example" : "subscriber_name:xyz hospital,subscriber_id:12345" + "/message": { + "post": { + "tags": [ + "message" + ], + "summary": "create a new message, in message_list with given message_details, returns new message id or error code", + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created message", + "example": "message_name:xyz hospital,message_id:1" } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } - } - }, - "/subscriber/modifications" : { - "put" : { - "tags" : [ "subscriber" ], - "summary" : "changes values of specific details (as given by subscriber_details) of given subscriber (selected by subscriber_filter)in subscriber_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "subscriber_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "12345" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/subscriber_modify_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success, subscriber updated" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/message_new_qry" + } + } } - } + }, + "operationId": "createMessage" } }, - "/subscriber" : { - "delete" : { - "tags" : [ "subscriber" ], - "summary" : "delete a predefined subscriber in subscriber_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "subscriber_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "12345" - } - } ], - "responses" : { - "200" : { - "description" : "success, subscriber cancelled" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + "/message/{message_id}": { + "put": { + "tags": [ + "message" + ], + "summary": "changes values of specific details (as given by message_details) of given message (selected by message_filter)in message_list and returns success or error code", + "parameters": [ + { + "name": "message_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the message" } - } + ], + "responses": { + "200": { + "description": "success, message updated" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/message_modify_qry" + } + } + } + }, + "operationId": "updateMessage" + }, + "delete": { + "tags": [ + "message" + ], + "summary": "delete a predefined message in message_list and returns success or error code", + "parameters": [ + { + "name": "message_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the message" + } + ], + "responses": { + "200": { + "description": "success, message cancelled" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "operationId": "deleteMessage" } }, - "/subscriber/list_details" : { - "get" : { - "tags" : [ "subscriber" ], - "summary" : "get list of entities filetered by criteria in subscriber_filter and return info specified by subscriber_details_required with success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/subscriber_get_details_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success,message list", - "content" : { - "json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/subscriber_list" + "/message/search": { + "post": { + "tags": [ + "message" + ], + "summary": "get list of entities filetered by criteria in message_filter and return info specified by message_details_required with success or error code", + "responses": { + "200": { + "description": "success,message list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/message_list" } } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/message_get_details_qry" + } + } + } + }, + "operationId": "searchMessages" } }, - "/message/new" : { - "post" : { - "tags" : [ "message" ], - "summary" : "create a new message, in message_list with given message_details, returns new message id or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/message_new_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success", - "content" : { - "application/json" : { - "schema" : { - "type" : "string", - "description" : "ID of created message", - "example" : "message_name:xyz hospital,message_id:1" + "/affiliation": { + "post": { + "tags": [ + "affiliation" + ], + "summary": "create a new affiliation, in affiliation_list with given affiliation_details, returns new affiliation id or error code", + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created affiliation", + "example": "affiliation_name:xyz hospital,affiliation_id:1" } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } - } - }, - "/message/modifications" : { - "put" : { - "tags" : [ "message" ], - "summary" : "changes values of specific details (as given by message_details) of given message (selected by message_filter)in message_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "message_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "1" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/message_modify_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success, message updated" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/affiliation_new_qry" + } + } } - } + }, + "operationId": "createAffiliation" } }, - "/message" : { - "delete" : { - "tags" : [ "message" ], - "summary" : "delete a predefined message in message_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "message_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "1" - } - } ], - "responses" : { - "200" : { - "description" : "success, message cancelled" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + "/affiliation/{affiliation_id}": { + "put": { + "tags": [ + "affiliation" + ], + "summary": "changes values of specific details (as given by affiliation_details) of given affiliation (selected by affiliation_filter)in affiliation_list and returns success or error code", + "parameters": [ + { + "name": "affiliation_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the affiliation" } - } + ], + "responses": { + "200": { + "description": "success, affiliation updated" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/affiliation_modify_qry" + } + } + } + }, + "operationId": "updateAffiliation" + }, + "delete": { + "tags": [ + "affiliation" + ], + "summary": "delete a predefined affiliation in affiliation_list and returns success or error code", + "parameters": [ + { + "name": "affiliation_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the affiliation" + } + ], + "responses": { + "200": { + "description": "success, affiliation cancelled" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "operationId": "deleteAffiliation" } }, - "/message/list_details" : { - "get" : { - "tags" : [ "message" ], - "summary" : "get list of entities filetered by criteria in message_filter and return info specified by message_details_required with success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/message_get_details_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success,message list", - "content" : { - "json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/message_list" + "/affiliation/search": { + "post": { + "tags": [ + "affiliation" + ], + "summary": "get list of entities filetered by criteria in affiliation_filter and return info specified by affiliation_details_required with success or error code", + "responses": { + "200": { + "description": "success,affiliation list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/affiliation_list" } } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/affiliation_get_details_qry" + } + } + } + }, + "operationId": "searchAffiliations" } }, - "/affiliation/new" : { - "post" : { - "tags" : [ "affiliation" ], - "summary" : "create a new affiliation, in affiliation_list with given affiliation_details, returns new affiliation id or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/affiliation_new_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success", - "content" : { - "application/json" : { - "schema" : { - "type" : "string", - "description" : "ID of created affiliation", - "example" : "affiliation_name:xyz hospital,affiliation_id:1" + "/alert_schedule": { + "post": { + "tags": [ + "alert_schedule" + ], + "summary": "create a new alert_schedule, in alert_schedule_list with given alert_schedule_details, returns new alert_schedule id or error code", + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created alert_schedule", + "example": "alert_schedule_name:xyz hospital,alert_schedule_id:1" } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } - } - }, - "/affiliation/modifications" : { - "put" : { - "tags" : [ "affiliation" ], - "summary" : "changes values of specific details (as given by affiliation_details) of given affiliation (selected by affiliation_filter)in affiliation_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "affiliation_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "1" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/affiliation_modify_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success, affiliation updated" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alert_schedule_new_qry" + } + } } - } + }, + "operationId": "createAlertSchedule" } }, - "/affiliation" : { - "delete" : { - "tags" : [ "affiliation" ], - "summary" : "delete a predefined affiliation in affiliation_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "affiliation_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "1" - } - } ], - "responses" : { - "200" : { - "description" : "success, affiliation cancelled" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + "/alert_schedule/{alert_schedule_id}": { + "put": { + "tags": [ + "alert_schedule" + ], + "summary": "changes values of specific details (as given by alert_schedule_details) of given alert_schedule (selected by alert_schedule_filter)in alert_schedule_list and returns success or error code", + "parameters": [ + { + "name": "alert_schedule_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the alert schedule" } - } + ], + "responses": { + "200": { + "description": "success, alert_schedule updated" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alert_schedule_modify_qry" + } + } + } + }, + "operationId": "updateAlertSchedule" + }, + "delete": { + "tags": [ + "alert_schedule" + ], + "summary": "delete a predefined alert_schedule in alert_schedule_list and returns success or error code", + "parameters": [ + { + "name": "alert_schedule_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the alert schedule" + } + ], + "responses": { + "200": { + "description": "success, alert_schedule cancelled" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "operationId": "deleteAlertSchedule" } }, - "/affiliation/list_details" : { - "get" : { - "tags" : [ "affiliation" ], - "summary" : "get list of entities filetered by criteria in affiliation_filter and return info specified by affiliation_details_required with success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/affiliation_get_details_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success,affiliation list", - "content" : { - "json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/affiliation_list" + "/alert_schedule/search": { + "post": { + "tags": [ + "alert_schedule" + ], + "summary": "get list of entities filetered by criteria in alert_schedule_filter and return info specified by alert_schedule_details_required with success or error code", + "responses": { + "200": { + "description": "success,alert_schedule list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/alert_schedule_list" } } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/alert_schedule_get_details_qry" + } + } + } + }, + "operationId": "searchAlertSchedules" } }, - "/alert_schedule/new" : { - "post" : { - "tags" : [ "alert_schedule" ], - "summary" : "create a new alert_schedule, in alert_schedule_list with given alert_schedule_details, returns new alert_schedule id or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/alert_schedule_new_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success", - "content" : { - "application/json" : { - "schema" : { - "type" : "string", - "description" : "ID of created alert_schedule", - "example" : "alert_schedule_name:xyz hospital,alert_schedule_id:1" + "/log": { + "post": { + "tags": [ + "log" + ], + "summary": "create a new log, in log_list with given log_details, returns new log id or error code", + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created log", + "example": "log_name:xyz hospital,log_id:1" } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } - } - }, - "/alert_schedule/modifications" : { - "put" : { - "tags" : [ "alert_schedule" ], - "summary" : "changes values of specific details (as given by alert_schedule_details) of given alert_schedule (selected by alert_schedule_filter)in alert_schedule_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string" - }, - "example" : "Organizer" - }, { - "name" : "alert_schedule_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "1" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/alert_schedule_modify_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success, alert_schedule updated" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/log_new_qry" + } + } } - } + }, + "operationId": "createLog" } }, - "/alert_schedule" : { - "delete" : { - "tags" : [ "alert_schedule" ], - "summary" : "delete a predefined alert_schedule in alert_schedule_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "alert_schedule_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "1" - } - } ], - "responses" : { - "200" : { - "description" : "success, alert_schedule cancelled" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + "/log/{log_id}": { + "put": { + "tags": [ + "log" + ], + "summary": "changes values of specific details (as given by log_details) of given log (selected by log_filter)in log_list and returns success or error code", + "parameters": [ + { + "name": "log_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the log" } - } + ], + "responses": { + "200": { + "description": "success, log updated" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/log_modify_qry" + } + } + } + }, + "operationId": "updateLog" + }, + "delete": { + "tags": [ + "log" + ], + "summary": "delete a predefined log in log_list and returns success or error code", + "parameters": [ + { + "name": "log_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the log" + } + ], + "responses": { + "200": { + "description": "success, log cancelled" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "operationId": "deleteLog" } }, - "/alert_schedule/list_details" : { - "get" : { - "tags" : [ "alert_schedule" ], - "summary" : "get list of entities filetered by criteria in alert_schedule_filter and return info specified by alert_schedule_details_required with success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/alert_schedule_get_details_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success,alert_schedule list", - "content" : { - "json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/alert_schedule_list" + "/log/search": { + "post": { + "tags": [ + "log" + ], + "summary": "get list of entities filetered by criteria in log_filter and return info specified by log_details_required with success or error code", + "responses": { + "200": { + "description": "success,log list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/log_list" } } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/log_get_details_qry" + } + } + } + }, + "operationId": "searchLogs" } }, - "/log/new" : { - "post" : { - "tags" : [ "log" ], - "summary" : "create a new log, in log_list with given log_details, returns new log id or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/log_new_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success", - "content" : { - "application/json" : { - "schema" : { - "type" : "string", - "description" : "ID of created log", - "example" : "log_name:xyz hospital,log_id:1" + "/appointment": { + "post": { + "tags": [ + "appointment" + ], + "summary": "create a new appointment, in appointment_list with given appointment_details, returns new appointment id or failure error code", + "responses": { + "200": { + "description": "success", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created appointment", + "example": "[Event_id:12345,appointment_id:1]" } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } - } - }, - "/log/modifications" : { - "put" : { - "tags" : [ "log" ], - "summary" : "changes values of specific details (as given by log_details) of given log (selected by log_filter)in log_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "log_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "1" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/log_modify_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success, log updated" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/appointment_new_qry" + } + } } - } + }, + "operationId": "createAppointment" } }, - "/log" : { - "delete" : { - "tags" : [ "log" ], - "summary" : "delete a predefined log in log_list and returns success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "log_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "1" - } - } ], - "responses" : { - "200" : { - "description" : "success, log cancelled" - }, - "400" : { - "description" : "Invalid request" - }, - "403" : { - "description" : "No permission" - }, - "404" : { - "description" : "one or more specified inputs not found" - }, - "default" : { - "description" : "Unexpected error" + "/appointment/{appointment_id}": { + "put": { + "tags": [ + "appointment" + ], + "summary": "changes values of specific details (as given by appointment_details) of given appointment (selected by appointment_filter)in appointment_list and returns success or error code", + "parameters": [ + { + "name": "appointment_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the appointment" } - } + ], + "responses": { + "200": { + "description": "success, appointment updated" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/appointment_modify_qry" + } + } + } + }, + "operationId": "updateAppointment" + }, + "delete": { + "tags": [ + "appointment" + ], + "summary": "delete a predefined appointment in appointment_list and returns success or error code", + "parameters": [ + { + "name": "appointment_id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "Unique identifier of the appointment" + } + ], + "responses": { + "200": { + "description": "success, appointment cancelled" + }, + "400": { + "description": "Invalid request" + }, + "403": { + "description": "No permission" + }, + "404": { + "description": "one or more specified inputs not found" + }, + "default": { + "description": "Unexpected error" + } + }, + "operationId": "deleteAppointment" } }, - "/log/list_details" : { - "get" : { - "tags" : [ "log" ], - "summary" : "get list of entities filetered by criteria in log_filter and return info specified by log_details_required with success or error code", - "parameters" : [ { - "name" : "requestor_id", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "healthngoadmin1" - } - }, { - "name" : "request_token", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "type" : "string", - "example" : "Organizer" - } - }, { - "name" : "qry", - "in" : "query", - "required" : true, - "style" : "form", - "explode" : true, - "schema" : { - "$ref" : "#/components/schemas/log_get_details_qry" - } - } ], - "responses" : { - "200" : { - "description" : "success,log list", - "content" : { - "json" : { - "schema" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/log_list" + "/appointment/search": { + "post": { + "tags": [ + "appointment" + ], + "summary": "get list of appointments filetered by criteria in appointment_filter and return info specified by appointment_details_required with success or error code", + "responses": { + "200": { + "description": "success,appointment_list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/appointment_list" } } } } }, - "400" : { - "description" : "Invalid request" + "400": { + "description": "Invalid request" }, - "403" : { - "description" : "No permission" + "403": { + "description": "No permission" }, - "404" : { - "description" : "one or more specified inputs not found" + "404": { + "description": "one or more specified inputs not found" }, - "default" : { - "description" : "Unexpected error" + "default": { + "description": "Unexpected error" } - } + }, + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/appointment_get_details_qry" + } + } + } + }, + "operationId": "searchAppointments" } } }, - "components" : { - "schemas" : { - "entity_list" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "entity_id" : { - "type" : "string", - "example" : "67890" + "components": { + "schemas": { + "entity_list": { + "type": "array", + "items": { + "type": "object", + "properties": { + "entity_id": { + "type": "string", + "example": "67890" }, - "details" : { - "$ref" : "#/components/schemas/entity_details" + "details": { + "$ref": "#/components/schemas/entity_details" } } } }, - "entity_details" : { - "type" : "object", - "properties" : { - "category" : { - "type" : "string", - "example" : "hospital" + "entity_details": { + "type": "object", + "properties": { + "category": { + "type": "string", + "example": "hospital" }, - "name" : { - "type" : "string", - "example" : "abc" + "name": { + "type": "string", + "example": "abc" }, - "phone" : { - "type" : "string", - "example" : "+911234567890" + "phone": { + "type": "string", + "example": "+911234567890" }, - "email" : { - "type" : "string", - "example" : "info@xyz.com" + "email": { + "type": "string", + "example": "info@xyz.com" }, - "website" : { - "type" : "string", - "format" : "url", - "example" : "www.abc.com" + "website": { + "type": "string", + "format": "url", + "example": "www.abc.com" } } }, - "entity_filter" : { - "type" : "object", - "properties" : { - "entity_id" : { - "type" : "array", - "items" : { - "type" : "string" + "entity_filter": { + "type": "object", + "properties": { + "entity_id": { + "type": "array", + "items": { + "type": "string" }, - "example" : "[67890,12121]" + "example": "[67890,12121]" }, - "category" : { - "type" : "string", - "example" : "hospital" + "category": { + "type": "string", + "example": "hospital" }, - "name" : { - "type" : "string", - "example" : "abc" + "name": { + "type": "string", + "example": "abc" }, - "phone" : { - "type" : "string", - "example" : "+911234567890" + "phone": { + "type": "string", + "example": "+911234567890" }, - "email" : { - "type" : "string", - "example" : "info@xyz.com" + "email": { + "type": "string", + "example": "info@xyz.com" }, - "website" : { - "type" : "string", - "format" : "url", - "example" : "www.abc.com" + "website": { + "type": "string", + "format": "url", + "example": "www.abc.com" } } }, - "entity_details_required" : { - "type" : "object", - "properties" : { - "entity_id" : { - "type" : "boolean", - "example" : false + "entity_details_required": { + "type": "object", + "properties": { + "entity_id": { + "type": "boolean", + "example": false }, - "category" : { - "type" : "boolean", - "example" : true + "category": { + "type": "boolean", + "example": true }, - "name" : { - "type" : "boolean", - "example" : true + "name": { + "type": "boolean", + "example": true }, - "phone" : { - "type" : "boolean", - "example" : true + "phone": { + "type": "boolean", + "example": true }, - "email" : { - "type" : "boolean", - "example" : true + "email": { + "type": "boolean", + "example": true }, - "website" : { - "type" : "boolean", - "example" : true + "website": { + "type": "boolean", + "example": true } } }, - "appointment_creation_details" : { - "type" : "object", - "properties" : { - "exclusive" : { - "type" : "boolean", - "example" : "true" + "appointment_creation_details": { + "type": "object", + "properties": { + "exclusive": { + "type": "boolean", + "example": "true" }, - "event_ids" : { - "type" : "array", - "items" : { - "type" : "string" + "event_ids": { + "type": "array", + "items": { + "type": "string" }, - "example" : "[1]" + "example": "[1]" }, - "participant_type" : { - "type" : "string", - "example" : "subscriber" + "participant_type": { + "type": "string", + "example": "subscriber" }, - "participant_id" : { - "type" : "string", - "example" : "12345" + "participant_id": { + "type": "string", + "example": "12345" }, - "participant_entity_id" : { - "type" : "string", - "example" : "67890" + "participant_entity_id": { + "type": "string", + "example": "67890" } } }, - "appointment_list" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "appointment_id" : { - "type" : "string", - "example" : "1" + "appointment_list": { + "type": "array", + "items": { + "type": "object", + "properties": { + "appointment_id": { + "type": "string", + "example": "1" }, - "details" : { - "$ref" : "#/components/schemas/appointment_details" + "details": { + "$ref": "#/components/schemas/appointment_details" } } } }, - "appointment_details" : { - "type" : "object", - "properties" : { - "exclusive" : { - "type" : "boolean", - "example" : "true" + "appointment_details": { + "type": "object", + "properties": { + "exclusive": { + "type": "boolean", + "example": "true" }, - "event_id" : { - "type" : "string", - "example" : "1" + "event_id": { + "type": "string", + "example": "1" }, - "participant_type" : { - "type" : "string", - "example" : "subscriber" + "participant_type": { + "type": "string", + "example": "subscriber" }, - "participant_id" : { - "type" : "string", - "example" : "12345" + "participant_id": { + "type": "string", + "example": "12345" }, - "status_id" : { - "type" : "string", - "example" : "confirmed" + "status_id": { + "type": "string", + "example": "confirmed" }, - "participant_entity_id" : { - "type" : "string", - "example" : "67890" + "participant_entity_id": { + "type": "string", + "example": "67890" } } }, - "appointment_filter" : { - "type" : "object", - "properties" : { - "exclusive" : { - "type" : "boolean", - "example" : "true" + "appointment_filter": { + "type": "object", + "properties": { + "exclusive": { + "type": "boolean", + "example": "true" }, - "appointment_id" : { - "type" : "string", - "example" : "1" + "appointment_id": { + "type": "string", + "example": "1" }, - "participant_type" : { - "type" : "string", - "example" : "subscriber" + "participant_type": { + "type": "string", + "example": "subscriber" }, - "participant_id" : { - "type" : "string", - "example" : "12345" + "participant_id": { + "type": "string", + "example": "12345" }, - "participant_entity_id" : { - "type" : "string", - "example" : "67890" + "participant_entity_id": { + "type": "string", + "example": "67890" }, - "status" : { - "type" : "string", - "example" : "confirmed" + "status": { + "type": "string", + "example": "confirmed" }, - "from" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T09:00:00" + "from": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T09:00:00" }, - "to" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T17:00:00" + "to": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T17:00:00" } } }, - "appointment_details_required" : { - "type" : "object", - "properties" : { - "exclusive" : { - "type" : "boolean", - "example" : "true" + "appointment_details_required": { + "type": "object", + "properties": { + "exclusive": { + "type": "boolean", + "example": "true" }, - "appointment_id" : { - "type" : "boolean", - "example" : true + "appointment_id": { + "type": "boolean", + "example": true }, - "event_details" : { - "type" : "boolean", - "example" : true + "event_details": { + "type": "boolean", + "example": true }, - "participant_type" : { - "type" : "boolean", - "example" : true + "participant_type": { + "type": "boolean", + "example": true }, - "participant_id" : { - "type" : "boolean", - "example" : true + "participant_id": { + "type": "boolean", + "example": true }, - "status" : { - "type" : "boolean", - "example" : true + "status": { + "type": "boolean", + "example": true }, - "participant_entity_id" : { - "type" : "boolean", - "example" : true + "participant_entity_id": { + "type": "boolean", + "example": true } } }, - "resource_list" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "resource_id" : { - "type" : "string", - "example" : "54321" + "resource_list": { + "type": "array", + "items": { + "type": "object", + "properties": { + "resource_id": { + "type": "string", + "example": "54321" }, - "details" : { - "$ref" : "#/components/schemas/resource_details" + "details": { + "$ref": "#/components/schemas/resource_details" } } } }, - "resource_details" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "example" : "psrk" + "resource_details": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "psrk" }, - "category" : { - "type" : "string", - "example" : "doctor" + "category": { + "type": "string", + "example": "doctor" }, - "phone" : { - "type" : "string", - "example" : "+911234567890" + "phone": { + "type": "string", + "example": "+911234567890" }, - "email" : { - "type" : "string", - "example" : "doctor1@xyz.com" + "email": { + "type": "string", + "example": "doctor1@xyz.com" }, - "alert_url" : { - "type" : "string", - "format" : "url", - "example" : "psrk@gmail.com" + "alert_url": { + "type": "string", + "format": "url", + "example": "psrk@gmail.com" }, - "alert_preference" : { - "type" : "string", - "example" : "phone" + "alert_preference": { + "type": "string", + "example": "phone" }, - "status_poll_url" : { - "type" : "string", - "format" : "url", - "example" : "www.doctor1.com" + "status_poll_url": { + "type": "string", + "format": "url", + "example": "www.doctor1.com" } } }, - "resource_filter" : { - "type" : "object", - "properties" : { - "resource_id" : { - "type" : "array", - "items" : { - "type" : "string" + "resource_filter": { + "type": "object", + "properties": { + "resource_id": { + "type": "array", + "items": { + "type": "string" }, - "example" : "[54321,31313]" + "example": "[54321,31313]" }, - "name" : { - "type" : "string", - "example" : "psrk" + "name": { + "type": "string", + "example": "psrk" }, - "category" : { - "type" : "string", - "example" : "doctor" + "category": { + "type": "string", + "example": "doctor" }, - "phone" : { - "type" : "string", - "example" : "+911234567890" + "phone": { + "type": "string", + "example": "+911234567890" }, - "email" : { - "type" : "string", - "example" : "abc@gmail.com" + "email": { + "type": "string", + "example": "abc@gmail.com" }, - "alert_url" : { - "type" : "string", - "format" : "url", - "example" : "www.doctor1.com" + "alert_url": { + "type": "string", + "format": "url", + "example": "www.doctor1.com" }, - "alert_preference" : { - "type" : "string", - "example" : " phone" + "alert_preference": { + "type": "string", + "example": " phone" }, - "status_poll_url" : { - "type" : "string", - "format" : "url", - "example" : "www.doctor1.com" + "status_poll_url": { + "type": "string", + "format": "url", + "example": "www.doctor1.com" } } }, - "resource_details_required" : { - "type" : "object", - "properties" : { - "resource_id" : { - "type" : "boolean", - "example" : true + "resource_details_required": { + "type": "object", + "properties": { + "resource_id": { + "type": "boolean", + "example": true }, - "name" : { - "type" : "boolean", - "example" : true + "name": { + "type": "boolean", + "example": true }, - "category" : { - "type" : "boolean", - "example" : true + "category": { + "type": "boolean", + "example": true }, - "phone" : { - "type" : "boolean", - "example" : true + "phone": { + "type": "boolean", + "example": true }, - "email" : { - "type" : "boolean", - "example" : true + "email": { + "type": "boolean", + "example": true }, - "alert_url" : { - "type" : "boolean", - "example" : true + "alert_url": { + "type": "boolean", + "example": true }, - "alert_preference" : { - "type" : "boolean", - "example" : true + "alert_preference": { + "type": "boolean", + "example": true }, - "status_poll_url" : { - "type" : "boolean", - "example" : true + "status_poll_url": { + "type": "boolean", + "example": true } } }, - "subscriber_list" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "subscriber_id" : { - "type" : "string", - "example" : "12345" + "subscriber_list": { + "type": "array", + "items": { + "type": "object", + "properties": { + "subscriber_id": { + "type": "string", + "example": "12345" }, - "details" : { - "$ref" : "#/components/schemas/subscriber_details" + "details": { + "$ref": "#/components/schemas/subscriber_details" } } } }, - "subscriber_details" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "example" : "abc" + "subscriber_details": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "abc" }, - "category" : { - "type" : "string", - "example" : "patient" + "category": { + "type": "string", + "example": "patient" }, - "phone" : { - "type" : "string", - "example" : "+911234567890" + "phone": { + "type": "string", + "example": "+911234567890" }, - "email" : { - "type" : "string", - "example" : "abc@gmail.com" + "email": { + "type": "string", + "example": "abc@gmail.com" }, - "alert_url" : { - "type" : "string", - "format" : "url", - "example" : "www.abc.com" + "alert_url": { + "type": "string", + "format": "url", + "example": "www.abc.com" }, - "alert_preference" : { - "type" : "string", - "example" : "phone" + "alert_preference": { + "type": "string", + "example": "phone" }, - "status_poll_url" : { - "type" : "string", - "format" : "url", - "example" : "www.abc.com" + "status_poll_url": { + "type": "string", + "format": "url", + "example": "www.abc.com" } } }, - "subscriber_filter" : { - "type" : "object", - "properties" : { - "subscriber_id" : { - "type" : "array", - "items" : { - "type" : "string" + "subscriber_filter": { + "type": "object", + "properties": { + "subscriber_id": { + "type": "array", + "items": { + "type": "string" }, - "example" : "[12345, 41414]" + "example": "[12345, 41414]" }, - "category" : { - "type" : "string", - "example" : "patient" + "category": { + "type": "string", + "example": "patient" }, - "name" : { - "type" : "string", - "example" : "abc" + "name": { + "type": "string", + "example": "abc" }, - "phone" : { - "type" : "string", - "example" : "+911234567890" + "phone": { + "type": "string", + "example": "+911234567890" }, - "email" : { - "type" : "string", - "example" : "abc@gmail.com" + "email": { + "type": "string", + "example": "abc@gmail.com" }, - "alert_url" : { - "type" : "string", - "format" : "url", - "example" : "www.abc.com" + "alert_url": { + "type": "string", + "format": "url", + "example": "www.abc.com" }, - "alert_preference" : { - "type" : "string", - "example" : " phone" + "alert_preference": { + "type": "string", + "example": " phone" }, - "status_poll_url" : { - "type" : "string", - "format" : "url", - "example" : "www.abc.com" + "status_poll_url": { + "type": "string", + "format": "url", + "example": "www.abc.com" } } }, - "subscriber_details_required" : { - "type" : "object", - "properties" : { - "subscriber_id" : { - "type" : "boolean", - "example" : true + "subscriber_details_required": { + "type": "object", + "properties": { + "subscriber_id": { + "type": "boolean", + "example": true }, - "category" : { - "type" : "boolean", - "example" : true + "category": { + "type": "boolean", + "example": true }, - "name" : { - "type" : "boolean", - "example" : true + "name": { + "type": "boolean", + "example": true }, - "phone" : { - "type" : "boolean", - "example" : true + "phone": { + "type": "boolean", + "example": true }, - "email" : { - "type" : "boolean", - "example" : true + "email": { + "type": "boolean", + "example": true }, - "alert_url" : { - "type" : "boolean", - "example" : true + "alert_url": { + "type": "boolean", + "example": true }, - "alert_preference" : { - "type" : "boolean", - "example" : true + "alert_preference": { + "type": "boolean", + "example": true }, - "status_poll_url" : { - "type" : "boolean", - "example" : true + "status_poll_url": { + "type": "boolean", + "example": true } } }, - "event_creation_details" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "example" : "abc medical camp" + "event_creation_details": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "abc medical camp" }, - "description" : { - "type" : "string", - "example" : "medical camp for senior citizens" + "description": { + "type": "string", + "example": "medical camp for senior citizens" }, - "category" : { - "type" : "string", - "example" : "doctor_consultation" + "category": { + "type": "string", + "example": "doctor_consultation" }, - "host_entity_id" : { - "type" : "string", - "example" : "67890" + "host_entity_id": { + "type": "string", + "example": "67890" }, - "slots" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "from" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T11:00:00" + "slots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:00:00" }, - "to" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T11:30:00" + "to": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:30:00" } } } }, - "deadline" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T11:10:00" + "deadline": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:10:00" }, - "subscriber_limit" : { - "type" : "string", - "example" : "1" + "subscriber_limit": { + "type": "string", + "example": "1" }, - "terms" : { - "type" : "string", - "example" : "non refundable" + "terms": { + "type": "string", + "example": "non refundable" }, - "status" : { - "type" : "string", - "example" : "open" + "status": { + "type": "string", + "example": "open" }, - "venue" : { - "$ref" : "#/components/schemas/venue" + "venue": { + "$ref": "#/components/schemas/venue" } } }, - "event_list" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "event_id" : { - "type" : "string", - "example" : "12345" + "event_list": { + "type": "array", + "items": { + "type": "object", + "properties": { + "event_id": { + "type": "string", + "example": "12345" }, - "details" : { - "$ref" : "#/components/schemas/event_details" + "details": { + "$ref": "#/components/schemas/event_details" } } } }, - "event_details" : { - "type" : "object", - "properties" : { - "name" : { - "type" : "string", - "example" : "abc medical camp" + "event_details": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "abc medical camp" }, - "description" : { - "type" : "string", - "example" : "medical camp for senior citizens" + "description": { + "type": "string", + "example": "medical camp for senior citizens" }, - "category" : { - "type" : "string", - "example" : "doctor_consultation" + "category": { + "type": "string", + "example": "doctor_consultation" }, - "host_entity_id" : { - "type" : "string", - "example" : "67890" + "host_entity_id": { + "type": "string", + "example": "67890" }, - "from" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T11:00:00" + "from": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:00:00" }, - "to" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T11:30:00" + "to": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:30:00" }, - "deadline" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T11:10:00" + "deadline": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:10:00" }, - "subscriber_limit" : { - "type" : "string", - "example" : "1" + "subscriber_limit": { + "type": "string", + "example": "1" }, - "terms" : { - "type" : "string", - "example" : "non refundable" + "terms": { + "type": "string", + "example": "non refundable" }, - "status" : { - "type" : "string", - "example" : "open" + "status": { + "type": "string", + "example": "open" }, - "venue" : { - "$ref" : "#/components/schemas/venue" + "venue": { + "$ref": "#/components/schemas/venue" } } }, - "event_filter" : { - "type" : "object", - "properties" : { - "event_id" : { - "type" : "array", - "items" : { - "type" : "string" + "event_filter": { + "type": "object", + "properties": { + "event_id": { + "type": "array", + "items": { + "type": "string" }, - "example" : "[12345,51515]" + "example": "[12345,51515]" }, - "description" : { - "type" : "string", - "example" : "medical camp for senior citizens" + "description": { + "type": "string", + "example": "medical camp for senior citizens" }, - "name" : { - "type" : "string", - "example" : "doctor_consultation" + "name": { + "type": "string", + "example": "doctor_consultation" }, - "category" : { - "type" : "string", - "example" : "opd_physician_consultation" + "category": { + "type": "string", + "example": "opd_physician_consultation" }, - "host_entity_id" : { - "type" : "string", - "example" : "67890" + "host_entity_id": { + "type": "string", + "example": "67890" }, - "subscriber_limit" : { - "type" : "string", - "example" : "1" + "subscriber_limit": { + "type": "string", + "example": "1" }, - "terms" : { - "type" : "string", - "example" : "non refundable" + "terms": { + "type": "string", + "example": "non refundable" }, - "from" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T09:00:00" + "from": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T09:00:00" }, - "to" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T17:00:00" + "to": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T17:00:00" }, - "venue" : { - "$ref" : "#/components/schemas/venue" + "venue": { + "$ref": "#/components/schemas/venue" } } }, - "event_details_required" : { - "type" : "object", - "properties" : { - "event_id" : { - "type" : "boolean", - "example" : true + "event_details_required": { + "type": "object", + "properties": { + "event_id": { + "type": "boolean", + "example": true }, - "description" : { - "type" : "boolean", - "example" : true + "description": { + "type": "boolean", + "example": true }, - "name" : { - "type" : "boolean", - "example" : true + "name": { + "type": "boolean", + "example": true }, - "category" : { - "type" : "boolean", - "example" : true + "category": { + "type": "boolean", + "example": true }, - "host_entity_id" : { - "type" : "boolean", - "example" : true + "host_entity_id": { + "type": "boolean", + "example": true }, - "period" : { - "type" : "boolean", - "example" : true + "period": { + "type": "boolean", + "example": true }, - "venue" : { - "type" : "boolean", - "example" : true + "venue": { + "type": "boolean", + "example": true }, - "deadline" : { - "type" : "boolean", - "example" : true + "deadline": { + "type": "boolean", + "example": true }, - "subscriber_limit" : { - "type" : "boolean", - "example" : true + "subscriber_limit": { + "type": "boolean", + "example": true }, - "terms" : { - "type" : "boolean", - "example" : true + "terms": { + "type": "boolean", + "example": true }, - "status" : { - "type" : "boolean", - "example" : true + "status": { + "type": "boolean", + "example": true } } }, - "affiliation_list" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "affiliation_id" : { - "type" : "string", - "example" : "1" + "affiliation_list": { + "type": "array", + "items": { + "type": "object", + "properties": { + "affiliation_id": { + "type": "string", + "example": "1" }, - "details" : { - "$ref" : "#/components/schemas/affiliation_details" + "details": { + "$ref": "#/components/schemas/affiliation_details" } } } }, - "affiliation_details" : { - "type" : "object", - "properties" : { - "resource_id" : { - "type" : "string", - "example" : "12345" + "affiliation_details": { + "type": "object", + "properties": { + "resource_id": { + "type": "string", + "example": "12345" }, - "entity_id" : { - "type" : "string", - "example" : "67890" + "entity_id": { + "type": "string", + "example": "67890" }, - "resource_category" : { - "type" : "string", - "example" : "physician" + "resource_category": { + "type": "string", + "example": "physician" }, - "work_days_hours" : { - "$ref" : "#/components/schemas/days_hours" + "work_days_hours": { + "$ref": "#/components/schemas/days_hours" } } }, - "days_hours" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "day_of_week" : { - "type" : "string", - "example" : "[monday" + "days_hours": { + "type": "array", + "items": { + "type": "object", + "properties": { + "day_of_week": { + "type": "string", + "example": "[monday" }, - "start_time" : { - "type" : "string", - "example" : "09:00:00" + "start_time": { + "type": "string", + "example": "09:00:00" }, - "end_time" : { - "type" : "string", - "example" : "17:00:00" + "end_time": { + "type": "string", + "example": "17:00:00" } } } }, - "affiliation_filter" : { - "type" : "object", - "properties" : { - "affiliation_id" : { - "type" : "array", - "items" : { - "type" : "string" + "affiliation_filter": { + "type": "object", + "properties": { + "affiliation_id": { + "type": "array", + "items": { + "type": "string" }, - "example" : "[1,2]" + "example": "[1,2]" }, - "resource_id" : { - "type" : "string", - "example" : "12345" + "resource_id": { + "type": "string", + "example": "12345" }, - "entity_id" : { - "type" : "string", - "example" : "67890" + "entity_id": { + "type": "string", + "example": "67890" }, - "category" : { - "type" : "string", - "example" : "physician" + "category": { + "type": "string", + "example": "physician" }, - "from" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T09:00:00" + "from": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T09:00:00" }, - "to" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T17:00:00" + "to": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T17:00:00" } } }, - "affiliation_details_required" : { - "type" : "object", - "properties" : { - "affiliation_id" : { - "type" : "boolean", - "example" : true + "affiliation_details_required": { + "type": "object", + "properties": { + "affiliation_id": { + "type": "boolean", + "example": true }, - "resource_id" : { - "type" : "boolean", - "example" : true + "resource_id": { + "type": "boolean", + "example": true }, - "entity_id" : { - "type" : "boolean", - "example" : true + "entity_id": { + "type": "boolean", + "example": true }, - "category" : { - "type" : "boolean", - "example" : true + "category": { + "type": "boolean", + "example": true }, - "work_days_hours" : { - "type" : "boolean", - "example" : true + "work_days_hours": { + "type": "boolean", + "example": true } } }, - "alert_schedule_list" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "alert_schedule_id" : { - "type" : "string", - "example" : "1" + "alert_schedule_list": { + "type": "array", + "items": { + "type": "object", + "properties": { + "alert_schedule_id": { + "type": "string", + "example": "1" }, - "details" : { - "$ref" : "#/components/schemas/alert_schedule_details" + "details": { + "$ref": "#/components/schemas/alert_schedule_details" } } } }, - "alert_schedule_details" : { - "type" : "object", - "properties" : { - "event_id" : { - "type" : "string", - "example" : "12345" + "alert_schedule_details": { + "type": "object", + "properties": { + "event_id": { + "type": "string", + "example": "12345" }, - "target_category" : { - "type" : "string", - "example" : "subscriber" + "target_category": { + "type": "string", + "example": "subscriber" }, - "message_id" : { - "type" : "string", - "example" : "1" + "message_id": { + "type": "string", + "example": "1" }, - "alert_datetime" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T09:00:00" + "alert_datetime": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T09:00:00" } } }, - "alert_schedule_filter" : { - "type" : "object", - "properties" : { - "alert_schedule_id" : { - "type" : "array", - "items" : { - "type" : "string" + "alert_schedule_filter": { + "type": "object", + "properties": { + "alert_schedule_id": { + "type": "array", + "items": { + "type": "string" }, - "example" : "[1,2]" + "example": "[1,2]" }, - "entity_id" : { - "type" : "string", - "example" : "67890" + "entity_id": { + "type": "string", + "example": "67890" }, - "target_category" : { - "type" : "string", - "example" : "subscriber" + "target_category": { + "type": "string", + "example": "subscriber" }, - "message_id" : { - "type" : "string", - "example" : "1" + "message_id": { + "type": "string", + "example": "1" }, - "from" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T09:00:00" + "from": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T09:00:00" }, - "to" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T13:30:00" + "to": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T13:30:00" } } }, - "alert_schedule_details_required" : { - "type" : "object", - "properties" : { - "alert_schedule_id" : { - "type" : "boolean", - "example" : true + "alert_schedule_details_required": { + "type": "object", + "properties": { + "alert_schedule_id": { + "type": "boolean", + "example": true }, - "entity_id" : { - "type" : "boolean", - "example" : true + "entity_id": { + "type": "boolean", + "example": true }, - "message_id" : { - "type" : "boolean", - "example" : true + "message_id": { + "type": "boolean", + "example": true }, - "alert_datetime" : { - "type" : "boolean", - "example" : true + "alert_datetime": { + "type": "boolean", + "example": true } } }, - "message_list" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "message_id" : { - "type" : "string", - "example" : "1" + "message_list": { + "type": "array", + "items": { + "type": "object", + "properties": { + "message_id": { + "type": "string", + "example": "1" }, - "details" : { - "$ref" : "#/components/schemas/message_details" + "details": { + "$ref": "#/components/schemas/message_details" } } } }, - "message_details" : { - "type" : "object", - "properties" : { - "entity_id" : { - "type" : "string", - "example" : "67890" + "message_details": { + "type": "object", + "properties": { + "entity_id": { + "type": "string", + "example": "67890" }, - "category" : { - "type" : "string", - "example" : "reminder" + "category": { + "type": "string", + "example": "reminder" }, - "message_body" : { - "type" : "string", - "example" : "you have doctor consultation today" + "message_body": { + "type": "string", + "example": "you have doctor consultation today" } } }, - "message_filter" : { - "type" : "object", - "properties" : { - "message_id" : { - "type" : "array", - "items" : { - "type" : "string" + "message_filter": { + "type": "object", + "properties": { + "message_id": { + "type": "array", + "items": { + "type": "string" }, - "example" : "[1,2]" + "example": "[1,2]" }, - "entity_id" : { - "type" : "string", - "example" : "67890" + "entity_id": { + "type": "string", + "example": "67890" }, - "category" : { - "type" : "string", - "example" : "reminder" + "category": { + "type": "string", + "example": "reminder" }, - "message_body" : { - "type" : "string", - "example" : "you have doctor consultation today" + "message_body": { + "type": "string", + "example": "you have doctor consultation today" } } }, - "message_details_required" : { - "type" : "object", - "properties" : { - "message_id" : { - "type" : "boolean", - "example" : true + "message_details_required": { + "type": "object", + "properties": { + "message_id": { + "type": "boolean", + "example": true }, - "entity_id" : { - "type" : "boolean", - "example" : true + "entity_id": { + "type": "boolean", + "example": true }, - "category" : { - "type" : "boolean", - "example" : true + "category": { + "type": "boolean", + "example": true }, - "message_body" : { - "type" : "boolean", - "example" : true + "message_body": { + "type": "boolean", + "example": true } } }, - "log_list" : { - "type" : "array", - "items" : { - "type" : "object", - "properties" : { - "log_id" : { - "type" : "string", - "example" : "1" + "log_list": { + "type": "array", + "items": { + "type": "object", + "properties": { + "log_id": { + "type": "string", + "example": "1" }, - "details" : { - "$ref" : "#/components/schemas/log_details" + "details": { + "$ref": "#/components/schemas/log_details" } } } }, - "log_details" : { - "type" : "object", - "properties" : { - "logger_role" : { - "type" : "string", - "example" : "resource" + "log_details": { + "type": "object", + "properties": { + "logger_role": { + "type": "string", + "example": "resource" }, - "logger_id" : { - "type" : "string", - "example" : "1" + "logger_id": { + "type": "string", + "example": "1" }, - "entity_id" : { - "type" : "string", - "example" : "67890" + "entity_id": { + "type": "string", + "example": "67890" }, - "log_category" : { - "type" : "string", - "example" : "attendance" + "log_category": { + "type": "string", + "example": "attendance" }, - "datetime" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T11:00:00" + "datetime": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:00:00" }, - "log_data" : { - "type" : "string", - "example" : "event_id:12345,subscriber_id:1,token:a2s3x2fer,status:attended" + "log_data": { + "type": "string", + "example": "event_id:12345,subscriber_id:1,token:a2s3x2fer,status:attended" } } }, - "log_filter" : { - "type" : "object", - "properties" : { - "log_id" : { - "type" : "array", - "items" : { - "type" : "string" + "log_filter": { + "type": "object", + "properties": { + "log_id": { + "type": "array", + "items": { + "type": "string" }, - "example" : "[1,2]" + "example": "[1,2]" }, - "entity_id" : { - "type" : "string", - "example" : "67890" + "entity_id": { + "type": "string", + "example": "67890" }, - "category" : { - "type" : "string", - "example" : "attendance" + "category": { + "type": "string", + "example": "attendance" }, - "from" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T11:00:00" + "from": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:00:00" }, - "to" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-15T11:30:00" + "to": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:30:00" } } }, - "log_details_required" : { - "type" : "object", - "properties" : { - "log_id" : { - "type" : "boolean", - "example" : true + "log_details_required": { + "type": "object", + "properties": { + "log_id": { + "type": "boolean", + "example": true }, - "logger_category" : { - "type" : "boolean", - "example" : true + "logger_category": { + "type": "boolean", + "example": true }, - "logger_id" : { - "type" : "boolean", - "example" : true + "logger_id": { + "type": "boolean", + "example": true }, - "entity_id" : { - "type" : "boolean", - "example" : true + "entity_id": { + "type": "boolean", + "example": true }, - "log_category" : { - "type" : "boolean", - "example" : true + "log_category": { + "type": "boolean", + "example": true }, - "datetime" : { - "type" : "boolean", - "example" : true + "datetime": { + "type": "boolean", + "example": true }, - "log_data" : { - "type" : "boolean", - "example" : true + "log_data": { + "type": "boolean", + "example": true } } }, - "free_resource_list" : { - "type" : "array", - "items" : { - "$ref" : "#/components/schemas/free_resource_details" + "free_resource_list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/free_resource_details" } }, - "free_resource_details" : { - "type" : "object", - "properties" : { - "resource_id" : { - "type" : "string", - "example" : "1" + "free_resource_details": { + "type": "object", + "properties": { + "resource_id": { + "type": "string", + "example": "1" }, - "resource_name" : { - "type" : "string", - "example" : "abc" + "resource_name": { + "type": "string", + "example": "abc" }, - "free_slots" : { - "type" : "array", - "items" : { - "type" : "string", - "example" : "{[2018-02-15T11:00:00to2018-02-15T11:09:00:00],[2018-02-22T11:00:00to2018-02-22T11:17:00:00]}" + "free_slots": { + "type": "array", + "items": { + "type": "string", + "example": "{[2018-02-15T11:00:00to2018-02-15T11:09:00:00],[2018-02-22T11:00:00to2018-02-22T11:17:00:00]}" } } } }, - "free_resource_filter" : { - "type" : "object", - "properties" : { - "category" : { - "type" : "string", - "example" : "doctor" + "free_resource_filter": { + "type": "object", + "properties": { + "category": { + "type": "string", + "example": "doctor" }, - "Entity_id" : { - "type" : "string", - "example" : "67890" + "Entity_id": { + "type": "string", + "example": "67890" }, - "from" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-14T09:00:00" + "from": { + "type": "string", + "format": "date-time", + "example": "2018-02-14T09:00:00" }, - "to" : { - "type" : "string", - "format" : "date-time", - "example" : "2018-02-18T13:30:00" + "to": { + "type": "string", + "format": "date-time", + "example": "2018-02-18T13:30:00" }, - "resource_id" : { - "type" : "string", - "example" : "1" + "resource_id": { + "type": "string", + "example": "1" } } }, - "venue" : { - "type" : "object", - "properties" : { - "building" : { - "type" : "string", - "example" : "xyz" + "venue": { + "type": "object", + "properties": { + "building": { + "type": "string", + "example": "xyz" }, - "street" : { - "type" : "string", - "example" : "7th main" + "street": { + "type": "string", + "example": "7th main" }, - "area" : { - "type" : "string", - "example" : "wilson garden" + "area": { + "type": "string", + "example": "wilson garden" }, - "city" : { - "type" : "string", - "example" : "bangalore" + "city": { + "type": "string", + "example": "bangalore" }, - "state" : { - "type" : "string", - "example" : "karnataka" + "state": { + "type": "string", + "example": "karnataka" }, - "country" : { - "type" : "string", - "example" : "india" + "country": { + "type": "string", + "example": "india" }, - "lat" : { - "type" : "string", - "example" : "0.001" + "lat": { + "type": "string", + "example": "0.001" }, - "long" : { - "type" : "string", - "example" : "0.002" + "long": { + "type": "string", + "example": "0.002" } } }, - "event_new_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/event_creation_details" + "event_new_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/event_creation_details" } } }, - "event_modify_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/event_details" + "event_modify_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/event_details" } } }, - "event_get_details_qry" : { - "type" : "object", - "properties" : { - "event_filter" : { - "$ref" : "#/components/schemas/event_filter" + "event_get_details_qry": { + "type": "object", + "properties": { + "event_filter": { + "$ref": "#/components/schemas/event_filter" }, - "event_details_required" : { - "$ref" : "#/components/schemas/event_details_required" + "event_details_required": { + "$ref": "#/components/schemas/event_details_required" } } }, - "entity_new_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/entity_details" + "entity_new_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/entity_details" } } }, - "entity_modify_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/entity_details" + "entity_modify_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/entity_details" } } }, - "entity_get_details_qry" : { - "type" : "object", - "properties" : { - "entity_filter" : { - "$ref" : "#/components/schemas/entity_filter" + "entity_get_details_qry": { + "type": "object", + "properties": { + "entity_filter": { + "$ref": "#/components/schemas/entity_filter" }, - "entity_details_required" : { - "$ref" : "#/components/schemas/entity_details_required" + "entity_details_required": { + "$ref": "#/components/schemas/entity_details_required" } } }, - "resource_new_qry" : { - "type" : "object", - "properties" : { - "resource_details" : { - "$ref" : "#/components/schemas/resource_details" + "resource_new_qry": { + "type": "object", + "properties": { + "resource_details": { + "$ref": "#/components/schemas/resource_details" } } }, - "resource_modify_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/resource_details" + "resource_modify_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/resource_details" } } }, - "resource_get_details_qry" : { - "type" : "object", - "properties" : { - "resource_filter" : { - "$ref" : "#/components/schemas/resource_filter" + "resource_get_details_qry": { + "type": "object", + "properties": { + "resource_filter": { + "$ref": "#/components/schemas/resource_filter" }, - "resource_details_required" : { - "$ref" : "#/components/schemas/resource_details_required" + "resource_details_required": { + "$ref": "#/components/schemas/resource_details_required" } } }, - "resource_get_availability_qry" : { - "type" : "object", - "properties" : { - "free_resource_filter" : { - "$ref" : "#/components/schemas/free_resource_filter" + "resource_get_availability_qry": { + "type": "object", + "properties": { + "free_resource_filter": { + "$ref": "#/components/schemas/free_resource_filter" } } }, - "subscriber_new_qry" : { - "type" : "object", - "properties" : { - "subscriber_details" : { - "$ref" : "#/components/schemas/subscriber_details" + "subscriber_new_qry": { + "type": "object", + "properties": { + "subscriber_details": { + "$ref": "#/components/schemas/subscriber_details" } } }, - "subscriber_modify_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/subscriber_details" + "subscriber_modify_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/subscriber_details" } } }, - "subscriber_get_details_qry" : { - "type" : "object", - "properties" : { - "subscriber_filter" : { - "$ref" : "#/components/schemas/subscriber_filter" + "subscriber_get_details_qry": { + "type": "object", + "properties": { + "subscriber_filter": { + "$ref": "#/components/schemas/subscriber_filter" }, - "subscriber_details_required" : { - "$ref" : "#/components/schemas/subscriber_details_required" + "subscriber_details_required": { + "$ref": "#/components/schemas/subscriber_details_required" } } }, - "message_new_qry" : { - "type" : "object", - "properties" : { - "message_details" : { - "$ref" : "#/components/schemas/message_details" + "message_new_qry": { + "type": "object", + "properties": { + "message_details": { + "$ref": "#/components/schemas/message_details" } } }, - "message_modify_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/message_details" + "message_modify_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/message_details" } } }, - "message_get_details_qry" : { - "type" : "object", - "properties" : { - "message_filter" : { - "$ref" : "#/components/schemas/message_filter" + "message_get_details_qry": { + "type": "object", + "properties": { + "message_filter": { + "$ref": "#/components/schemas/message_filter" }, - "message_details_required" : { - "$ref" : "#/components/schemas/message_details_required" + "message_details_required": { + "$ref": "#/components/schemas/message_details_required" } } }, - "affiliation_new_qry" : { - "type" : "object", - "properties" : { - "affiliation_details" : { - "$ref" : "#/components/schemas/affiliation_details" + "affiliation_new_qry": { + "type": "object", + "properties": { + "affiliation_details": { + "$ref": "#/components/schemas/affiliation_details" } } }, - "affiliation_modify_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/affiliation_details" + "affiliation_modify_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/affiliation_details" } } }, - "affiliation_get_details_qry" : { - "type" : "object", - "properties" : { - "affiliation_filter" : { - "$ref" : "#/components/schemas/affiliation_filter" + "affiliation_get_details_qry": { + "type": "object", + "properties": { + "affiliation_filter": { + "$ref": "#/components/schemas/affiliation_filter" }, - "affiliation_details_required" : { - "$ref" : "#/components/schemas/affiliation_details_required" + "affiliation_details_required": { + "$ref": "#/components/schemas/affiliation_details_required" } } }, - "alert_schedule_new_qry" : { - "type" : "object", - "properties" : { - "alert_schedule_details" : { - "$ref" : "#/components/schemas/alert_schedule_details" + "alert_schedule_new_qry": { + "type": "object", + "properties": { + "alert_schedule_details": { + "$ref": "#/components/schemas/alert_schedule_details" } } }, - "alert_schedule_modify_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/alert_schedule_details" + "alert_schedule_modify_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/alert_schedule_details" } } }, - "alert_schedule_get_details_qry" : { - "type" : "object", - "properties" : { - "alert_schedule_filter" : { - "$ref" : "#/components/schemas/alert_schedule_filter" + "alert_schedule_get_details_qry": { + "type": "object", + "properties": { + "alert_schedule_filter": { + "$ref": "#/components/schemas/alert_schedule_filter" }, - "alert_schedule_details_required" : { - "$ref" : "#/components/schemas/alert_schedule_details_required" + "alert_schedule_details_required": { + "$ref": "#/components/schemas/alert_schedule_details_required" } } }, - "log_new_qry" : { - "type" : "object", - "properties" : { - "log_details" : { - "$ref" : "#/components/schemas/log_details" + "log_new_qry": { + "type": "object", + "properties": { + "log_details": { + "$ref": "#/components/schemas/log_details" } } }, - "log_modify_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/log_details" + "log_modify_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/log_details" } } }, - "log_get_details_qry" : { - "type" : "object", - "properties" : { - "log_filter" : { - "$ref" : "#/components/schemas/log_filter" + "log_get_details_qry": { + "type": "object", + "properties": { + "log_filter": { + "$ref": "#/components/schemas/log_filter" }, - "log_details_required" : { - "$ref" : "#/components/schemas/log_details_required" + "log_details_required": { + "$ref": "#/components/schemas/log_details_required" } } }, - "appointment_new_qry" : { - "type" : "object", - "properties" : { - "appointment_details" : { - "$ref" : "#/components/schemas/appointment_creation_details" + "appointment_new_qry": { + "type": "object", + "properties": { + "appointment_details": { + "$ref": "#/components/schemas/appointment_creation_details" } } }, - "appointment_modify_qry" : { - "type" : "object", - "properties" : { - "details" : { - "$ref" : "#/components/schemas/appointment_details" + "appointment_modify_qry": { + "type": "object", + "properties": { + "details": { + "$ref": "#/components/schemas/appointment_details" } } }, - "appointment_get_details_qry" : { - "type" : "object", - "properties" : { - "appointment_filter" : { - "$ref" : "#/components/schemas/appointment_filter" + "appointment_get_details_qry": { + "type": "object", + "properties": { + "appointment_filter": { + "$ref": "#/components/schemas/appointment_filter" }, - "appointment_details_required" : { - "$ref" : "#/components/schemas/appointment_details_required" + "appointment_details_required": { + "$ref": "#/components/schemas/appointment_details_required" } } } From 0d85fba05b217f09c4967339ab388422188d6714 Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:11:07 +0700 Subject: [PATCH 02/13] feat: add security scheme with bearer JWT Add bearerAuth securityScheme (HTTP bearer with JWT format) and apply it globally, aligning the API with section 5.1.4 cross-cutting requirements. --- api/Govstack_scheduler_BB_APIs.json | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index 25b9492..6cfc36f 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -3128,6 +3128,19 @@ } } } + }, + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT", + "description": "JWT token as specified in section 5.1.4" + } + } + }, + "security": [ + { + "bearerAuth": [] } - } + ] } From e8a78e53d0f4d1463ef875d6cef9d663b691669f Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:11:59 +0700 Subject: [PATCH 03/13] fix: correct data types, examples, and schema issues - subscriber_limit: string -> integer in event schemas - Boolean examples: "true" -> true in appointment schemas - format: url -> uri on all URL fields - lat/long: string -> number in venue schema - day_of_week example: "[monday" -> "monday" - free_slots: replace malformed string with proper object array - event_ids example: "[1]" -> ["1"] - Array examples in 8 filter schemas: string -> actual arrays - Entity_id -> entity_id casing fix in free_resource_filter --- api/Govstack_scheduler_BB_APIs.json | 117 ++++++++++++++++++---------- 1 file changed, 77 insertions(+), 40 deletions(-) diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index 6cfc36f..fa563fd 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -1704,7 +1704,7 @@ }, "website": { "type": "string", - "format": "url", + "format": "uri", "example": "www.abc.com" } } @@ -1717,7 +1717,10 @@ "items": { "type": "string" }, - "example": "[67890,12121]" + "example": [ + "67890", + "12121" + ] }, "category": { "type": "string", @@ -1737,7 +1740,7 @@ }, "website": { "type": "string", - "format": "url", + "format": "uri", "example": "www.abc.com" } } @@ -1776,14 +1779,16 @@ "properties": { "exclusive": { "type": "boolean", - "example": "true" + "example": true }, "event_ids": { "type": "array", "items": { "type": "string" }, - "example": "[1]" + "example": [ + "1" + ] }, "participant_type": { "type": "string", @@ -1819,7 +1824,7 @@ "properties": { "exclusive": { "type": "boolean", - "example": "true" + "example": true }, "event_id": { "type": "string", @@ -1848,7 +1853,7 @@ "properties": { "exclusive": { "type": "boolean", - "example": "true" + "example": true }, "appointment_id": { "type": "string", @@ -1887,7 +1892,7 @@ "properties": { "exclusive": { "type": "boolean", - "example": "true" + "example": true }, "appointment_id": { "type": "boolean", @@ -1951,7 +1956,7 @@ }, "alert_url": { "type": "string", - "format": "url", + "format": "uri", "example": "psrk@gmail.com" }, "alert_preference": { @@ -1960,7 +1965,7 @@ }, "status_poll_url": { "type": "string", - "format": "url", + "format": "uri", "example": "www.doctor1.com" } } @@ -1973,7 +1978,10 @@ "items": { "type": "string" }, - "example": "[54321,31313]" + "example": [ + "54321", + "31313" + ] }, "name": { "type": "string", @@ -1993,7 +2001,7 @@ }, "alert_url": { "type": "string", - "format": "url", + "format": "uri", "example": "www.doctor1.com" }, "alert_preference": { @@ -2002,7 +2010,7 @@ }, "status_poll_url": { "type": "string", - "format": "url", + "format": "uri", "example": "www.doctor1.com" } } @@ -2080,7 +2088,7 @@ }, "alert_url": { "type": "string", - "format": "url", + "format": "uri", "example": "www.abc.com" }, "alert_preference": { @@ -2089,7 +2097,7 @@ }, "status_poll_url": { "type": "string", - "format": "url", + "format": "uri", "example": "www.abc.com" } } @@ -2102,7 +2110,10 @@ "items": { "type": "string" }, - "example": "[12345, 41414]" + "example": [ + "12345", + "41414" + ] }, "category": { "type": "string", @@ -2122,7 +2133,7 @@ }, "alert_url": { "type": "string", - "format": "url", + "format": "uri", "example": "www.abc.com" }, "alert_preference": { @@ -2131,7 +2142,7 @@ }, "status_poll_url": { "type": "string", - "format": "url", + "format": "uri", "example": "www.abc.com" } } @@ -2216,8 +2227,8 @@ "example": "2018-02-15T11:10:00" }, "subscriber_limit": { - "type": "string", - "example": "1" + "type": "integer", + "example": 1 }, "terms": { "type": "string", @@ -2282,8 +2293,8 @@ "example": "2018-02-15T11:10:00" }, "subscriber_limit": { - "type": "string", - "example": "1" + "type": "integer", + "example": 1 }, "terms": { "type": "string", @@ -2306,7 +2317,10 @@ "items": { "type": "string" }, - "example": "[12345,51515]" + "example": [ + "12345", + "51515" + ] }, "description": { "type": "string", @@ -2325,8 +2339,8 @@ "example": "67890" }, "subscriber_limit": { - "type": "string", - "example": "1" + "type": "integer", + "example": 1 }, "terms": { "type": "string", @@ -2438,7 +2452,7 @@ "properties": { "day_of_week": { "type": "string", - "example": "[monday" + "example": "monday" }, "start_time": { "type": "string", @@ -2459,7 +2473,10 @@ "items": { "type": "string" }, - "example": "[1,2]" + "example": [ + "1", + "2" + ] }, "resource_id": { "type": "string", @@ -2555,7 +2572,10 @@ "items": { "type": "string" }, - "example": "[1,2]" + "example": [ + "1", + "2" + ] }, "entity_id": { "type": "string", @@ -2642,7 +2662,10 @@ "items": { "type": "string" }, - "example": "[1,2]" + "example": [ + "1", + "2" + ] }, "entity_id": { "type": "string", @@ -2732,7 +2755,10 @@ "items": { "type": "string" }, - "example": "[1,2]" + "example": [ + "1", + "2" + ] }, "entity_id": { "type": "string", @@ -2807,8 +2833,19 @@ "free_slots": { "type": "array", "items": { - "type": "string", - "example": "{[2018-02-15T11:00:00to2018-02-15T11:09:00:00],[2018-02-22T11:00:00to2018-02-22T11:17:00:00]}" + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:00:00Z" + }, + "to": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:30:00Z" + } + } } } } @@ -2820,10 +2857,6 @@ "type": "string", "example": "doctor" }, - "Entity_id": { - "type": "string", - "example": "67890" - }, "from": { "type": "string", "format": "date-time", @@ -2837,6 +2870,10 @@ "resource_id": { "type": "string", "example": "1" + }, + "entity_id": { + "type": "string", + "example": "67890" } } }, @@ -2868,12 +2905,12 @@ "example": "india" }, "lat": { - "type": "string", - "example": "0.001" + "type": "number", + "example": 0.001 }, "long": { - "type": "string", - "example": "0.002" + "type": "number", + "example": 0.002 } } }, From 134a754cc2b589989949cdf18ae8f89cbd1368a6 Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:12:28 +0700 Subject: [PATCH 04/13] feat: unify event slot model with time_slot schema Extract shared time_slot schema (from/to datetime pair) and use it in: - event_creation_details.slots (array of time_slot, multi-slot creation) - event_details.slot (single time_slot per event) - free_resource_details.free_slots (array of time_slot) This resolves the inconsistency where creation used an inline slots array but read/update used flat from/to fields. --- api/Govstack_scheduler_BB_APIs.json | 67 +++++++++++++---------------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index fa563fd..be7530e 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -2206,20 +2206,10 @@ "slots": { "type": "array", "items": { - "type": "object", - "properties": { - "from": { - "type": "string", - "format": "date-time", - "example": "2018-02-15T11:00:00" - }, - "to": { - "type": "string", - "format": "date-time", - "example": "2018-02-15T11:30:00" - } - } - } + "$ref": "#/components/schemas/time_slot" + }, + "minItems": 1, + "description": "One or more time slots. Each slot produces a separate event with its own event_id." }, "deadline": { "type": "string", @@ -2277,15 +2267,13 @@ "type": "string", "example": "67890" }, - "from": { - "type": "string", - "format": "date-time", - "example": "2018-02-15T11:00:00" - }, - "to": { - "type": "string", - "format": "date-time", - "example": "2018-02-15T11:30:00" + "slot": { + "allOf": [ + { + "$ref": "#/components/schemas/time_slot" + } + ], + "description": "The time slot for this event (one event per slot from the creation request)" }, "deadline": { "type": "string", @@ -2833,19 +2821,7 @@ "free_slots": { "type": "array", "items": { - "type": "object", - "properties": { - "from": { - "type": "string", - "format": "date-time", - "example": "2018-02-15T11:00:00Z" - }, - "to": { - "type": "string", - "format": "date-time", - "example": "2018-02-15T11:30:00Z" - } - } + "$ref": "#/components/schemas/time_slot" } } } @@ -3164,6 +3140,25 @@ "$ref": "#/components/schemas/appointment_details_required" } } + }, + "time_slot": { + "type": "object", + "properties": { + "from": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:00:00Z" + }, + "to": { + "type": "string", + "format": "date-time", + "example": "2018-02-15T11:30:00Z" + } + }, + "required": [ + "from", + "to" + ] } }, "securitySchemes": { From 74a2b5e70338f412adeb447baf9036658fa140a6 Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:12:57 +0700 Subject: [PATCH 05/13] fix: response codes, required fields, and tag mismatch - POST create endpoints: 200 -> 201 Created - DELETE endpoints: 200 -> 204 No Content - Add 401 and 500 responses to all operations - Add required arrays to 9 creation/detail schemas - Fix tag mismatch: 'subscribers' -> 'subscriber' (matching operation usage) --- api/Govstack_scheduler_BB_APIs.json | 549 ++++++++++++++++++++-------- 1 file changed, 404 insertions(+), 145 deletions(-) diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index be7530e..1429ac4 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -41,7 +41,7 @@ "description": "resource management API" }, { - "name": "subscribers", + "name": "subscriber", "description": "subscriber management API" }, { @@ -69,18 +69,6 @@ ], "summary": "create a new event, in event_list with given event_details, returns new event id or failure error code", "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "ID of created event", - "example": "event_id:12345" - } - } - } - }, "400": { "description": "Invalid request" }, @@ -92,6 +80,24 @@ }, "default": { "description": "Unexpected error" + }, + "201": { + "description": "Resource created successfully", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created event", + "example": "event_id:12345" + } + } + } + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -139,6 +145,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -170,9 +182,6 @@ } ], "responses": { - "200": { - "description": "success, event cancelled" - }, "400": { "description": "Invalid request" }, @@ -184,6 +193,15 @@ }, "default": { "description": "Unexpected error" + }, + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "operationId": "deleteEvent" @@ -220,6 +238,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -242,18 +266,6 @@ ], "summary": "create a new entity, in entity_list with given entity_details, returns new entity id or entity error code", "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "ID of created entity", - "example": "entity_name:xyz hospital,entity_id:67890" - } - } - } - }, "400": { "description": "Invalid request" }, @@ -265,6 +277,24 @@ }, "default": { "description": "Unexpected error" + }, + "201": { + "description": "Resource created successfully", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created entity", + "example": "entity_name:xyz hospital,entity_id:67890" + } + } + } + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -312,6 +342,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -343,9 +379,6 @@ } ], "responses": { - "200": { - "description": "success, entity cancelled" - }, "400": { "description": "Invalid request" }, @@ -357,6 +390,15 @@ }, "default": { "description": "Unexpected error" + }, + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "operationId": "deleteEntity" @@ -393,6 +435,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -415,18 +463,6 @@ ], "summary": "create a new resource, in resource_list with given resource_details, returns new resource id or error code", "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "ID of created resource", - "example": "resource_name:xyz hospital,resource_id:54321" - } - } - } - }, "400": { "description": "Invalid request" }, @@ -438,6 +474,24 @@ }, "default": { "description": "Unexpected error" + }, + "201": { + "description": "Resource created successfully", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created resource", + "example": "resource_name:xyz hospital,resource_id:54321" + } + } + } + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -485,6 +539,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -516,9 +576,6 @@ } ], "responses": { - "200": { - "description": "success, resource cancelled" - }, "400": { "description": "Invalid request" }, @@ -530,6 +587,15 @@ }, "default": { "description": "Unexpected error" + }, + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "operationId": "deleteResource" @@ -566,6 +632,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -612,6 +684,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -634,18 +712,6 @@ ], "summary": "create a new subscriber, in subscriber_list with given subscriber_details, returns new subscriber id or error code", "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "ID of created subscriber", - "example": "subscriber_name:xyz hospital,subscriber_id:12345" - } - } - } - }, "400": { "description": "Invalid request" }, @@ -657,6 +723,24 @@ }, "default": { "description": "Unexpected error" + }, + "201": { + "description": "Resource created successfully", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created subscriber", + "example": "subscriber_name:xyz hospital,subscriber_id:12345" + } + } + } + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -704,6 +788,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -735,9 +825,6 @@ } ], "responses": { - "200": { - "description": "success, subscriber cancelled" - }, "400": { "description": "Invalid request" }, @@ -749,6 +836,15 @@ }, "default": { "description": "Unexpected error" + }, + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "operationId": "deleteSubscriber" @@ -785,6 +881,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -807,18 +909,6 @@ ], "summary": "create a new message, in message_list with given message_details, returns new message id or error code", "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "ID of created message", - "example": "message_name:xyz hospital,message_id:1" - } - } - } - }, "400": { "description": "Invalid request" }, @@ -830,6 +920,24 @@ }, "default": { "description": "Unexpected error" + }, + "201": { + "description": "Resource created successfully", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created message", + "example": "message_name:xyz hospital,message_id:1" + } + } + } + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -877,6 +985,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -908,9 +1022,6 @@ } ], "responses": { - "200": { - "description": "success, message cancelled" - }, "400": { "description": "Invalid request" }, @@ -922,6 +1033,15 @@ }, "default": { "description": "Unexpected error" + }, + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "operationId": "deleteMessage" @@ -958,6 +1078,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -980,18 +1106,6 @@ ], "summary": "create a new affiliation, in affiliation_list with given affiliation_details, returns new affiliation id or error code", "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "ID of created affiliation", - "example": "affiliation_name:xyz hospital,affiliation_id:1" - } - } - } - }, "400": { "description": "Invalid request" }, @@ -1003,6 +1117,24 @@ }, "default": { "description": "Unexpected error" + }, + "201": { + "description": "Resource created successfully", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created affiliation", + "example": "affiliation_name:xyz hospital,affiliation_id:1" + } + } + } + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1050,6 +1182,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1081,9 +1219,6 @@ } ], "responses": { - "200": { - "description": "success, affiliation cancelled" - }, "400": { "description": "Invalid request" }, @@ -1095,6 +1230,15 @@ }, "default": { "description": "Unexpected error" + }, + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "operationId": "deleteAffiliation" @@ -1131,6 +1275,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1153,18 +1303,6 @@ ], "summary": "create a new alert_schedule, in alert_schedule_list with given alert_schedule_details, returns new alert_schedule id or error code", "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "ID of created alert_schedule", - "example": "alert_schedule_name:xyz hospital,alert_schedule_id:1" - } - } - } - }, "400": { "description": "Invalid request" }, @@ -1176,6 +1314,24 @@ }, "default": { "description": "Unexpected error" + }, + "201": { + "description": "Resource created successfully", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created alert_schedule", + "example": "alert_schedule_name:xyz hospital,alert_schedule_id:1" + } + } + } + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1223,6 +1379,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1254,9 +1416,6 @@ } ], "responses": { - "200": { - "description": "success, alert_schedule cancelled" - }, "400": { "description": "Invalid request" }, @@ -1268,6 +1427,15 @@ }, "default": { "description": "Unexpected error" + }, + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "operationId": "deleteAlertSchedule" @@ -1304,6 +1472,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1326,18 +1500,6 @@ ], "summary": "create a new log, in log_list with given log_details, returns new log id or error code", "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "ID of created log", - "example": "log_name:xyz hospital,log_id:1" - } - } - } - }, "400": { "description": "Invalid request" }, @@ -1349,6 +1511,24 @@ }, "default": { "description": "Unexpected error" + }, + "201": { + "description": "Resource created successfully", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created log", + "example": "log_name:xyz hospital,log_id:1" + } + } + } + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1396,6 +1576,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1427,9 +1613,6 @@ } ], "responses": { - "200": { - "description": "success, log cancelled" - }, "400": { "description": "Invalid request" }, @@ -1441,6 +1624,15 @@ }, "default": { "description": "Unexpected error" + }, + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "operationId": "deleteLog" @@ -1477,6 +1669,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1499,18 +1697,6 @@ ], "summary": "create a new appointment, in appointment_list with given appointment_details, returns new appointment id or failure error code", "responses": { - "200": { - "description": "success", - "content": { - "application/json": { - "schema": { - "type": "string", - "description": "ID of created appointment", - "example": "[Event_id:12345,appointment_id:1]" - } - } - } - }, "400": { "description": "Invalid request" }, @@ -1522,6 +1708,24 @@ }, "default": { "description": "Unexpected error" + }, + "201": { + "description": "Resource created successfully", + "content": { + "application/json": { + "schema": { + "type": "string", + "description": "ID of created appointment", + "example": "[Event_id:12345,appointment_id:1]" + } + } + } + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1569,6 +1773,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1600,9 +1810,6 @@ } ], "responses": { - "200": { - "description": "success, appointment cancelled" - }, "400": { "description": "Invalid request" }, @@ -1614,6 +1821,15 @@ }, "default": { "description": "Unexpected error" + }, + "204": { + "description": "Resource deleted successfully" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "operationId": "deleteAppointment" @@ -1650,6 +1866,12 @@ }, "default": { "description": "Unexpected error" + }, + "401": { + "description": "Authentication required or token invalid" + }, + "500": { + "description": "Internal server error" } }, "requestBody": { @@ -1707,7 +1929,11 @@ "format": "uri", "example": "www.abc.com" } - } + }, + "required": [ + "name", + "category" + ] }, "entity_filter": { "type": "object", @@ -1802,7 +2028,12 @@ "type": "string", "example": "67890" } - } + }, + "required": [ + "event_ids", + "participant_type", + "participant_id" + ] }, "appointment_list": { "type": "array", @@ -1968,7 +2199,11 @@ "format": "uri", "example": "www.doctor1.com" } - } + }, + "required": [ + "name", + "category" + ] }, "resource_filter": { "type": "object", @@ -2100,7 +2335,10 @@ "format": "uri", "example": "www.abc.com" } - } + }, + "required": [ + "name" + ] }, "subscriber_filter": { "type": "object", @@ -2231,7 +2469,13 @@ "venue": { "$ref": "#/components/schemas/venue" } - } + }, + "required": [ + "name", + "category", + "host_entity_id", + "slots" + ] }, "event_list": { "type": "array", @@ -2431,7 +2675,11 @@ "work_days_hours": { "$ref": "#/components/schemas/days_hours" } - } + }, + "required": [ + "resource_id", + "entity_id" + ] }, "days_hours": { "type": "array", @@ -2550,7 +2798,10 @@ "format": "date-time", "example": "2018-02-15T09:00:00" } - } + }, + "required": [ + "name" + ] }, "alert_schedule_filter": { "type": "object", @@ -2640,7 +2891,10 @@ "type": "string", "example": "you have doctor consultation today" } - } + }, + "required": [ + "name" + ] }, "message_filter": { "type": "object", @@ -2733,7 +2987,12 @@ "type": "string", "example": "event_id:12345,subscriber_id:1,token:a2s3x2fer,status:attended" } - } + }, + "required": [ + "logger_id", + "log_category", + "datetime" + ] }, "log_filter": { "type": "object", From 0d35575488dfcbf965f820a20a3c803b8b82f65f Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:13:25 +0700 Subject: [PATCH 06/13] feat: add pagination to search endpoints - Add PageParam and PageSizeParam to components/parameters - Add pagination_metadata schema (page, page_size, total) - Wrap all 10 search endpoint responses in {data, pagination} envelope - Pagination query params on all search and availability endpoints --- api/Govstack_scheduler_BB_APIs.json | 287 ++++++++++++++++++++++++---- 1 file changed, 247 insertions(+), 40 deletions(-) diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index 1429ac4..93b2b69 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -219,9 +219,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/event_list" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/event_details" + } + }, + "pagination": { + "$ref": "#/components/schemas/pagination_metadata" + } } } } @@ -256,7 +264,15 @@ } } }, - "operationId": "searchEvents" + "operationId": "searchEvents", + "parameters": [ + { + "$ref": "#/components/parameters/PageParam" + }, + { + "$ref": "#/components/parameters/PageSizeParam" + } + ] } }, "/entity": { @@ -416,9 +432,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/entity_list" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/entity_details" + } + }, + "pagination": { + "$ref": "#/components/schemas/pagination_metadata" + } } } } @@ -453,7 +477,15 @@ } } }, - "operationId": "searchEntities" + "operationId": "searchEntities", + "parameters": [ + { + "$ref": "#/components/parameters/PageParam" + }, + { + "$ref": "#/components/parameters/PageSizeParam" + } + ] } }, "/resource": { @@ -613,9 +645,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/resource_list" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/resource_details" + } + }, + "pagination": { + "$ref": "#/components/schemas/pagination_metadata" + } } } } @@ -650,7 +690,15 @@ } } }, - "operationId": "searchResources" + "operationId": "searchResources", + "parameters": [ + { + "$ref": "#/components/parameters/PageParam" + }, + { + "$ref": "#/components/parameters/PageSizeParam" + } + ] } }, "/resource/availability": { @@ -665,9 +713,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/free_resource_list" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/free_resource_details" + } + }, + "pagination": { + "$ref": "#/components/schemas/pagination_metadata" + } } } } @@ -702,7 +758,15 @@ } } }, - "operationId": "searchResourceAvailability" + "operationId": "searchResourceAvailability", + "parameters": [ + { + "$ref": "#/components/parameters/PageParam" + }, + { + "$ref": "#/components/parameters/PageSizeParam" + } + ] } }, "/subscriber": { @@ -862,9 +926,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/subscriber_list" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/subscriber_details" + } + }, + "pagination": { + "$ref": "#/components/schemas/pagination_metadata" + } } } } @@ -899,7 +971,15 @@ } } }, - "operationId": "searchSubscribers" + "operationId": "searchSubscribers", + "parameters": [ + { + "$ref": "#/components/parameters/PageParam" + }, + { + "$ref": "#/components/parameters/PageSizeParam" + } + ] } }, "/message": { @@ -1059,9 +1139,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/message_list" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/message_details" + } + }, + "pagination": { + "$ref": "#/components/schemas/pagination_metadata" + } } } } @@ -1096,7 +1184,15 @@ } } }, - "operationId": "searchMessages" + "operationId": "searchMessages", + "parameters": [ + { + "$ref": "#/components/parameters/PageParam" + }, + { + "$ref": "#/components/parameters/PageSizeParam" + } + ] } }, "/affiliation": { @@ -1256,9 +1352,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/affiliation_list" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/affiliation_details" + } + }, + "pagination": { + "$ref": "#/components/schemas/pagination_metadata" + } } } } @@ -1293,7 +1397,15 @@ } } }, - "operationId": "searchAffiliations" + "operationId": "searchAffiliations", + "parameters": [ + { + "$ref": "#/components/parameters/PageParam" + }, + { + "$ref": "#/components/parameters/PageSizeParam" + } + ] } }, "/alert_schedule": { @@ -1453,9 +1565,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/alert_schedule_list" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/alert_schedule_details" + } + }, + "pagination": { + "$ref": "#/components/schemas/pagination_metadata" + } } } } @@ -1490,7 +1610,15 @@ } } }, - "operationId": "searchAlertSchedules" + "operationId": "searchAlertSchedules", + "parameters": [ + { + "$ref": "#/components/parameters/PageParam" + }, + { + "$ref": "#/components/parameters/PageSizeParam" + } + ] } }, "/log": { @@ -1650,9 +1778,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/log_list" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/log_details" + } + }, + "pagination": { + "$ref": "#/components/schemas/pagination_metadata" + } } } } @@ -1687,7 +1823,15 @@ } } }, - "operationId": "searchLogs" + "operationId": "searchLogs", + "parameters": [ + { + "$ref": "#/components/parameters/PageParam" + }, + { + "$ref": "#/components/parameters/PageSizeParam" + } + ] } }, "/appointment": { @@ -1847,9 +1991,17 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/appointment_list" + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/appointment_details" + } + }, + "pagination": { + "$ref": "#/components/schemas/pagination_metadata" + } } } } @@ -1884,7 +2036,15 @@ } } }, - "operationId": "searchAppointments" + "operationId": "searchAppointments", + "parameters": [ + { + "$ref": "#/components/parameters/PageParam" + }, + { + "$ref": "#/components/parameters/PageSizeParam" + } + ] } } }, @@ -3418,6 +3578,28 @@ "from", "to" ] + }, + "pagination_metadata": { + "type": "object", + "properties": { + "page": { + "type": "integer", + "example": 1 + }, + "page_size": { + "type": "integer", + "example": 20 + }, + "total": { + "type": "integer", + "example": 354 + } + }, + "required": [ + "page", + "page_size", + "total" + ] } }, "securitySchemes": { @@ -3427,6 +3609,31 @@ "bearerFormat": "JWT", "description": "JWT token as specified in section 5.1.4" } + }, + "parameters": { + "PageParam": { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "default": 1 + }, + "description": "Page number (1-based)" + }, + "PageSizeParam": { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "default": 20 + }, + "description": "Number of items per page" + } } }, "security": [ From 424f1cb22404e2bcab63994a2e418af6c7ee5891 Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:13:43 +0700 Subject: [PATCH 07/13] fix: remove mutable audit log endpoints Remove PUT /log/{log_id} and DELETE /log/{log_id} to make the log resource append-only + read-only. Mutable audit logs contradict the spec's own cross-cutting requirement 5.1.3 (audit logging) and section 6.9. Also removes the orphaned log_modify_qry schema. --- api/Govstack_scheduler_BB_APIs.json | 102 ---------------------------- 1 file changed, 102 deletions(-) diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index 93b2b69..ba9533f 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -1672,100 +1672,6 @@ "operationId": "createLog" } }, - "/log/{log_id}": { - "put": { - "tags": [ - "log" - ], - "summary": "changes values of specific details (as given by log_details) of given log (selected by log_filter)in log_list and returns success or error code", - "parameters": [ - { - "name": "log_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique identifier of the log" - } - ], - "responses": { - "200": { - "description": "success, log updated" - }, - "400": { - "description": "Invalid request" - }, - "403": { - "description": "No permission" - }, - "404": { - "description": "one or more specified inputs not found" - }, - "default": { - "description": "Unexpected error" - }, - "401": { - "description": "Authentication required or token invalid" - }, - "500": { - "description": "Internal server error" - } - }, - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/log_modify_qry" - } - } - } - }, - "operationId": "updateLog" - }, - "delete": { - "tags": [ - "log" - ], - "summary": "delete a predefined log in log_list and returns success or error code", - "parameters": [ - { - "name": "log_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Unique identifier of the log" - } - ], - "responses": { - "400": { - "description": "Invalid request" - }, - "403": { - "description": "No permission" - }, - "404": { - "description": "one or more specified inputs not found" - }, - "default": { - "description": "Unexpected error" - }, - "204": { - "description": "Resource deleted successfully" - }, - "401": { - "description": "Authentication required or token invalid" - }, - "500": { - "description": "Internal server error" - } - }, - "operationId": "deleteLog" - } - }, "/log/search": { "post": { "tags": [ @@ -3514,14 +3420,6 @@ } } }, - "log_modify_qry": { - "type": "object", - "properties": { - "details": { - "$ref": "#/components/schemas/log_details" - } - } - }, "log_get_details_qry": { "type": "object", "properties": { From 989522a4986e4c1fbf9d57f808c6f8849cb7c855 Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:13:58 +0700 Subject: [PATCH 08/13] chore: replace server URL, remove test.txt - Replace hardcoded test instance URL with parameterized server template - Remove empty api/test.txt placeholder file --- api/Govstack_scheduler_BB_APIs.json | 10 ++++++++-- api/test.txt | 1 - 2 files changed, 8 insertions(+), 3 deletions(-) delete mode 100644 api/test.txt diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index ba9533f..ca65743 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -19,8 +19,14 @@ }, "servers": [ { - "url": "http://ss2.egovstack.net/r1/eGovStack/COM/11222456/SchedulerBB/creg/", - "description": "Scheduler BB Security server" + "url": "https://{host}/api/v1/scheduler", + "description": "Scheduler BB API server", + "variables": { + "host": { + "default": "example.govstack.global", + "description": "Hostname of the Scheduler BB deployment" + } + } } ], "tags": [ diff --git a/api/test.txt b/api/test.txt deleted file mode 100644 index 8b13789..0000000 --- a/api/test.txt +++ /dev/null @@ -1 +0,0 @@ - From dc371fa56054fe5f5fab6d50dbce41e3ac6793ec Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:15:57 +0700 Subject: [PATCH 09/13] docs: fix spec markdown (numbering, diagrams, swagger refs, data structures) - Fix section numbering in 8-service-apis.md: 4.10-4.13 -> 8.10-8.13 - Update all 35 swagger blocks to reference new REST paths and methods - Remove 2 swagger blocks for deleted log mutation endpoints - Fix event creation endpoint in workflow diagram: Post/entity/new -> POST /event - Update all endpoint references in Mermaid sequence diagrams throughout 9-workflows.md - Fix SubscriberLimit type in 7-data-structures.md: String -> Integer --- spec/7-data-structures.md | 2 +- spec/8-service-apis.md | 86 ++++++++++++++++++--------------------- spec/9-workflows.md | 66 +++++++++++++++--------------- 3 files changed, 73 insertions(+), 81 deletions(-) diff --git a/spec/7-data-structures.md b/spec/7-data-structures.md index 2d1ce88..b1cc96c 100644 --- a/spec/7-data-structures.md +++ b/spec/7-data-structures.md @@ -28,7 +28,7 @@ The proposed resource model showing the relationship between data objects that a | Status | String | pending/started/completed/no-show/etc. | | HostEntityId | Integer | id of the entity which is organizing the event | | Event Name | String | name may show event type and branding | -| SubscriberLimit | String | Maximum number of subscribers allowed | +| SubscriberLimit | Integer | Maximum number of subscribers allowed | | Terms | String | Any conditions and instructions for to subscribers for participation in an event | | Category | string | category of the event (e.g. consultation, training, salary payments, etc.) | diff --git a/spec/8-service-apis.md b/spec/8-service-apis.md index 45bf29e..f04c490 100644 --- a/spec/8-service-apis.md +++ b/spec/8-service-apis.md @@ -18,183 +18,175 @@ The tests for the Scheduler Building Block can be found in [this GitHub reposito ### 8.1 Event Management -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/event/new" method="post" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/event" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/event/modifications" method="put" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/event/{event_id}" method="put" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/event" method="delete" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/event/{event_id}" method="delete" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/event/list_details" method="get" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/event/search" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} ### 8.2 Entity Management -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/entity/new" method="post" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/entity" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/entity/modifications" method="put" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/entity/{entity_id}" method="put" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/entity" method="delete" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/entity/{entity_id}" method="delete" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/entity/list_details" method="get" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/entity/search" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} ### 8.3 Alert Schedule Management -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/alert_schedule/new" method="post" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/alert_schedule" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/alert_schedule/modifications" method="put" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/alert_schedule/{alert_schedule_id}" method="put" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/alert_schedule" method="delete" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/alert_schedule/{alert_schedule_id}" method="delete" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/alert_schedule/list_details" method="get" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/alert_schedule/search" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} ### 8.4 Alert Message Management -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/message/new" method="post" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/message" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/message/modifications" method="put" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/message/{message_id}" method="put" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/message" method="delete" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/message/{message_id}" method="delete" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/message/list_details" method="get" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/message/search" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} ### 8.5 Resource management -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/resource/new" method="post" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/resource" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/resource/modifications" method="put" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/resource/{resource_id}" method="put" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/resource" method="delete" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/resource/{resource_id}" method="delete" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/resource/list_details" method="get" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/resource/search" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/resource/availability" method="get" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/resource/availability" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} ### 8.6 Subscriber management -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/subscriber/new" method="post" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/subscriber" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/subscriber/modifications" method="put" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/subscriber/{subscriber_id}" method="put" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/subscriber" method="delete" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/subscriber/{subscriber_id}" method="delete" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/subscriber/list_details" method="get" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/subscriber/search" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} ### 8.7 Affiliation management -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/affiliation/new" method="post" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/affiliation" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/affiliation/modifications" method="put" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/affiliation/{affiliation_id}" method="put" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/affiliation" method="delete" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/affiliation/{affiliation_id}" method="delete" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/affiliation/list_details" method="get" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/affiliation/search" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} ### 8.8 Appointment management -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/appointment/new" method="post" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/appointment" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/appointment/modifications" method="put" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/appointment/{appointment_id}" method="put" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/appointment" method="delete" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/appointment/{appointment_id}" method="delete" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/appointment/list_details" method="get" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/appointment/search" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} ### 8.9 Status Logging and Reporting -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/log/new" method="post" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/log" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/log/modifications" method="put" %} +{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/log/search" method="post" %} [https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) {% endswagger %} -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/log" method="delete" %} -[https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) -{% endswagger %} - -{% swagger src="https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json" path="/log/list_details" method="get" %} -[https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json](https://raw.githubusercontent.com/GovStackWorkingGroup/bb-scheduler/main/api/Govstack_scheduler_BB_APIs.json) -{% endswagger %} - -## **4.10 Information Mediator Interface** +## **8.10 Information Mediator Interface** This Services APIs is not yet specified, but it should be the purpose of a next iteration of the Scheduler Building Block Specification. -## **4.11 PubSub Interface** +## **8.11 PubSub Interface** This Services APIs is not yet specified, but it should be the purpose of a next iteration of the Scheduler Building Block Specification. -## **4.12 Messaging interface** +## **8.12 Messaging interface** This Services APIs is not yet specified, but it should be the purpose of a next iteration of the Scheduler Building Block Specification. -## **4.13 Scheduler Administration** +## **8.13 Scheduler Administration** This Services APIs is not yet specified, but it should be the purpose of a next iteration of the Scheduler Building Block Specification. diff --git a/spec/9-workflows.md b/spec/9-workflows.md index e0f3b94..8a5e06a 100644 --- a/spec/9-workflows.md +++ b/spec/9-workflows.md @@ -46,7 +46,7 @@ An organizer can use this workflow to create a new event in the system. The Orga sequenceDiagram Organizer->>Host_App: Submit details of
new event -Host_App->>Scheduler: Post/entity/new
{Event_Details} +Host_App->>Scheduler: POST /event
{Event_Details} alt: if given entity/
is already registered
and event is
not duplicate note over Scheduler: Generate unique Event_Id Scheduler->>EventList: Add new event
{Details, unique Event_Id} @@ -65,20 +65,20 @@ Organizer can request the cancellation of a prescheduled event through the host ```mermaid sequenceDiagram Organizer->>Host_App: Request Cancellation of selected event - Host_App->>Scheduler: Delete/event{event_Id} - Scheduler->>Alert_Schedule_List: Get/Alert_Schedule/List_details {Alert_Schedule_id} in {event_id} + Host_App->>Scheduler: DELETE /event/{event_id} + Scheduler->>Alert_Schedule_List: POST /alert_schedule/search {Alert_Schedule_id} in {event_id} loop for each Alert_Schedule_id: - Scheduler->>Alert_Schedule_List: Delete/Alert_Schedule/{event_id} + Scheduler->>Alert_Schedule_List: DELETE /alert_schedule/{alert_schedule_id} end - Scheduler->>Appointment_List: Get/appointment/List_details {appointment_id} in {event_id} + Scheduler->>Appointment_List: POST /appointment/search {appointment_id} in {event_id} loop for each appointment id: - Scheduler->>Appointment_List: Delete/appointment/ {appointment_id} + Scheduler->>Appointment_List: DELETE /appointment/{appointment_id} end loop for each target alt if participant type = resource: - Scheduler->>Resource_List: Get/Resource/List_Details{Resource_id} + Scheduler->>Resource_List: POST /resource/search{Resource_id} else if participant type = Subscriber: - Scheduler->>Subscriber_List: Get/Subscriber/List_Details{Subscriber_id} + Scheduler->>Subscriber_List: POST /subscriber/search{Subscriber_id} end opt if prefered channel= "direct" Scheduler->>Target_BB/App: notify cancellation[url] @@ -90,7 +90,7 @@ sequenceDiagram Scheduler->>messaging BB: notify cancellation[messaging BB] end end - Scheduler->>Event_List: delete/event in {event_id} + Scheduler->>Event_List: DELETE /event/{event_id} Scheduler->>Host_App: return success or error Host_App->>Organizer: confirm deletion or error information @@ -105,9 +105,9 @@ In some scenarios, one may search for events of a specific category involving a ```mermaid sequenceDiagram Organizer->>Host_App:Submit category,
resource_id,
datetime_range,
event_type -Host_App->>Scheduler:Get/appointment/list_details
{event_id} in {entity_id,event_type,
paticipant_id=resource_id,
paticipant_type='resource',
from_datetime,to_datetime) +Host_App->>Scheduler:POST /appointment/search
{event_id} in {entity_id,event_type,
paticipant_id=resource_id,
paticipant_type='resource',
from_datetime,to_datetime) Scheduler-->Host_app: return ids of
matching events -Host_App->>Scheduler:Get/event/list_details
in {event_ids, status='open'} +Host_App->>Scheduler:POST /event/search
in {event_ids, status='open'} Scheduler->>Host_App: return details of
specific events with
status=open Host_App->> Organizer: Publish event details @@ -122,7 +122,7 @@ A new entity that can use the Scheduler must be registered by the administrator ```mermaid sequenceDiagram Adminstrator->>Host_App:Request addition of
given Entity and
entity profile -Host_App->>Scheduler:Post:/entity/new
{entity_details} +Host_App->>Scheduler:POST /entity
{entity_details} Scheduler->>Entity_List: Store new entity profile
and generate new entity id Entity_List->>Scheduler: Return new template id
or error(if entity
exists already) Host_App->>Adminstrator: confirm template
registration and prompt
for registration of
"organizer" resource @@ -137,8 +137,8 @@ An organizer may schedule different alert messages to be sent to subscribers and ```mermaid sequenceDiagram Organizer->>Host_App: request new alert
schedule with chosen
message, epoch
,target type,event -Host_App->>Scheduler:Post/alert_schedule/new
{alert_schedule_details} -Scheduler->>Event_List: Get/event/list_details
{period} in {event_id} +Host_App->>Scheduler:POST /alert_schedule
{alert_schedule_details} +Scheduler->>Event_List: POST /event/search
{period} in {event_id} alt if entity not found
or event has ended Scheduler->>Host_App: return error code Host_App->>Organizer: publish error @@ -158,25 +158,25 @@ The Scheduler's internal tracker keeps fetching (with a predefined interval) a l sequenceDiagram loop for each interval(x minutes) note over Scheduler: update datetime
range by interval - Scheduler->>Alert_Schedule_List:Get/alert_schedule/list_details
{datetime,message_id
target_type,event_id}
in {datetime_range} + Scheduler->>Alert_Schedule_List:POST /alert_schedule/search
{datetime,message_id
target_type,event_id}
in {datetime_range} Alert_Schedule_List-->Scheduler:Details of all alerts
falling within given
date-time range loop for each alert, - Scheduler->>message_list:Get/message/list_details
<{message}in{message_id}: + Scheduler->>message_list:POST /message/search
<{message}in{message_id}: message_list->Scheduler: return message
to be sent alt if target_category is resource or both - Scheduler->>appointment_list:Get/appintment/list_details
<{participant_id}in{event_id,
partipant_type=resource} + Scheduler->>appointment_list:POST /appointment/search
<{participant_id}in{event_id,
partipant_type=resource} appointment_list->>Scheduler:return resource_ids of event loop for each resource - Scheduler->>Resource_list:/resource/list_details
{phone,url,email,
preffered channel}in
{resource_id} + Scheduler->>Resource_list:/resource/search
{phone,url,email,
preffered channel}in
{resource_id} Resource_list->>Scheduler:return {phone,url,email,
preffered channel} note over Scheduler: append resource
info to target list end end alt if target_category is subscriber or both - Scheduler->>event_list:Get/event/list_details
<{participant_id}in{event_id,
partipant_type=subscriber} + Scheduler->>event_list:POST /event/search
<{participant_id}in{event_id,
partipant_type=subscriber} event_list->>Scheduler:return resource_ids of event loop for each subscriber - Scheduler->>subscriber_list:/subscriber/list_details
{phone,url,email,
preffered channel}in
{subscriber_id=target_id} + Scheduler->>subscriber_list:/subscriber/search
{phone,url,email,
preffered channel}in
{subscriber_id=target_id} subscriber_list->>Scheduler:return {phone,url,email,
preffered channel} note over Scheduler: append resource
info to target list end @@ -208,7 +208,7 @@ Several predefined templates of alert messages can be stored in a Message List s ```mermaid sequenceDiagram Organizer->>Host_App:Request addition of
given alert template -Host_App->>Scheduler:Post:/Alert_Template/new{message_details} +Host_App->>Scheduler:POST /message
{message_details} Scheduler->>message_List:Store new template
and generate
new template id Scheduler->>Host_App:Return new template ID Host_App->>Organizer: confirm template registration @@ -223,7 +223,7 @@ An organizer must register into the scheduler various categories of resources {p ```mermaid sequenceDiagram Adminstrator/Organizer->>Host_App:Request addition of
given Resource as
Organizer in given entity -Host_App->>Scheduler:Post:/resource/new
{entity_id,resouce_details} +Host_App->>Scheduler:POST /resource
{entity_id,resouce_details} Scheduler->>Resource_List: Store new resource profile note over Resource_List: if matching resource
exists fetch resource_id,
else store deteails and
generate new id Resource_List->>Scheduler: return Resource_Id @@ -239,11 +239,11 @@ An organizer may use a host application to seek the Scheduler for availability w ```mermaid sequenceDiagram Organizer->>Host_App: Request resource availability -Host_App->>Scheduler: Get/resource/availablity:
{free_resource_details}
in{Entity_id,Resource_Id
from_datetime,
to_date_time} -Scheduler->>Affiliation_List: Get/affiliation/list_details
{Workdays_hours}
in{resource_id, Entity_id} +Host_App->>Scheduler: POST /resource/availability
{free_resource_details}
in{Entity_id,Resource_Id
from_datetime,
to_date_time} +Scheduler->>Affiliation_List: POST /affiliation/search
{Workdays_hours}
in{resource_id, Entity_id} Affiliation_List->>Scheduler: returns workdays_hours note over Scheduler: calculate affiliated
dates in given
date-time range. -Scheduler->>Appointment_List: Get/appointment/list_details
{start,end}in{participant_id=
resource_id, participant_type='resource,
Entity_id,Event_type,datetime range} +Scheduler->>Appointment_List: POST /appointment/search
{start,end}in{participant_id=
resource_id, participant_type='resource,
Entity_id,Event_type,datetime range} Appointment_List->>Scheduler: returns starting
and ending time
of appointments note over Scheduler: calculate free slots
(affiliated time
zones - booked slots) Scheduler->>Host_App: Return Array{resource id,free_slots} @@ -259,7 +259,7 @@ A subscriber can be registered into the scheduler with relevant details, either ```mermaid sequenceDiagram Organizer->>Host_App:Request addition of
given Subscriber -Host_App->>Scheduler:Post:/Subscriber/new
{Subscriber_details} +Host_App->>Scheduler:POST /subscriber
{Subscriber_details} Scheduler->>Subscriber_List: Store new Subscriber profile note over Subscriber_List: if matching Subscriber
exists fetch Subscriber_id,
else store deteails and
generate new id Subscriber_List->>Scheduler: return Subscriber_Id @@ -294,17 +294,17 @@ An organizer may enrol a subscriber or resource to a specific event through a ho ```mermaid sequenceDiagram Organizer->>Host_App:request enrollment
of chosen participant
to chosen event -Host_App->>Scheduler:Get/event/list_details
{event_type,from,to,
status} in {event_id} +Host_App->>Scheduler:POST /event/search
{event_type,from,to,
status} in {event_id} Scheduler->>Host_App: return requested
event details for
given event ids alt if subscriber_limit >0 and event_status = 'open' - Host_App->> Scheduler: put/event/modifications
{subscriber_limit-1}in{event_id} + Host_App->> Scheduler: PUT /event/{event_id}
{subscriber_limit-1}in{event_id} Scheduler->>Host_App: return success - Host_App->>Scheduler:Post/Appointment/new
{event_id,event_type,
participant_type,participant_id,
from,to,deadline} + Host_App->>Scheduler:POST /appointment
{event_id,event_type,
participant_type,participant_id,
from,to,deadline} alt if participant type is "resource" - Scheduler->>Resource_List: Get/Resource/list_details
{resource_details} in {Resouce_id=
participant_id} + Scheduler->>Resource_List: POST /resource/search
{resource_details} in {Resouce_id=
participant_id} Resource_List->>Scheduler:return target details
Resource or error else if participant type is "subscriber" - Scheduler->>Subscriber_List: Get/Resource/list_details
{subcriber_details} in {Resouce_id=
participant_id} + Scheduler->>Subscriber_List: POST /resource/search
{subcriber_details} in {Resouce_id=
participant_id} Subscriber_List->>Scheduler:return target details
subscriber or error end Scheduler->>Messaging_BB: send appointment id
with event details
to subscriber @@ -320,7 +320,7 @@ An organizer may cancel an existing appointment of a resource or a subscriber fo ```mermaid sequenceDiagram Organizer->>Host_App: request deletion
of appointment
of selected
resource/subscriber
in selected event
required details -Host_App->>Scheduler: Delete/appointment
{event_Id,participant_type
, participant_id} +Host_App->>Scheduler: DELETE /appointment/{appointment_id}
{event_Id,participant_type
, participant_id} Scheduler->>Appointment_List: mark matching appointment
as cancelled alt If event or participant not found Scheduler->>Host_App: publish error @@ -339,7 +339,7 @@ In this workflow, a simple case of extracting chosen type of log in a given time ```mermaid sequenceDiagram Organizer->>Host_App: request logs in
given period,
entity_id,log category -Host_App->>Scheduler:Get/log/list_details
{details} in {entity_id,
datetime_range,
log_category} +Host_App->>Scheduler:POST /log/search
{details} in {entity_id,
datetime_range,
log_category} Scheduler->>Log_List:Fetch matching
log entries Log_List->>Scheduler:return error or
null or any
matching logs Scheduler->>Host_App:Return error or
list of logs From d61bc5f228bef167776607c17ebf4aa9e7abb942 Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:17:33 +0700 Subject: [PATCH 10/13] feat: add Spectral linting and GitHub Actions CI - Add .spectral.yml with 7 custom rules (security schemes, global security, no query-string auth, valid media types, 201 on create, 204 on delete, 401 required) plus 3 built-in rules - Add GitHub Actions workflow triggered on api/ and .spectral.yml changes - Validated locally: 0 errors, warnings only for pre-existing issues (missing operation descriptions, unused list schemas, URI format examples) --- .github/workflows/validate-api.yml | 29 ++++++ .spectral.yml | 77 +++++++++++++++ api/Govstack_scheduler_BB_APIs.json | 141 ---------------------------- 3 files changed, 106 insertions(+), 141 deletions(-) create mode 100644 .github/workflows/validate-api.yml create mode 100644 .spectral.yml diff --git a/.github/workflows/validate-api.yml b/.github/workflows/validate-api.yml new file mode 100644 index 0000000..acb2894 --- /dev/null +++ b/.github/workflows/validate-api.yml @@ -0,0 +1,29 @@ +name: Validate OpenAPI Spec +on: + push: + paths: + - 'api/**' + - '.spectral.yml' + pull_request: + paths: + - 'api/**' + - '.spectral.yml' + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install Spectral + run: npm install -g @stoplight/spectral-cli + + - name: Lint OpenAPI spec + run: spectral lint api/Govstack_scheduler_BB_APIs.json --ruleset .spectral.yml + + - name: Check for stale API files + run: | + STALE=$(find spec/.gitbook/assets -name '*scheduler_api*' 2>/dev/null | wc -l) + if [ "$STALE" -gt 0 ]; then + echo "::warning::Found $STALE stale API files in spec/.gitbook/assets/" + fi diff --git a/.spectral.yml b/.spectral.yml new file mode 100644 index 0000000..34e75f2 --- /dev/null +++ b/.spectral.yml @@ -0,0 +1,77 @@ +extends: + - "spectral:oas" + +rules: + # Built-in rules + oas3-api-servers: warn + operation-operationId: error + oas3-valid-schema-example: warn + + # Custom: security schemes must be defined + security-schemes-defined: + description: securitySchemes must be defined and not empty + severity: error + given: "$.components" + then: + field: securitySchemes + function: truthy + + # Custom: global security must be defined + global-security-defined: + description: Top-level security block must be defined + severity: error + given: "$" + then: + field: security + function: truthy + + # Custom: no auth tokens in query string + no-query-string-auth: + description: Auth parameters must not be passed as query strings + severity: error + given: "$.paths.*.*.parameters[?(@.in=='query')]" + then: + field: name + function: pattern + functionOptions: + notMatch: "[Tt]oken|[Aa]uth|[Kk]ey|[Ss]ecret|[Pp]assword" + + # Custom: valid media type keys in response content + valid-media-type: + description: Response content-type keys must use standard media types + severity: error + given: "$.paths.*.*.responses.*.content" + then: + function: schema + functionOptions: + schema: + type: object + propertyNames: + pattern: "^(application|text|image|audio|video|multipart|font)/" + + # Custom: POST create endpoints should return 201 + post-create-returns-201: + description: Non-search POST endpoints should return 201 + severity: warn + given: "$.paths[?(!@property.match(/search|availability/))].post.responses" + then: + field: "201" + function: truthy + + # Custom: DELETE should return 204 + delete-returns-204: + description: DELETE endpoints should return 204 + severity: warn + given: "$.paths.*.delete.responses" + then: + field: "204" + function: truthy + + # Custom: operations should have 401 response + has-401-response: + description: Operations should define a 401 response + severity: warn + given: "$.paths.*.*.responses" + then: + field: "401" + function: truthy diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index ca65743..113f171 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -1962,21 +1962,6 @@ }, "components": { "schemas": { - "entity_list": { - "type": "array", - "items": { - "type": "object", - "properties": { - "entity_id": { - "type": "string", - "example": "67890" - }, - "details": { - "$ref": "#/components/schemas/entity_details" - } - } - } - }, "entity_details": { "type": "object", "properties": { @@ -2107,21 +2092,6 @@ "participant_id" ] }, - "appointment_list": { - "type": "array", - "items": { - "type": "object", - "properties": { - "appointment_id": { - "type": "string", - "example": "1" - }, - "details": { - "$ref": "#/components/schemas/appointment_details" - } - } - } - }, "appointment_details": { "type": "object", "properties": { @@ -2223,21 +2193,6 @@ } } }, - "resource_list": { - "type": "array", - "items": { - "type": "object", - "properties": { - "resource_id": { - "type": "string", - "example": "54321" - }, - "details": { - "$ref": "#/components/schemas/resource_details" - } - } - } - }, "resource_details": { "type": "object", "properties": { @@ -2359,21 +2314,6 @@ } } }, - "subscriber_list": { - "type": "array", - "items": { - "type": "object", - "properties": { - "subscriber_id": { - "type": "string", - "example": "12345" - }, - "details": { - "$ref": "#/components/schemas/subscriber_details" - } - } - } - }, "subscriber_details": { "type": "object", "properties": { @@ -2549,21 +2489,6 @@ "slots" ] }, - "event_list": { - "type": "array", - "items": { - "type": "object", - "properties": { - "event_id": { - "type": "string", - "example": "12345" - }, - "details": { - "$ref": "#/components/schemas/event_details" - } - } - } - }, "event_details": { "type": "object", "properties": { @@ -2714,21 +2639,6 @@ } } }, - "affiliation_list": { - "type": "array", - "items": { - "type": "object", - "properties": { - "affiliation_id": { - "type": "string", - "example": "1" - }, - "details": { - "$ref": "#/components/schemas/affiliation_details" - } - } - } - }, "affiliation_details": { "type": "object", "properties": { @@ -2835,21 +2745,6 @@ } } }, - "alert_schedule_list": { - "type": "array", - "items": { - "type": "object", - "properties": { - "alert_schedule_id": { - "type": "string", - "example": "1" - }, - "details": { - "$ref": "#/components/schemas/alert_schedule_details" - } - } - } - }, "alert_schedule_details": { "type": "object", "properties": { @@ -2933,21 +2828,6 @@ } } }, - "message_list": { - "type": "array", - "items": { - "type": "object", - "properties": { - "message_id": { - "type": "string", - "example": "1" - }, - "details": { - "$ref": "#/components/schemas/message_details" - } - } - } - }, "message_details": { "type": "object", "properties": { @@ -3016,21 +2896,6 @@ } } }, - "log_list": { - "type": "array", - "items": { - "type": "object", - "properties": { - "log_id": { - "type": "string", - "example": "1" - }, - "details": { - "$ref": "#/components/schemas/log_details" - } - } - } - }, "log_details": { "type": "object", "properties": { @@ -3132,12 +2997,6 @@ } } }, - "free_resource_list": { - "type": "array", - "items": { - "$ref": "#/components/schemas/free_resource_details" - } - }, "free_resource_details": { "type": "object", "properties": { From 529497785737f1a158e6b7f139148a597de3f1cb Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:23:43 +0700 Subject: [PATCH 11/13] fix: correct required arrays, URI examples, and copy-paste errors Fixes found by staff engineer review: - alert_schedule_details: required [name] -> [event_id, message_id, alert_datetime] (schema has no name property) - message_details: required [name] -> [category, message_body] (schema has no name property) - URI examples updated to valid URIs (https:// prefix) - Trimmed leading whitespace in alert_preference examples - Fixed subscriber/search response description ("message list" -> "subscriber list") --- api/Govstack_scheduler_BB_APIs.json | 33 ++++++++++++++++------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index 113f171..86c186a 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -928,7 +928,7 @@ "summary": "get list of entities filetered by criteria in subscriber_filter and return info specified by subscriber_details_required with success or error code", "responses": { "200": { - "description": "success,message list", + "description": "success, subscriber list", "content": { "application/json": { "schema": { @@ -1984,7 +1984,7 @@ "website": { "type": "string", "format": "uri", - "example": "www.abc.com" + "example": "https://www.abc.com" } }, "required": [ @@ -2024,7 +2024,7 @@ "website": { "type": "string", "format": "uri", - "example": "www.abc.com" + "example": "https://www.abc.com" } } }, @@ -2215,7 +2215,7 @@ "alert_url": { "type": "string", "format": "uri", - "example": "psrk@gmail.com" + "example": "https://www.doctor1.com/alerts" }, "alert_preference": { "type": "string", @@ -2224,7 +2224,7 @@ "status_poll_url": { "type": "string", "format": "uri", - "example": "www.doctor1.com" + "example": "https://www.doctor1.com/status" } }, "required": [ @@ -2264,16 +2264,16 @@ "alert_url": { "type": "string", "format": "uri", - "example": "www.doctor1.com" + "example": "https://www.doctor1.com/alerts" }, "alert_preference": { "type": "string", - "example": " phone" + "example": "phone" }, "status_poll_url": { "type": "string", "format": "uri", - "example": "www.doctor1.com" + "example": "https://www.doctor1.com/status" } } }, @@ -2336,7 +2336,7 @@ "alert_url": { "type": "string", "format": "uri", - "example": "www.abc.com" + "example": "https://www.example.com/alerts" }, "alert_preference": { "type": "string", @@ -2345,7 +2345,7 @@ "status_poll_url": { "type": "string", "format": "uri", - "example": "www.abc.com" + "example": "https://www.example.com/status" } }, "required": [ @@ -2384,16 +2384,16 @@ "alert_url": { "type": "string", "format": "uri", - "example": "www.abc.com" + "example": "https://www.example.com/alerts" }, "alert_preference": { "type": "string", - "example": " phone" + "example": "phone" }, "status_poll_url": { "type": "string", "format": "uri", - "example": "www.abc.com" + "example": "https://www.example.com/status" } } }, @@ -2767,7 +2767,9 @@ } }, "required": [ - "name" + "event_id", + "message_id", + "alert_datetime" ] }, "alert_schedule_filter": { @@ -2845,7 +2847,8 @@ } }, "required": [ - "name" + "category", + "message_body" ] }, "message_filter": { From fae55e7e1136c46fc81a2d90ee072650b7fee324 Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:25:04 +0700 Subject: [PATCH 12/13] fix: normalize wrapper key names in *_new_qry schemas Rename {resource}_details -> details in 7 *_new_qry schemas to match the convention already used by event_new_qry, entity_new_qry, and all *_modify_qry schemas. --- api/Govstack_scheduler_BB_APIs.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index 86c186a..157b844 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -3140,7 +3140,7 @@ "resource_new_qry": { "type": "object", "properties": { - "resource_details": { + "details": { "$ref": "#/components/schemas/resource_details" } } @@ -3175,7 +3175,7 @@ "subscriber_new_qry": { "type": "object", "properties": { - "subscriber_details": { + "details": { "$ref": "#/components/schemas/subscriber_details" } } @@ -3202,7 +3202,7 @@ "message_new_qry": { "type": "object", "properties": { - "message_details": { + "details": { "$ref": "#/components/schemas/message_details" } } @@ -3229,7 +3229,7 @@ "affiliation_new_qry": { "type": "object", "properties": { - "affiliation_details": { + "details": { "$ref": "#/components/schemas/affiliation_details" } } @@ -3256,7 +3256,7 @@ "alert_schedule_new_qry": { "type": "object", "properties": { - "alert_schedule_details": { + "details": { "$ref": "#/components/schemas/alert_schedule_details" } } @@ -3283,7 +3283,7 @@ "log_new_qry": { "type": "object", "properties": { - "log_details": { + "details": { "$ref": "#/components/schemas/log_details" } } @@ -3302,7 +3302,7 @@ "appointment_new_qry": { "type": "object", "properties": { - "appointment_details": { + "details": { "$ref": "#/components/schemas/appointment_creation_details" } } From 3c7933b30f9b86e8d347286f905cb60014070bc5 Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Thu, 9 Apr 2026 15:26:20 +0700 Subject: [PATCH 13/13] fix: add description field to all operations Copy summary text into description on all 35 operations to satisfy the operation-description lint rule. --- api/Govstack_scheduler_BB_APIs.json | 35 +++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/api/Govstack_scheduler_BB_APIs.json b/api/Govstack_scheduler_BB_APIs.json index 157b844..9f01705 100644 --- a/api/Govstack_scheduler_BB_APIs.json +++ b/api/Govstack_scheduler_BB_APIs.json @@ -74,6 +74,7 @@ "event" ], "summary": "create a new event, in event_list with given event_details, returns new event id or failure error code", + "description": "create a new event, in event_list with given event_details, returns new event id or failure error code", "responses": { "400": { "description": "Invalid request" @@ -125,6 +126,7 @@ "event" ], "summary": "changes values of specific details (as given by event_details) of given event (selected by event_filter)in event_list and returns success or error code", + "description": "changes values of specific details (as given by event_details) of given event (selected by event_filter)in event_list and returns success or error code", "parameters": [ { "name": "event_id", @@ -176,6 +178,7 @@ "event" ], "summary": "delete a predefined event in event_list and returns success or error code", + "description": "delete a predefined event in event_list and returns success or error code", "parameters": [ { "name": "event_id", @@ -219,6 +222,7 @@ "event" ], "summary": "get list of events filetered by criteria in event_filter and return info specified by event_details_required with success or error code", + "description": "get list of events filetered by criteria in event_filter and return info specified by event_details_required with success or error code", "responses": { "200": { "description": "success,event_list", @@ -287,6 +291,7 @@ "entity" ], "summary": "create a new entity, in entity_list with given entity_details, returns new entity id or entity error code", + "description": "create a new entity, in entity_list with given entity_details, returns new entity id or entity error code", "responses": { "400": { "description": "Invalid request" @@ -338,6 +343,7 @@ "entity" ], "summary": "changes values of specific details (as given by entity_details) of given entity (selected by entity_filter)in entity_list and returns success or error code", + "description": "changes values of specific details (as given by entity_details) of given entity (selected by entity_filter)in entity_list and returns success or error code", "parameters": [ { "name": "entity_id", @@ -389,6 +395,7 @@ "entity" ], "summary": "delete a predefined entity in entity_list and returns success or error code", + "description": "delete a predefined entity in entity_list and returns success or error code", "parameters": [ { "name": "entity_id", @@ -432,6 +439,7 @@ "entity" ], "summary": "get list of entities filetered by criteria in entity_filter and return info specified by entity_details_required with success or error code", + "description": "get list of entities filetered by criteria in entity_filter and return info specified by entity_details_required with success or error code", "responses": { "200": { "description": "success,entity list", @@ -500,6 +508,7 @@ "resource" ], "summary": "create a new resource, in resource_list with given resource_details, returns new resource id or error code", + "description": "create a new resource, in resource_list with given resource_details, returns new resource id or error code", "responses": { "400": { "description": "Invalid request" @@ -551,6 +560,7 @@ "resource" ], "summary": "changes values of specific details (as given by resource_details) of given resource (selected by resource_filter)in resource_list and returns success or error code", + "description": "changes values of specific details (as given by resource_details) of given resource (selected by resource_filter)in resource_list and returns success or error code", "parameters": [ { "name": "resource_id", @@ -602,6 +612,7 @@ "resource" ], "summary": "delete a predefined resource in resource_list and returns success or error code", + "description": "delete a predefined resource in resource_list and returns success or error code", "parameters": [ { "name": "resource_id", @@ -645,6 +656,7 @@ "resource" ], "summary": "get list of entities filetered by criteria in resource_filter and return info specified by resource_details_required with success or error code", + "description": "get list of entities filetered by criteria in resource_filter and return info specified by resource_details_required with success or error code", "responses": { "200": { "description": "success,resource list", @@ -713,6 +725,7 @@ "resource" ], "summary": "get details of resources matching criteria given by free_resource_filter, that are free(unallocated) in a given date range and entity and returns success or error code", + "description": "get details of resources matching criteria given by free_resource_filter, that are free(unallocated) in a given date range and entity and returns success or error code", "responses": { "200": { "description": "success,resource list", @@ -781,6 +794,7 @@ "subscriber" ], "summary": "create a new subscriber, in subscriber_list with given subscriber_details, returns new subscriber id or error code", + "description": "create a new subscriber, in subscriber_list with given subscriber_details, returns new subscriber id or error code", "responses": { "400": { "description": "Invalid request" @@ -832,6 +846,7 @@ "subscriber" ], "summary": "changes values of specific details (as given by subscriber_details) of given subscriber (selected by subscriber_filter)in subscriber_list and returns success or error code", + "description": "changes values of specific details (as given by subscriber_details) of given subscriber (selected by subscriber_filter)in subscriber_list and returns success or error code", "parameters": [ { "name": "subscriber_id", @@ -883,6 +898,7 @@ "subscriber" ], "summary": "delete a predefined subscriber in subscriber_list and returns success or error code", + "description": "delete a predefined subscriber in subscriber_list and returns success or error code", "parameters": [ { "name": "subscriber_id", @@ -926,6 +942,7 @@ "subscriber" ], "summary": "get list of entities filetered by criteria in subscriber_filter and return info specified by subscriber_details_required with success or error code", + "description": "get list of entities filetered by criteria in subscriber_filter and return info specified by subscriber_details_required with success or error code", "responses": { "200": { "description": "success, subscriber list", @@ -994,6 +1011,7 @@ "message" ], "summary": "create a new message, in message_list with given message_details, returns new message id or error code", + "description": "create a new message, in message_list with given message_details, returns new message id or error code", "responses": { "400": { "description": "Invalid request" @@ -1045,6 +1063,7 @@ "message" ], "summary": "changes values of specific details (as given by message_details) of given message (selected by message_filter)in message_list and returns success or error code", + "description": "changes values of specific details (as given by message_details) of given message (selected by message_filter)in message_list and returns success or error code", "parameters": [ { "name": "message_id", @@ -1096,6 +1115,7 @@ "message" ], "summary": "delete a predefined message in message_list and returns success or error code", + "description": "delete a predefined message in message_list and returns success or error code", "parameters": [ { "name": "message_id", @@ -1139,6 +1159,7 @@ "message" ], "summary": "get list of entities filetered by criteria in message_filter and return info specified by message_details_required with success or error code", + "description": "get list of entities filetered by criteria in message_filter and return info specified by message_details_required with success or error code", "responses": { "200": { "description": "success,message list", @@ -1207,6 +1228,7 @@ "affiliation" ], "summary": "create a new affiliation, in affiliation_list with given affiliation_details, returns new affiliation id or error code", + "description": "create a new affiliation, in affiliation_list with given affiliation_details, returns new affiliation id or error code", "responses": { "400": { "description": "Invalid request" @@ -1258,6 +1280,7 @@ "affiliation" ], "summary": "changes values of specific details (as given by affiliation_details) of given affiliation (selected by affiliation_filter)in affiliation_list and returns success or error code", + "description": "changes values of specific details (as given by affiliation_details) of given affiliation (selected by affiliation_filter)in affiliation_list and returns success or error code", "parameters": [ { "name": "affiliation_id", @@ -1309,6 +1332,7 @@ "affiliation" ], "summary": "delete a predefined affiliation in affiliation_list and returns success or error code", + "description": "delete a predefined affiliation in affiliation_list and returns success or error code", "parameters": [ { "name": "affiliation_id", @@ -1352,6 +1376,7 @@ "affiliation" ], "summary": "get list of entities filetered by criteria in affiliation_filter and return info specified by affiliation_details_required with success or error code", + "description": "get list of entities filetered by criteria in affiliation_filter and return info specified by affiliation_details_required with success or error code", "responses": { "200": { "description": "success,affiliation list", @@ -1420,6 +1445,7 @@ "alert_schedule" ], "summary": "create a new alert_schedule, in alert_schedule_list with given alert_schedule_details, returns new alert_schedule id or error code", + "description": "create a new alert_schedule, in alert_schedule_list with given alert_schedule_details, returns new alert_schedule id or error code", "responses": { "400": { "description": "Invalid request" @@ -1471,6 +1497,7 @@ "alert_schedule" ], "summary": "changes values of specific details (as given by alert_schedule_details) of given alert_schedule (selected by alert_schedule_filter)in alert_schedule_list and returns success or error code", + "description": "changes values of specific details (as given by alert_schedule_details) of given alert_schedule (selected by alert_schedule_filter)in alert_schedule_list and returns success or error code", "parameters": [ { "name": "alert_schedule_id", @@ -1522,6 +1549,7 @@ "alert_schedule" ], "summary": "delete a predefined alert_schedule in alert_schedule_list and returns success or error code", + "description": "delete a predefined alert_schedule in alert_schedule_list and returns success or error code", "parameters": [ { "name": "alert_schedule_id", @@ -1565,6 +1593,7 @@ "alert_schedule" ], "summary": "get list of entities filetered by criteria in alert_schedule_filter and return info specified by alert_schedule_details_required with success or error code", + "description": "get list of entities filetered by criteria in alert_schedule_filter and return info specified by alert_schedule_details_required with success or error code", "responses": { "200": { "description": "success,alert_schedule list", @@ -1633,6 +1662,7 @@ "log" ], "summary": "create a new log, in log_list with given log_details, returns new log id or error code", + "description": "create a new log, in log_list with given log_details, returns new log id or error code", "responses": { "400": { "description": "Invalid request" @@ -1684,6 +1714,7 @@ "log" ], "summary": "get list of entities filetered by criteria in log_filter and return info specified by log_details_required with success or error code", + "description": "get list of entities filetered by criteria in log_filter and return info specified by log_details_required with success or error code", "responses": { "200": { "description": "success,log list", @@ -1752,6 +1783,7 @@ "appointment" ], "summary": "create a new appointment, in appointment_list with given appointment_details, returns new appointment id or failure error code", + "description": "create a new appointment, in appointment_list with given appointment_details, returns new appointment id or failure error code", "responses": { "400": { "description": "Invalid request" @@ -1803,6 +1835,7 @@ "appointment" ], "summary": "changes values of specific details (as given by appointment_details) of given appointment (selected by appointment_filter)in appointment_list and returns success or error code", + "description": "changes values of specific details (as given by appointment_details) of given appointment (selected by appointment_filter)in appointment_list and returns success or error code", "parameters": [ { "name": "appointment_id", @@ -1854,6 +1887,7 @@ "appointment" ], "summary": "delete a predefined appointment in appointment_list and returns success or error code", + "description": "delete a predefined appointment in appointment_list and returns success or error code", "parameters": [ { "name": "appointment_id", @@ -1897,6 +1931,7 @@ "appointment" ], "summary": "get list of appointments filetered by criteria in appointment_filter and return info specified by appointment_details_required with success or error code", + "description": "get list of appointments filetered by criteria in appointment_filter and return info specified by appointment_details_required with success or error code", "responses": { "200": { "description": "success,appointment_list",