family.js 8.19 KB
/*
 * @Date: 2024-01-01 00:00:00
 * @LastEditors: hookehuyr hookehuyr@gmail.com
 * @LastEditTime: 2025-09-23 09:37:24
 * @FilePath: /lls_program/src/api/family.js
 * @Description: 家庭相关接口
 */
import { fn, fetch } from './fn';

const Api = {
    SEARCH_BY_PASSPHRASE: '/srv/?a=family&t=search_by_passphrase',
    LIST_MY_FAMILIES: '/srv/?a=family&t=list_my_families',
    GET_DASHBOARD: '/srv/?a=family&t=get_dashboard',
    ADD_FAMILY: '/srv/?a=family&t=add',
    EDIT_FAMILY: '/srv/?a=family&t=edit',
    JOIN_FAMILY: '/srv/?a=family&t=join',
    GET_FAMILY_INFO: '/srv/?a=family&t=get_my_family',
    SWITCH_CURRENT_FAMILY: '/srv/?a=family&t=switch_current',
    DEL_MEMBER: '/srv/?a=family&t=del_member',
}

/**
 * @description: 根据口令搜索家庭
 * @param {Object} params - 请求参数
 * @param {string} params.passphrase - 家训口令
 * @param {number} [params.page=0] - 页码,从0开始
 * @param {number} [params.limit=10] - 每页数量
 * @returns {Promise} 返回匹配的家庭列表
 * @returns {Object} response - 响应对象
 * @returns {number} response.code - 响应状态码
 * @returns {string} response.msg - 响应消息
 * @returns {Array} response.data - 家庭列表
 * @returns {number} response.data[].id - 家庭ID
 * @returns {string} response.data[].name - 家庭名称
 * @returns {string} response.data[].avatar_url - 家庭头像
 */
export const searchFamilyByPassphraseAPI = (params) => fn(fetch.get(Api.SEARCH_BY_PASSPHRASE, params));

/**
 * @description: 获取我的家庭列表
 * @returns {Promise} 返回当前用户创建和加入的所有家庭列表
 * @returns {Object} response - 响应对象
 * @returns {string} response.code - 响应状态码
 * @returns {string} response.msg - 响应消息
 * @returns {Array} response.data.families - 家庭列表
 * @returns {boolean} response.data.can_add - 是否可以添加家庭
 * @returns {number} response.data.families[].id - 家庭ID
 * @returns {string} response.data.families[].name - 家庭名称
 * @returns {string} response.data.families[].avatar_url - 家庭头像
 * @returns {boolean} response.data.families[].is_my - 是否是我创建的家庭
 * @returns {string} response.data.families[].created_by_nickname - 创建者昵称
 * @returns {string} response.data.families[].is_current_family - 是否是当前家庭
 * @returns {Array} response.data.families[].users - 家庭成员列表
 * @returns {string} response.data.families[].users[].user_id - 用户ID
 * @returns {string} response.data.families[].users[].role - 角色
 * @returns {string} response.data.families[].users[].avatar_url - 头像
 * @returns {string} response.data.families[].users[].nickname - 昵称
 */
export const getMyFamiliesAPI = () => fn(fetch.get(Api.LIST_MY_FAMILIES));

/**
 * @description: 获取家庭首页数据
 * @returns {Promise} 返回家庭首页聚合数据
 * @returns {Object} response - 响应对象
 * @returns {number} response.code - 响应状态码
 * @returns {string} response.msg - 响应消息
 * @returns {Object} response.data - 家庭首页数据
 * @returns {Object} response.data.family - 家庭信息
 * @returns {number} response.data.family.id - 家庭ID
 * @returns {string} response.data.family.name - 家庭名称
 * @returns {string} response.data.family.note - 家庭描述
 * @returns {string} response.data.family.avatar_url - 家庭头像
 * @returns {number} response.data.family.total_points - 家庭总积分
 * @returns {number} response.data.family_today_step - 家庭今日总步数
 * @returns {number} response.data.my_today_step - 我今天的步数
 * @returns {Array} response.data.pending_points - 等待汇总到家庭的积分
 * @returns {number} response.data.pending_points[].id - 积分ID
 * @returns {string} response.data.pending_points[].title - 积分标题
 * @returns {string} response.data.pending_points[].points - 积分数量
 * @returns {string} response.data.pending_points[].source_type - 积分来源 (WALKING=步数, CHECK_IN=参与一次参与奖励, CHECK_IN_COUNT=完成参与奖励次数, FAMILY_SIZE=家庭成员达5人, COMPANION_PHOTO=陪伴拍照, WHEELCHAIR_COMPANION=陪伴轮椅拍照)
 * @returns {string} response.data.pending_points[].note - 积分说明
 * @returns {Array} response.data.step_ranking - 步数排名
 * @returns {string} response.data.step_ranking[].user_id - 用户ID
 * @returns {string} response.data.step_ranking[].role - 角色
 * @returns {string} response.data.step_ranking[].avatar_url - 头像
 * @returns {string} response.data.step_ranking[].today_step - 用户今日步数
 */
export const getFamilyDashboardAPI = (options = {}) => fn(fetch.get(Api.GET_DASHBOARD), options);

/**
 * @description: 创建家庭
 * @param {Object} params - 请求参数
 * @param {string} params.name - 家庭名称
 * @param {string} params.county - 所在区县
 * @param {string} params.passphrase - 家训口令
 * @param {string} params.avatar_url - 家庭头像
 * @param {string} params.note - 家庭介绍
 * @returns {Promise} 返回创建的家庭ID
 * @returns {Object} response - 响应对象
 * @returns {string} response.code - 响应状态码
 * @returns {string} response.msg - 响应消息
 * @returns {Object} response.data - 响应数据
 * @returns {number} response.data.family_id - 家庭ID
 */
export const createFamilyAPI = (params) => fn(fetch.post(Api.ADD_FAMILY, params));

/**
 * @description: 编辑家庭
 * @param {Object} params - 请求参数
 * @param {number} params.id - 家庭ID
 * @param {string} params.name - 家庭名称
 * @param {string} params.county - 所在区县
 * @param {string} params.passphrase - 家训口令
 * @param {string} params.avatar_url - 家庭头像
 * @param {string} params.note - 家庭介绍
 * @returns {Promise} 返回编辑结果
 * @returns {Object} response - 响应对象
 * @returns {string} response.code - 响应状态码
 * @returns {string} response.msg - 响应消息
 * @returns {Object} response.data - 响应数据
 * @returns {number} response.data.family_id - 家庭ID
 */
export const editFamilyAPI = (params) => fn(fetch.post(Api.EDIT_FAMILY, params));

/**
 * @description: 加入家庭
 * @param {Object} params - 请求参数
 * @param {number} params.family_id - 家庭ID
 * @param {string} params.role - 角色(如:儿子、女儿等)
 * @returns {Promise} 返回加入结果
 * @returns {Object} response - 响应对象
 * @returns {string} response.code - 响应状态码
 * @returns {string} response.msg - 响应消息
 */
export const joinFamilyAPI = (params) => fn(fetch.post(Api.JOIN_FAMILY, params));

/**
 * @description: 获取家庭信息
 * @returns {Promise} 返回家庭信息
 * @returns {Object} response - 响应对象
 * @returns {string} response.code - 响应状态码
 * @returns {string} response.msg - 响应消息
 * @returns {Object} response.data - 响应数据
 * @returns {number} response.data.id - 家庭ID
 * @returns {string} response.data.name - 家庭名称
 * @returns {string} response.data.note - 家庭描述
 * @returns {string} response.data.county - 所在区县
 * @returns {string} response.data.avatar_url - 家庭头像
 * @returns {string} response.data.passphrase - 家庭口令
 */
export const getFamilyInfoAPI = (params) => fn(fetch.post(Api.GET_FAMILY_INFO, params));

/**
 * @description: 切换当前家庭
 * @param {Object} params - 请求参数
 * @param {number} params.family_id - 家庭ID
 * @returns {Promise} 返回切换结果
 * @returns {Object} response - 响应对象
 * @returns {string} response.code - 响应状态码
 * @returns {string} response.msg - 响应消息
 * @returns {Object} response.data - 响应数据
 * @returns {number} response.data.family_id - 家庭ID
 */
export const switchCurrentFamilyAPI = (params) => fn(fetch.post(Api.SWITCH_CURRENT_FAMILY, params));

/**
 * @description: 退出或移出家庭成员
 * @param {Object} params - 请求参数
 * @param {number} params.family_id - 家庭ID
 * @param {number|Array} [params.user_ids] - 成员用户ID(主动退出时不传,创建者移出时传递)
 * @returns {Promise} 返回操作结果
 * @returns {Object} response - 响应对象
 * @returns {string} response.code - 响应状态码
 * @returns {string} response.msg - 响应消息
 */
export const deleteFamilyMemberAPI = (params) => fn(fetch.post(Api.DEL_MEMBER, params));