ProjectController.php 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. $categoryId = $request->input("categoryId") ?? "";
  27. $locale = $locale == "tw" ? "zh_TW" : $locale;
  28. $result = [];
  29. //年份清單
  30. $regions = Region::where("visible", 1)->pluck("name", "id")->all();
  31. $tags = Tag::where("visible", 1)->pluck("name", "id")->all();
  32. $result["regions"] = $regions;
  33. $result["tags"] = $tags;
  34. //文章列表
  35. $projects = Project::query();
  36. if($request->has('region')){
  37. $projects->where("region_id", $request->input('region'));
  38. }
  39. if($request->has('tags')){
  40. $request_tags = $request->input('tags');
  41. $projects->whereHas("tags", function ($query) use ($request_tags) {
  42. return $query->whereIn("tags.id", $request_tags);
  43. });
  44. }
  45. $projects = $projects->with(['tags', 'region'])->orderByDesc("order")->get();
  46. foreach($projects as $project){
  47. $result["list"][] = [
  48. "id" => $project->id,
  49. "region_id" => $project->region_id,
  50. "region" => $project->region->getTranslation("name", $locale),
  51. "address" => $project->getTranslation("address", $locale),
  52. "tags" => $project->tags->pluck('name', 'id')->all(),
  53. "name" => $project->getTranslation("name", $locale),
  54. "imgUrl" => $project->first_list_img_url
  55. ];
  56. }
  57. return Response::ok($result);
  58. }
  59. public function detail($locale = 'tw', $id){
  60. $locale = $locale == "tw" ? "zh_TW" : $locale;
  61. $project = Project::find($id);
  62. $projectHistories = [];
  63. foreach($project->histories as $history){
  64. $operateDate = Carbon::parse($history->operate_date);
  65. $projectHistories[$operateDate->format("Y")][] = [
  66. "operateDate" => $operateDate->format("m/d"),
  67. "title" => $history->getTranslation("title", $locale)
  68. ];
  69. }
  70. $result = [
  71. "name" => $project->getTranslation("name", $locale),
  72. "subName" => $project->getTranslation("sub_name", $locale),
  73. "sub_name" => $project->getTranslation("sub_name", $locale),
  74. "images" => $project->img_list,
  75. "region_id" => $project->region_id,
  76. "region" => $project->region->getTranslation("name", $locale),
  77. "address" => $project->getTranslation("address", $locale),
  78. "tags" => $project->tags->pluck("name", "id")->all(),
  79. "floor_plan" => $project->getTranslation("floor_plan", $locale),
  80. "building_structure" => $project->getTranslation("building_structure", $locale),
  81. "design_unit" => $project->getTranslation("design_unit", $locale),
  82. "badges" => $project->getBadgesByType($locale, $project->badge_type),
  83. "contact_info" => [
  84. "unitName" => $project->getTranslation("contact_unit", $locale),
  85. "unitPhone" => $project->getTranslation("contact_phone", $locale),
  86. "inversmentPhone" => $project->getTranslation("inversment_phone", $locale),
  87. ],
  88. "spaceInfo" => $project->getTags($locale),
  89. "historyList" => $projectHistories
  90. ];
  91. return Response::ok($result);
  92. }
  93. public function badges($locale = 'tw') {
  94. $locale = $locale == "tw" ? "zh_TW" : $locale;
  95. $projects = Project::where("badge_type", 2)->get();
  96. $result = [];
  97. foreach($projects as $project){
  98. $badgesData = $project->awardBadges;
  99. $badges = [];
  100. foreach($badgesData as $badge){
  101. $badges[] = [
  102. "imgUrl" => $badge->imgUrlLink,
  103. "name" => $badge->getTranslation("title", $locale),
  104. "rewardYear" => "取得時間 : " . date("Y.m", strtotime($badge->award_date))
  105. ];
  106. }
  107. $result[] = [
  108. "id" => $project->id,
  109. "name" => $project->getTranslation("name", $locale),
  110. "badges" => $badges
  111. ];
  112. }
  113. return Response::ok($result);
  114. }
  115. }