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);
}
}
}