This is an automated email from the ASF dual-hosted git repository.

wuzhiguo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git


The following commit(s) were added to refs/heads/main by this push:
     new c068a5e  BIGTOP-4236: Differentiate the API path of platform and auth 
platform (#80)
c068a5e is described below

commit c068a5eeafaec5afab7bd39196c39d6e6366a7cb
Author: Zhiguo Wu <[email protected]>
AuthorDate: Fri Sep 27 16:36:40 2024 +0800

    BIGTOP-4236: Differentiate the API path of platform and auth platform (#80)
---
 ...atformAuthorizedPO.java => AuthPlatformPO.java} |   4 +-
 .../apache/bigtop/manager/dao/po/ChatThreadPO.java |   3 +
 ...formAuthorizedDao.java => AuthPlatformDao.java} |  12 +-
 .../manager/dao/repository/ChatThreadDao.java      |   5 +-
 .../bigtop/manager/dao/sql/TableMetaData.java      |   3 +-
 ...AuthorizedMapper.xml => AuthPlatformMapper.xml} |  16 +-
 .../resources/mapper/mysql/ChatThreadMapper.xml    |  15 +-
 ...AuthorizedMapper.xml => AuthPlatformMapper.xml} |  16 +-
 .../mapper/postgresql/ChatThreadMapper.xml         |  14 +-
 .../server/controller/ChatbotController.java       |  82 ++++----
 ...edConverter.java => AuthPlatformConverter.java} |  35 +++-
 .../server/model/converter/PlatformConverter.java  |   2 +
 ...formAuthorizedDTO.java => AuthPlatformDTO.java} |  14 +-
 .../AuthPlatformReq.java}                          |  23 +--
 ...atformAuthorizedVO.java => AuthPlatformVO.java} |   8 +-
 .../manager/server/model/vo/ChatThreadVO.java      |   2 +
 .../manager/server/service/ChatbotService.java     |  18 +-
 .../server/service/impl/ChatbotServiceImpl.java    | 226 ++++++++++-----------
 .../src/main/resources/ddl/MySQL-DDL-CREATE.sql    |   4 +-
 .../main/resources/ddl/PostgreSQL-DDL-CREATE.sql   |   6 +-
 .../server/controller/ChatbotControllerTest.java   |  20 +-
 21 files changed, 271 insertions(+), 257 deletions(-)

diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/AuthPlatformPO.java
similarity index 92%
rename from 
bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
rename to 
bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/AuthPlatformPO.java
index ecd943b..9fbc5b5 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/PlatformAuthorizedPO.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/AuthPlatformPO.java
@@ -29,8 +29,8 @@ import java.util.Map;
 
 @Data
 @EqualsAndHashCode(callSuper = true)
-@Table(name = "llm_platform_authorized")
-public class PlatformAuthorizedPO extends BasePO implements Serializable {
+@Table(name = "llm_auth_platform")
+public class AuthPlatformPO extends BasePO implements Serializable {
 
     @Id
     @Column(name = "id")
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
index 08a9e4b..28e52ea 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/po/ChatThreadPO.java
@@ -44,6 +44,9 @@ public class ChatThreadPO extends BasePO implements 
Serializable {
     @Column(name = "user_id", nullable = false)
     private Long userId;
 
+    @Column(name = "auth_id", nullable = false)
+    private Long authId;
+
     @Column(name = "platform_id", nullable = false)
     private Long platformId;
 
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/PlatformAuthorizedDao.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/AuthPlatformDao.java
similarity index 71%
rename from 
bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/PlatformAuthorizedDao.java
rename to 
bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/AuthPlatformDao.java
index 46da6ec..b3500e7 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/PlatformAuthorizedDao.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/AuthPlatformDao.java
@@ -18,16 +18,14 @@
  */
 package org.apache.bigtop.manager.dao.repository;
 
-import org.apache.bigtop.manager.dao.po.PlatformAuthorizedPO;
+import org.apache.bigtop.manager.dao.po.AuthPlatformPO;
 
 import org.apache.ibatis.annotations.Param;
 
-import java.util.List;
+public interface AuthPlatformDao extends BaseDao<AuthPlatformPO> {
+    AuthPlatformPO findByAuthId(@Param("authId") Long authId);
 
-public interface PlatformAuthorizedDao extends BaseDao<PlatformAuthorizedPO> {
-    PlatformAuthorizedPO findByPlatformId(@Param("id") Long platformId);
+    AuthPlatformPO findByPlatformId(@Param("platformId") Long platformId);
 
-    void saveWithCredentials(PlatformAuthorizedPO platformAuthorizedPO);
-
-    List<PlatformAuthorizedPO> findAllPlatform();
+    void saveWithCredentials(AuthPlatformPO authPlatformPO);
 }
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatThreadDao.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatThreadDao.java
index 6c1e70b..f8abe55 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatThreadDao.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/repository/ChatThreadDao.java
@@ -29,10 +29,9 @@ public interface ChatThreadDao extends BaseDao<ChatThreadPO> 
{
 
     ChatThreadPO findByThreadId(@Param("id") Long id);
 
-    List<ChatThreadPO> findAllByPlatformAuthorizedIdAndUserId(
-            @Param("platformId") Long platformAuthorizedId, @Param("userId") 
Long userId);
+    List<ChatThreadPO> findAllByAuthIdAndUserId(@Param("authId") Long authId, 
@Param("userId") Long userId);
 
     void saveWithThreadInfo(ChatThreadPO chatThreadPO);
 
-    List<ChatThreadPO> findAllByPlatformId(@Param("platformId") Long 
platformId);
+    List<ChatThreadPO> findAllByAuthId(@Param("authId") Long authId);
 }
diff --git 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/TableMetaData.java
 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/TableMetaData.java
index a464a81..2323f6f 100644
--- 
a/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/TableMetaData.java
+++ 
b/bigtop-manager-dao/src/main/java/org/apache/bigtop/manager/dao/sql/TableMetaData.java
@@ -107,10 +107,9 @@ public class TableMetaData {
                 ? clazz.getAnnotation(Table.class).name()
                 : CaseUtils.toUnderScoreCase(clazz.getSimpleName());
 
-        // 获取父类字段
+        // Get parents' fields
         List<Field> fields = ClassUtils.getFields(clazz);
         for (Field field : fields) {
-
             if (Modifier.isStatic(field.getModifiers())
                     || field.isAnnotationPresent(Transient.class)
                     || !BeanUtils.isSimpleValueType(field.getType())) {
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/mysql/PlatformAuthorizedMapper.xml
 b/bigtop-manager-dao/src/main/resources/mapper/mysql/AuthPlatformMapper.xml
similarity index 70%
rename from 
bigtop-manager-dao/src/main/resources/mapper/mysql/PlatformAuthorizedMapper.xml
rename to 
bigtop-manager-dao/src/main/resources/mapper/mysql/AuthPlatformMapper.xml
index e9fa2bf..d8b978e 100644
--- 
a/bigtop-manager-dao/src/main/resources/mapper/mysql/PlatformAuthorizedMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/mysql/AuthPlatformMapper.xml
@@ -20,26 +20,26 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd";>
-<mapper 
namespace="org.apache.bigtop.manager.dao.repository.PlatformAuthorizedDao">
+<mapper namespace="org.apache.bigtop.manager.dao.repository.AuthPlatformDao">
 
     <sql id="baseColumns">
         id, credentials, platfotrm_id
     </sql>
 
-    <resultMap id="PlatformAuthorizedResultMap" 
type="org.apache.bigtop.manager.dao.po.PlatformAuthorizedPO">
+    <resultMap id="AuthPlatformResultMap" 
type="org.apache.bigtop.manager.dao.po.AuthPlatformPO">
         <result property="credentials" column="credentials" 
typeHandler="org.apache.bigtop.manager.dao.handler.JsonTypeHandler"/>
     </resultMap>
 
-    <select id="findByPlatformId" resultMap="PlatformAuthorizedResultMap">
-        SELECT * FROM llm_platform_authorized WHERE id = #{id} AND is_deleted 
= 0
+    <select id="findByAuthId" resultMap="AuthPlatformResultMap">
+        SELECT * FROM llm_auth_platform WHERE id = #{authId} AND is_deleted = 0
     </select>
 
-    <select id="findAllPlatform" resultMap="PlatformAuthorizedResultMap">
-        SELECT * FROM llm_platform_authorized WHERE is_deleted = 0
+    <select id="findByPlatformId" resultMap="AuthPlatformResultMap">
+        SELECT * FROM llm_auth_platform WHERE platform_id = #{platformId} AND 
is_deleted = 0
     </select>
 
-    <insert id="saveWithCredentials" 
parameterType="org.apache.bigtop.manager.dao.po.PlatformAuthorizedPO" 
useGeneratedKeys="true" keyProperty="id">
-        INSERT INTO llm_platform_authorized (platform_id, credentials)
+    <insert id="saveWithCredentials" 
parameterType="org.apache.bigtop.manager.dao.po.AuthPlatformPO" 
useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO llm_auth_platform (platform_id, credentials)
         VALUES (#{platformId}, #{credentials, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler})
         ON DUPLICATE KEY UPDATE
         platform_id = VALUES(platform_id),
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatThreadMapper.xml 
b/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatThreadMapper.xml
index adecfc1..0622a6a 100644
--- a/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatThreadMapper.xml
+++ b/bigtop-manager-dao/src/main/resources/mapper/mysql/ChatThreadMapper.xml
@@ -22,7 +22,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd";>
 <mapper namespace="org.apache.bigtop.manager.dao.repository.ChatThreadDao">
     <sql id="baseColumns">
-        id, user_id, platform_id, model
+        id, user_id, auth_id, platform_id, model
     </sql>
 
     <resultMap id="ChatThreadResultMap" 
type="org.apache.bigtop.manager.dao.po.ChatThreadPO">
@@ -36,10 +36,10 @@
         AND is_deleted = 0
     </select>
 
-    <select id="findAllByPlatformAuthorizedIdAndUserId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
+    <select id="findAllByAuthIdAndUserId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
         SELECT *
         FROM llm_chat_thread
-        WHERE platform_id = #{platformId} AND user_id = #{userId} AND 
is_deleted = 0
+        WHERE auth_id = #{authId} AND user_id = #{userId} AND is_deleted = 0
     </select>
 
     <select id="findByThreadId" resultMap="ChatThreadResultMap">
@@ -47,19 +47,20 @@
     </select>
 
     <insert id="saveWithThreadInfo" 
parameterType="org.apache.bigtop.manager.dao.po.ChatThreadPO" 
useGeneratedKeys="true" keyProperty="id">
-        INSERT INTO llm_chat_thread (platform_id, user_id, model, thread_info)
-        VALUES (#{platformId}, #{userId}, #{model}, #{threadInfo, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler})
+        INSERT INTO llm_chat_thread (auth_id, platform_id, user_id, model, 
thread_info)
+        VALUES (#{authId}, #{platformId}, #{userId}, #{model}, #{threadInfo, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler})
             ON DUPLICATE KEY UPDATE
+            auth_id = VALUES(auth_id),
             platform_id = VALUES(platform_id),
             user_id = VALUES(user_id),
             model = VALUES(model),
             thread_info = VALUES(thread_info)
     </insert>
 
-    <select id="findAllByPlatformId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
+    <select id="findAllByAuthId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
         SELECT *
         FROM llm_chat_thread
-        WHERE platform_id = #{platformId} AND is_deleted = 0
+        WHERE auth_id = #{authId} AND is_deleted = 0
     </select>
 
 </mapper>
\ No newline at end of file
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/PlatformAuthorizedMapper.xml
 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/AuthPlatformMapper.xml
similarity index 68%
rename from 
bigtop-manager-dao/src/main/resources/mapper/postgresql/PlatformAuthorizedMapper.xml
rename to 
bigtop-manager-dao/src/main/resources/mapper/postgresql/AuthPlatformMapper.xml
index 518d295..4ead82d 100644
--- 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/PlatformAuthorizedMapper.xml
+++ 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/AuthPlatformMapper.xml
@@ -20,26 +20,26 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd";>
-<mapper 
namespace="org.apache.bigtop.manager.dao.repository.PlatformAuthorizedDao">
+<mapper namespace="org.apache.bigtop.manager.dao.repository.AuthPlatformDao">
 
     <sql id="baseColumns">
         id, credentials, platfotrm_id
     </sql>
 
-    <resultMap id="PlatformAuthorizedResultMap" 
type="org.apache.bigtop.manager.dao.po.PlatformAuthorizedPO">
+    <resultMap id="AuthPlatformResultMap" 
type="org.apache.bigtop.manager.dao.po.AuthPlatformPO">
         <result property="credentials" column="credentials" 
typeHandler="org.apache.bigtop.manager.dao.handler.JsonTypeHandler"/>
     </resultMap>
 
-    <select id="findByPlatformId" resultMap="PlatformAuthorizedResultMap">
-        SELECT * FROM llm_platform_authorized WHERE id = #{id} AND is_deleted 
= false
+    <select id="findByAuthId" resultMap="AuthPlatformResultMap">
+        SELECT * FROM llm_auth_platform WHERE id = #{authId} AND is_deleted = 
false
     </select>
 
-    <select id="findAllPlatform" resultMap="PlatformAuthorizedResultMap">
-        SELECT * FROM llm_platform_authorized WHERE is_deleted = false
+    <select id="findByPlatformId" resultMap="AuthPlatformResultMap">
+        SELECT * FROM llm_auth_platform WHERE platform_id = #{platformId} AND 
is_deleted = false
     </select>
 
-    <insert id="saveWithCredentials" 
parameterType="org.apache.bigtop.manager.dao.po.PlatformAuthorizedPO" 
useGeneratedKeys="true" keyProperty="id">
-        INSERT INTO llm_platform_authorized (platform_id, credentials)
+    <insert id="saveWithCredentials" 
parameterType="org.apache.bigtop.manager.dao.po.AuthPlatformPO" 
useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO llm_auth_platform (platform_id, credentials)
         VALUES (#{platformId}, #{credentials, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler}::json)
     </insert>
 
diff --git 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatThreadMapper.xml 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatThreadMapper.xml
index a742bed..2aa96da 100644
--- 
a/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatThreadMapper.xml
+++ 
b/bigtop-manager-dao/src/main/resources/mapper/postgresql/ChatThreadMapper.xml
@@ -22,7 +22,7 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd";>
 <mapper namespace="org.apache.bigtop.manager.dao.repository.ChatThreadDao">
     <sql id="baseColumns">
-        id, user_id, platform_id, model
+        id, user_id, auth_id, platform_id, model
     </sql>
 
     <resultMap id="ChatThreadResultMap" 
type="org.apache.bigtop.manager.dao.po.ChatThreadPO">
@@ -36,10 +36,10 @@
         AND is_deleted = false
     </select>
 
-    <select id="findAllByPlatformAuthorizedIdAndUserId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
+    <select id="findAllByAuthIdAndUserId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
         SELECT *
         FROM llm_chat_thread
-        WHERE platform_id = #{platformId} AND user_id = #{userId} AND 
is_deleted = false
+        WHERE auth_id = #{authId} AND user_id = #{userId} AND is_deleted = 
false
     </select>
 
     <select id="findByThreadId" resultMap="ChatThreadResultMap">
@@ -47,14 +47,14 @@
     </select>
 
     <insert id="saveWithThreadInfo" 
parameterType="org.apache.bigtop.manager.dao.po.ChatThreadPO" 
useGeneratedKeys="true" keyProperty="id">
-        INSERT INTO llm_chat_thread (platform_id, user_id, model, thread_info)
-        VALUES (#{platformId}, #{userId}, #{model}, #{threadInfo, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler}::json)
+        INSERT INTO llm_chat_thread (auth_id, platform_id, user_id, model, 
thread_info)
+        VALUES (#{authId}, #{platformId}, #{userId}, #{model}, #{threadInfo, 
typeHandler=org.apache.bigtop.manager.dao.handler.JsonTypeHandler}::json)
     </insert>
 
-    <select id="findAllByPlatformId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
+    <select id="findAllByAuthId" 
resultType="org.apache.bigtop.manager.dao.po.ChatThreadPO">
         SELECT *
         FROM llm_chat_thread
-        WHERE platform_id = #{platformId} AND is_deleted = false
+        WHERE auth_id = #{authId} AND is_deleted = false
     </select>
 
 </mapper>
\ No newline at end of file
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/ChatbotController.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/ChatbotController.java
index c09680a..6d42d7e 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/ChatbotController.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/controller/ChatbotController.java
@@ -18,14 +18,14 @@
  */
 package org.apache.bigtop.manager.server.controller;
 
-import org.apache.bigtop.manager.server.model.converter.PlatformConverter;
-import org.apache.bigtop.manager.server.model.dto.PlatformDTO;
+import org.apache.bigtop.manager.server.model.converter.AuthPlatformConverter;
+import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
+import org.apache.bigtop.manager.server.model.req.AuthPlatformReq;
 import org.apache.bigtop.manager.server.model.req.ChatbotMessageReq;
-import org.apache.bigtop.manager.server.model.req.PlatformReq;
+import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
 import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
 import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
 import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformAuthorizedVO;
 import org.apache.bigtop.manager.server.model.vo.PlatformVO;
 import org.apache.bigtop.manager.server.service.ChatbotService;
 import org.apache.bigtop.manager.server.utils.ResponseEntity;
@@ -34,7 +34,6 @@ import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -55,66 +54,65 @@ public class ChatbotController {
     @Resource
     private ChatbotService chatbotService;
 
-    @Operation(summary = "platforms", description = "Get all platforms")
+    @Operation(summary = "get platforms", description = "Get all platforms")
     @GetMapping("/platforms")
     public ResponseEntity<List<PlatformVO>> platforms() {
         return ResponseEntity.success(chatbotService.platforms());
     }
 
-    @Operation(summary = "platforms", description = "Get authorized platforms")
-    @GetMapping("/platforms/authorized")
-    public ResponseEntity<List<PlatformAuthorizedVO>> authorizedPlatforms() {
-        return ResponseEntity.success(chatbotService.authorizedPlatforms());
+    @Operation(summary = "platform credentials", description = "Get platform 
auth credentials")
+    @GetMapping("/platforms/{platformId}/auth-credentials")
+    public ResponseEntity<List<PlatformAuthCredentialVO>> 
platformsAuthCredential(@PathVariable Long platformId) {
+        return 
ResponseEntity.success(chatbotService.platformsAuthCredentials(platformId));
     }
 
-    @Operation(summary = "platforms", description = "Get platform auth 
credentials")
-    @GetMapping("/platforms/{platformId}/auth/credential")
-    public ResponseEntity<List<PlatformAuthCredentialVO>> 
platformsAuthCredential(@PathVariable Long platformId) {
-        return 
ResponseEntity.success(chatbotService.platformsAuthCredential(platformId));
+    @Operation(summary = "get auth platforms", description = "Get authorized 
platforms")
+    @GetMapping("/auth-platforms")
+    public ResponseEntity<List<AuthPlatformVO>> authorizedPlatforms() {
+        return ResponseEntity.success(chatbotService.authorizedPlatforms());
     }
 
-    @Operation(summary = "platforms", description = "Add authorized platforms")
-    @PutMapping("/platforms")
-    public ResponseEntity<PlatformAuthorizedVO> 
addAuthorizedPlatform(@RequestBody PlatformReq platformReq) {
-        PlatformDTO platformDTO = 
PlatformConverter.INSTANCE.fromReq2DTO(platformReq);
-        return 
ResponseEntity.success(chatbotService.addAuthorizedPlatform(platformDTO));
+    @Operation(summary = "auth platform", description = "Add authorized 
platforms")
+    @PostMapping("/auth-platforms")
+    public ResponseEntity<AuthPlatformVO> addAuthorizedPlatform(@RequestBody 
AuthPlatformReq authPlatformReq) {
+        AuthPlatformDTO authPlatformDTO = 
AuthPlatformConverter.INSTANCE.fromReq2DTO(authPlatformReq);
+        return 
ResponseEntity.success(chatbotService.addAuthorizedPlatform(authPlatformDTO));
     }
 
-    @Operation(summary = "platforms", description = "Delete authorized 
platforms")
-    @DeleteMapping("/platforms/{platformId}")
-    public ResponseEntity<Boolean> deleteAuthorizedPlatform(@PathVariable Long 
platformId) {
-        return 
ResponseEntity.success(chatbotService.deleteAuthorizedPlatform(platformId));
+    @Operation(summary = "delete auth platform", description = "Delete 
authorized platforms")
+    @DeleteMapping("/auth-platforms/{authId}")
+    public ResponseEntity<Boolean> deleteAuthorizedPlatform(@PathVariable Long 
authId) {
+        return 
ResponseEntity.success(chatbotService.deleteAuthorizedPlatform(authId));
     }
 
-    @Operation(summary = "new threads", description = "Create a chat threads")
-    @PutMapping("/platforms/{platformId}/threads")
-    public ResponseEntity<ChatThreadVO> createChatThreads(@PathVariable Long 
platformId, @RequestParam String model) {
-        return 
ResponseEntity.success(chatbotService.createChatThreads(platformId, model));
+    @Operation(summary = "new thread", description = "Create a chat threads")
+    @PostMapping("/auth-platforms/{authId}/threads")
+    public ResponseEntity<ChatThreadVO> createChatThreads(@PathVariable Long 
authId, @RequestParam String model) {
+        return ResponseEntity.success(chatbotService.createChatThreads(authId, 
model));
     }
 
-    @Operation(summary = "delete threads", description = "Delete a chat 
threads")
-    @DeleteMapping("platforms/{platformId}/threads/{threadId}")
-    public ResponseEntity<Boolean> deleteChatThreads(@PathVariable Long 
platformId, @PathVariable Long threadId) {
-        return 
ResponseEntity.success(chatbotService.deleteChatThreads(platformId, threadId));
+    @Operation(summary = "delete thread", description = "Delete a chat 
threads")
+    @DeleteMapping("/auth-platforms/{authId}/threads/{threadId}")
+    public ResponseEntity<Boolean> deleteChatThreads(@PathVariable Long 
authId, @PathVariable Long threadId) {
+        return ResponseEntity.success(chatbotService.deleteChatThreads(authId, 
threadId));
     }
 
-    @Operation(summary = "get", description = "Get all threads of a platform")
-    @GetMapping("platforms/{platformId}/threads")
-    public ResponseEntity<List<ChatThreadVO>> getAllChatThreads(
-            @PathVariable Long platformId, @RequestParam String model) {
-        return 
ResponseEntity.success(chatbotService.getAllChatThreads(platformId, model));
+    @Operation(summary = "get threads", description = "Get all threads of a 
auth platform")
+    @GetMapping("/auth-platforms/{authId}/threads")
+    public ResponseEntity<List<ChatThreadVO>> getAllChatThreads(@PathVariable 
Long authId, @RequestParam String model) {
+        return ResponseEntity.success(chatbotService.getAllChatThreads(authId, 
model));
     }
 
     @Operation(summary = "talk", description = "Talk with Chatbot")
-    @PostMapping("platforms/{platformId}/threads/{threadId}/talk")
+    @PostMapping("/auth-platforms/{authId}/threads/{threadId}/talk")
     public SseEmitter talk(
-            @PathVariable Long platformId, @PathVariable Long threadId, 
@RequestBody ChatbotMessageReq messageReq) {
-        return chatbotService.talk(platformId, threadId, 
messageReq.getMessage());
+            @PathVariable Long authId, @PathVariable Long threadId, 
@RequestBody ChatbotMessageReq messageReq) {
+        return chatbotService.talk(authId, threadId, messageReq.getMessage());
     }
 
     @Operation(summary = "history", description = "Get chat records")
-    @GetMapping("platforms/{platformId}/threads/{threadId}/history")
-    public ResponseEntity<List<ChatMessageVO>> history(@PathVariable Long 
platformId, @PathVariable Long threadId) {
-        return ResponseEntity.success(chatbotService.history(platformId, 
threadId));
+    @GetMapping("/auth-platforms/{authId}/threads/{threadId}/history")
+    public ResponseEntity<List<ChatMessageVO>> history(@PathVariable Long 
authId, @PathVariable Long threadId) {
+        return ResponseEntity.success(chatbotService.history(authId, 
threadId));
     }
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/PlatformAuthorizedConverter.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/AuthPlatformConverter.java
similarity index 50%
rename from 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/PlatformAuthorizedConverter.java
rename to 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/AuthPlatformConverter.java
index 2e3c87a..a6ea344 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/PlatformAuthorizedConverter.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/AuthPlatformConverter.java
@@ -18,22 +18,45 @@
  */
 package org.apache.bigtop.manager.server.model.converter;
 
-import org.apache.bigtop.manager.dao.po.PlatformAuthorizedPO;
+import org.apache.bigtop.manager.dao.po.AuthPlatformPO;
 import org.apache.bigtop.manager.dao.po.PlatformPO;
 import org.apache.bigtop.manager.server.config.MapStructSharedConfig;
-import org.apache.bigtop.manager.server.model.vo.PlatformAuthorizedVO;
+import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
+import org.apache.bigtop.manager.server.model.req.AuthCredentialReq;
+import org.apache.bigtop.manager.server.model.req.AuthPlatformReq;
+import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
 
+import org.mapstruct.AfterMapping;
 import org.mapstruct.Context;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
+import org.mapstruct.MappingTarget;
 import org.mapstruct.factory.Mappers;
 
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 @Mapper(config = MapStructSharedConfig.class)
-public interface PlatformAuthorizedConverter {
-    PlatformAuthorizedConverter INSTANCE = 
Mappers.getMapper(PlatformAuthorizedConverter.class);
+public interface AuthPlatformConverter {
+    AuthPlatformConverter INSTANCE = 
Mappers.getMapper(AuthPlatformConverter.class);
 
-    @Mapping(target = "platformId", source = "id")
     @Mapping(target = "supportModels", expression = 
"java(platformPO.getSupportModels())")
     @Mapping(target = "platformName", expression = 
"java(platformPO.getName())")
-    PlatformAuthorizedVO fromPO2VO(PlatformAuthorizedPO platformAuthorizedPO, 
@Context PlatformPO platformPO);
+    AuthPlatformVO fromPO2VO(AuthPlatformPO authPlatformPO, @Context 
PlatformPO platformPO);
+
+    AuthPlatformDTO fromReq2DTO(AuthPlatformReq authPlatformReq);
+
+    default Map<String, String> mapAuthCredentials(List<AuthCredentialReq> 
authCredentials) {
+        if (authCredentials == null) {
+            return null;
+        }
+        return authCredentials.stream()
+                .collect(Collectors.toMap(AuthCredentialReq::getKey, 
AuthCredentialReq::getValue));
+    }
+
+    @AfterMapping
+    default void afterMapping(@MappingTarget AuthPlatformDTO authPlatformDTO, 
AuthPlatformReq authPlatformReq) {
+        
authPlatformDTO.setAuthCredentials(mapAuthCredentials(authPlatformReq.getAuthCredentials()));
+    }
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/PlatformConverter.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/PlatformConverter.java
index 85b6e15..0ee4285 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/PlatformConverter.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/converter/PlatformConverter.java
@@ -42,6 +42,8 @@ public interface PlatformConverter {
 
     PlatformVO fromPO2VO(PlatformPO platformPO);
 
+    List<PlatformVO> fromPO2VO(List<PlatformPO> platformPOList);
+
     default Map<String, String> mapAuthCredentials(List<AuthCredentialReq> 
authCredentials) {
         if (authCredentials == null) {
             return null;
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/PlatformAuthorizedDTO.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/AuthPlatformDTO.java
similarity index 72%
rename from 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/PlatformAuthorizedDTO.java
rename to 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/AuthPlatformDTO.java
index da6cb1f..4706385 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/PlatformAuthorizedDTO.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/dto/AuthPlatformDTO.java
@@ -23,14 +23,10 @@ import lombok.Data;
 import java.util.Map;
 
 @Data
-public class PlatformAuthorizedDTO {
-    private String platformName;
-    private String model;
-    private Map<String, String> credentials;
+public class AuthPlatformDTO {
+    private Long id;
 
-    public PlatformAuthorizedDTO(String name, Map<String, String> 
credentialSet, String model) {
-        this.platformName = name;
-        this.credentials = credentialSet;
-        this.model = model;
-    }
+    private Long platformId;
+
+    private Map<String, String> authCredentials;
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/PlatformAuthorizedVO.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/AuthPlatformReq.java
similarity index 69%
copy from 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/PlatformAuthorizedVO.java
copy to 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/AuthPlatformReq.java
index 3532cf6..77047bf 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/PlatformAuthorizedVO.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/req/AuthPlatformReq.java
@@ -16,23 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.bigtop.manager.server.model.vo;
+package org.apache.bigtop.manager.server.model.req;
 
 import lombok.Data;
 
-@Data
-public class PlatformAuthorizedVO {
-    private Long platformId;
-
-    private String platformName;
+import jakarta.validation.constraints.NotEmpty;
+import java.util.List;
 
-    private String supportModels;
+@Data
+public class AuthPlatformReq {
+    private Long id;
 
-    public PlatformAuthorizedVO(long platformId, String name, String models) {
-        this.platformId = platformId;
-        this.platformName = name;
-        this.supportModels = models;
-    }
+    @NotEmpty
+    private Long platformId;
 
-    public PlatformAuthorizedVO() {}
+    @NotEmpty
+    private List<AuthCredentialReq> authCredentials;
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/PlatformAuthorizedVO.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/AuthPlatformVO.java
similarity index 87%
rename from 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/PlatformAuthorizedVO.java
rename to 
bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/AuthPlatformVO.java
index 3532cf6..a1a4c36 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/PlatformAuthorizedVO.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/AuthPlatformVO.java
@@ -21,18 +21,20 @@ package org.apache.bigtop.manager.server.model.vo;
 import lombok.Data;
 
 @Data
-public class PlatformAuthorizedVO {
+public class AuthPlatformVO {
+    private Long id;
+
     private Long platformId;
 
     private String platformName;
 
     private String supportModels;
 
-    public PlatformAuthorizedVO(long platformId, String name, String models) {
+    public AuthPlatformVO(long platformId, String name, String models) {
         this.platformId = platformId;
         this.platformName = name;
         this.supportModels = models;
     }
 
-    public PlatformAuthorizedVO() {}
+    public AuthPlatformVO() {}
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
index c5f84a9..9232b01 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/model/vo/ChatThreadVO.java
@@ -24,6 +24,8 @@ import lombok.Data;
 public class ChatThreadVO {
     private Long threadId;
 
+    private Long authId;
+
     private Long platformId;
 
     private String model;
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
index 19a9994..8d65c97 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/ChatbotService.java
@@ -18,11 +18,11 @@
  */
 package org.apache.bigtop.manager.server.service;
 
-import org.apache.bigtop.manager.server.model.dto.PlatformDTO;
+import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
+import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
 import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
 import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
 import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformAuthorizedVO;
 import org.apache.bigtop.manager.server.model.vo.PlatformVO;
 
 import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
@@ -33,21 +33,21 @@ public interface ChatbotService {
 
     List<PlatformVO> platforms();
 
-    List<PlatformAuthorizedVO> authorizedPlatforms();
+    List<PlatformAuthCredentialVO> platformsAuthCredentials(Long platformId);
 
-    PlatformAuthorizedVO addAuthorizedPlatform(PlatformDTO platformDTO);
+    List<AuthPlatformVO> authorizedPlatforms();
 
-    List<PlatformAuthCredentialVO> platformsAuthCredential(Long platformId);
+    AuthPlatformVO addAuthorizedPlatform(AuthPlatformDTO authPlatformDTO);
 
-    boolean deleteAuthorizedPlatform(Long platformId);
+    boolean deleteAuthorizedPlatform(Long authId);
 
-    ChatThreadVO createChatThreads(Long platformId, String model);
+    ChatThreadVO createChatThreads(Long authId, String model);
 
-    boolean deleteChatThreads(Long platformId, Long threadId);
+    boolean deleteChatThreads(Long authId, Long threadId);
 
     List<ChatThreadVO> getAllChatThreads(Long platformId, String model);
 
-    SseEmitter talk(Long platformId, Long threadId, String message);
+    SseEmitter talk(Long authId, Long threadId, String message);
 
     List<ChatMessageVO> history(Long platformId, Long threadId);
 }
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java
index 0c49abc..ee8ea0d 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/ChatbotServiceImpl.java
@@ -25,27 +25,26 @@ import org.apache.bigtop.manager.ai.core.enums.MessageType;
 import org.apache.bigtop.manager.ai.core.enums.PlatformType;
 import org.apache.bigtop.manager.ai.core.factory.AIAssistant;
 import org.apache.bigtop.manager.ai.core.factory.AIAssistantFactory;
+import org.apache.bigtop.manager.dao.po.AuthPlatformPO;
 import org.apache.bigtop.manager.dao.po.ChatMessagePO;
 import org.apache.bigtop.manager.dao.po.ChatThreadPO;
-import org.apache.bigtop.manager.dao.po.PlatformAuthorizedPO;
 import org.apache.bigtop.manager.dao.po.PlatformPO;
+import org.apache.bigtop.manager.dao.repository.AuthPlatformDao;
 import org.apache.bigtop.manager.dao.repository.ChatMessageDao;
 import org.apache.bigtop.manager.dao.repository.ChatThreadDao;
-import org.apache.bigtop.manager.dao.repository.PlatformAuthorizedDao;
 import org.apache.bigtop.manager.dao.repository.PlatformDao;
 import org.apache.bigtop.manager.server.enums.ApiExceptionEnum;
 import org.apache.bigtop.manager.server.exception.ApiException;
 import org.apache.bigtop.manager.server.holder.SessionUserHolder;
+import org.apache.bigtop.manager.server.model.converter.AuthPlatformConverter;
 import org.apache.bigtop.manager.server.model.converter.ChatMessageConverter;
 import org.apache.bigtop.manager.server.model.converter.ChatThreadConverter;
-import 
org.apache.bigtop.manager.server.model.converter.PlatformAuthorizedConverter;
 import org.apache.bigtop.manager.server.model.converter.PlatformConverter;
-import org.apache.bigtop.manager.server.model.dto.PlatformAuthorizedDTO;
-import org.apache.bigtop.manager.server.model.dto.PlatformDTO;
+import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
+import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
 import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
 import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
 import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformAuthorizedVO;
 import org.apache.bigtop.manager.server.model.vo.PlatformVO;
 import org.apache.bigtop.manager.server.service.ChatbotService;
 
@@ -71,7 +70,7 @@ public class ChatbotServiceImpl implements ChatbotService {
     private PlatformDao platformDao;
 
     @Resource
-    private PlatformAuthorizedDao platformAuthorizedDao;
+    private AuthPlatformDao authPlatformDao;
 
     @Resource
     private ChatThreadDao chatThreadDao;
@@ -90,11 +89,11 @@ public class ChatbotServiceImpl implements ChatbotService {
     }
 
     private AIAssistantConfig getAIAssistantConfig(
-            PlatformAuthorizedDTO platformAuthorizedDTO, Map<String, String> 
configs) {
+            String model, Map<String, String> credentials, Map<String, String> 
configs) {
         return AIAssistantConfig.builder()
-                .setModel(platformAuthorizedDTO.getModel())
+                .setModel(model)
                 .setLanguage(LocaleContextHolder.getLocale().toString())
-                .addCredentials(platformAuthorizedDTO.getCredentials())
+                .addCredentials(credentials)
                 .addConfigs(configs)
                 .build();
     }
@@ -104,19 +103,18 @@ public class ChatbotServiceImpl implements ChatbotService 
{
     }
 
     private AIAssistant buildAIAssistant(
-            PlatformAuthorizedDTO platformAuthorizedDTO, Long threadId, 
Map<String, String> configs) {
+            String platformName,
+            String model,
+            Map<String, String> credentials,
+            Long threadId,
+            Map<String, String> configs) {
         return getAIAssistantFactory()
-                .create(
-                        
getPlatformType(platformAuthorizedDTO.getPlatformName()),
-                        getAIAssistantConfig(platformAuthorizedDTO, configs),
-                        threadId);
+                .create(getPlatformType(platformName), 
getAIAssistantConfig(model, credentials, configs), threadId);
     }
 
-    private Boolean testAuthorization(PlatformAuthorizedDTO 
platformAuthorizedDTO) {
+    private Boolean testAuthorization(String platformName, String model, 
Map<String, String> credentials) {
         AIAssistant aiAssistant = getAIAssistantFactory()
-                .create(
-                        
getPlatformType(platformAuthorizedDTO.getPlatformName()),
-                        getAIAssistantConfig(platformAuthorizedDTO, null));
+                .create(getPlatformType(platformName), 
getAIAssistantConfig(model, credentials, null));
         try {
             return aiAssistant.test();
         } catch (Exception e) {
@@ -127,61 +125,73 @@ public class ChatbotServiceImpl implements ChatbotService 
{
     @Override
     public List<PlatformVO> platforms() {
         List<PlatformPO> platformPOs = platformDao.findAll();
-        List<PlatformVO> platforms = new ArrayList<>();
-        for (PlatformPO platformPO : platformPOs) {
-            platforms.add(PlatformConverter.INSTANCE.fromPO2VO(platformPO));
+        return PlatformConverter.INSTANCE.fromPO2VO(platformPOs);
+    }
+
+    @Override
+    public List<PlatformAuthCredentialVO> platformsAuthCredentials(Long 
platformId) {
+        PlatformPO platformPO = platformDao.findByPlatformId(platformId);
+        if (platformPO == null) {
+            throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
         }
-        return platforms;
+        List<PlatformAuthCredentialVO> platformAuthCredentialVOs = new 
ArrayList<>();
+        for (String key : platformPO.getCredential().keySet()) {
+            PlatformAuthCredentialVO platformAuthCredentialVO =
+                    new PlatformAuthCredentialVO(key, 
platformPO.getCredential().get(key));
+            platformAuthCredentialVOs.add(platformAuthCredentialVO);
+        }
+        return platformAuthCredentialVOs;
     }
 
     @Override
-    public List<PlatformAuthorizedVO> authorizedPlatforms() {
-        List<PlatformAuthorizedVO> authorizedPlatforms = new ArrayList<>();
-        List<PlatformAuthorizedPO> authorizedPlatformPOs = 
platformAuthorizedDao.findAllPlatform();
-        for (PlatformAuthorizedPO authorizedPlatformPO : 
authorizedPlatformPOs) {
-            PlatformPO platformPO = 
platformDao.findById(authorizedPlatformPO.getPlatformId());
-            
authorizedPlatforms.add(PlatformAuthorizedConverter.INSTANCE.fromPO2VO(authorizedPlatformPO,
 platformPO));
+    public List<AuthPlatformVO> authorizedPlatforms() {
+        List<AuthPlatformVO> authorizedPlatforms = new ArrayList<>();
+        List<AuthPlatformPO> authPlatformPOList = authPlatformDao.findAll();
+        for (AuthPlatformPO authPlatformPO : authPlatformPOList) {
+            if (authPlatformPO.getIsDeleted()) {
+                continue;
+            }
+
+            PlatformPO platformPO = 
platformDao.findById(authPlatformPO.getPlatformId());
+            
authorizedPlatforms.add(AuthPlatformConverter.INSTANCE.fromPO2VO(authPlatformPO,
 platformPO));
         }
 
         return authorizedPlatforms;
     }
 
     @Override
-    public PlatformAuthorizedVO addAuthorizedPlatform(PlatformDTO platformDTO) 
{
-        PlatformPO platformPO = 
platformDao.findByPlatformId(platformDTO.getPlatformId());
+    public AuthPlatformVO addAuthorizedPlatform(AuthPlatformDTO 
authPlatformDTO) {
+        PlatformPO platformPO = 
platformDao.findByPlatformId(authPlatformDTO.getPlatformId());
         if (platformPO == null) {
             throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
         }
-        Map<String, String> credentialSet = getStringMap(platformDTO, 
platformPO);
+        Map<String, String> credentialSet = getStringMap(authPlatformDTO, 
platformPO);
         List<String> models = 
List.of(platformPO.getSupportModels().split(","));
         if (models.isEmpty()) {
             throw new ApiException(ApiExceptionEnum.MODEL_NOT_SUPPORTED);
         }
-        PlatformAuthorizedDTO platformAuthorizedDTO =
-                new PlatformAuthorizedDTO(platformPO.getName(), credentialSet, 
models.get(0));
 
-        if (!testAuthorization(platformAuthorizedDTO)) {
+        if (!testAuthorization(platformPO.getName(), models.get(0), 
credentialSet)) {
             throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
         }
 
-        PlatformAuthorizedPO platformAuthorizedPO = new PlatformAuthorizedPO();
-        platformAuthorizedPO.setCredentials(credentialSet);
-        platformAuthorizedPO.setPlatformId(platformPO.getId());
+        AuthPlatformPO authPlatformPO = new AuthPlatformPO();
+        authPlatformPO.setCredentials(credentialSet);
+        authPlatformPO.setPlatformId(platformPO.getId());
 
-        platformAuthorizedDao.saveWithCredentials(platformAuthorizedPO);
-        PlatformAuthorizedVO platformAuthorizedVO =
-                
PlatformAuthorizedConverter.INSTANCE.fromPO2VO(platformAuthorizedPO, 
platformPO);
-        platformAuthorizedVO.setSupportModels(platformPO.getSupportModels());
-        platformAuthorizedVO.setPlatformName(platformPO.getName());
-        return platformAuthorizedVO;
+        authPlatformDao.saveWithCredentials(authPlatformPO);
+        AuthPlatformVO authPlatformVO = 
AuthPlatformConverter.INSTANCE.fromPO2VO(authPlatformPO, platformPO);
+        authPlatformVO.setSupportModels(platformPO.getSupportModels());
+        authPlatformVO.setPlatformName(platformPO.getName());
+        return authPlatformVO;
     }
 
-    private static @NotNull Map<String, String> getStringMap(PlatformDTO 
platformDTO, PlatformPO platformPO) {
+    private static @NotNull Map<String, String> getStringMap(AuthPlatformDTO 
authPlatformDTO, PlatformPO platformPO) {
         if (platformPO == null) {
             throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
         }
         Map<String, String> credentialNeed = platformPO.getCredential();
-        Map<String, String> credentialGet = platformDTO.getAuthCredentials();
+        Map<String, String> credentialGet = 
authPlatformDTO.getAuthCredentials();
         Map<String, String> credentialSet = new HashMap<>();
         for (String key : credentialNeed.keySet()) {
             if (!credentialGet.containsKey(key)) {
@@ -193,56 +203,37 @@ public class ChatbotServiceImpl implements ChatbotService 
{
     }
 
     @Override
-    public List<PlatformAuthCredentialVO> platformsAuthCredential(Long 
platformId) {
-        PlatformPO platformPO = platformDao.findByPlatformId(platformId);
-        if (platformPO == null) {
-            throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
-        }
-        List<PlatformAuthCredentialVO> platformAuthCredentialVOs = new 
ArrayList<>();
-        for (String key : platformPO.getCredential().keySet()) {
-            PlatformAuthCredentialVO platformAuthCredentialVO =
-                    new PlatformAuthCredentialVO(key, 
platformPO.getCredential().get(key));
-            platformAuthCredentialVOs.add(platformAuthCredentialVO);
+    public boolean deleteAuthorizedPlatform(Long authId) {
+        AuthPlatformPO authPlatformPO = authPlatformDao.findByAuthId(authId);
+        if (authPlatformPO == null) {
+            throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_AUTHORIZED);
         }
-        return platformAuthCredentialVOs;
-    }
 
-    @Override
-    public boolean deleteAuthorizedPlatform(Long platformId) {
-        List<PlatformAuthorizedPO> authorizedPlatformPOs = 
platformAuthorizedDao.findAllPlatform();
-        for (PlatformAuthorizedPO authorizedPlatformPO : 
authorizedPlatformPOs) {
-            if (authorizedPlatformPO.getId().equals(platformId)) {
-                authorizedPlatformPO.setIsDeleted(true);
-                platformAuthorizedDao.partialUpdateById(authorizedPlatformPO);
-                List<ChatThreadPO> chatThreadPOS = 
chatThreadDao.findAllByPlatformId(authorizedPlatformPO.getId());
-                if (chatThreadPOS.isEmpty()) {
-                    return true;
-                }
-                chatThreadPOS.forEach(chatThread -> 
chatThread.setIsDeleted(true));
-                chatThreadDao.partialUpdateByIds(chatThreadPOS);
-                for (ChatThreadPO chatThreadPO : chatThreadPOS) {
-                    List<ChatMessagePO> chatMessagePOS = 
chatMessageDao.findAllByThreadId(chatThreadPO.getId());
-                    if (chatMessagePOS.isEmpty()) {
-                        return true;
-                    }
-                    chatMessagePOS.forEach(chatMessage -> 
chatMessage.setIsDeleted(true));
-                    chatMessageDao.partialUpdateByIds(chatMessagePOS);
-                }
-                return true;
+        authPlatformPO.setIsDeleted(true);
+        authPlatformDao.partialUpdateById(authPlatformPO);
+
+        List<ChatThreadPO> chatThreadPOS = 
chatThreadDao.findAllByAuthId(authPlatformPO.getId());
+        for (ChatThreadPO chatThreadPO : chatThreadPOS) {
+            chatThreadPO.setIsDeleted(true);
+            chatThreadDao.partialUpdateById(chatThreadPO);
+            List<ChatMessagePO> chatMessagePOS = 
chatMessageDao.findAllByThreadId(chatThreadPO.getId());
+            for (ChatMessagePO chatMessagePO : chatMessagePOS) {
+                chatMessagePO.setIsDeleted(true);
+                chatMessageDao.partialUpdateById(chatMessagePO);
             }
         }
 
-        throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
+        return true;
     }
 
     @Override
-    public ChatThreadVO createChatThreads(Long platformId, String model) {
-        PlatformAuthorizedPO platformAuthorizedPO = 
platformAuthorizedDao.findByPlatformId(platformId);
-        if (platformAuthorizedPO == null) {
-            throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_FOUND);
+    public ChatThreadVO createChatThreads(Long authId, String model) {
+        AuthPlatformPO authPlatformPO = authPlatformDao.findByAuthId(authId);
+        if (authPlatformPO == null) {
+            throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_AUTHORIZED);
         }
         Long userId = SessionUserHolder.getUserId();
-        PlatformPO platformPO = 
platformDao.findByPlatformId(platformAuthorizedPO.getPlatformId());
+        PlatformPO platformPO = 
platformDao.findByPlatformId(authPlatformPO.getPlatformId());
         List<String> supportModels = 
List.of(platformPO.getSupportModels().split(","));
         if (!supportModels.contains(model)) {
             throw new ApiException(ApiExceptionEnum.MODEL_NOT_SUPPORTED);
@@ -250,11 +241,11 @@ public class ChatbotServiceImpl implements ChatbotService 
{
         ChatThreadPO chatThreadPO = new ChatThreadPO();
         chatThreadPO.setUserId(userId);
         chatThreadPO.setModel(model);
-        chatThreadPO.setPlatformId(platformAuthorizedPO.getId());
+        chatThreadPO.setAuthId(authPlatformPO.getId());
+        chatThreadPO.setPlatformId(authPlatformPO.getPlatformId());
 
-        PlatformAuthorizedDTO platformAuthorizedDTO = new 
PlatformAuthorizedDTO(
-                platformPO.getName(), platformAuthorizedPO.getCredentials(), 
chatThreadPO.getModel());
-        AIAssistant aiAssistant = buildAIAssistant(platformAuthorizedDTO, 
null, null);
+        AIAssistant aiAssistant = buildAIAssistant(
+                platformPO.getName(), chatThreadPO.getModel(), 
authPlatformPO.getCredentials(), null, null);
         Map<String, String> threadInfo = aiAssistant.createThread();
         chatThreadPO.setThreadInfo(threadInfo);
         chatThreadDao.saveWithThreadInfo(chatThreadPO);
@@ -262,30 +253,27 @@ public class ChatbotServiceImpl implements ChatbotService 
{
     }
 
     @Override
-    public boolean deleteChatThreads(Long platformId, Long threadId) {
-        Long userId = SessionUserHolder.getUserId();
-        List<ChatThreadPO> chatThreadPOS = 
chatThreadDao.findAllByUserId(userId);
-        for (ChatThreadPO chatThreadPO : chatThreadPOS) {
-            if (chatThreadPO.getId().equals(threadId)
-                    && chatThreadPO.getPlatformId().equals(platformId)) {
-                chatThreadPO.setIsDeleted(true);
-                chatThreadDao.partialUpdateById(chatThreadPO);
-                List<ChatMessagePO> chatMessagePOS = 
chatMessageDao.findAllByThreadId(threadId);
-                if (chatMessagePOS.isEmpty()) {
-                    return true;
-                }
-                chatMessagePOS.forEach(chatMessage -> 
chatMessage.setIsDeleted(true));
-                chatMessageDao.partialUpdateByIds(chatMessagePOS);
-                return true;
-            }
+    public boolean deleteChatThreads(Long authId, Long threadId) {
+        ChatThreadPO chatThreadPO = chatThreadDao.findById(threadId);
+        if (chatThreadPO == null) {
+            throw new ApiException(ApiExceptionEnum.CHAT_THREAD_NOT_FOUND);
         }
-        throw new ApiException(ApiExceptionEnum.CHAT_THREAD_NOT_FOUND);
+
+        chatThreadPO.setIsDeleted(true);
+        chatThreadDao.partialUpdateById(chatThreadPO);
+        List<ChatMessagePO> chatMessagePOS = 
chatMessageDao.findAllByThreadId(threadId);
+        for (ChatMessagePO chatMessagePO : chatMessagePOS) {
+            chatMessagePO.setIsDeleted(true);
+            chatMessageDao.partialUpdateById(chatMessagePO);
+        }
+
+        return true;
     }
 
     @Override
-    public List<ChatThreadVO> getAllChatThreads(Long platformId, String model) 
{
+    public List<ChatThreadVO> getAllChatThreads(Long authId, String model) {
         Long userId = SessionUserHolder.getUserId();
-        List<ChatThreadPO> chatThreadPOS = 
chatThreadDao.findAllByPlatformAuthorizedIdAndUserId(platformId, userId);
+        List<ChatThreadPO> chatThreadPOS = 
chatThreadDao.findAllByAuthIdAndUserId(authId, userId);
         List<ChatThreadVO> chatThreads = new ArrayList<>();
         for (ChatThreadPO chatThreadPO : chatThreadPOS) {
             ChatThreadVO chatThreadVO = 
ChatThreadConverter.INSTANCE.fromPO2VO(chatThreadPO);
@@ -297,22 +285,24 @@ public class ChatbotServiceImpl implements ChatbotService 
{
     }
 
     @Override
-    public SseEmitter talk(Long platformId, Long threadId, String message) {
+    public SseEmitter talk(Long authId, Long threadId, String message) {
         ChatThreadPO chatThreadPO = chatThreadDao.findByThreadId(threadId);
         Long userId = SessionUserHolder.getUserId();
         if (!Objects.equals(userId, chatThreadPO.getUserId())) {
             throw new ApiException(ApiExceptionEnum.CHAT_THREAD_NOT_FOUND);
         }
-        PlatformAuthorizedPO platformAuthorizedPO = 
platformAuthorizedDao.findByPlatformId(platformId);
-        if (platformAuthorizedPO == null) {
+        AuthPlatformPO authPlatformPO = authPlatformDao.findByAuthId(authId);
+        if (authPlatformPO == null) {
             throw new ApiException(ApiExceptionEnum.PLATFORM_NOT_AUTHORIZED);
         }
 
-        PlatformPO platformPO = 
platformDao.findById(platformAuthorizedPO.getPlatformId());
-        PlatformAuthorizedDTO platformAuthorizedDTO = new 
PlatformAuthorizedDTO(
-                platformPO.getName(), platformAuthorizedPO.getCredentials(), 
chatThreadPO.getModel());
-        AIAssistant aiAssistant =
-                buildAIAssistant(platformAuthorizedDTO, chatThreadPO.getId(), 
chatThreadPO.getThreadInfo());
+        PlatformPO platformPO = 
platformDao.findById(authPlatformPO.getPlatformId());
+        AIAssistant aiAssistant = buildAIAssistant(
+                platformPO.getName(),
+                chatThreadPO.getModel(),
+                authPlatformPO.getCredentials(),
+                chatThreadPO.getId(),
+                chatThreadPO.getThreadInfo());
         Flux<String> stringFlux = aiAssistant.streamAsk(message);
 
         SseEmitter emitter = new SseEmitter();
@@ -332,7 +322,7 @@ public class ChatbotServiceImpl implements ChatbotService {
     }
 
     @Override
-    public List<ChatMessageVO> history(Long platformId, Long threadId) {
+    public List<ChatMessageVO> history(Long authId, Long threadId) {
         List<ChatMessageVO> chatMessages = new ArrayList<>();
         ChatThreadPO chatThreadPO = chatThreadDao.findByThreadId(threadId);
         if (chatThreadPO == null) {
diff --git a/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql 
b/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql
index dc67ea7..8a0bf67 100644
--- a/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql
+++ b/bigtop-manager-server/src/main/resources/ddl/MySQL-DDL-CREATE.sql
@@ -323,7 +323,7 @@ CREATE TABLE `llm_platform`
     PRIMARY KEY (`id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-CREATE TABLE `llm_platform_authorized`
+CREATE TABLE `llm_auth_platform`
 (
     `id`          BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
     `platform_id` BIGINT(20) UNSIGNED NOT NULL,
@@ -340,6 +340,7 @@ CREATE TABLE `llm_platform_authorized`
 CREATE TABLE `llm_chat_thread`
 (
     `id`          BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
+    `auth_id`     BIGINT(20) UNSIGNED NOT NULL,
     `platform_id` BIGINT(20) UNSIGNED NOT NULL,
     `user_id`     BIGINT(20) UNSIGNED NOT NULL,
     `model`       VARCHAR(255)        NOT NULL,
@@ -350,6 +351,7 @@ CREATE TABLE `llm_chat_thread`
     `create_by`   BIGINT              DEFAULT NULL,
     `update_by`   BIGINT              DEFAULT NULL,
     PRIMARY KEY (`id`),
+    KEY             `idx_auth_id` (`auth_id`),
     KEY             `idx_platform_id` (`platform_id`),
     KEY             `idx_user_id` (`user_id`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
diff --git 
a/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql 
b/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql
index 8ae2493..61099d7 100644
--- a/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql
+++ b/bigtop-manager-server/src/main/resources/ddl/PostgreSQL-DDL-CREATE.sql
@@ -333,7 +333,7 @@ CREATE TABLE llm_platform
     PRIMARY KEY (id)
 );
 
-CREATE TABLE llm_platform_authorized
+CREATE TABLE llm_auth_platform
 (
     id          BIGINT CHECK (id > 0)          NOT NULL GENERATED ALWAYS AS 
IDENTITY,
     platform_id BIGINT CHECK (platform_id > 0) NOT NULL,
@@ -346,11 +346,12 @@ CREATE TABLE llm_platform_authorized
     PRIMARY KEY (id)
 );
 
-CREATE INDEX idx_authorized_platform_id ON llm_platform_authorized 
(platform_id);
+CREATE INDEX idx_authorized_platform_id ON llm_auth_platform (platform_id);
 
 CREATE TABLE llm_chat_thread
 (
     id          BIGINT CHECK (id > 0)          NOT NULL GENERATED ALWAYS AS 
IDENTITY,
+    auth_id     BIGINT CHECK (auth_id > 0) NOT NULL,
     platform_id BIGINT CHECK (platform_id > 0) NOT NULL,
     user_id     BIGINT CHECK (user_id > 0)     NOT NULL,
     model       VARCHAR(255)                   NOT NULL,
@@ -363,6 +364,7 @@ CREATE TABLE llm_chat_thread
     PRIMARY KEY (id)
 );
 
+CREATE INDEX idx_chatthread_auth_id ON llm_chat_thread (auth_id);
 CREATE INDEX idx_chatthread_platform_id ON llm_chat_thread (platform_id);
 CREATE INDEX idx_chatthread_user_id ON llm_chat_thread (user_id);
 
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/ChatbotControllerTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/ChatbotControllerTest.java
index 0414891..766053f 100644
--- 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/ChatbotControllerTest.java
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/controller/ChatbotControllerTest.java
@@ -18,13 +18,13 @@
  */
 package org.apache.bigtop.manager.server.controller;
 
-import org.apache.bigtop.manager.server.model.dto.PlatformDTO;
+import org.apache.bigtop.manager.server.model.dto.AuthPlatformDTO;
+import org.apache.bigtop.manager.server.model.req.AuthPlatformReq;
 import org.apache.bigtop.manager.server.model.req.ChatbotMessageReq;
-import org.apache.bigtop.manager.server.model.req.PlatformReq;
+import org.apache.bigtop.manager.server.model.vo.AuthPlatformVO;
 import org.apache.bigtop.manager.server.model.vo.ChatMessageVO;
 import org.apache.bigtop.manager.server.model.vo.ChatThreadVO;
 import org.apache.bigtop.manager.server.model.vo.PlatformAuthCredentialVO;
-import org.apache.bigtop.manager.server.model.vo.PlatformAuthorizedVO;
 import org.apache.bigtop.manager.server.model.vo.PlatformVO;
 import org.apache.bigtop.manager.server.service.ChatbotService;
 import org.apache.bigtop.manager.server.utils.MessageSourceUtils;
@@ -85,10 +85,10 @@ class ChatbotControllerTest {
 
     @Test
     void getAuthorizedPlatforms() {
-        List<PlatformAuthorizedVO> authorizedPlatforms = new ArrayList<>();
+        List<AuthPlatformVO> authorizedPlatforms = new ArrayList<>();
         
when(chatbotService.authorizedPlatforms()).thenReturn(authorizedPlatforms);
 
-        ResponseEntity<List<PlatformAuthorizedVO>> response = 
chatbotController.authorizedPlatforms();
+        ResponseEntity<List<AuthPlatformVO>> response = 
chatbotController.authorizedPlatforms();
 
         assertTrue(response.isSuccess());
         assertEquals(authorizedPlatforms, response.getData());
@@ -98,7 +98,7 @@ class ChatbotControllerTest {
     void platformsAuthCredential() {
         Long platformId = 1L;
         List<PlatformAuthCredentialVO> credentials = new ArrayList<>();
-        
when(chatbotService.platformsAuthCredential(platformId)).thenReturn(credentials);
+        
when(chatbotService.platformsAuthCredentials(platformId)).thenReturn(credentials);
 
         ResponseEntity<List<PlatformAuthCredentialVO>> response = 
chatbotController.platformsAuthCredential(platformId);
 
@@ -108,12 +108,12 @@ class ChatbotControllerTest {
 
     @Test
     void addAuthorizedPlatform() {
-        PlatformReq platformReq = new PlatformReq();
-        PlatformAuthorizedVO authorizedVO = new PlatformAuthorizedVO();
+        AuthPlatformReq authPlatformReq = new AuthPlatformReq();
+        AuthPlatformVO authorizedVO = new AuthPlatformVO();
 
-        
when(chatbotService.addAuthorizedPlatform(any(PlatformDTO.class))).thenReturn(authorizedVO);
+        
when(chatbotService.addAuthorizedPlatform(any(AuthPlatformDTO.class))).thenReturn(authorizedVO);
 
-        ResponseEntity<PlatformAuthorizedVO> response = 
chatbotController.addAuthorizedPlatform(platformReq);
+        ResponseEntity<AuthPlatformVO> response = 
chatbotController.addAuthorizedPlatform(authPlatformReq);
 
         assertTrue(response.isSuccess());
         assertEquals(authorizedVO, response.getData());

Reply via email to