{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "^[a-zA-Z0-9_-]+$"
    },
    "member": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "pattern": "^[a-zA-Z0-9_-]+$"
    },
    "reason": {
      "type": "string"
    },
    "bannedAt": {
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "bannedBy": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "rollback": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string"
        },
        "finishedAt": {
          "anyOf": [
            {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            {
              "type": "null"
            }
          ]
        },
        "outcome": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "attemptsRejected": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "completionsRevoked": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "completionsRestored": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "completionsKept": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "completion": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100,
                        "pattern": "^[a-zA-Z0-9_-]+$"
                      },
                      "code": {
                        "type": "string"
                      }
                    },
                    "required": ["completion", "code"]
                  }
                },
                "entriesReversed": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "referralAccounts": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                "points": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "ledger": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100,
                        "pattern": "^[a-zA-Z0-9_-]+$"
                      },
                      "reversed": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      },
                      "unreversed": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": ["ledger", "reversed", "unreversed"]
                  }
                },
                "referralDebt": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "ledger": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 100,
                        "pattern": "^[a-zA-Z0-9_-]+$"
                      },
                      "amount": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 9007199254740991
                      }
                    },
                    "required": ["ledger", "amount"]
                  }
                }
              },
              "required": [
                "attemptsRejected",
                "completionsRevoked",
                "completionsRestored",
                "completionsKept",
                "entriesReversed",
                "referralAccounts",
                "points",
                "referralDebt"
              ]
            },
            {
              "type": "null"
            }
          ]
        },
        "completions": {
          "type": "boolean"
        },
        "referralPayouts": {
          "type": "boolean"
        },
        "pointAwards": {
          "type": "boolean"
        }
      },
      "required": [
        "status",
        "finishedAt",
        "outcome",
        "completions",
        "referralPayouts",
        "pointAwards"
      ]
    },
    "unban": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string"
            },
            "unbannedAt": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            },
            "by": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ]
            },
            "restoreCompletions": {
              "type": "boolean"
            },
            "restore": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "status": {
                      "type": "string"
                    },
                    "finishedAt": {
                      "anyOf": [
                        {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "outcome": {
                      "anyOf": [
                        {
                          "type": "object",
                          "properties": {
                            "attemptsRejected": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "completionsRevoked": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "completionsRestored": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "completionsKept": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "completion": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 100,
                                    "pattern": "^[a-zA-Z0-9_-]+$"
                                  },
                                  "code": {
                                    "type": "string"
                                  }
                                },
                                "required": ["completion", "code"]
                              }
                            },
                            "entriesReversed": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "referralAccounts": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 9007199254740991
                            },
                            "points": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "ledger": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 100,
                                    "pattern": "^[a-zA-Z0-9_-]+$"
                                  },
                                  "reversed": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  },
                                  "unreversed": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": ["ledger", "reversed", "unreversed"]
                              }
                            },
                            "referralDebt": {
                              "type": "array",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "ledger": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 100,
                                    "pattern": "^[a-zA-Z0-9_-]+$"
                                  },
                                  "amount": {
                                    "type": "integer",
                                    "minimum": 0,
                                    "maximum": 9007199254740991
                                  }
                                },
                                "required": ["ledger", "amount"]
                              }
                            }
                          },
                          "required": [
                            "attemptsRejected",
                            "completionsRevoked",
                            "completionsRestored",
                            "completionsKept",
                            "entriesReversed",
                            "referralAccounts",
                            "points",
                            "referralDebt"
                          ]
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  },
                  "required": ["status", "finishedAt", "outcome"]
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "reason",
            "unbannedAt",
            "by",
            "restoreCompletions",
            "restore"
          ]
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "id",
    "member",
    "reason",
    "bannedAt",
    "bannedBy",
    "rollback",
    "unban"
  ]
}
