iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
自我挑戰組

跟 AI Agent 變成好朋友系列 第 27

【Day27】AI Agent 魔法詠唱 - UserPreference Service

  • 分享至 

  • xImage
  •  

UserPreferenceService 用於管理使用者偏好設定的 Service,主要包含偏好新增/更新、查詢、刪除、分析等功能,並善用了 Spring Data JPA 的特性,讓程式碼簡潔且易於維護。

其中 buildUserPreferencesString 方法負責將使用者的所有偏好資料,整理成一個易於閱讀的字串。這個方法會先查詢該使用者的所有偏好,然後依照偏好類型(例如 temperature, sweetness, category 等)分組,最後將每一組的偏好值串接成一段文字。像是:temperature: hot, cold; sweetness: high; category: coffee, tea;

    public String buildUserPreferencesString(User user) {
        List<UserPreference> preferences = userPreferenceRepository.findByUser(user);
        if (preferences.isEmpty()) {
            return "";
        }
        
        Map<String, List<String>> groupedPrefs = preferences.stream()
            .collect(Collectors.groupingBy(
                UserPreference::getPreferenceType,
                Collectors.mapping(UserPreference::getPreferenceValue, Collectors.toList())
            ));
        
        StringBuilder sb = new StringBuilder();
        for (Map.Entry<String, List<String>> entry : groupedPrefs.entrySet()) {
            sb.append(entry.getKey()).append(": ")
              .append(String.join(", ", entry.getValue())).append("; ");
        }
        
        return sb.toString();
    }

運作流程:

  1. 先用 userPreferenceRepository.findByUser(user) 取得所有偏好資料。
  2. 如果偏好為空,就直接回傳空字串。
  3. 利用 Java Stream API 的 groupingBy 和 mapping,將使者者的偏好依照類型(如 temperature, sweetness, category 等)分組,每個類型的所有值收集成 List。
  4. 用 StringBuilder 依序組合每個類型及其所有值,格式為 entry: Value1, Value2;,就像前述所提及的 temperature: hot, cold; sweetness: high; category: coffee, tea;
  5. 最後回傳組合好的字串,供前端或其他元件使用。

這樣好處是能將複雜的偏好資料結構,轉換成簡潔明瞭的文字,方便前端顯示或後端紀錄。讓使用者的偏好管理相關任務邏輯集中於此 Service,提升程式可維護性與擴充性。


上一篇
【Day26】AI Agent 魔法詠唱 - FavoriteDrink Service
下一篇
【Day28】AI Agent 魔法詠唱 - Controller (API 控制器)
系列文
跟 AI Agent 變成好朋友30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言