feat(message-gateway): add admin channel cards and per-type forms

This commit is contained in:
ryan
2026-08-16 12:22:28 +08:00
parent 635c1760ad
commit 124ce9bebb
12 changed files with 707 additions and 0 deletions
@@ -0,0 +1,43 @@
// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
import { BaseService } from '@/lib/services/core';
import type {
CreateMessageChannelRequest,
MessageChannel,
MessageChannelDefinition,
UpdateMessageChannelRequest,
} from './types';
export class AdminMessageGatewayService extends BaseService {
protected static readonly basePath = '/api/v1/admin/message-gateway';
static async list(): Promise<MessageChannel[]> {
return this.get<MessageChannel[]>('/channels');
}
static async definitions(): Promise<MessageChannelDefinition[]> {
return this.get<MessageChannelDefinition[]>('/channels/definitions');
}
static async create(
data: CreateMessageChannelRequest,
): Promise<MessageChannel> {
return this.post<MessageChannel>('/channels', data);
}
static async update(
id: string,
data: UpdateMessageChannelRequest,
): Promise<MessageChannel> {
return this.patch<MessageChannel>(`/channels/${id}`, data);
}
static async remove(id: string): Promise<void> {
return this.delete<void>(`/channels/${id}`);
}
static async test(id: string): Promise<void> {
return this.post<void>(`/channels/${id}/test`);
}
}
@@ -0,0 +1,5 @@
// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
export * from './types';
export * from './admin.service';
@@ -0,0 +1,73 @@
// Copyright 2026 Arctel.net
// SPDX-License-Identifier: Apache-2.0
export type MessageChannelType = 'telegram' | 'qq';
export interface MessageChannelField {
key: string;
type?: string;
required?: boolean;
}
export interface MessageChannelDefinition {
type: MessageChannelType | string;
name: string;
fields: MessageChannelField[];
}
export interface MessageChannel {
id: string;
name: string;
type: MessageChannelType | string;
owner_scope: string;
enabled: boolean;
bot_token?: string;
app_id?: string;
app_secret?: string;
base_url?: string;
portal_host?: string;
created_at: string;
updated_at: string;
}
export interface CreateMessageChannelRequest {
name: string;
type: string;
enabled?: boolean;
bot_token?: string;
app_id?: string;
app_secret?: string;
base_url?: string;
portal_host?: string;
}
export interface UpdateMessageChannelRequest {
name?: string;
enabled?: boolean;
bot_token?: string;
app_id?: string;
app_secret?: string;
base_url?: string;
portal_host?: string;
}
export interface PublicMessageChannel {
id: string;
name: string;
type: MessageChannelType | string;
}
export interface MessageBinding {
id: string;
user_id: string;
channel_id: string;
channel_name: string;
channel_type: string;
platform_user_id: string;
created_at: string;
}
export interface BindMessageChannelRequest {
channel_id: string;
code: string;
}