/api/rule: get: tags: [Rules] summary: List rules security: - bearerAuth: [] parameters: - name: EventCode in: query schema: type: string description: Filter by event code - name: Active in: query schema: type: integer enum: [0, 1] description: Filter by active flag - name: ScopeType in: query schema: type: string enum: [GLOBAL, TESTSITE] description: Filter by scope type - name: TestSiteID in: query schema: type: integer description: Filter by TestSiteID (for TESTSITE scope) - name: search in: query schema: type: string description: Search by rule name responses: '200': description: List of rules content: application/json: schema: type: object properties: status: type: string message: type: string data: type: array items: $ref: '../components/schemas/rules.yaml#/RuleDef' post: tags: [Rules] summary: Create rule security: - bearerAuth: [] requestBody: required: true content: application/json: schema: type: object properties: Name: type: string Description: type: string EventCode: type: string example: ORDER_CREATED ScopeType: type: string enum: [GLOBAL, TESTSITE] TestSiteID: type: integer nullable: true ConditionExpr: type: string nullable: true Priority: type: integer Active: type: integer enum: [0, 1] actions: type: array items: type: object properties: Seq: type: integer ActionType: type: string ActionParams: oneOf: - type: string - type: object required: [Name, EventCode, ScopeType] responses: '201': description: Rule created /api/rule/{id}: get: tags: [Rules] summary: Get rule (with actions) security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer responses: '200': description: Rule details content: application/json: schema: type: object properties: status: type: string message: type: string data: $ref: '../components/schemas/rules.yaml#/RuleWithActions' '404': description: Rule not found patch: tags: [Rules] summary: Update rule security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object properties: Name: { type: string } Description: { type: string } EventCode: { type: string } ScopeType: { type: string, enum: [GLOBAL, TESTSITE] } TestSiteID: { type: integer, nullable: true } ConditionExpr: { type: string, nullable: true } Priority: { type: integer } Active: { type: integer, enum: [0, 1] } responses: '200': description: Rule updated '404': description: Rule not found delete: tags: [Rules] summary: Soft delete rule security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer responses: '200': description: Rule deleted '404': description: Rule not found /api/rule/validate: post: tags: [Rules] summary: Validate/evaluate an expression security: - bearerAuth: [] requestBody: required: true content: application/json: schema: type: object properties: expr: type: string context: type: object additionalProperties: true required: [expr] responses: '200': description: Validation result /api/rule/{id}/actions: get: tags: [Rules] summary: List actions for a rule security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer responses: '200': description: Actions list content: application/json: schema: type: object properties: status: type: string message: type: string data: type: array items: $ref: '../components/schemas/rules.yaml#/RuleAction' post: tags: [Rules] summary: Create action for a rule security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object properties: Seq: type: integer ActionType: type: string ActionParams: oneOf: - type: string - type: object required: [ActionType] responses: '201': description: Action created /api/rule/{id}/actions/{actionId}: patch: tags: [Rules] summary: Update action security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer - name: actionId in: path required: true schema: type: integer requestBody: required: true content: application/json: schema: type: object properties: Seq: { type: integer } ActionType: { type: string } ActionParams: oneOf: - type: string - type: object responses: '200': description: Action updated delete: tags: [Rules] summary: Soft delete action security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer - name: actionId in: path required: true schema: type: integer responses: '200': description: Action deleted