BookTransformer.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace App\Transformer\Book;
  3. use App\Models\Book\Book;
  4. use Vinkla\Hashids\Facades\Hashids;
  5. class BookTransformer
  6. {
  7. // 书籍列表
  8. public function newBuildBookList($data): array
  9. {
  10. return [
  11. 'meta' => getMeta($data),
  12. 'list' => $this->newEachBookList($data->items())
  13. ];
  14. }
  15. private function newEachBookList($list): array
  16. {
  17. $result = [];
  18. if (empty($list)) return $result;
  19. foreach ($list as $item) {
  20. $result[] = [
  21. 'bid' => getProp($item, 'id'),
  22. 'book_name' => getProp($item, 'book_name'),
  23. 'origin_book_name' => getProp($item, 'origin_book_name') ? getProp($item, 'origin_book_name') : getProp($item, 'name'),
  24. 'intro' => filterIntro(getProp($item, 'intro')),
  25. 'cover' => addPrefix(getProp($item, 'cover')),
  26. 'author' => getProp($item, 'author'),
  27. 'category_name' => getProp($item, 'category_name') ? getProp($item, 'category_name') : '其他',
  28. 'ncategory_name' => getProp($item, 'ncategory_name') ? getProp($item, 'category_name') : '',
  29. 'gender' => getProp($item, 'gender'),
  30. 'status' => getProp($item, 'status') == 1 ? '已完结' : '连载中',
  31. 'chapter_count' => getProp($item, 'chapter_count'),
  32. 'size' => getProp($item, 'size'),
  33. 'roles' => getProp($item, 'roles'),
  34. 'charge_type' => getProp($item, 'charge_type') == 'CHAPTER' ? '长篇' : '短篇',
  35. 'created_at' => transDate(getProp($item, 'created_at')),
  36. 'book_calculate_price_type' => getProp($item, 'book_calculate_price_type'),
  37. 'book_coin' => getProp($item, 'book_coin'),
  38. ];
  39. }
  40. return $result;
  41. }
  42. // 章节目录
  43. public function newBuildChapterList($data): array
  44. {
  45. return [
  46. 'meta' => getMeta($data['chapters']),
  47. 'list' => $this->newEachChapterList($data['chapters']->items(), $data['book']['feed_advertise_seq'], $data['book']['follow_seq']),
  48. 'book' => $data['book']
  49. ];
  50. }
  51. private function newEachChapterList($list, $feed_advertise_seq, $follow_seq): array
  52. {
  53. $result = [];
  54. if (empty($list)) return $result;
  55. foreach ($list as $item) {
  56. $sequence = getProp($item, 'sequence');
  57. $result[] = [
  58. 'cid' => getProp($item, 'id'),
  59. 'chapter_name' => getProp($item, 'name'),
  60. 'size' => getProp($item, 'charge_length') ? getProp($item, 'charge_length') : getProp($item, 'size'),
  61. 'is_vip' => getProp($item, 'is_vip'),
  62. 'is_feed_advertise' => $feed_advertise_seq == $sequence ? 1 : 0,
  63. 'is_follow' => $follow_seq == $sequence ? 1 : 0,
  64. ];
  65. }
  66. return $result;
  67. }
  68. // 分类书籍
  69. public function newBuildCategoryBooks($data): array
  70. {
  71. return [
  72. 'meta' => getMeta($data),
  73. 'list' => $this->newEachCategoryBooks($data->items()),
  74. ];
  75. }
  76. private function newEachCategoryBooks($list): array
  77. {
  78. $result = [];
  79. if (empty($list)) return $result;
  80. foreach ($list as $item) {
  81. $result[] = [
  82. 'bid' => Hashids::encode(getProp($item, 'id')),
  83. 'book_name' => getProp($item, 'name'),
  84. 'intro' => filterIntro(getProp($item, 'intro')),
  85. 'cover' => addPrefix(getProp($item, 'cover')),
  86. 'author' => getProp($item, 'author'),
  87. 'category_name' => getProp($item, 'category_name') ? getProp($item, 'category_name') : '其他',
  88. 'gender' => getProp($item, 'gender'),
  89. ];
  90. }
  91. return $result;
  92. }
  93. }