ProjectController.php 5.9KB

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