云开发收藏功能如何实现?
发布于 4 年前 作者 xiuyinghao 11027 次浏览 来自 问答

云开发收藏需要存云数据库吗?还是使用缓存?比如列表展示时,如何判断某项这个用户是否已收藏?已收藏就亮,再次点击就取消收藏如何做到?请大家给个思路来,谢谢!

1 回复

1 数据处理

class FavService extends BaseAlumniService {
 

    /** 是否收藏 */
    async isFav(userId, {
        oid,
        type
    }) {
        type = Number(type);
        let where = {
            FAV_OID: oid,
            FAV_TYPE: type,
            FAV_USER_ID: userId
        }
        let isFav = await FavModel.count(where);
        return {
            isFav
        };
    }

    /** 谁收藏了我 */
    async getFavMeList(userId, {
        search, // 搜索条件
        sortType, // 搜索菜单
        sortVal, // 搜索菜单
        orderBy, // 排序 
        page,
        size,
        isTotal = true,
        oldTotal
    }) {
        orderBy = orderBy || {
            'FAV_ADD_TIME''desc'
        };
        let fields = 'FAV_TITLE,FAV_OID,FAV_TYPE,FAV_ADD_TIME,' + this.getJoinUserFields();
 

        let joinParams = this.getJoinUserParams('FAV_USER_ID');
        return await FavModel.getListJoin(joinParams, where, fields, orderBy, page, size, isTotal, oldTotal);
    }

    /** 更新某人收藏 */
    async updateFav(userId, {
        oid, // 被收藏ID
        type// 类型
        cancelIfExist = true//已收藏的情况下是否取消
    }) {

        type = Number(type);
        // 重复性判断
        let where = {
            oid: oid,
            typetype
        }

          

        return {
            isFav: 1
        };
    }

    /** 修改收藏 */
    async editFav(editData) {
        let {
            where,
            data
        } = editData;

        return await FavModel.edit(where, data);
    }

    /** 删除收藏 */
    async delFav(userId, {
        oid,
        type
    }) {
        let where = {
            FAV_OID: oid,
            FAV_TYPE: type,
            FAV_USER_ID: userId
        }
        let effect = await FavModel.del(where);

        // 异步减少收藏数
        

        return {
            effect
        };
    }

    /** 我的收藏列表 */
    async getMyFavList(userId, {
        search, // 搜索条件 
        sortType, // 搜索菜单
        sortVal, // 搜索菜单
        orderBy, // 排序  
        page,
        size,
        isTotal = true,
        oldTotal = 0
    }) {
        orderBy = orderBy || {
            'FAV_ADD_TIME''desc'
        };
        let fields = 'FAV_TITLE,FAV_ADD_TIME,FAV_OID, FAV_TYPE';

        let where = {};
       

        return await FavModel.getList(where, fields, orderBy, page, size, isTotal, oldTotal);

    }
}

2 表t_fav

FavModel.DB_STRUCTURE = {
    _pid: 'string|true',
    FAV_ID'string|true',
    FAV_USER_ID'string|true',
    FAV_OWNER_ID'string|true|comment=所有者',

    FAV_TITLE'string|true|comment=标题',
    FAV_TYPE'int|true|default=0|comment=类型 参照bizUti.TYPE',
    FAV_OID'string|true|comment=相关表主键',
    FAV_PIC'string|false|comment=相关图片',

    FAV_ADD_TIME'int|true',
    FAV_EDIT_TIME'int|true',
    FAV_ADD_IP'string|false',
    FAV_EDIT_IP'string|false',
};
回到顶部