clqms-be/public/paths/rules.yaml
mahdahar 88be3f3809 feat: add rules engine API and order-created hook
- Add /api/rules CRUD, nested actions, and expr validation

- Add rules migration, models, and RuleEngine/Expression services

- Run ORDER_CREATED rules after order create (non-blocking) and refresh tests

- Update OpenAPI tags/schemas/paths and bundled docs
2026-03-12 06:34:56 +07:00

317 lines
7.3 KiB
YAML

/api/rules:
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/rules/{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/rules/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/rules/{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/rules/{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