From 7b26a6cf6b303a3af86b089fe74424070f05aec6 Mon Sep 17 00:00:00 2001 From: ctexthuang Date: Thu, 10 Apr 2025 10:23:00 +0800 Subject: [PATCH] feat : suggest --- app/Controller/Admin/SuggestController.php | 27 +++++++ app/Controller/Api/SuggestController.php | 41 ++++++++++ app/Model/Suggest.php | 34 ++++++++ app/Service/Admin/System/SuggestService.php | 78 +++++++++++++++++++ .../Api/Suggest/MySuggestListService.php | 57 ++++++++++++++ app/Service/Api/Suggest/SubmissionService.php | 45 +++++++++++ 6 files changed, 282 insertions(+) create mode 100644 app/Controller/Admin/SuggestController.php create mode 100644 app/Controller/Api/SuggestController.php create mode 100644 app/Model/Suggest.php create mode 100644 app/Service/Admin/System/SuggestService.php create mode 100644 app/Service/Api/Suggest/MySuggestListService.php create mode 100644 app/Service/Api/Suggest/SubmissionService.php diff --git a/app/Controller/Admin/SuggestController.php b/app/Controller/Admin/SuggestController.php new file mode 100644 index 0000000..f2bd769 --- /dev/null +++ b/app/Controller/Admin/SuggestController.php @@ -0,0 +1,27 @@ +handle(); + } +} diff --git a/app/Controller/Api/SuggestController.php b/app/Controller/Api/SuggestController.php new file mode 100644 index 0000000..e504d63 --- /dev/null +++ b/app/Controller/Api/SuggestController.php @@ -0,0 +1,41 @@ +handle(); + } + + /** + * @return array + */ + #[RequestMapping(path: "list", methods: "GET")] + #[Scene(scene: "list")] + public function list(): array + { + return (new MySuggestListService)->handle(); + } +} diff --git a/app/Model/Suggest.php b/app/Model/Suggest.php new file mode 100644 index 0000000..49ed4fd --- /dev/null +++ b/app/Model/Suggest.php @@ -0,0 +1,34 @@ + 'integer', 'category' => 'integer', 'user_id' => 'integer']; +} diff --git a/app/Service/Admin/System/SuggestService.php b/app/Service/Admin/System/SuggestService.php new file mode 100644 index 0000000..9eae991 --- /dev/null +++ b/app/Service/Admin/System/SuggestService.php @@ -0,0 +1,78 @@ +request->input('limit', 10); + $searchUserId = $this->request->input('search_user_id'); + + $data = $this->suggestModel + ->when($searchUserId, function ($query, $searchUserId) { + return $query->where('user_id', $searchUserId); + }) + ->orderByDesc('id') + ->paginate($limit) + ->toArray(); + + if (empty($data['data'])) return $this->return->success('success',$data); + + $userIds = array_column($data['data'],'user_id'); + $userList = $this->userModel->getInfoByIds($userIds); + + $imageIds = array_column($userList,'avatar_id'); + + $imageIdArr = array_column($data['data'],'image_ids'); + $listImageIds = array_unique(explode(',',implode(',',$imageIdArr))); + $totalImageIds = array_merge($listImageIds,$imageIds); + unset($imageIds,$imageIdArr,$listImageIds); + + $imageList = $this->getOssObjects($totalImageIds); + + foreach ($data['data'] as &$item) { + $item['nickname'] = $userList[$item['user_id']]['nickname'] ?? ''; + $item['avatar'] = $imageList[$userList[$item['user_id']]['avatar_id']]['url'] ?? ''; + + $oneImage = []; + foreach (explode(',',$item['image_ids']) as $imageId) { + $oneImage[] = $imageList[$imageId]['url'] ?? ''; + } + $item['content_image_list'] = $oneImage; + } + + return $this->return->success('success',$data); + } +} \ No newline at end of file diff --git a/app/Service/Api/Suggest/MySuggestListService.php b/app/Service/Api/Suggest/MySuggestListService.php new file mode 100644 index 0000000..ac85736 --- /dev/null +++ b/app/Service/Api/Suggest/MySuggestListService.php @@ -0,0 +1,57 @@ +request->input('limit', 10); + + $data = $this->suggestModel + ->where('user_id', $this->userId) + ->orderByDesc('id') + ->paginate($limit) + ->toArray(); + + if (empty($data['data'])) return $this->return->success('success',$data); + + $imageIdArr = array_column($data['data'],'image_ids'); + $listImageIds = array_unique(explode(',',implode(',',$imageIdArr))); + $imageList = $this->getOssObjects($listImageIds); + + foreach ($data['data'] as &$item) { + $oneImage = []; + foreach (explode(',',$item['image_ids']) as $imageId) { + $oneImage[] = $imageList[$imageId]['url'] ?? ''; + } + $item['content_image_list'] = $oneImage; + } + + return $this->return->success('success',$data); + } +} \ No newline at end of file diff --git a/app/Service/Api/Suggest/SubmissionService.php b/app/Service/Api/Suggest/SubmissionService.php new file mode 100644 index 0000000..bc491de --- /dev/null +++ b/app/Service/Api/Suggest/SubmissionService.php @@ -0,0 +1,45 @@ +request->input('image_ids'); + + $insertModel->user_id = $this->userId; + $insertModel->content = $this->request->input('content'); + if (!empty($imageIds)) { + $insertModel->image_ids = $imageIds; + $this->updateOssObjects(explode(',', $imageIds)); + } + + if (!$insertModel->save()) throw new ErrException('提交失败'); + }); + + return $this->return->success(); + } +} \ No newline at end of file