const { request, uploadFile, setToken } = require('./request.js'); // wx.login 取 code function wxLogin() { return new Promise((resolve, reject) => { wx.login({ success: (r) => (r.code ? resolve(r.code) : reject(new Error('wx.login 未返回 code'))), fail: reject, }); }); } // 登录:优先微信 code2session,失败回退开发态 Mock 登录(后端 dev_login=true) async function login() { try { const code = await wxLogin(); const data = await request({ url: '/api/auth/wechat', method: 'POST', data: { code } }); setToken(data.token); return data; } catch (e) { console.warn('[api] 微信登录失败,回退 Mock 登录:', e && e.message); const data = await request({ url: '/api/auth/login', method: 'POST', data: { nickname: '开发用户' } }); setToken(data.token); return data; } } const api = { login, uploadFile, // 用户 getProfile: () => request({ url: '/api/user/profile' }), updateProfile: (body) => request({ url: '/api/user/profile', method: 'PUT', data: body }), // 用户 userSummary: () => request({ url: '/api/user/summary' }), // 宠物 getPets: () => request({ url: '/api/pets' }), homeSummary: (id) => request({ url: `/api/pets/${id}/home-summary` }), getPet: (id) => request({ url: `/api/pets/${id}` }), createPet: (body) => request({ url: '/api/pets', method: 'POST', data: body }), updatePet: (id, body) => request({ url: `/api/pets/${id}`, method: 'PUT', data: body }), deletePet: (id) => request({ url: `/api/pets/${id}`, method: 'DELETE' }), onboarding: (body) => request({ url: '/api/onboarding', method: 'POST', data: body }), // 记录 getRecords: (id, { type, page, pageSize } = {}) => { const qs = []; if (type) qs.push(`type=${type}`); if (page) qs.push(`page=${page}`); if (pageSize) qs.push(`page_size=${pageSize}`); return request({ url: `/api/pets/${id}/records${qs.length ? '?' + qs.join('&') : ''}` }); }, createRecord: (id, body) => request({ url: `/api/pets/${id}/records`, method: 'POST', data: body }), weightTrend: (id) => request({ url: `/api/pets/${id}/records/weight-trend` }), // 任务 getTasks: (id, date) => request({ url: `/api/pets/${id}/tasks${date ? `?date=${date}` : ''}` }), createTask: (id, body) => request({ url: `/api/pets/${id}/tasks`, method: 'POST', data: body }), updateTask: (taskId, body) => request({ url: `/api/tasks/${taskId}`, method: 'PUT', data: body }), deleteTask: (taskId) => request({ url: `/api/tasks/${taskId}`, method: 'DELETE' }), toggleTask: (taskId) => request({ url: `/api/tasks/${taskId}/toggle`, method: 'POST' }), completeAllTasks: (id) => request({ url: `/api/pets/${id}/tasks/complete-all`, method: 'POST' }), // 计划 getPlan: (id) => request({ url: `/api/pets/${id}/plan` }), planCalendar: (id, month) => request({ url: `/api/pets/${id}/plan/calendar${month ? `?month=${month}` : ''}` }), dayPlan: (id, date) => request({ url: `/api/pets/${id}/day-plan?date=${date}` }), createAIPlan: (id, input) => request({ url: `/api/pets/${id}/ai-plan`, method: 'POST', data: { input } }), applyAIPlan: (planId) => request({ url: `/api/ai-plan/${planId}/apply`, method: 'POST' }), togglePlanTask: (taskId) => request({ url: `/api/plan-tasks/${taskId}/toggle`, method: 'POST' }), // 提醒 getReminders: (id) => request({ url: `/api/pets/${id}/reminders` }), // 报告 weeklyReport: (id) => request({ url: `/api/pets/${id}/report/weekly` }), getBill: (id, period) => request({ url: `/api/pets/${id}/bill?period=${period || 'month'}` }), healthSummary: (id) => request({ url: `/api/pets/${id}/health-summary` }), getPoster: (id) => request({ url: `/api/pets/${id}/poster` }), // 社区 listPosts: (tab, page) => request({ url: `/api/posts?tab=${encodeURIComponent(tab || '')}&page=${page || 1}&page_size=10` }), createPost: (body) => request({ url: '/api/posts', method: 'POST', data: body }), likePost: (id) => request({ url: `/api/posts/${id}/like`, method: 'POST' }), listComments: (id) => request({ url: `/api/posts/${id}/comments` }), createComment: (id, content) => request({ url: `/api/posts/${id}/comments`, method: 'POST', data: { content } }), // 文章 listArticles: () => request({ url: '/api/articles' }), getArticle: (id) => request({ url: `/api/articles/${id}` }), // Pro getPro: () => request({ url: '/api/pro' }), activatePro: () => request({ url: '/api/pro/activate', method: 'POST' }), // AI aiChat: (body) => request({ url: '/api/ai/chat', method: 'POST', data: body }), assessSymptom: (id, body) => request({ url: `/api/pets/${id}/ai/assess-symptom`, method: 'POST', data: body }), }; module.exports = api;