<?php namespace App\Http\Controllers\Xchengxu\User; use Illuminate\Http\Request; use App\Http\Controllers\Xchengxu\BaseController; use App\Modules\Book\Services\BookConfigService; use App\Modules\Book\Services\UserShelfBooksService; use App\Http\Controllers\Xchengxu\User\Transformers\ReadRecordTransformer; use App\Modules\User\Services\ReadRecordService; use Hashids; use Redis; use Log; class ReadRecordController extends BaseController { /** * @apiDefine ReadRecord 阅读记录 */ /** * @apiVersion 1.0.0 * @apiDescription 获取阅读记录 * @api {get} readrecord 获取阅读记录 * @apiParam {String} [token] token * @apiHeader {String} [Authorization] token 两个token任选其一 * @apiGroup ReadRecord * @apiName index * @apiSuccess {int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccess {Int} data.book_name 书名 * @apiSuccess {String} data.chapter_name 章节名 * @apiSuccess {Int} data.bid bid * @apiSuccess {Int} data.time 时间 * @apiSuccess {Int} data.cid 章节id * @apiSuccess {Int} data.chapter_name 章节名 * @apiSuccess {Int} data.cover 封面 * @apiSuccess {Int} data.last_chapter 最后一张 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data:[ * { * book_name: "我来好好爱你", * bid: 2, * cid: 10402, * time: 1511783120, * chapter_name: "你言重了" * }, * { * book_name: "京华烟云", * bid: 1, * cid: 4, * time: 1511783068, * chapter_name: "背水一战" * } * ] */ public function index(Request $request){ if(!$this->checkUid()){ return response()->error('XCX_NOT_LOGIN'); } $res = ReadRecordService::getReadRecord($this->uid); if($res){ $id_arr = []; foreach ($res as $key => $value) { $id_arr[] = $value['bid']; } $book = BookConfigService::getBooksByIds($id_arr); foreach ($res as $key => &$value) { foreach ($book as $val) { if($value['bid'] == $val->bid){ $value['cover'] = $val->cover; $value['last_chapter'] = $val->last_chapter; break; } } } $shelf = UserShelfBooksService::getUserShelfBooksListByUid($this->uid); foreach ($res as &$v){ $v['is_on_user_shelf'] = 0; foreach ($shelf as $val){ if($v['bid'] == $val->bid){ $v['is_on_user_shelf'] = 1; break; } } } } usort($res,function($a,$b){ if($a['time'] >= $b['time']) return -1; return 1; }); $res = json_encode($res); $res = json_decode($res); return response()->collection(new ReadRecordTransformer(),$res); } /** * @apiVersion 1.0.0 * @apiDescription 添加阅读记录 * @api {post} readrecord 添加阅读记录 * @apiGroup ReadRecord * @apiName addReadRecord * @apiParam {String} [token] token * @apiHeader {String} [Authorization] token 两个token任选其一 * @apiParam {Int} book_name 书名 * @apiParam {String} chapter_name 章节名 * @apiParam {Int} bid bid * @apiParam {Int} cid 章节id * @apiSuccess {int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data:{} * */ public function addReadRecord(Request $request){ if(!$this->checkUid()){ return response()->error('XCX_NOT_LOGIN'); } $param = $request->except('_url'); if(checkParam($param,['bid','cid','chapter_name'])){ return response()->error('LACK_PARAM'); } //Redis::hset('book_read:' . $uid, $bid, "{$cid}_{$book_name}_{$chapter_name}_" . time()); $param['uid'] = $this->uid; $param['bid'] = Hashids::decode($param['bid'])[0]; $record_info = Redis::hget('book_read:'.$this->uid,$param['bid']); $param['book_name'] = 'unknown'; if($record_info){ $param['book_name'] = explode('_',$record_info)[1]; } ReadRecordService::addReadRecord($param); return response()->success(); } /** * @apiVersion 1.0.0 * @apiDescription 删除阅读记录 * @api {get} readrecord/delete 删除阅读记录 * @apiGroup ReadRecord * @apiParam {String} [token] token * @apiHeader {String} [Authorization] token 两个token任选其一 * @apiName delReadRecord * @apiParam {Int} bid bid * @apiSuccess {int} code 状态码 * @apiSuccess {String} msg 信息 * @apiSuccess {object} data 结果集 * @apiSuccessExample {json} Success-Response: * HTTP/1.1 200 OK * { * code: 0, * msg: "", * data:{} * */ public function delReadRecord(Request $request){ if(!$this->checkUid()){ return response()->error('XCX_NOT_LOGIN'); } $param = $request->except('_url'); if(checkParam($param,['bid'])){ return response()->error('LACK_PARAM'); } $param['bid'] = Hashids::decode($param['bid'])[0]; ReadRecordService::delReadRecord($this->uid,$param['bid']); return response()->success(); } }