feat(enterprise-site): add PbootCMS enterprise site publisher
Introduce a new enterprise-site publishing channel that lets tenants push articles to self-hosted PbootCMS sites alongside the existing media supply flow. Backend (server/internal/tenant): - enterprise_site_service: CRUD, ping, category sync, and article publish - enterprise_site_pbootcms: PbootCMS API client integration - enterprise_site_crypto: encrypt/decrypt stored site credentials - enterprise_site_handler + routes under /enterprise-sites - migrations for the enterprise site publisher tables - config: add SERVER_PUBLIC_BASE_URL (Server.PublicBaseURL) for callbacks - article/media services adjusted to support the publish flow Frontend (apps/admin-web): - PublishArticleModal & ArticlePublishStatus: enterprise-site publish UI - MediaView: manage enterprise sites and categories - api + shared-types: enterprise site endpoints and types - http-client: add PATCH method support Integrations: - pbootcms GeoPublisher controller plugin + install guide - docs/enterprise-site-publisher-v1.md design doc
This commit is contained in:
@@ -51,6 +51,7 @@ export interface ApiClient {
|
||||
get: <T>(url: string, config?: AxiosRequestConfig) => Promise<T>
|
||||
post: <T, B = unknown>(url: string, body?: B, config?: AxiosRequestConfig) => Promise<T>
|
||||
put: <T, B = unknown>(url: string, body?: B, config?: AxiosRequestConfig) => Promise<T>
|
||||
patch: <T, B = unknown>(url: string, body?: B, config?: AxiosRequestConfig) => Promise<T>
|
||||
remove: <T>(url: string, config?: AxiosRequestConfig) => Promise<T>
|
||||
}
|
||||
|
||||
@@ -172,6 +173,9 @@ export function createApiClient(options: CreateApiClientOptions = {}): ApiClient
|
||||
async put<T, B = unknown>(url: string, body?: B, config?: AxiosRequestConfig) {
|
||||
return unwrapEnvelope(await client.put<ApiEnvelope<T>>(url, body, config))
|
||||
},
|
||||
async patch<T, B = unknown>(url: string, body?: B, config?: AxiosRequestConfig) {
|
||||
return unwrapEnvelope(await client.patch<ApiEnvelope<T>>(url, body, config))
|
||||
},
|
||||
async remove<T>(url: string, config?: AxiosRequestConfig) {
|
||||
return unwrapEnvelope(await client.delete<ApiEnvelope<T>>(url, config))
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user