ProjectController.php 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\Project;
  5. use App\Models\Region;
  6. use App\Models\Tag;
  7. use App\Supports\Response;
  8. use Carbon\Carbon;
  9. use Illuminate\Http\Request;
  10. /**
  11. * @group Lottery Prize
  12. */
  13. class ProjectController extends Controller
  14. {
  15. public function __construct(
  16. ) {}
  17. public function list(Request $request, $locale = 'tw')
  18. {
  19. $locale = $locale == 'tw' ? 'zh_TW' : $locale;
  20. $result = [];
  21. // 年份清單
  22. $regions = Region::select(['id', 'name'])->where('visible', 1)->get()->map(function ($record) use ($locale) {
  23. return [
  24. 'id' => $record->id,
  25. 'name' => $record->getTranslation('name', $locale),
  26. ];
  27. });
  28. $tags = Tag::select(['id', 'name'])->where('visible', 1)->get()->map(function ($record) use ($locale) {
  29. return [
  30. 'id' => $record->id,
  31. 'name' => $record->getTranslation('name', $locale),
  32. ];
  33. });
  34. $result['regions'] = $regions;
  35. $result['tags'] = $tags;
  36. // 文章列表
  37. $projects = Project::where('visible', true);
  38. if ($request->has('region')) {
  39. $projects->where('region_id', $request->input('region'));
  40. }
  41. if ($request->has('tags')) {
  42. $request_tags = $request->input('tags');
  43. $projects->whereHas('tags', function ($query) use ($request_tags) {
  44. return $query->whereIn('tags.id', $request_tags);
  45. });
  46. }
  47. $projects = $projects->with(['tags', 'region'])->orderByDesc('order')->get();
  48. foreach ($projects as $project) {
  49. $result['list'][] = [
  50. 'id' => $project->id,
  51. 'region_id' => $project->region_id,
  52. 'region' => $project->region->getTranslation('name', $locale),
  53. 'district' => $project->getTranslation('district', $locale),
  54. 'address' => $project->getTranslation('address', $locale),
  55. 'tags' => $project->tags->map(function ($record) use ($locale) {
  56. return [
  57. 'id' => $record->id,
  58. 'name' => $record->getTranslation('name', $locale),
  59. ];
  60. }),
  61. 'name' => $project->getTranslation('name', $locale),
  62. 'thumbnail' => $project->thumbnail_url,
  63. 'imgUrl' => $project->first_list_img_url,
  64. 'mobileImgUrl' => $project->first_mobile_img_url,
  65. ];
  66. }
  67. return Response::ok($result);
  68. }
  69. public function detail($locale, $id)
  70. {
  71. $locale = $locale == 'tw' ? 'zh_TW' : $locale;
  72. $project = Project::find($id);
  73. $projectHistories = [];
  74. $projectSpaceInfo = [];
  75. foreach ($project->histories as $history) {
  76. $operateDate = Carbon::parse($history->operate_date);
  77. $projectHistories[$operateDate->format('Y')][] = [
  78. 'operateDate' => $operateDate->format('m/d'),
  79. 'title' => $history->getTranslation('title', $locale),
  80. ];
  81. }
  82. foreach ($project->spaceInfos as $spaceInfo) {
  83. $projectSpaceInfo[] = [
  84. 'title' => $spaceInfo->getTranslation('title', $locale),
  85. 'content' => $spaceInfo->getTranslation('content', $locale),
  86. ];
  87. }
  88. $result = [
  89. 'name' => $project->getTranslation('name', $locale),
  90. 'subName' => $project->getTranslation('sub_name', $locale),
  91. 'description' => $project->getTranslation('summaries', $locale),
  92. 'thumbnail' => $project->thumbnail_url,
  93. 'images' => $project->img_list,
  94. 'mobileImages' => $project->mobile_img_list,
  95. 'region_id' => $project->region_id,
  96. 'region' => $project->region->getTranslation('name', $locale),
  97. 'address' => $project->getTranslation('address', $locale),
  98. 'district' => $project->getTranslation('district', $locale),
  99. 'tags' => $project->tags->map(function ($record) use ($locale) {
  100. return [
  101. 'id' => $record->id,
  102. 'name' => $record->getTranslation('name', $locale),
  103. ];
  104. }),
  105. 'floor_plan' => $project->getTranslation('floor_plan', $locale),
  106. 'building_structure' => $project->getTranslation('building_structure', $locale),
  107. 'design_unit' => $project->getTranslation('design_unit', $locale),
  108. 'badge_type' => $project->badge_type,
  109. 'badges' => $project->getBadgesByType($locale, $project->badge_type),
  110. 'contact_info' => [
  111. 'unitName' => $project->getTranslation('contact_unit', $locale),
  112. 'unitPhone' => $project->getTranslation('contact_phone', $locale),
  113. 'inversmentPhone' => $project->getTranslation('inversment_phone', $locale),
  114. 'officalLink' => $project->offical_link,
  115. ],
  116. 'spaceInfo' => $projectSpaceInfo,
  117. 'historyList' => $projectHistories,
  118. ];
  119. return Response::ok($result);
  120. }
  121. public function badges($locale = 'tw')
  122. {
  123. $locale = $locale == 'tw' ? 'zh_TW' : $locale;
  124. $projects = Project::where('badge_type', 2)->get();
  125. $result = [];
  126. foreach ($projects as $project) {
  127. $badgesData = $project->awardBadges;
  128. $badges = [];
  129. foreach ($badgesData as $badge) {
  130. $badges[] = [
  131. 'imgUrl' => $badge->imgUrlLink,
  132. 'name' => $badge->getTranslation('title', $locale),
  133. 'rewardYear' => '取得時間 : '.date('Y.m', strtotime($badge->pivot->award_date)),
  134. ];
  135. }
  136. $result[] = [
  137. 'name' => $project->getTranslation('name', $locale),
  138. 'badges' => $badges,
  139. ];
  140. }
  141. return Response::ok($result);
  142. }
  143. }