Files
dingtalk-workspace-cli/internal/cli/schema_constraints_runtime.go

126 lines
7.4 KiB
Go

// Copyright 2026 Alibaba Group
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
package cli
func init() {
RegisterRuntimeSchemaConstraints("aitable.export_data", RuntimeSchemaConstraints{
MutuallyExclusive: [][]string{
{"task-id", "scope"},
{"task-id", "export-format"},
{"task-id", "table-id"},
{"task-id", "view-id"},
},
RequireOneOf: [][]string{
{"scope", "task-id"},
{"export-format", "task-id"},
},
RequireTogether: [][]string{{"scope", "export-format"}},
})
registerRequireOneOf("aitable.field_update", "name", "config", "ai-config")
registerRequireOneOf("aitable.view_update_aggregate", "json", "field-id", "clear-field-id")
registerRequireTogether("aitable.view_update_aggregate", "field-id", "action")
RegisterRuntimeSchemaConstraints("aitable.view_update_card", RuntimeSchemaConstraints{
MutuallyExclusive: [][]string{{"no-cover", "cover-field-id"}},
RequireOneOf: [][]string{{
"json", "no-cover", "cover-field-id", "cover-resize-mode",
"hidden-field-title", "cover-mode", "display-field-name",
}},
})
registerRequireOneOf("aitable.view_update_field_widths", "json", "field-id")
registerRequireTogether("aitable.view_update_field_widths", "field-id", "width")
registerRequireOneOf("aitable.view_update_timebar", "json", "start-field", "end-field", "display-field-id", "timeline-scale", "official-holiday", "color-configs")
registerRequireOneOf("aitable.table_update", "name", "description", "record-name-key")
registerRequireOneOf("attendance.vacation_update_type", "name", "unit", "paid", "per-hours", "when-can-leave", "visibility-rules")
registerRequireTogether("calendar.create_calendar_event", "recurrence-type", "recurrence-interval", "recurrence-range-type")
registerRequireOneOf("calendar.query_busy_status", "users", "rooms")
registerRequireTogether("calendar.update_calendar_event", "recurrence-type", "recurrence-interval", "recurrence-range-type")
registerExclusiveOneOf("chat.search_messages_by_sender", "sender-user-id", "sender-open-dingtalk-id")
registerExclusiveOneOf("chat.create_and_send_card", "group", "receiver")
RegisterRuntimeSchemaConstraints("chat.chat_permission_grant", RuntimeSchemaConstraints{
MutuallyExclusive: [][]string{{"conversation-id", "open-dingtalk-id", "user"}},
RequireOneOf: [][]string{{"conversation-id", "open-dingtalk-id", "user", "permParam"}},
})
registerExclusiveOneOf("chat.chat_permission_grant_cross_org_data", "target-org-id", "all")
registerExclusiveOneOf("chat.clear_conversation_messages", "conversation-id", "id", "chat")
registerExclusiveOneOf("chat.clear_conversation_red_point", "conversation-id", "id", "chat")
registerExclusiveOneOf("chat.get_conversation_info", "group", "user", "open-dingtalk-id")
registerExclusiveOneOf("chat.hide_conversation", "conversation-id", "id", "chat")
registerExclusiveOneOf("chat.list_conversation_message_v2", "group", "user", "open-dingtalk-id")
registerExclusiveOneOf("chat.list_individual_chat_message", "user", "open-dingtalk-id")
registerExclusiveOneOf("chat.mark_conversation_unread", "conversation-id", "id", "chat")
registerExclusiveOneOf("chat.mark_message_read", "conversation-id", "id", "chat")
registerRequireOneOf("chat.send_personal_message", "text", "content", "msg-type")
registerExclusiveOneOf("chat.send_robot_message", "group", "users")
registerRequireOneOf("chat.set_group_member_mute_list", "users", "user")
registerExclusiveOneOf("chat.share_group_invite_url", "target", "receiver")
registerExclusiveOneOf("chat.transfer_group_owner", "new-owner", "user")
registerRequireOneOf("chat.update_conv_member_roles", "users", "user")
registerExclusiveOneOf("chat.update_at_all_notification_off", "conversation-id", "id", "chat")
registerRequireOneOf("chat.update_notification_off", "conversation-id", "id", "chat")
registerExclusiveOneOf("chat.update_red_env_notification_off", "conversation-id", "id", "chat")
registerRequireTogether("contact.query_dismission_employee_list", "start", "end")
registerRequireOneOf("dev.connect_status", "robot-client-id", "unified-app-id")
registerRequireOneOf("dev.connect_stop", "robot-client-id", "unified-app-id")
registerRequireOneOf("dev.search_open_platform_docs_rag", "query", "keyword")
registerRequireOneOf("devdoc.search_open_error_code_rag", "query", "request-id", "error-code", "error-message", "context")
registerRequireOneOf("devdoc.search_open_platform_docs_rag", "query", "keyword")
registerRequireOneOf("event.consume", "event_key", "subscribe-id")
registerExclusiveOneOf("event.stop", "all", "subscribe_id")
registerRequireOneOf("doc.insert_document_block", "content", "heading", "element")
registerExclusiveOneOf("doc.update_document", "content", "content-file")
registerRequireOneOf("doc.update_document_block", "content", "heading", "element")
registerRequireOneOf("pat.batch_grant", "scope", "product", "products", "domain", "domains", "recommend")
registerRequireOneOf("mail.search_mail_users", "keyword", "employee-no")
// --body is a hidden compatibility alias for the public --content flag.
// Schema constraints describe the reviewed public surface only.
registerRequireOneOf("mail.update_user_message_template", "from", "subject", "content", "name", "to", "cc")
registerRequireOneOf("report.create_report", "contents", "contents-file")
RegisterRuntimeSchemaConstraints("sheet.range_set_style", RuntimeSchemaConstraints{
MutuallyExclusive: [][]string{
{"bg-color", "bg-colors-json"},
{"font-size", "font-sizes-json"},
{"h-align", "h-aligns-json"},
{"v-align", "v-aligns-json"},
{"font-color", "font-colors-json"},
{"font-weight", "font-weights-json"},
},
RequireOneOf: [][]string{{
"bg-color", "bg-colors-json", "font-size", "font-sizes-json",
"h-align", "h-aligns-json", "v-align", "v-aligns-json",
"font-color", "font-colors-json", "font-weight", "font-weights-json",
"word-wrap", "number-format",
}},
})
registerRequireOneOf("sheet.update_cond_format", "ranges", "condition", "cell-style", "data-bar-style")
registerRequireOneOf("sheet.update_dimension", "hidden", "pixel-size")
registerRequireOneOf("sheet.update_filter_view", "name", "range", "criteria")
RegisterRuntimeSchemaConstraints("sheet.create_float_image", RuntimeSchemaConstraints{
MutuallyExclusive: [][]string{{"file", "src"}},
RequireOneOf: [][]string{{"file", "src"}},
})
RegisterRuntimeSchemaConstraints("sheet.update_float_image", RuntimeSchemaConstraints{
MutuallyExclusive: [][]string{{"file", "src"}},
RequireOneOf: [][]string{{"file", "src", "range", "width", "height", "offset-x", "offset-y"}},
})
registerRequireOneOf("sheet.update_sheet", "name", "index", "hidden", "frozen-row-count", "frozen-column-count", "tab-color")
registerRequireOneOf("sheet.import", "folder-token", "workspace")
registerRequireOneOf("wiki.search_wikiSpaces", "query", "type")
}
func registerRequireOneOf(canonicalPath string, names ...string) {
RegisterRuntimeSchemaConstraints(canonicalPath, RuntimeSchemaConstraints{RequireOneOf: [][]string{names}})
}
func registerExclusiveOneOf(canonicalPath string, names ...string) {
RegisterRuntimeSchemaConstraints(canonicalPath, RuntimeSchemaConstraints{
MutuallyExclusive: [][]string{names},
RequireOneOf: [][]string{names},
})
}
func registerRequireTogether(canonicalPath string, names ...string) {
RegisterRuntimeSchemaConstraints(canonicalPath, RuntimeSchemaConstraints{RequireTogether: [][]string{names}})
}