// 收藏服务:动作收藏 + 官方计划收藏(均受保护)。 const { request } = require('../utils/request'); // 复用 displayName 注入(避免循环依赖,内联轻量版) function injectDisplayName(item) { if (!item) return item; item.displayName = item.nameZh || item.name || ''; return item; } function injectDisplayNames(list) { if (!list || !Array.isArray(list)) return list || []; return list.map(injectDisplayName); } // 收藏的动作列表 function listExercises() { return request({ url: '/api/favorites/exercises', method: 'GET' }).then((res) => { const items = (res && Array.isArray(res)) ? res : (res && res.items); if (items) { const injected = injectDisplayNames(items); if (Array.isArray(res)) return injected; res.items = injected; } return res; }); } // 收藏某个动作 function addExercise(id) { return request({ url: '/api/favorites/exercises', method: 'POST', data: { target: id } }); } // 取消收藏某个动作 function removeExercise(id) { return request({ url: '/api/favorites/exercises/' + encodeURIComponent(id), method: 'DELETE' }); } // 查询某动作收藏状态 { favorited } function exerciseStatus(id) { return request({ url: '/api/favorites/exercises/' + encodeURIComponent(id) + '/status', method: 'GET' }); } // 收藏的官方计划列表(CollectionDef[]) function listPlans() { return request({ url: '/api/favorites/plans', method: 'GET' }); } // 收藏某个官方计划 function addPlan(slug) { return request({ url: '/api/favorites/plans', method: 'POST', data: { target: slug } }); } // 取消收藏某个官方计划 function removePlan(slug) { return request({ url: '/api/favorites/plans/' + encodeURIComponent(slug), method: 'DELETE' }); } // 查询某官方计划收藏状态 { favorited } function planStatus(slug) { return request({ url: '/api/favorites/plans/' + encodeURIComponent(slug) + '/status', method: 'GET' }); } module.exports = { listExercises, addExercise, removeExercise, exerciseStatus, listPlans, addPlan, removePlan, planStatus };