ThinkPHP5:点赞表的设计、点赞API接口开发

0x00 点赞表的设计

0x01 点赞API接口的开发

<?php
/*
 * @Author: your name
 * @Date: 2020-07-18 17:42:20
 * @LastEditTime: 2020-07-18 20:00:52
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /myNewsApp/application/api/controller/v1/Upvote.php
 */

namespace app\api\controller\v1;

use think\Log;
use app\api\controller\v1\AuthBase;

class Upvote extends AuthBase
{
    /**
     * @description: 点赞功能开发
     * @method POST
     * @param {type} 
     * @return: 
     */
    public function save()
    {
        //文章id
        $id = input('post.id', 0, 'intval');
        if (empty($id)) {
            return show(config('api.fail_code'), '请传入文章id', [], 404);
        }
        $count = model('News')->getNewsCountByCondition(['id' => $id]);
        if ($count == 0) {
            return show(config('api.fail_code'), "不存在该文章", [], 404);
        }
        $data = [
            'user_id' => $this->user->id,
            'news_id' => $id
        ];
        if (model('UserNews')->where($data)->find()) {
            return show(config('api.fail_code'), '已经点赞过,不能再次点赞', [], 401);
        }
        try {
            $userNewsId = model('UserNews')->add($data);
            if ($userNewsId) {
                //回写
                model('News')->where(['id' => $id])->setInc('read_count');
                return show(config('api.success_code'), '点赞成功!');
            } else {
                return show(config('api.fail_code'), '点赞失败!', [], 500);
            }
        } catch (\Exception $e) {
            Log::write($e->getMessage() . PHP_EOL);
            return show(config('api.fail_code'), '点赞失败!', [], 500);
        }
        return [];
    }
    /**
     * @description: 取消点赞
     * @method: DELETE
     * @param {type} 
     * @return: 
     */
    public function delete()
    {
        $id = input('delete.id', 0, 'intval');
        if (empty($id)) {
            return show(config('api.fail_code'), '请传入文章id', [], 404);
        }
        //查询是否存在该文章
        $count = model('News')->getNewsCountByCondition(['id' => $id]);
        if ($count == 0) {
            return show(config('api.fail_code'), "不存在该文章", [], 404);
        }
        //查询该文章是否被点赞过
        $data = [
            'user_id' => $this->user->id,
            'news_id' => $id
        ];
        if (!model('UserNews')->where($data)->find()) {
            return show(config('api.fail_code'), '没有被点赞过,不能取消', [], 401);
        }
        //取消点赞
        try{
            if(model('UserNews')->where($data)->delete()
            && model('News')->where(['id'=>$id])->setDec('read_count')){
                return show(config('api.success_code'),'取消成功!');
            }else{
                return show(config('api.fail_code'),'取消失败!',[],500);
            }
        }catch(\Exception $e){
            Log::write($e->getMessage());
            return show(config('api.fail_code'),'取消失败!',[],500); 
        }
    }
    /**
     * 查看文章是否被该用户点赞
     * method:GET
     * 
     */
    public function read(){
        $id = input('param.id', 0, 'intval');
        if (empty($id)) {
            return show(config('api.fail_code'), '请传入文章id', [], 404);
        }
        //查询该文章是否被点赞过
        $data = [
            'user_id'=>$this->user->id,
            'news_id'=>$id
        ];
        if (model('UserNews')->where($data)->find()) {
            return show(config('api.success_code'),'OK' , ['isUpvote'=>true], 200);
        }else{
            return show(config('api.success_code'),'OK',['isUpvote'=>false],200);
        }
    }
}

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值