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();
}
運作流程:
userPreferenceRepository.findByUser(user)
取得所有偏好資料。groupingBy
和 mapping
,將使者者的偏好依照類型(如 temperature, sweetness, category 等)分組,每個類型的所有值收集成 List。entry: Value1, Value2;
,就像前述所提及的 temperature: hot, cold; sweetness: high; category: coffee, tea;
。這樣好處是能將複雜的偏好資料結構,轉換成簡潔明瞭的文字,方便前端顯示或後端紀錄。讓使用者的偏好管理相關任務邏輯集中於此 Service,提升程式可維護性與擴充性。