{
  "$defs": {
    "address": {
      "properties": {
        "cityIds": {
          "$ref": "#/$defs/ids/cities",
          "title": "The IDs of cities to which this address belongs"
        },
        "corporationIds": {
          "$ref": "#/$defs/ids/corporations",
          "description": "The IDs of corporations situated at this address"
        },
        "fullAddress": {
          "default": "",
          "examples": [
            "Nizzaallee 4\nD-52072\nAachen"
          ],
          "title": "The postal address",
          "type": "string"
        },
        "hidden": {
          "$ref": "#/$defs/baseModel/hidden"
        },
        "id": {
          "$ref": "#/$defs/baseModel/id",
          "examples": [
            "address_aachen_0"
          ]
        },
        "latitude": {
          "maximum": 90,
          "minimum": -90,
          "title": "The latitude at which to set the pin",
          "type": "number"
        },
        "longitude": {
          "maximum": 180,
          "minimum": -180,
          "title": "The longitude at which to set the pin",
          "type": "number"
        },
        "name": {
          "description": "The name of this address, house or location",
          "title": "Name",
          "type": "string"
        },
        "pointOfInterestIds": {
          "$ref": "#/$defs/ids/pointsOfInterest",
          "description": "IDs of points of interest situated at this address"
        }
      },
      "required": [
        "id",
        "latitude",
        "longitude"
      ],
      "type": "object"
    },
    "baseModel": {
      "hidden": {
        "description": "If true, the object is not shown in the app",
        "title": "Hidden",
        "type": [
          "boolean",
          "null"
        ]
      },
      "id": {
        "description": "The unique ID of this object",
        "title": "ID",
        "type": "string"
      }
    },
    "city": {
      "examples": [
        {
          "addressIds": [
            "address_aachen_0",
            "address_aachen_1",
            "address_aachen_2"
          ],
          "countryId": "country_de",
          "id": "city_de_aachen",
          "name": "Aachen",
          "translationKey": "CITY_AACHEN"
        }
      ],
      "properties": {
        "addressIds": {
          "$ref": "#/$defs/ids/addresses",
          "description": "IDs of addresses in this city"
        },
        "countryId": {
          "$ref": "#/$defs/ids/country"
        },
        "hidden": {
          "$ref": "#/$defs/baseModel/hidden"
        },
        "id": {
          "$ref": "#/$defs/baseModel/id",
          "examples": [
            "city_de_aachen"
          ]
        },
        "name": {
          "examples": [
            "Aachen"
          ],
          "title": "The name of the city in its local language",
          "type": "string"
        },
        "translationKey": {
          "$ref": "#/$defs/translationKey"
        }
      },
      "required": [
        "countryId",
        "id",
        "name",
        "translationKey"
      ],
      "title": "A city belonging to a country and containing a number of addresses",
      "type": "object"
    },
    "colour": {
      "description": "A colour",
      "properties": {
        "colourFamilyIds": {
          "$ref": "#/$defs/ids/colourFamilies",
          "description": "The IDs of the colour families that this colour is a shade of",
          "examples": [
            "colour_family_blue"
          ]
        },
        "colourValue": {
          "$ref": "#/$defs/colourValue"
        },
        "id": {
          "$ref": "#/$defs/baseModel/id",
          "examples": [
            "colour_blue"
          ]
        },
        "inColours": {
          "$ref": "#/$defs/ids/corporations",
          "description": "IDs of corporations using this colour",
          "examples": [
            [
              "corporation_de_aachen_corps_palaeoteutonia",
              "corporation_de_aachen_ab_alania"
            ]
          ]
        },
        "translationKey": {
          "$ref": "#/$defs/translationKey",
          "examples": [
            "COLOUR_BLUE"
          ]
        }
      },
      "required": [
        "colourFamilyIds",
        "id",
        "translationKey",
        "colourValue"
      ],
      "title": "Colour",
      "type": "object"
    },
    "colourFamily": {
      "description": "A colour family",
      "properties": {
        "id": {
          "$ref": "#/$defs/baseModel/id",
          "examples": [
            "colour_blue"
          ]
        },
        "memberColourIds": {
          "$ref": "#/$defs/ids/colourFamilies",
          "examples": [
            "colour_family_red"
          ]
        },
        "sampleColourValue": {
          "$ref": "#/$defs/colourValue",
          "description": "A colour value representing all shades of the family"
        },
        "translationKey": {
          "$ref": "#/$defs/translationKey"
        }
      },
      "required": [
        "id",
        "memberColourIds",
        "translationKey"
      ],
      "title": "ColourFamily",
      "type": "object"
    },
    "colourValue": {
      "description": "How to generate this colour in the app",
      "examples": [
        "#0000FF",
        "#0000FF00",
        "blue",
        "rgba(0, 150, 255, 1.0)",
        "rgb(0, 150, 255)"
      ],
      "title": "Colour value",
      "type": "string"
    },
    "corporation": {
      "examples": [
        {
          "addressId": "address_aachen_29",
          "colours": [
            {
              "colourIds": [
                "colour_red_crimson",
                "colour_white",
                "colour_pink"
              ]
            },
            {
              "colourIds": [
                "colour_red_crimson",
                "colour_white",
                "colour_red_crimson"
              ]
            }
          ],
          "coloursPrinciple": 5,
          "eventIds": [
            "event_christmas"
          ],
          "fencingPrinciple": 1,
          "foundationDate": "1910",
          "id": "corporation_d_aachen_kdstv_marchia",
          "indicatorColourId": "ind_green",
          "longName": "KDStV Marchia (Breslau) zu Aachen im CV",
          "mail": "chargen@marchia.de",
          "motto": "Mens agitat molem!",
          "organisationIds": [
            "organisation_cv"
          ],
          "phone": "+49 241 18984012",
          "regularsTable": "Donnerstag",
          "shortName": "KDStV Marchia",
          "website": "www.marchia.de"
        }
      ],
      "properties": {
        "addressId": {
          "$ref": "#/$defs/mapDisplayable/addressId",
          "description": "The ID of the address at which this corporation is situated"
        },
        "colours": {
          "description": "An array of couleur identifying or worn by a corporation",
          "examples": [
            [
              {
                "colourIds": [
                  "colour_red_crimson",
                  "colour_white",
                  "colour_pink"
                ]
              },
              {
                "colourIds": [
                  "colour_red_crimson",
                  "colour_white",
                  "colour_red_crimson"
                ]
              }
            ]
          ],
          "items": {
            "description": "Represents a sash-like collection of colours, such as a tricolore",
            "examples": [
              {
                "colourIds": [
                  "colour_red_crimson",
                  "colour_white",
                  "colour_pink"
                ]
              },
              {
                "baseColourId": "colour_white",
                "colourIds": [
                  "colour_black",
                  "colour_green"
                ]
              }
            ],
            "properties": {
              "baseColourId": {
                "$ref": "#/$defs/ids/colour",
                "description": "The ID of the colour to use as a background for the colours defined in colourIds, which will be inset"
              },
              "colourIds": {
                "description": "The IDs of the colours, top to bottom",
                "items": {
                  "$ref": "#/$defs/ids/colour"
                },
                "title": "Colour IDs",
                "type": "array"
              },
              "percussion": {
                "$ref": "#/$defs/ids/colour",
                "description": "The ID of the colour to use as a percussion for the colours defined in colourIds, which will be inset. Narrower in height than a baseColour"
              }
            },
            "required": [
              "colourIds"
            ],
            "title": "Couleur",
            "type": "object"
          },
          "title": "Colours / Couleur",
          "type": "array"
        },
        "coloursPrinciple": {
          "default": 0,
          "description": "0: Unknown, 1: No colours exist, 2: Wearing needles, 3: Not wearing colours, 4: Wearing is optional, 5: Wearing is mandatory",
          "maximum": 5,
          "minimum": 0,
          "title": "Colours principle",
          "type": "integer"
        },
        "eventIds": {
          "$ref": "#/$defs/mapDisplayable/eventIds"
        },
        "fencingPrinciple": {
          "description": "0: Unknown, 1: Not fencing, 2: Fencing is opt-in, 3: Training is mandatory, but mensur is optional, 4: Mensur is mandatory",
          "maximum": 4,
          "minimum": 0,
          "title": "Fencing principle",
          "type": "integer"
        },
        "foundationDate": {
          "description": "The date (yyyy-MM-dd) or year at which the corporation was founded",
          "examples": [
            "1910",
            "1910-01-01"
          ],
          "pattern": "^$|^\\d{4}(-\\d{2}-\\d{2})?$",
          "title": "Foundation date",
          "type": "string"
        },
        "hidden": {
          "$ref": "#/$defs/baseModel/hidden"
        },
        "id": {
          "$ref": "#/$defs/baseModel/id",
          "examples": [
            "corporation_de_aachen_kdstv_marchia"
          ]
        },
        "indicatorColourId": {
          "$ref": "#/$defs/mapDisplayable/indicatorColourId",
          "description": "The ID of the colour used to indicate a member of this organisation on the map",
          "examples": [
            "ind_green"
          ]
        },
        "jourFixe": {
          "description": "Free-text comment on the best day/time to visit",
          "examples": [
            "Donnerstag"
          ],
          "title": "Jour Fixe",
          "type": "string"
        },
        "longName": {
          "$ref": "#/$defs/mapDisplayable/longName"
        },
        "mail": {
          "$ref": "#/$defs/mapDisplayable/mail"
        },
        "motto": {
          "description": "The corporation's motto",
          "examples": [
            "Mens agitat molem!"
          ],
          "title": "Motto",
          "type": "string"
        },
        "organisationIds": {
          "$ref": "#/$defs/ids/organisations",
          "description": "The IDs of organisations of which this corporation is a member"
        },
        "phone": {
          "$ref": "#/$defs/mapDisplayable/phone"
        },
        "remark": {
          "$ref": "#/$defs/mapDisplayable/remark"
        },
        "shortName": {
          "$ref": "#/$defs/mapDisplayable/shortName"
        },
        "website": {
          "$ref": "#/$defs/mapDisplayable/website"
        }
      },
      "required": [
        "addressId",
        "coloursPrinciple",
        "fencingPrinciple",
        "id",
        "longName",
        "shortName"
      ],
      "title": "Corporation",
      "type": "object"
    },
    "country": {
      "properties": {
        "cityIds": {
          "$ref": "#/$defs/ids/cities",
          "description": "The IDs of cities in this country"
        },
        "hidden": {
          "$ref": "#/$defs/baseModel/hidden"
        },
        "id": {
          "$ref": "#/$defs/baseModel/id",
          "examples": [
            "country_de"
          ]
        },
        "isoCode": {
          "description": "The ISO3166 code (2 or 3 letters, any case) of the country",
          "examples": [
            "de"
          ],
          "pattern": "[a-zA-z]{2,3}",
          "title": "Country code",
          "type": "string"
        }
      },
      "required": [
        "id",
        "isoCode"
      ],
      "type": "object"
    },
    "event": {
      "examples": [
        {
          "begin": "2022-12-24T18:00:00+01:00",
          "description": "Christmas events:\n- Christmas Eve\n- Christmas Day\n- Boxing Day",
          "end": "2022-12-26T22:00:00+01:00",
          "id": "event_christmas_0",
          "mapDisplayableIds": [
            "corporation_0",
            "corporation_1",
            "corporation_2"
          ],
          "name": "Christmas"
        }
      ],
      "properties": {
        "begin": {
          "$ref": "#/$defs/iso8601datetime",
          "description": "ISO8601 date string for the start of the event"
        },
        "description": {
          "description": "More details on the event",
          "title": "Description",
          "type": "string"
        },
        "end": {
          "$ref": "#/$defs/iso8601datetime",
          "description": "ISO8601 date string for the end of the event"
        },
        "hidden": {
          "$ref": "#/$defs/baseModel/hidden"
        },
        "id": {
          "$ref": "#/$defs/baseModel/id",
          "examples": [
            "event_christmas"
          ]
        },
        "mapDisplayableIds": {
          "description": "The IDs of corporations or points of interest where this event is happening",
          "items": {
            "title": "The ID of a corporation or a point of interest",
            "type": "string"
          },
          "type": "array"
        },
        "name": {
          "description": "The name of the event",
          "title": "Name",
          "type": "string"
        }
      },
      "required": [
        "begin",
        "id",
        "mapDisplayableIds",
        "name"
      ],
      "title": "An event associated to a corporation, organisation, and/or point of interest",
      "type": "object"
    },
    "ids": {
      "address": {
        "description": "The ID of an address",
        "title": "Address ID",
        "type": [
          "string",
          "null"
        ]
      },
      "addresses": {
        "items": {
          "$ref": "#/$defs/ids/address"
        },
        "title": "Address IDs",
        "type": "array"
      },
      "cities": {
        "items": {
          "$ref": "#/$defs/ids/city"
        },
        "title": "City IDs",
        "type": "array"
      },
      "city": {
        "description": "The ID of a city",
        "examples": [
          "city_de_aachen"
        ],
        "title": "City ID",
        "type": [
          "string",
          "null"
        ]
      },
      "colour": {
        "description": "The ID of a colour",
        "title": "Colour ID",
        "type": [
          "string",
          "null"
        ]
      },
      "colourFamilies": {
        "items": {
          "$ref": "#/$defs/ids/colourFamily"
        },
        "title": "Colour family IDs",
        "type": "array"
      },
      "colourFamily": {
        "description": "The ID of a colour family",
        "title": "Colour family ID",
        "type": [
          "string",
          "null"
        ]
      },
      "corporation": {
        "examples": [
          "corporation_de_aachen_kdstv_marchia"
        ],
        "title": "The ID of a corporation",
        "type": [
          "string",
          "null"
        ]
      },
      "corporations": {
        "items": {
          "$ref": "#/$defs/ids/corporation"
        },
        "title": "Corporation IDs",
        "type": "array"
      },
      "country": {
        "description": "The ID of a country",
        "examples": [
          "country_de"
        ],
        "type": "string"
      },
      "organisation": {
        "description": "The ID of an organisation",
        "examples": [
          "organisation_cv"
        ],
        "title": "Organisation ID",
        "type": [
          "string",
          "null"
        ]
      },
      "organisations": {
        "description": "The IDs of organisations of which this object is a member",
        "examples": [
          [
            "organisation_cv"
          ]
        ],
        "items": {
          "$ref": "#/$defs/ids/organisation"
        },
        "title": "Organisation IDs",
        "type": "array"
      },
      "pointOfInterest": {
        "examples": [
          "poi_de_aachen_townhall"
        ],
        "title": "The ID of a point of interest",
        "type": [
          "string",
          "null"
        ]
      },
      "pointsOfInterest": {
        "items": {
          "$ref": "#/$defs/ids/pointOfInterest"
        },
        "title": "Point of Interests",
        "type": "array"
      }
    },
    "iso8601datetime": {
      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(.\\d{3})?[+-]\\d{2}:\\d{2}$",
      "type": "string"
    },
    "mapDisplayable": {
      "addressId": {
        "title": "The ID of the address at which this object is situated",
        "type": "string"
      },
      "eventIds": {
        "items": {
          "title": "An ID of an event",
          "type": "string"
        },
        "title": "The IDs of events taking place at this location",
        "type": [
          "array",
          "null"
        ]
      },
      "indicatorColourId": {
        "description": "The ID of the colour used to indicate the object on the map",
        "title": "Indicator colour ID",
        "type": "string"
      },
      "longName": {
        "description": "The full name of the corporation",
        "examples": [
          "KDStV Marchia (Breslau) zu Aachen im CV"
        ],
        "title": "Long name",
        "type": "string"
      },
      "mail": {
        "description": "A contact email address",
        "examples": [
          "chargen@marchia.de"
        ],
        "title": "E-Mail",
        "type": [
          "string",
          "null"
        ]
      },
      "phone": {
        "default": "",
        "examples": [
          "+49 241 18984012"
        ],
        "title": "The phone Schema",
        "type": [
          "string",
          "null"
        ]
      },
      "remark": {
        "default": "",
        "examples": [
          ""
        ],
        "title": "The remark Schema",
        "type": [
          "string",
          "null"
        ]
      },
      "shortName": {
        "default": "",
        "examples": [
          "KDStV Marchia"
        ],
        "title": "The shortName Schema",
        "type": [
          "string",
          "null"
        ]
      },
      "website": {
        "default": "",
        "examples": [
          "www.marchia.de"
        ],
        "title": "The website Schema",
        "type": [
          "string",
          "null"
        ]
      }
    },
    "organisation": {
      "description": "An organisation in which corporations are members",
      "examples": [
        {
          "abbreviation": "CV",
          "id": "organisation_cv",
          "indicatorColour": "ind_green",
          "mapDisplayableIds": [
            "corporation_d_aachen_kdstv_baltia",
            "corporation_d_aachen_kdstv_bergland",
            "corporation_d_aachen_kdstv_franconia",
            "corporation_d_aachen_kdstv_kaiserpfalz",
            "corporation_d_aachen_kdstv_makaria",
            "corporation_d_aachen_kdstv_marchia",
            "corporation_d_aachen_kdstv_ripuaria"
          ],
          "name": "Cartellverband der Katholischen Deutschen Studentenverbindungen"
        }
      ],
      "properties": {
        "abbreviation": {
          "description": "The abbreviation of the organisation",
          "title": "Abbreviation",
          "type": "string"
        },
        "hidden": {
          "$ref": "#/$defs/baseModel/hidden"
        },
        "id": {
          "$ref": "#/$defs/baseModel/id",
          "examples": [
            "organisation_cv"
          ]
        },
        "indicatorColourId": {
          "$ref": "#/$defs/mapDisplayable/indicatorColourId",
          "description": "The ID of the colour used to indicate a member of this organisation on the map"
        },
        "mapDisplayableIds": {
          "description": "The IDs of corporations or points of interest that are associated with this organisation",
          "items": {
            "title": "An ID of a corporation or a points of interest",
            "type": "string"
          },
          "title": "Member IDs",
          "type": "array"
        },
        "name": {
          "description": "The name of the organisation",
          "examples": [
            "Cartellverband der Katholischen Deutschen Studentenverbindungen"
          ],
          "title": "Name",
          "type": "string"
        }
      },
      "required": [
        "abbreviation",
        "id",
        "name"
      ],
      "title": "Organisation",
      "type": "object"
    },
    "pointOfInterest": {
      "description": "A location on the map which isn't home to a corporation",
      "properties": {
        "addressId": {
          "$ref": "#/$defs/mapDisplayable/addressId",
          "description": "The ID of the address at which this corporation is situated"
        },
        "associatedCorporationId": {
          "$ref": "#/$defs/ids/corporation",
          "description": "The ID of a corporation with which this POI is associated"
        },
        "eventIds": {
          "$ref": "#/$defs/mapDisplayable/eventIds"
        },
        "hidden": {
          "$ref": "#/$defs/baseModel/hidden"
        },
        "iconName": {
          "description": "The name of the icon to use for the marker",
          "title": "Icon name",
          "type": "string"
        },
        "id": {
          "$ref": "#/$defs/baseModel/id",
          "examples": [
            "corporation_de_aachen_kdstv_marchia"
          ]
        },
        "indicatorColourId": {
          "$ref": "#/$defs/mapDisplayable/indicatorColourId",
          "description": "The ID of the colour used to indicate a member of this organisation on the map",
          "examples": [
            "ind_green"
          ]
        },
        "longName": {
          "$ref": "#/$defs/mapDisplayable/longName"
        },
        "mail": {
          "$ref": "#/$defs/mapDisplayable/mail"
        },
        "phone": {
          "$ref": "#/$defs/mapDisplayable/phone"
        },
        "remark": {
          "$ref": "#/$defs/mapDisplayable/remark"
        },
        "shortName": {
          "$ref": "#/$defs/mapDisplayable/shortName"
        },
        "website": {
          "$ref": "#/$defs/mapDisplayable/website"
        }
      },
      "required": [
        "addressId",
        "id",
        "longName",
        "shortName"
      ],
      "title": "Point of Interest",
      "type": "object"
    },
    "translationKey": {
      "description": "A key that is used to look up the name in various languages",
      "pattern": "^[a-zA-Z0-9\u00c0-\u017e][a-zA-Z0-9\u00c0-\u017e_]*$",
      "title": "Translation key",
      "type": "string"
    }
  },
  "$id": "https://couleurbummel.app/v1/model.schema.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "description": "The database model for the app Couleurbummel\n\nThe objects on the top level are all mappings from IDs uniquely identifying objects to the respective objects.",
  "properties": {
    "addresses": {
      "additionalProperties": {
        "$ref": "#/$defs/address"
      },
      "description": "A mapping of address ID to an address object",
      "type": "object"
    },
    "cities": {
      "additionalProperties": {
        "$ref": "#/$defs/city"
      },
      "description": "A mapping of city ID to a city object",
      "type": "object"
    },
    "colourFamilies": {
      "additionalProperties": {
        "$ref": "#/$defs/colourFamily"
      },
      "description": "A mapping of colour family ID to a colour family object",
      "type": "object"
    },
    "colours": {
      "additionalProperties": {
        "$ref": "#/$defs/colour"
      },
      "description": "A mapping of colour ID to a colour object",
      "type": "object"
    },
    "corporations": {
      "additionalProperties": {
        "$ref": "#/$defs/corporation"
      },
      "description": "A mapping of corporation ID to a corporation object",
      "type": "object"
    },
    "countries": {
      "additionalProperties": {
        "$ref": "#/$defs/country"
      },
      "description": "A mapping of country ID to a country object",
      "type": "object"
    },
    "events": {
      "additionalProperties": {
        "$ref": "#/$defs/event"
      },
      "description": "A mapping of event ID to an event object",
      "type": "object"
    },
    "organisations": {
      "additionalProperties": {
        "$ref": "#/$defs/organisation"
      },
      "description": "A mapping of organisation ID to an organisation object",
      "type": "object"
    },
    "pointsOfInterest": {
      "additionalProperties": {
        "$ref": "#/$defs/pointOfInterest"
      },
      "description": "A mapping of point of interest ID to a point of interest object",
      "type": "object"
    }
  },
  "title": "CouleurbummelModel",
  "type": "object"
}