"description":"The data store for the pinger definitions for the bot",
"type":"object",
"definitions":{
"commonProps":{
"type":"object",
"properties":{
"subj":{
"type":"string"
},
"crsno":{
"type":"string"
},
"metadata":{
"type":"object",
"properties":{
"user":{
"type":"object",
"patternProperties":{
"^\\d+$":{
"$comment":"key is user ID, value is sections to ping for",
"type":"object",
"patternProperties":{
"^\\w{4} \\d{3}[A-Z]? \\w{3}$":{
"$comment":"key is section ID, value is status types to ping for",
"type":"array",
"items":{
"type":"string",
"enum":[
"Available",
"Restricted",
"Blocked",
"Full"
]
}
}
},
"additionalProperties":false
},
"additionalProperties":false
}
},
"courses":{
"type":"array",
"items":{
"type":"string",
"$comment":"same pattern as section ID in metadata.user",
"pattern":"^\\w{4} \\d{3}[A-Z]? \\w{3}$"
}
}
}
},
"sessyr":{
"type":"string",
"pattern":"^\\d{4}$"
},
"sesscd":{
"type":"string",
"pattern":"^[WS]$"
}
},
"$comment":"technically sessyr and sesscd is not required, but in practice it will get populated during add_ping",
"required":[
"subj",
"crsno",
"metadata"
]
},
"searchModeProps":{
"allOf":[
{
"$ref":"#/definitions/commonProps"
}
],
"type":"object",
"$comment":"all of the properties are technically optional, but in practice it is always populated; days are separate keys each, but technically should all be true or else it wouldn't be defined even though false is also accepted",
"properties":{
"credit":{
"type":"string"
},
"sTime":{
"type":"string"
},
"eTime":{
"type":"string"
},
"actv":{
"type":"string"
},
"term":{
"type":"string"
}
},
"patternProperties":{
"^DAY[1-7]$":{
"type":"boolean"
}
},
"not":{
"required":[
"section"
]
}
},
"sectionModeProps":{
"allOf":[
{
"$ref":"#/definitions/commonProps"
}
],
"type":"object",
"properties":{
"section":{
"oneOf":[
{
"type":"string",
"$comment":"specifies the section to filter with; should be transient and change to true after add_course"
},
{
"const":true,
"$comment":"signify to pinger it is in section mode"
}
]
}
},
"required":[
"section"
]
}
},
"patternProperties":{
"^.*$":{
"oneOf":[
{
"$ref":"#/definitions/searchModeProps"
},
{
"$ref":"#/definitions/sectionModeProps"
}
],
"$comment":"we want a rigid schema so don't allow additional properties (unevaluated to allow for proper composition)",