@redonvn/redai-openapi-wp-content-post 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/dist/index.cjs +2036 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1690 -0
- package/dist/index.d.ts +1690 -0
- package/dist/index.js +2010 -0
- package/dist/index.js.map +1 -0
- package/openclaw.plugin.json +84 -0
- package/package.json +52 -0
- package/tool-catalog.json +618 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../index.ts","../../redai-agent-sdk/src/client.ts","../tool-catalog.json","../wp-content-post.json"],"sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport {\n RedaiAgentClient,\n RedaiAgentError,\n type ToolExecutionInput\n} from \"@redonvn/redai-agent-sdk\";\nimport catalog from \"./tool-catalog.json\";\nimport spec from \"./wp-content-post.json\";\n\nexport { catalog, spec };\n\nconst DEFAULT_AUTH_STORE_PATH =\n \"C:\\\\Users\\\\Acer\\\\.openclaw\\\\workspace-nhan-vien-redai\\\\auth\\\\redai-auth.json\";\n\ntype PluginRuntimeConfig = {\n baseUrl?: string;\n bearerToken?: string;\n apiKey?: string;\n apiKeyHeader?: string;\n defaultHeaders?: Record<string, string>;\n timeoutMs?: number;\n workspaceId?: string;\n baseId?: string;\n authStorePath?: string;\n};\n\ntype ToolResult = { content: Array<{ type: \"text\"; text: string }> };\n\ntype CatalogTool = {\n name: string;\n description: string;\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n path: string;\n parameters: unknown;\n};\n\ntype OpenClawApiLike = {\n config?: {\n plugins?: {\n entries?: Record<string, { config?: PluginRuntimeConfig }>;\n };\n };\n registerTool: (\n definition: {\n name: string;\n description: string;\n parameters: unknown;\n execute: (id: string, params: unknown) => Promise<ToolResult>;\n },\n options?: { optional?: boolean }\n ) => void;\n};\n\ntype RedaiAuthEntry = {\n telegramUserId: string;\n bearerToken: string;\n workspaceId: string;\n baseId?: string | null;\n savedAt: string;\n lastValidatedAt: string | null;\n status: \"active\" | \"invalid\";\n};\n\ntype RedaiAuthStore = {\n version: 1;\n users: Record<string, RedaiAuthEntry>;\n};\n\nconst typedCatalog = catalog as {\n pluginId: string;\n optional?: boolean;\n serverUrl?: string;\n tools: CatalogTool[];\n};\n\nconst formatToolResult = (payload: unknown): ToolResult => ({\n content: [\n {\n type: \"text\",\n text: typeof payload === \"string\" ? payload : JSON.stringify(payload, null, 2)\n }\n ]\n});\n\nconst resolvePluginConfig = (api: OpenClawApiLike): PluginRuntimeConfig =>\n api.config?.plugins?.entries?.[typedCatalog.pluginId]?.config ?? {};\n\nconst cloneJson = <T>(value: T): T => JSON.parse(JSON.stringify(value)) as T;\n\nconst removeHeadersFromSchema = (schema: unknown) => {\n const cloned = cloneJson((schema ?? { type: \"object\", properties: {} }) as Record<string, unknown>);\n const objectSchema = cloned as {\n properties?: Record<string, unknown>;\n required?: string[];\n additionalProperties?: boolean;\n };\n if (!objectSchema.properties) {\n objectSchema.properties = {};\n }\n delete objectSchema.properties.headers;\n if (Array.isArray(objectSchema.required)) {\n objectSchema.required = objectSchema.required.filter((item) => item !== \"headers\");\n }\n objectSchema.additionalProperties = false;\n return objectSchema;\n};\n\nconst buildAuthWrappedParameters = (tool: CatalogTool) => {\n const baseSchema = removeHeadersFromSchema(tool.parameters);\n return {\n ...baseSchema,\n description: `${tool.description} Uses the logged-in RedAI auth for the current Telegram DM user.`,\n properties: {\n telegramUserId: {\n type: \"string\",\n description:\n \"Telegram sender ID from DM metadata. The agent must derive this automatically from the current message.\"\n },\n ...(baseSchema.properties ?? {})\n },\n required: [\n \"telegramUserId\",\n ...((baseSchema.required ?? []).filter((item: string) => item !== \"telegramUserId\"))\n ]\n };\n};\n\nconst buildAuthToolName = (toolName: string): string =>\n toolName.startsWith(\"redai_openapi_wp_content_post_\")\n ? toolName.replace(/^redai_openapi_wp_content_post_/, \"redai_openapi_wp_content_post_auth_\")\n : \"redai_openapi_wp_content_post_auth_${toolName}\";\n\nconst getAuthStorePath = (runtimeConfig: PluginRuntimeConfig) =>\n runtimeConfig.authStorePath?.trim() || DEFAULT_AUTH_STORE_PATH;\n\nconst ensureStoreDirectory = async (storePath: string) => {\n await mkdir(dirname(storePath), { recursive: true });\n};\n\nconst loadAuthStore = async (runtimeConfig: PluginRuntimeConfig): Promise<RedaiAuthStore> => {\n const storePath = getAuthStorePath(runtimeConfig);\n try {\n const raw = await readFile(storePath, \"utf8\");\n const parsed = JSON.parse(raw) as RedaiAuthStore;\n return { version: 1, users: parsed?.users ?? {} };\n } catch (error: unknown) {\n const maybeNodeError = error as NodeJS.ErrnoException;\n if (maybeNodeError?.code === \"ENOENT\") {\n await ensureStoreDirectory(storePath);\n await writeFile(storePath, JSON.stringify({ version: 1, users: {} }, null, 2), \"utf8\");\n return { version: 1, users: {} };\n }\n throw error;\n }\n};\n\nconst getAuthStoreEntry = async (runtimeConfig: PluginRuntimeConfig, telegramUserId: string) => {\n const store = await loadAuthStore(runtimeConfig);\n return store.users[telegramUserId] ?? null;\n};\n\nconst withRedaiAuth = (\n runtimeConfig: PluginRuntimeConfig,\n auth: Pick<RedaiAuthEntry, \"bearerToken\" | \"workspaceId\" | \"baseId\">\n): PluginRuntimeConfig => {\n const defaultHeaders = {\n ...(runtimeConfig.defaultHeaders ?? {}),\n \"x-workspace-id\": auth.workspaceId\n } as Record<string, string>;\n\n if (auth.baseId) {\n defaultHeaders[\"x-base-id\"] = auth.baseId;\n } else {\n delete defaultHeaders[\"x-base-id\"];\n }\n\n return {\n ...runtimeConfig,\n bearerToken: auth.bearerToken,\n apiKey: undefined,\n apiKeyHeader: undefined,\n defaultHeaders,\n workspaceId: auth.workspaceId,\n baseId: auth.baseId ?? undefined\n };\n};\n\nconst resolveUserRuntimeConfig = async (api: OpenClawApiLike, telegramUserId: string) => {\n const runtimeConfig = resolvePluginConfig(api);\n const authEntry = await getAuthStoreEntry(runtimeConfig, telegramUserId);\n if (!authEntry || authEntry.status !== \"active\") {\n return null;\n }\n return {\n runtimeConfig,\n scopedConfig: withRedaiAuth(runtimeConfig, authEntry)\n };\n};\n\nconst authRequiredResult = (telegramUserId: string) =>\n formatToolResult({\n ok: false,\n status: 401,\n statusText: \"AUTH_REQUIRED\",\n data: {\n message:\n \"Ban chua dang nhap RedAI auth hop le. Hay dung /login <bearerToken> <workspaceId> [baseId] trong DM truoc khi thao tac nghiep vu.\",\n telegramUserId\n }\n });\n\nconst hasHeadersSection = (tool: CatalogTool): boolean => {\n const parameters = tool.parameters as { properties?: Record<string, unknown> } | undefined;\n return Boolean(parameters?.properties?.headers);\n};\n\nconst mergeTenantHeaders = (\n tool: CatalogTool,\n inputHeaders: Record<string, unknown> | undefined,\n runtimeConfig: PluginRuntimeConfig\n): Record<string, string> | undefined => {\n const entries = Object.entries(inputHeaders ?? {})\n .filter(([, value]) => value !== undefined && value !== null && value !== \"\")\n .map(([key, value]) => [key, String(value)] as const);\n\n if (hasHeadersSection(tool)) {\n if (runtimeConfig.workspaceId && !entries.some(([key]) => key.toLowerCase() === \"x-workspace-id\")) {\n entries.push([\"x-workspace-id\", runtimeConfig.workspaceId]);\n }\n if (runtimeConfig.baseId && !entries.some(([key]) => key.toLowerCase() === \"x-base-id\")) {\n entries.push([\"x-base-id\", runtimeConfig.baseId]);\n }\n }\n\n return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n};\n\nconst executeCatalogTool = async (\n runtimeConfig: PluginRuntimeConfig,\n tool: CatalogTool,\n rawParams: unknown\n) => {\n const client = new RedaiAgentClient({\n ...runtimeConfig,\n baseUrl: runtimeConfig.baseUrl ?? typedCatalog.serverUrl\n });\n const params = (rawParams ?? {}) as ToolExecutionInput & {\n headers?: Record<string, unknown>;\n };\n\n return client.executeTool(tool, {\n path: params.path,\n query: params.query,\n body: params.body,\n headers: mergeTenantHeaders(tool, params.headers, runtimeConfig)\n });\n};\n\nconst registerAuthProxyTool = (api: OpenClawApiLike, tool: CatalogTool) => {\n api.registerTool(\n {\n name: buildAuthToolName(tool.name),\n description: `${tool.description} Uses the logged-in RedAI auth for the current Telegram DM user.`,\n parameters: buildAuthWrappedParameters(tool),\n execute: async (_id: string, rawParams: unknown) => {\n const params = (rawParams ?? {}) as Record<string, unknown>;\n const telegramUserId = String(params.telegramUserId ?? \"\");\n const resolved = await resolveUserRuntimeConfig(api, telegramUserId);\n if (!resolved) {\n return authRequiredResult(telegramUserId);\n }\n\n const forwardedParams = { ...params };\n delete forwardedParams.telegramUserId;\n\n try {\n const response = await executeCatalogTool(resolved.scopedConfig, tool, forwardedParams);\n return formatToolResult(response.data);\n } catch (error: unknown) {\n if (error instanceof RedaiAgentError) {\n return formatToolResult({\n ok: false,\n status: error.status ?? 500,\n statusText: error.message,\n data: error.body\n });\n }\n\n return formatToolResult({\n ok: false,\n status: 500,\n statusText: \"PLUGIN_EXECUTION_FAILED\",\n data: String(error)\n });\n }\n }\n },\n { optional: typedCatalog.optional ?? true }\n );\n};\n\nexport default function register(api: OpenClawApiLike): void {\n for (const tool of typedCatalog.tools) {\n api.registerTool(\n {\n name: tool.name,\n description: tool.description,\n parameters: tool.parameters,\n execute: async (_id: string, rawParams: unknown) => {\n try {\n const response = await executeCatalogTool(resolvePluginConfig(api), tool, rawParams);\n return formatToolResult(response.data);\n } catch (error: unknown) {\n if (error instanceof RedaiAgentError) {\n return formatToolResult({\n ok: false,\n status: error.status ?? 500,\n statusText: error.message,\n data: error.body\n });\n }\n\n return formatToolResult({\n ok: false,\n status: 500,\n statusText: \"PLUGIN_EXECUTION_FAILED\",\n data: String(error)\n });\n }\n }\n },\n { optional: typedCatalog.optional ?? true }\n );\n }\n\n for (const tool of typedCatalog.tools) {\n registerAuthProxyTool(api, tool);\n }\n}\n","import type {\n ApiResponse,\n HeaderMap,\n HttpMethod,\n OperationRequest,\n PathParams,\n QueryParams,\n RedaiAgentClientOptions,\n TenantContext,\n ToolDescriptor,\n ToolExecutionInput\n} from \"./types\";\n\nconst DEFAULT_BASE_URL = \"https://api.redai.vn/api/v1\";\n\nconst encodeQueryValue = (value: QueryParams[string]): string[] => {\n if (value === undefined) {\n return [];\n }\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n return [String(value)];\n};\n\nconst headersToObject = (headers: Headers): Record<string, string> => {\n const result: Record<string, string> = {};\n headers.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n};\n\nconst applyPathParams = (pathTemplate: string, pathParams?: PathParams): string =>\n pathTemplate.replace(/\\{([^}]+)\\}/g, (_, key: string) => {\n const raw = pathParams?.[key];\n if (raw === undefined || raw === null) {\n throw new RedaiAgentError(`Missing required path parameter: ${key}`);\n }\n return encodeURIComponent(String(raw));\n });\n\nconst buildUrl = (baseUrl: string, path: string, query?: QueryParams): URL => {\n const url = new URL(baseUrl);\n const normalizedBasePath = url.pathname.replace(/\\/+$/, \"\");\n const normalizedRequestPath = path.startsWith(\"/\") ? path : `/${path}`;\n url.pathname = `${normalizedBasePath}${normalizedRequestPath}`.replace(/\\/{2,}/g, \"/\");\n\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n for (const item of encodeQueryValue(value)) {\n url.searchParams.append(key, item);\n }\n }\n }\n\n return url;\n};\n\nconst parseResponse = async (response: Response): Promise<unknown> => {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"application/json\")) {\n return response.json();\n }\n return response.text();\n};\n\nexport class RedaiAgentError extends Error {\n status?: number;\n body?: unknown;\n\n constructor(message: string, options?: { status?: number; body?: unknown }) {\n super(message);\n this.name = \"RedaiAgentError\";\n this.status = options?.status;\n this.body = options?.body;\n }\n}\n\nexport class RedaiAgentClient {\n readonly baseUrl: string;\n\n private readonly bearerToken?: string;\n private readonly apiKey?: string;\n private readonly apiKeyHeader?: string;\n private readonly defaultHeaders?: Record<string, string>;\n private readonly timeoutMs?: number;\n private readonly fetchImpl: typeof globalThis.fetch;\n private readonly tenantContext: TenantContext;\n\n constructor(options: RedaiAgentClientOptions = {}) {\n this.baseUrl = (options.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\");\n this.bearerToken = options.bearerToken;\n this.apiKey = options.apiKey;\n this.apiKeyHeader = options.apiKeyHeader ?? \"x-api-key\";\n this.defaultHeaders = options.defaultHeaders;\n this.timeoutMs = options.timeoutMs;\n this.fetchImpl = options.fetch ?? globalThis.fetch;\n this.tenantContext = {\n workspaceId: options.workspaceId,\n baseId: options.baseId\n };\n }\n\n createTenantHeaders(overrides?: TenantContext): HeaderMap {\n const workspaceId = overrides?.workspaceId ?? this.tenantContext.workspaceId;\n const baseId = overrides?.baseId ?? this.tenantContext.baseId;\n\n return {\n \"x-workspace-id\": workspaceId,\n \"x-base-id\": baseId\n };\n }\n\n async executeTool<TData = unknown>(\n tool: ToolDescriptor,\n input: ToolExecutionInput = {}\n ): Promise<ApiResponse<TData>> {\n return this.request<TData>({\n method: tool.method,\n path: tool.path,\n pathParams: input.path as PathParams | undefined,\n query: input.query,\n headers: input.headers,\n body: input.body\n });\n }\n\n async request<TData = unknown, TBody = unknown>(\n request: OperationRequest<TBody>\n ): Promise<ApiResponse<TData>> {\n const url = buildUrl(this.baseUrl, applyPathParams(request.path, request.pathParams), request.query);\n const controller = new AbortController();\n const timeout = this.timeoutMs ? setTimeout(() => controller.abort(), this.timeoutMs) : undefined;\n const headers = this.buildHeaders(request.method, request.headers, request.body !== undefined);\n\n try {\n const response = await this.fetchImpl(url, {\n method: request.method,\n headers,\n body: request.body === undefined ? undefined : JSON.stringify(request.body),\n signal: controller.signal\n });\n const data = (await parseResponse(response)) as TData;\n const result: ApiResponse<TData> = {\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers: headersToObject(response.headers),\n data\n };\n\n if (!response.ok) {\n throw new RedaiAgentError(`Request failed with status ${response.status}`, {\n status: response.status,\n body: data\n });\n }\n\n return result;\n } catch (error: unknown) {\n if (error instanceof RedaiAgentError) {\n throw error;\n }\n throw new RedaiAgentError(\"Request failed\", { body: error });\n } finally {\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n }\n\n private buildHeaders(method: HttpMethod, requestHeaders?: HeaderMap, hasBody?: boolean): Headers {\n const headers = new Headers();\n\n for (const [key, value] of Object.entries(this.defaultHeaders ?? {})) {\n headers.set(key, value);\n }\n\n for (const [key, value] of Object.entries(this.createTenantHeaders())) {\n if (value !== undefined && value !== null && value !== \"\") {\n headers.set(key, value);\n }\n }\n\n if (this.bearerToken) {\n headers.set(\"authorization\", `Bearer ${this.bearerToken}`);\n } else if (this.apiKey) {\n headers.set(this.apiKeyHeader ?? \"x-api-key\", this.apiKey);\n }\n\n for (const [key, value] of Object.entries(requestHeaders ?? {})) {\n if (value !== undefined && value !== null && value !== \"\") {\n headers.set(key, value);\n }\n }\n\n if (!headers.has(\"accept\")) {\n headers.set(\"accept\", \"application/json\");\n }\n\n if (hasBody && method !== \"GET\" && !headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json\");\n }\n\n return headers;\n }\n}\n","{\n \"pluginId\": \"redai-openapi-wp-content-post\",\n \"pluginName\": \"RedAI User API Export - WP Content Post\",\n \"version\": \"0.1.0\",\n \"description\": \"OpenAPI export cho nhóm API user đã chọn: WP Content Post.\",\n \"serverUrl\": \"https://v2.redai.vn/api\",\n \"optional\": true,\n \"tools\": [\n {\n \"name\": \"redai_openapi_wp_content_post_wpcontentpostusercontroller_bulkdelete_v1\",\n \"description\": \"Xóa nhiều bài viết. Xóa nhiều bài viết cùng lúc (soft delete hoặc hard delete)\",\n \"method\": \"DELETE\",\n \"path\": \"/v1/user/posts\",\n \"operationId\": \"wpcontentpostusercontroller_bulkdelete_v1\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"headers\": {\n \"type\": \"object\",\n \"properties\": {\n \"x-workspace-id\": {\n \"type\": \"string\",\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\"\n },\n \"x-base-id\": {\n \"type\": \"string\",\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\"\n }\n },\n \"required\": [\n \"x-workspace-id\"\n ],\n \"additionalProperties\": false\n },\n \"body\": {\n \"type\": \"object\",\n \"properties\": {\n \"ids\": {\n \"type\": \"array\",\n \"description\": \"Array of post IDs to delete\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"permanent\": {\n \"type\": \"boolean\",\n \"description\": \"Permanent delete (hard delete) or soft delete (status=trash)\",\n \"default\": false\n }\n },\n \"required\": [\n \"ids\"\n ]\n }\n },\n \"required\": [\n \"headers\",\n \"body\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Xóa nhiều bài viết tool arguments\"\n },\n \"tags\": [\n \"User - WP Content Post\"\n ]\n },\n {\n \"name\": \"redai_openapi_wp_content_post_wpcontentpostusercontroller_create_v1\",\n \"description\": \"Tạo bài viết mới. User hoặc Employee tạo bài viết mới (draft hoặc publish)\",\n \"method\": \"POST\",\n \"path\": \"/v1/user/posts\",\n \"operationId\": \"wpcontentpostusercontroller_create_v1\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"headers\": {\n \"type\": \"object\",\n \"properties\": {\n \"x-workspace-id\": {\n \"type\": \"string\",\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\"\n },\n \"x-base-id\": {\n \"type\": \"string\",\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\"\n }\n },\n \"required\": [\n \"x-workspace-id\"\n ],\n \"additionalProperties\": false\n },\n \"body\": {\n \"type\": \"object\",\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"Tiêu đề bài viết\"\n },\n \"slug\": {\n \"type\": \"string\",\n \"description\": \"Slug (friendly URL) - auto-generate nếu không nhập\"\n },\n \"excerpt\": {\n \"type\": \"string\",\n \"description\": \"Mô tả ngắn\"\n },\n \"content\": {\n \"description\": \"Nội dung bài viết (Gutenberg blocks)\",\n \"allOf\": [\n {\n \"type\": \"object\",\n \"properties\": {\n \"blocks\": {\n \"type\": \"array\",\n \"description\": \"Array of Gutenberg blocks\",\n \"items\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"a\"\n }\n }\n },\n \"meta\": {\n \"type\": \"object\",\n \"description\": \"Additional metadata\"\n },\n \"settings\": {\n \"type\": \"object\",\n \"description\": \"Content settings\"\n }\n },\n \"required\": [\n \"blocks\"\n ]\n }\n ]\n },\n \"featuredImageId\": {\n \"type\": \"string\",\n \"description\": \"ID ảnh đại diện (UUID)\"\n },\n \"status\": {\n \"type\": \"string\",\n \"description\": \"Trạng thái bài viết\",\n \"default\": \"draft\",\n \"enum\": [\n \"draft\",\n \"pending\",\n \"private\",\n \"publish\",\n \"future\",\n \"trash\",\n \"archived\"\n ]\n },\n \"type\": {\n \"type\": \"string\",\n \"description\": \"Loại bài viết\",\n \"default\": \"post\"\n },\n \"metaTitle\": {\n \"type\": \"string\",\n \"description\": \"SEO: Meta title (max 70 chars)\"\n },\n \"metaDescription\": {\n \"type\": \"string\",\n \"description\": \"SEO: Meta description (max 160 chars)\"\n },\n \"metaKeywords\": {\n \"type\": \"array\",\n \"description\": \"SEO: Meta keywords\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"commentStatus\": {\n \"type\": \"string\",\n \"description\": \"Trạng thái comment\",\n \"default\": \"open\"\n },\n \"sticky\": {\n \"type\": \"boolean\",\n \"description\": \"Đánh dấu sticky post\",\n \"default\": false\n },\n \"password\": {\n \"type\": \"string\",\n \"description\": \"Mật khẩu bảo vệ bài viết (plaintext)\"\n },\n \"menuOrder\": {\n \"type\": \"number\",\n \"description\": \"Thứ tự hiển thị\",\n \"default\": 0\n }\n },\n \"required\": [\n \"title\",\n \"content\"\n ]\n }\n },\n \"required\": [\n \"headers\",\n \"body\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Tạo bài viết mới tool arguments\"\n },\n \"tags\": [\n \"User - WP Content Post\"\n ]\n },\n {\n \"name\": \"redai_openapi_wp_content_post_wpcontentpostusercontroller_findall_v1\",\n \"description\": \"Lấy danh sách bài viết. Lấy danh sách bài viết của user/employee với filters và pagination\",\n \"method\": \"GET\",\n \"path\": \"/v1/user/posts\",\n \"operationId\": \"wpcontentpostusercontroller_findall_v1\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"query\": {\n \"type\": \"object\",\n \"properties\": {\n \"status\": {\n \"type\": \"string\",\n \"enum\": [\n \"draft\",\n \"pending\",\n \"private\",\n \"publish\",\n \"future\",\n \"trash\",\n \"archived\"\n ],\n \"description\": \"Filter by status\"\n },\n \"type\": {\n \"type\": \"string\",\n \"description\": \"Filter by type\"\n },\n \"search\": {\n \"type\": \"string\",\n \"description\": \"Search in title, excerpt, content\"\n },\n \"sticky\": {\n \"type\": \"boolean\",\n \"default\": false,\n \"description\": \"Filter sticky posts only\"\n },\n \"sortBy\": {\n \"type\": \"string\",\n \"default\": \"createdAt\",\n \"description\": \"Sort field\"\n },\n \"sortOrder\": {\n \"type\": \"string\",\n \"default\": \"DESC\",\n \"enum\": [\n \"ASC\",\n \"DESC\"\n ],\n \"description\": \"Sort order\"\n },\n \"page\": {\n \"type\": \"number\",\n \"default\": 1,\n \"description\": \"Page number\"\n },\n \"limit\": {\n \"type\": \"number\",\n \"default\": 10,\n \"description\": \"Items per page\"\n }\n },\n \"additionalProperties\": false\n },\n \"headers\": {\n \"type\": \"object\",\n \"properties\": {\n \"x-workspace-id\": {\n \"type\": \"string\",\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\"\n },\n \"x-base-id\": {\n \"type\": \"string\",\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\"\n }\n },\n \"required\": [\n \"x-workspace-id\"\n ],\n \"additionalProperties\": false\n }\n },\n \"required\": [\n \"headers\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Lấy danh sách bài viết tool arguments\"\n },\n \"tags\": [\n \"User - WP Content Post\"\n ]\n },\n {\n \"name\": \"redai_openapi_wp_content_post_wpcontentpostusercontroller_findone_v1\",\n \"description\": \"Lấy chi tiết bài viết. Lấy thông tin chi tiết của một bài viết (chỉ bài viết của chính user/employee)\",\n \"method\": \"GET\",\n \"path\": \"/v1/user/posts/{id}\",\n \"operationId\": \"wpcontentpostusercontroller_findone_v1\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"path\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Post ID (UUID)\"\n }\n },\n \"required\": [\n \"id\"\n ],\n \"additionalProperties\": false\n },\n \"headers\": {\n \"type\": \"object\",\n \"properties\": {\n \"x-workspace-id\": {\n \"type\": \"string\",\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\"\n },\n \"x-base-id\": {\n \"type\": \"string\",\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\"\n }\n },\n \"required\": [\n \"x-workspace-id\"\n ],\n \"additionalProperties\": false\n }\n },\n \"required\": [\n \"path\",\n \"headers\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Lấy chi tiết bài viết tool arguments\"\n },\n \"tags\": [\n \"User - WP Content Post\"\n ]\n },\n {\n \"name\": \"redai_openapi_wp_content_post_wpcontentpostusercontroller_submitforreview_v1\",\n \"description\": \"Gửi bài viết đi duyệt. Chuyển trạng thái bài viết sang pending để chờ admin duyệt\",\n \"method\": \"POST\",\n \"path\": \"/v1/user/posts/{id}/submit-for-review\",\n \"operationId\": \"wpcontentpostusercontroller_submitforreview_v1\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"path\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Post ID (UUID)\"\n }\n },\n \"required\": [\n \"id\"\n ],\n \"additionalProperties\": false\n },\n \"headers\": {\n \"type\": \"object\",\n \"properties\": {\n \"x-workspace-id\": {\n \"type\": \"string\",\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\"\n },\n \"x-base-id\": {\n \"type\": \"string\",\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\"\n }\n },\n \"required\": [\n \"x-workspace-id\"\n ],\n \"additionalProperties\": false\n }\n },\n \"required\": [\n \"path\",\n \"headers\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Gửi bài viết đi duyệt tool arguments\"\n },\n \"tags\": [\n \"User - WP Content Post\"\n ]\n },\n {\n \"name\": \"redai_openapi_wp_content_post_wpcontentpostusercontroller_togglesticky_v1\",\n \"description\": \"Toggle sticky status. Đảo trạng thái sticky của bài viết (true → false hoặc false → true)\",\n \"method\": \"PATCH\",\n \"path\": \"/v1/user/posts/{id}/toggle-sticky\",\n \"operationId\": \"wpcontentpostusercontroller_togglesticky_v1\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"path\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Post ID (UUID)\"\n }\n },\n \"required\": [\n \"id\"\n ],\n \"additionalProperties\": false\n },\n \"headers\": {\n \"type\": \"object\",\n \"properties\": {\n \"x-workspace-id\": {\n \"type\": \"string\",\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\"\n },\n \"x-base-id\": {\n \"type\": \"string\",\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\"\n }\n },\n \"required\": [\n \"x-workspace-id\"\n ],\n \"additionalProperties\": false\n }\n },\n \"required\": [\n \"path\",\n \"headers\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Toggle sticky status tool arguments\"\n },\n \"tags\": [\n \"User - WP Content Post\"\n ]\n },\n {\n \"name\": \"redai_openapi_wp_content_post_wpcontentpostusercontroller_update_v1\",\n \"description\": \"Cập nhật bài viết. Cập nhật thông tin bài viết (chỉ bài viết của chính user/employee)\",\n \"method\": \"PUT\",\n \"path\": \"/v1/user/posts/{id}\",\n \"operationId\": \"wpcontentpostusercontroller_update_v1\",\n \"parameters\": {\n \"type\": \"object\",\n \"properties\": {\n \"path\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"description\": \"Post ID (UUID)\"\n }\n },\n \"required\": [\n \"id\"\n ],\n \"additionalProperties\": false\n },\n \"headers\": {\n \"type\": \"object\",\n \"properties\": {\n \"x-workspace-id\": {\n \"type\": \"string\",\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\"\n },\n \"x-base-id\": {\n \"type\": \"string\",\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\"\n }\n },\n \"required\": [\n \"x-workspace-id\"\n ],\n \"additionalProperties\": false\n },\n \"body\": {\n \"type\": \"object\",\n \"properties\": {\n \"title\": {\n \"type\": \"string\",\n \"description\": \"Tiêu đề bài viết\"\n },\n \"slug\": {\n \"type\": \"string\",\n \"description\": \"Slug (friendly URL) - auto-generate nếu không nhập\"\n },\n \"excerpt\": {\n \"type\": \"string\",\n \"description\": \"Mô tả ngắn\"\n },\n \"content\": {\n \"description\": \"Nội dung bài viết (Gutenberg blocks)\",\n \"allOf\": [\n {\n \"type\": \"object\",\n \"properties\": {\n \"blocks\": {\n \"type\": \"array\",\n \"description\": \"Array of Gutenberg blocks\",\n \"items\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"a\"\n }\n }\n },\n \"meta\": {\n \"type\": \"object\",\n \"description\": \"Additional metadata\"\n },\n \"settings\": {\n \"type\": \"object\",\n \"description\": \"Content settings\"\n }\n },\n \"required\": [\n \"blocks\"\n ]\n }\n ]\n },\n \"featuredImageId\": {\n \"type\": \"string\",\n \"description\": \"ID ảnh đại diện (UUID)\"\n },\n \"status\": {\n \"type\": \"string\",\n \"description\": \"Trạng thái bài viết\",\n \"default\": \"draft\",\n \"enum\": [\n \"draft\",\n \"pending\",\n \"private\",\n \"publish\",\n \"future\",\n \"trash\",\n \"archived\"\n ]\n },\n \"type\": {\n \"type\": \"string\",\n \"description\": \"Loại bài viết\",\n \"default\": \"post\"\n },\n \"metaTitle\": {\n \"type\": \"string\",\n \"description\": \"SEO: Meta title (max 70 chars)\"\n },\n \"metaDescription\": {\n \"type\": \"string\",\n \"description\": \"SEO: Meta description (max 160 chars)\"\n },\n \"metaKeywords\": {\n \"type\": \"array\",\n \"description\": \"SEO: Meta keywords\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"commentStatus\": {\n \"type\": \"string\",\n \"description\": \"Trạng thái comment\",\n \"default\": \"open\"\n },\n \"sticky\": {\n \"type\": \"boolean\",\n \"description\": \"Đánh dấu sticky post\",\n \"default\": false\n },\n \"password\": {\n \"type\": \"string\",\n \"description\": \"Mật khẩu bảo vệ bài viết (plaintext)\"\n },\n \"menuOrder\": {\n \"type\": \"number\",\n \"description\": \"Thứ tự hiển thị\",\n \"default\": 0\n }\n }\n }\n },\n \"required\": [\n \"path\",\n \"headers\",\n \"body\"\n ],\n \"additionalProperties\": false,\n \"description\": \"Cập nhật bài viết tool arguments\"\n },\n \"tags\": [\n \"User - WP Content Post\"\n ]\n }\n ]\n}\n","{\r\n \"openapi\": \"3.0.0\",\r\n \"paths\": {\r\n \"/v1/user/posts\": {\r\n \"post\": {\r\n \"description\": \"User hoặc Employee tạo bài viết mới (draft hoặc publish)\",\r\n \"operationId\": \"WpContentPostUserController_create_v1\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"x-workspace-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"x-base-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\",\r\n \"required\": false,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"required\": true,\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/CreatePostDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"201\": {\r\n \"description\": \"Bài viết đã được tạo thành công\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/PostResponseDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"Dữ liệu đầu vào không hợp lệ\"\r\n }\r\n },\r\n \"security\": [\r\n {\r\n \"JWT-auth\": [\r\n\r\n ]\r\n }\r\n ],\r\n \"summary\": \"Tạo bài viết mới\",\r\n \"tags\": [\r\n \"User - WP Content Post\"\r\n ]\r\n },\r\n \"get\": {\r\n \"description\": \"Lấy danh sách bài viết của user/employee với filters và pagination\",\r\n \"operationId\": \"WpContentPostUserController_findAll_v1\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"x-workspace-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"x-base-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\",\r\n \"required\": false,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"status\",\r\n \"required\": false,\r\n \"in\": \"query\",\r\n \"description\": \"Filter by status\",\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"enum\": [\r\n \"draft\",\r\n \"pending\",\r\n \"private\",\r\n \"publish\",\r\n \"future\",\r\n \"trash\",\r\n \"archived\"\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"type\",\r\n \"required\": false,\r\n \"in\": \"query\",\r\n \"description\": \"Filter by type\",\r\n \"schema\": {\r\n \"example\": \"post\",\r\n \"type\": \"string\"\r\n }\r\n },\r\n {\r\n \"name\": \"search\",\r\n \"required\": false,\r\n \"in\": \"query\",\r\n \"description\": \"Search in title, excerpt, content\",\r\n \"schema\": {\r\n \"example\": \"hello\",\r\n \"type\": \"string\"\r\n }\r\n },\r\n {\r\n \"name\": \"sticky\",\r\n \"required\": false,\r\n \"in\": \"query\",\r\n \"description\": \"Filter sticky posts only\",\r\n \"schema\": {\r\n \"default\": false,\r\n \"type\": \"boolean\"\r\n }\r\n },\r\n {\r\n \"name\": \"sortBy\",\r\n \"required\": false,\r\n \"in\": \"query\",\r\n \"description\": \"Sort field\",\r\n \"schema\": {\r\n \"default\": \"createdAt\",\r\n \"example\": \"createdAt\",\r\n \"type\": \"string\"\r\n }\r\n },\r\n {\r\n \"name\": \"sortOrder\",\r\n \"required\": false,\r\n \"in\": \"query\",\r\n \"description\": \"Sort order\",\r\n \"schema\": {\r\n \"default\": \"DESC\",\r\n \"type\": \"string\",\r\n \"enum\": [\r\n \"ASC\",\r\n \"DESC\"\r\n ]\r\n }\r\n },\r\n {\r\n \"name\": \"page\",\r\n \"required\": false,\r\n \"in\": \"query\",\r\n \"description\": \"Page number\",\r\n \"schema\": {\r\n \"minimum\": 1,\r\n \"default\": 1,\r\n \"type\": \"number\"\r\n }\r\n },\r\n {\r\n \"name\": \"limit\",\r\n \"required\": false,\r\n \"in\": \"query\",\r\n \"description\": \"Items per page\",\r\n \"schema\": {\r\n \"minimum\": 1,\r\n \"maximum\": 100,\r\n \"default\": 10,\r\n \"type\": \"number\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Danh sách bài viết\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"data\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"$ref\": \"#/components/schemas/PostResponseDto\"\r\n }\r\n },\r\n \"total\": {\r\n \"type\": \"number\",\r\n \"example\": 100\r\n },\r\n \"page\": {\r\n \"type\": \"number\",\r\n \"example\": 1\r\n },\r\n \"limit\": {\r\n \"type\": \"number\",\r\n \"example\": 10\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"security\": [\r\n {\r\n \"JWT-auth\": [\r\n\r\n ]\r\n }\r\n ],\r\n \"summary\": \"Lấy danh sách bài viết\",\r\n \"tags\": [\r\n \"User - WP Content Post\"\r\n ]\r\n },\r\n \"delete\": {\r\n \"description\": \"Xóa nhiều bài viết cùng lúc (soft delete hoặc hard delete)\",\r\n \"operationId\": \"WpContentPostUserController_bulkDelete_v1\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"x-workspace-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"x-base-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\",\r\n \"required\": false,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"required\": true,\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/BulkDeletePostDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Kết quả bulk delete\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"deleted\": {\r\n \"type\": \"number\",\r\n \"example\": 5\r\n },\r\n \"failed\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n },\r\n \"example\": [\r\n \"uuid-1\",\r\n \"uuid-2\"\r\n ]\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"security\": [\r\n {\r\n \"JWT-auth\": [\r\n\r\n ]\r\n }\r\n ],\r\n \"summary\": \"Xóa nhiều bài viết\",\r\n \"tags\": [\r\n \"User - WP Content Post\"\r\n ]\r\n }\r\n },\r\n \"/v1/user/posts/{id}\": {\r\n \"get\": {\r\n \"description\": \"Lấy thông tin chi tiết của một bài viết (chỉ bài viết của chính user/employee)\",\r\n \"operationId\": \"WpContentPostUserController_findOne_v1\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"x-workspace-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"x-base-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\",\r\n \"required\": false,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"id\",\r\n \"required\": true,\r\n \"in\": \"path\",\r\n \"description\": \"Post ID (UUID)\",\r\n \"schema\": {\r\n \"example\": \"123e4567-e89b-12d3-a456-426614174000\",\r\n \"type\": \"string\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Chi tiết bài viết\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/PostResponseDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Không có quyền truy cập bài viết này\"\r\n },\r\n \"404\": {\r\n \"description\": \"Không tìm thấy bài viết\"\r\n }\r\n },\r\n \"security\": [\r\n {\r\n \"JWT-auth\": [\r\n\r\n ]\r\n }\r\n ],\r\n \"summary\": \"Lấy chi tiết bài viết\",\r\n \"tags\": [\r\n \"User - WP Content Post\"\r\n ]\r\n },\r\n \"put\": {\r\n \"description\": \"Cập nhật thông tin bài viết (chỉ bài viết của chính user/employee)\",\r\n \"operationId\": \"WpContentPostUserController_update_v1\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"x-workspace-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"x-base-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\",\r\n \"required\": false,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"id\",\r\n \"required\": true,\r\n \"in\": \"path\",\r\n \"description\": \"Post ID (UUID)\",\r\n \"schema\": {\r\n \"example\": \"123e4567-e89b-12d3-a456-426614174000\",\r\n \"type\": \"string\"\r\n }\r\n }\r\n ],\r\n \"requestBody\": {\r\n \"required\": true,\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/UpdatePostDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Bài viết đã được cập nhật\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/PostResponseDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Không có quyền cập nhật bài viết này\"\r\n },\r\n \"404\": {\r\n \"description\": \"Không tìm thấy bài viết\"\r\n }\r\n },\r\n \"security\": [\r\n {\r\n \"JWT-auth\": [\r\n\r\n ]\r\n }\r\n ],\r\n \"summary\": \"Cập nhật bài viết\",\r\n \"tags\": [\r\n \"User - WP Content Post\"\r\n ]\r\n }\r\n },\r\n \"/v1/user/posts/{id}/submit-for-review\": {\r\n \"post\": {\r\n \"description\": \"Chuyển trạng thái bài viết sang pending để chờ admin duyệt\",\r\n \"operationId\": \"WpContentPostUserController_submitForReview_v1\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"x-workspace-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"x-base-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\",\r\n \"required\": false,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"id\",\r\n \"required\": true,\r\n \"in\": \"path\",\r\n \"description\": \"Post ID (UUID)\",\r\n \"schema\": {\r\n \"example\": \"123e4567-e89b-12d3-a456-426614174000\",\r\n \"type\": \"string\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Bài viết đã được gửi đi duyệt\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/PostResponseDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"400\": {\r\n \"description\": \"Bài viết chưa đủ thông tin bắt buộc\"\r\n },\r\n \"403\": {\r\n \"description\": \"Không có quyền gửi duyệt bài viết này\"\r\n },\r\n \"404\": {\r\n \"description\": \"Không tìm thấy bài viết\"\r\n }\r\n },\r\n \"security\": [\r\n {\r\n \"JWT-auth\": [\r\n\r\n ]\r\n }\r\n ],\r\n \"summary\": \"Gửi bài viết đi duyệt\",\r\n \"tags\": [\r\n \"User - WP Content Post\"\r\n ]\r\n }\r\n },\r\n \"/v1/user/posts/{id}/toggle-sticky\": {\r\n \"patch\": {\r\n \"description\": \"Đảo trạng thái sticky của bài viết (true → false hoặc false → true)\",\r\n \"operationId\": \"WpContentPostUserController_toggleSticky_v1\",\r\n \"parameters\": [\r\n {\r\n \"name\": \"x-workspace-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Workspace ID của tenant hiện tại (UUID)\",\r\n \"required\": true,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"x-base-id\",\r\n \"in\": \"header\",\r\n \"description\": \"Base ID của tenant hiện tại (UUID, optional)\",\r\n \"required\": false,\r\n \"schema\": {\r\n \"type\": \"string\",\r\n \"format\": \"uuid\"\r\n }\r\n },\r\n {\r\n \"name\": \"id\",\r\n \"required\": true,\r\n \"in\": \"path\",\r\n \"description\": \"Post ID (UUID)\",\r\n \"schema\": {\r\n \"example\": \"123e4567-e89b-12d3-a456-426614174000\",\r\n \"type\": \"string\"\r\n }\r\n }\r\n ],\r\n \"responses\": {\r\n \"200\": {\r\n \"description\": \"Sticky status đã được cập nhật\",\r\n \"content\": {\r\n \"application/json\": {\r\n \"schema\": {\r\n \"$ref\": \"#/components/schemas/PostResponseDto\"\r\n }\r\n }\r\n }\r\n },\r\n \"403\": {\r\n \"description\": \"Không có quyền chỉnh sửa bài viết này\"\r\n },\r\n \"404\": {\r\n \"description\": \"Không tìm thấy bài viết\"\r\n }\r\n },\r\n \"security\": [\r\n {\r\n \"JWT-auth\": [\r\n\r\n ]\r\n }\r\n ],\r\n \"summary\": \"Toggle sticky status\",\r\n \"tags\": [\r\n \"User - WP Content Post\"\r\n ]\r\n }\r\n }\r\n },\r\n \"info\": {\r\n \"title\": \"RedAI User API Export - WP Content Post\",\r\n \"description\": \"OpenAPI export cho nhóm API user đã chọn: WP Content Post.\",\r\n \"version\": \"1.0\",\r\n \"contact\": {\r\n \"name\": \"RedAI Support\",\r\n \"url\": \"https://redai.com/support\",\r\n \"email\": \"support@redai.com\"\r\n },\r\n \"license\": {\r\n \"name\": \"MIT\",\r\n \"url\": \"https://opensource.org/licenses/MIT\"\r\n }\r\n },\r\n \"tags\": [\r\n {\r\n \"name\": \"User - WP Content Post\",\r\n \"description\": \"User - WP Content Post endpoints\"\r\n }\r\n ],\r\n \"servers\": [\r\n {\r\n \"url\": \"http://localhost:3000\",\r\n \"description\": \"Local Server\"\r\n },\r\n {\r\n \"url\": \"http://localhost:3003\",\r\n \"description\": \"Development Server\"\r\n },\r\n {\r\n \"url\": \"http://14.225.29.196:3003\",\r\n \"description\": \"Test Server\"\r\n },\r\n {\r\n \"url\": \"https://api-staging.redai.vn\",\r\n \"description\": \"Staging Server\"\r\n },\r\n {\r\n \"url\": \"https://v2.redai.vn/api\",\r\n \"description\": \"Production Server\"\r\n }\r\n ],\r\n \"components\": {\r\n \"schemas\": {\r\n \"CreatePostDto\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"title\": {\r\n \"type\": \"string\",\r\n \"description\": \"Tiêu đề bài viết\",\r\n \"example\": \"Hello World\"\r\n },\r\n \"slug\": {\r\n \"type\": \"string\",\r\n \"description\": \"Slug (friendly URL) - auto-generate nếu không nhập\",\r\n \"example\": \"hello-world\"\r\n },\r\n \"excerpt\": {\r\n \"type\": \"string\",\r\n \"description\": \"Mô tả ngắn\",\r\n \"example\": \"This is a short excerpt...\"\r\n },\r\n \"content\": {\r\n \"description\": \"Nội dung bài viết (Gutenberg blocks)\",\r\n \"allOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/WpContentDto\"\r\n }\r\n ]\r\n },\r\n \"featuredImageId\": {\r\n \"type\": \"string\",\r\n \"description\": \"ID ảnh đại diện (UUID)\",\r\n \"example\": \"123e4567-e89b-12d3-a456-426614174000\"\r\n },\r\n \"status\": {\r\n \"type\": \"string\",\r\n \"description\": \"Trạng thái bài viết\",\r\n \"enum\": [\r\n \"draft\",\r\n \"pending\",\r\n \"private\",\r\n \"publish\",\r\n \"future\",\r\n \"trash\",\r\n \"archived\"\r\n ],\r\n \"default\": \"draft\"\r\n },\r\n \"type\": {\r\n \"type\": \"string\",\r\n \"description\": \"Loại bài viết\",\r\n \"example\": \"post\",\r\n \"default\": \"post\"\r\n },\r\n \"metaTitle\": {\r\n \"type\": \"string\",\r\n \"description\": \"SEO: Meta title (max 70 chars)\",\r\n \"example\": \"Hello World - My Blog\",\r\n \"maxLength\": 70\r\n },\r\n \"metaDescription\": {\r\n \"type\": \"string\",\r\n \"description\": \"SEO: Meta description (max 160 chars)\",\r\n \"maxLength\": 160\r\n },\r\n \"metaKeywords\": {\r\n \"description\": \"SEO: Meta keywords\",\r\n \"example\": [\r\n \"wordpress\",\r\n \"cms\",\r\n \"blog\"\r\n ],\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"commentStatus\": {\r\n \"type\": \"string\",\r\n \"description\": \"Trạng thái comment\",\r\n \"example\": \"open\",\r\n \"default\": \"open\"\r\n },\r\n \"sticky\": {\r\n \"type\": \"boolean\",\r\n \"description\": \"Đánh dấu sticky post\",\r\n \"default\": false\r\n },\r\n \"password\": {\r\n \"type\": \"string\",\r\n \"description\": \"Mật khẩu bảo vệ bài viết (plaintext)\",\r\n \"maxLength\": 255\r\n },\r\n \"menuOrder\": {\r\n \"type\": \"number\",\r\n \"description\": \"Thứ tự hiển thị\",\r\n \"example\": 0,\r\n \"default\": 0\r\n }\r\n },\r\n \"required\": [\r\n \"title\",\r\n \"content\"\r\n ]\r\n },\r\n \"PostResponseDto\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"id\": {\r\n \"type\": \"string\",\r\n \"description\": \"Post ID (UUID)\",\r\n \"example\": \"123e4567-e89b-12d3-a456-426614174000\"\r\n },\r\n \"title\": {\r\n \"type\": \"string\",\r\n \"description\": \"Tiêu đề bài viết\",\r\n \"example\": \"Hello World\"\r\n },\r\n \"slug\": {\r\n \"type\": \"string\",\r\n \"description\": \"Slug (friendly URL)\",\r\n \"example\": \"hello-world\"\r\n },\r\n \"excerpt\": {\r\n \"type\": \"string\",\r\n \"description\": \"Mô tả ngắn\"\r\n },\r\n \"content\": {\r\n \"type\": \"object\",\r\n \"description\": \"Nội dung bài viết (rendered HTML + blocks)\"\r\n },\r\n \"featuredImageId\": {\r\n \"type\": \"string\",\r\n \"description\": \"ID ảnh đại diện\"\r\n },\r\n \"status\": {\r\n \"type\": \"string\",\r\n \"description\": \"Trạng thái bài viết\",\r\n \"enum\": [\r\n \"draft\",\r\n \"pending\",\r\n \"private\",\r\n \"publish\",\r\n \"future\",\r\n \"trash\",\r\n \"archived\"\r\n ]\r\n },\r\n \"type\": {\r\n \"type\": \"string\",\r\n \"description\": \"Loại bài viết\",\r\n \"example\": \"post\"\r\n },\r\n \"authorId\": {\r\n \"type\": \"number\",\r\n \"description\": \"ID người dùng (author)\"\r\n },\r\n \"employeeId\": {\r\n \"type\": \"number\",\r\n \"description\": \"ID nhân viên\"\r\n },\r\n \"createdAt\": {\r\n \"type\": \"number\",\r\n \"description\": \"Thời gian tạo (unix timestamp ms)\"\r\n },\r\n \"updatedAt\": {\r\n \"type\": \"number\",\r\n \"description\": \"Thời gian cập nhật (unix timestamp ms)\"\r\n },\r\n \"publishedAt\": {\r\n \"type\": \"number\",\r\n \"description\": \"Thời gian xuất bản (unix timestamp ms)\"\r\n },\r\n \"metaTitle\": {\r\n \"type\": \"string\",\r\n \"description\": \"SEO: Meta title\"\r\n },\r\n \"metaDescription\": {\r\n \"type\": \"string\",\r\n \"description\": \"SEO: Meta description\"\r\n },\r\n \"metaKeywords\": {\r\n \"description\": \"SEO: Meta keywords\",\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"commentStatus\": {\r\n \"type\": \"string\",\r\n \"description\": \"Trạng thái comment\",\r\n \"example\": \"open\"\r\n },\r\n \"pingStatus\": {\r\n \"type\": \"string\",\r\n \"description\": \"Trạng thái ping\",\r\n \"example\": \"open\"\r\n },\r\n \"sticky\": {\r\n \"type\": \"boolean\",\r\n \"description\": \"Đánh dấu sticky post\"\r\n },\r\n \"isPasswordProtected\": {\r\n \"type\": \"boolean\",\r\n \"description\": \"Password protected (có mật khẩu hay không)\",\r\n \"example\": false\r\n },\r\n \"menuOrder\": {\r\n \"type\": \"number\",\r\n \"description\": \"Thứ tự hiển thị\"\r\n }\r\n },\r\n \"required\": [\r\n \"id\",\r\n \"title\",\r\n \"slug\",\r\n \"content\",\r\n \"status\",\r\n \"type\",\r\n \"createdAt\",\r\n \"updatedAt\",\r\n \"commentStatus\",\r\n \"pingStatus\",\r\n \"sticky\",\r\n \"menuOrder\"\r\n ]\r\n },\r\n \"BulkDeletePostDto\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"ids\": {\r\n \"description\": \"Array of post IDs to delete\",\r\n \"example\": [\r\n \"uuid-1\",\r\n \"uuid-2\"\r\n ],\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"permanent\": {\r\n \"type\": \"boolean\",\r\n \"description\": \"Permanent delete (hard delete) or soft delete (status=trash)\",\r\n \"default\": false\r\n }\r\n },\r\n \"required\": [\r\n \"ids\"\r\n ]\r\n },\r\n \"UpdatePostDto\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"title\": {\r\n \"type\": \"string\",\r\n \"description\": \"Tiêu đề bài viết\",\r\n \"example\": \"Hello World\"\r\n },\r\n \"slug\": {\r\n \"type\": \"string\",\r\n \"description\": \"Slug (friendly URL) - auto-generate nếu không nhập\",\r\n \"example\": \"hello-world\"\r\n },\r\n \"excerpt\": {\r\n \"type\": \"string\",\r\n \"description\": \"Mô tả ngắn\",\r\n \"example\": \"This is a short excerpt...\"\r\n },\r\n \"content\": {\r\n \"description\": \"Nội dung bài viết (Gutenberg blocks)\",\r\n \"allOf\": [\r\n {\r\n \"$ref\": \"#/components/schemas/WpContentDto\"\r\n }\r\n ]\r\n },\r\n \"featuredImageId\": {\r\n \"type\": \"string\",\r\n \"description\": \"ID ảnh đại diện (UUID)\",\r\n \"example\": \"123e4567-e89b-12d3-a456-426614174000\"\r\n },\r\n \"status\": {\r\n \"type\": \"string\",\r\n \"description\": \"Trạng thái bài viết\",\r\n \"enum\": [\r\n \"draft\",\r\n \"pending\",\r\n \"private\",\r\n \"publish\",\r\n \"future\",\r\n \"trash\",\r\n \"archived\"\r\n ],\r\n \"default\": \"draft\"\r\n },\r\n \"type\": {\r\n \"type\": \"string\",\r\n \"description\": \"Loại bài viết\",\r\n \"example\": \"post\",\r\n \"default\": \"post\"\r\n },\r\n \"metaTitle\": {\r\n \"type\": \"string\",\r\n \"description\": \"SEO: Meta title (max 70 chars)\",\r\n \"example\": \"Hello World - My Blog\",\r\n \"maxLength\": 70\r\n },\r\n \"metaDescription\": {\r\n \"type\": \"string\",\r\n \"description\": \"SEO: Meta description (max 160 chars)\",\r\n \"maxLength\": 160\r\n },\r\n \"metaKeywords\": {\r\n \"description\": \"SEO: Meta keywords\",\r\n \"example\": [\r\n \"wordpress\",\r\n \"cms\",\r\n \"blog\"\r\n ],\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"string\"\r\n }\r\n },\r\n \"commentStatus\": {\r\n \"type\": \"string\",\r\n \"description\": \"Trạng thái comment\",\r\n \"example\": \"open\",\r\n \"default\": \"open\"\r\n },\r\n \"sticky\": {\r\n \"type\": \"boolean\",\r\n \"description\": \"Đánh dấu sticky post\",\r\n \"default\": false\r\n },\r\n \"password\": {\r\n \"type\": \"string\",\r\n \"description\": \"Mật khẩu bảo vệ bài viết (plaintext)\",\r\n \"maxLength\": 255\r\n },\r\n \"menuOrder\": {\r\n \"type\": \"number\",\r\n \"description\": \"Thứ tự hiển thị\",\r\n \"example\": 0,\r\n \"default\": 0\r\n }\r\n }\r\n },\r\n \"WpContentDto\": {\r\n \"type\": \"object\",\r\n \"properties\": {\r\n \"blocks\": {\r\n \"description\": \"Array of Gutenberg blocks\",\r\n \"items\": {\r\n \"type\": \"array\",\r\n \"items\": {\r\n \"type\": \"a\"\r\n }\r\n },\r\n \"type\": \"array\"\r\n },\r\n \"meta\": {\r\n \"type\": \"object\",\r\n \"description\": \"Additional metadata\"\r\n },\r\n \"settings\": {\r\n \"type\": \"object\",\r\n \"description\": \"Content settings\"\r\n }\r\n },\r\n \"required\": [\r\n \"blocks\"\r\n ]\r\n }\r\n },\r\n \"securitySchemes\": {\r\n \"JWT-auth\": {\r\n \"scheme\": \"bearer\",\r\n \"bearerFormat\": \"JWT\",\r\n \"type\": \"http\",\r\n \"name\": \"JWT\",\r\n \"description\": \"Enter JWT token\",\r\n \"in\": \"header\"\r\n }\r\n }\r\n },\r\n \"externalDocs\": {\r\n \"description\": \"Additional Documentation\",\r\n \"url\": \"https://redai.com/docs\"\r\n },\r\n \"generatedAt\": \"2026-03-16T08:19:38.217Z\",\r\n \"x-redai-export-modules\": [\r\n \"wp-content-post\"\r\n ],\r\n \"x-redai-export-scope\": \"user\"\r\n}\n"],"mappings":"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","names":[]}
|