swagger: "2.0"
info: { version: "", title: "" }

paths:
  /rules:
    get:
      tags: [ "rules" ]
      summary: "List rules"
      operationId: "listRules"
      responses:
        "200":
          description: "successful operation"
          schema: { type: array, items: { $ref: "#/definitions/RuleResponse" } }
          examples:
            test:
              - id: ignore-alerts
                name: Ignore Alerts
                condition: "type == 'alert'"
                update: { "status": "closed" }
      security: [ { roles: [ "rule:read" ] } ]
    post:
      tags: [ "rules" ]
      summary: "Create a rule"
      operationId: "createRule"
      parameters:
        - { name: "rule", in: "body", description: "New rule", required: true, schema: { $ref: "#/definitions/RuleForm" }, x-example: { name: "Ignore all Alerts", condition: "type == 'alert'", update: { "status": "closed" } } }
      responses:
        "200":
          description: "successful operation"
          schema: { type: array, items: { $ref: "#/definitions/RuleResponse" } }
          examples:
            test:
              id: ignore-all-alerts
              name: Ignore all Alerts
              condition: "type == 'alert'"
              update: { "status": "closed" }
      security: [ { roles: [ "rule:write" ] } ]

  /rules/{id}:
    get:
      tags: [ "rules" ]
      summary: "Get a single rule"
      operationId: "getRule"
      parameters:
        - { name: "id", in: "path", description: "Rule name", required: true, type: string, x-example: "ignore-alerts" }
      responses:
        "200":
          description: "successful operation"
          schema: { $ref: "#/definitions/RuleResponse" }
          examples:
            test:
              id: ignore-alerts
              name: Ignore Alerts
              condition: "type == 'alert'"
              update: { "status": "closed" }
      security: [ { roles: [ "rule:read" ] } ]
    put:
      tags: [ "rules" ]
      summary: "Update an existing ticket rule"
      operationId: "updateRule"
      parameters:
        - { name: "id", in: "path", description: "Rule ID", required: true, type: string, x-example: "ignore-alerts" }
        - { name: "rule", in: "body", description: "Updated rule", required: true, schema: { $ref: "#/definitions/RuleForm" }, x-example: { name: "Ignore Alerts", condition: "type == 'alert'", update: { "status": "invalid" } } }
      responses:
        "200":
          description: "successful operation"
          schema: { $ref: "#/definitions/RuleResponse" }
          examples:
            test:
              id: ignore-alerts
              name: Ignore Alerts
              condition: "type == 'alert'"
              update: { "status": "invalid" }
      security: [ { roles: [ "rule:write" ] } ]
    delete:
      tags: [ "rules" ]
      summary: "Delete a rule"
      operationId: "deleteRule"
      parameters:
        - { name: "id", in: "path", description: "Rule name", required: true, type: string, x-example: "ignore-alerts" }
      responses:
        "204": { description: "successful operation" }
      security: [ { roles: [ "rule:write" ] } ]

definitions:
  RuleForm:
    type: object
    required: [ name, condition, update ]
    properties:
      id: { type: string }
      name: { type: string }
      condition: { type: string }
      update: { type: object }

  Rule:
    type: object
    required: [ name, condition, update ]
    properties:
      name: { type: string }
      condition: { type: string }
      update: { type: object }

  RuleResponse:
    type: object
    required: [ id, name, condition, update ]
    properties:
      id: { type: string }
      name: { type: string }
      condition: { type: string }
      update: { type: object }
