MusicRepository.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: durong
  5. * Date: 2019/7/4
  6. * Time: 上午9:50
  7. */
  8. namespace App\Repositories;
  9. use App\Models\PostMusicCategory;
  10. use App\Models\PostMusicCategoryRel;
  11. use App\Models\PostMusicUser;
  12. use Illuminate\Support\Facades\Cache;
  13. class MusicRepository
  14. {
  15. public function __construct(PostMusicCategoryRel $postMusicCategoryRel, PostMusicCategory $postMusicCategory, PostMusicUser $postMusicUser)
  16. {
  17. $this->postMusicCategoryRel = $postMusicCategoryRel;
  18. $this->postMusicCategory = $postMusicCategory;
  19. $this->postMusicUser = $postMusicUser;
  20. }
  21. //热门音乐列表
  22. public function lists($request)
  23. {
  24. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  25. $key = config('constants.MUSIC_LIST');
  26. $music_key = sprintf($key, md5($perPage));
  27. if (Cache::has($music_key)) {
  28. return Cache::store('redis')->get($music_key);
  29. }
  30. $category_name = '热门';
  31. $postMusicCategoryRel = $this->postMusicCategoryRel
  32. ->join('post_music_category', 'post_music_category.id', '=', 'post_music_category_rel.music_category_id')
  33. ->join('post_music', 'post_music.id', '=', 'post_music_category_rel.mid')
  34. ->select('post_music.*')
  35. ->where('post_music_category.name', 'like', "%{$category_name}%")
  36. ->orderBy('id', 'desc')
  37. ->paginate($perPage);
  38. if (!Cache::has($music_key)) {
  39. Cache::store('redis')->put($music_key, $postMusicCategoryRel, 604800);//一周过期
  40. }
  41. return $postMusicCategoryRel;
  42. }
  43. public function category_list($request)
  44. {
  45. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  46. return $this->postMusicCategory->where('is_open', 1)->orderBy('sort', 'asc')->paginate($perPage);
  47. }
  48. public function postMusicList($request)
  49. {
  50. $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
  51. $postMusicList = $this->postMusicCategoryRel
  52. ->with('post_music')
  53. ->join('post_music_category', 'post_music_category.id', '=', 'post_music_category_rel.music_category_id')
  54. ->join('post_music', 'post_music.id', '=', 'post_music_category_rel.mid')
  55. ->select('post_music.*', 'post_music_category_rel.sort')
  56. ->where(['post_music_category.id' => $request['category_id'], 'post_music_category.is_open' => 1])
  57. ->orderBy('post_music_category_rel.sort', 'asc')
  58. ->paginate($perPage);
  59. return $postMusicList;
  60. }
  61. public function create($request)
  62. {
  63. $data = [
  64. 'name' => $request['name'],
  65. 'username' => $request['username'],
  66. 'url' => $request['url'] ?? '',
  67. 'uid' => $request['uid']
  68. ];
  69. $music_create = $this->postMusicUser->create($data);
  70. if (!$music_create) {
  71. return jsonError('上传失败请重试');
  72. }
  73. }
  74. }