ProjectController.php 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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, $locate = 'tw')
  25. {
  26. $categoryId = $request->input("categoryId") ?? "";
  27. $locate = $locate == "tw" ? "zh_TW" : $locate;
  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", $locate),
  51. "address" => $project->getTranslation("address", $locate),
  52. "tags" => $project->tags->pluck('name', 'id')->all(),
  53. "name" => $project->getTranslation("name", $locate),
  54. "imgUrl" => $project->first_list_img_url
  55. ];
  56. }
  57. return Response::ok($result);
  58. }
  59. public function detail($locale = 'tw', $id){
  60. $locate = $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. "description" => $project->getTranslation("description", $locale),
  74. "images" => $project->img_list,
  75. "metaTitle" => $project->getTranslation("meta_title", $locate),
  76. "metaKeyword" => $project->getTranslation("meta_keyword", $locate),
  77. "metaDesc" => $project->getTranslation("meta_description", $locate),
  78. "metaImg" => $project->meta_img,
  79. "region_id" => $project->region_id,
  80. "region" => $project->region->getTranslation("name", $locale),
  81. "address" => $project->getTranslation("address", $locale),
  82. "tags" => $project->tags->pluck("name", "id")->all(),
  83. "floor_plan" => $project->getTranslation("floor_plan", $locale),
  84. "building_structure" => $project->getTranslation("building_structure", $locale),
  85. "design_unit" => $project->getTranslation("design_unit", $locale),
  86. "badges" => $project->getBadges($locale),
  87. "contact_info" => [
  88. "unitName" => $project->getTranslation("contact_unit", $locale),
  89. "unitPhone" => $project->getTranslation("contact_phone", $locale),
  90. "inversmentPhone" => $project->getTranslation("inversment_phone", $locale),
  91. ],
  92. "spaceInfo" => $project->getTags($locale),
  93. "historyList" => $projectHistories
  94. ];
  95. return Response::ok($result);
  96. }
  97. public function badges($locale = 'tw') {
  98. $locate = $locale == "tw" ? "zh_TW" : $locale;
  99. $projects = Project::where("visible", 1)->get();
  100. $result = [];
  101. foreach($projects as $project){
  102. $result[] = [
  103. "id" => $project->id,
  104. "name" => $project->getTranslation("name", $locale),
  105. "badges" => $project->getBadges($locale)
  106. ];
  107. }
  108. return Response::ok($result);
  109. }
  110. }