NoticeRuleController.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Repositories\NoticeRuleRepository;
  4. use App\Transformers\MessageRuleDetailTransformer;
  5. use App\Transformers\NoticeRuleListTransformer;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Validator;
  8. use Illuminate\Validation\Rule;
  9. use League\Fractal\Manager;
  10. use League\Fractal\Pagination\IlluminatePaginatorAdapter;
  11. use League\Fractal\Resource\Collection;
  12. use League\Fractal\Resource\Item;
  13. class NoticeRuleController extends Controller
  14. {
  15. public function __construct(NoticeRuleRepository $noticeRuleRepository)
  16. {
  17. $this->noticeRuleRepository = $noticeRuleRepository;
  18. }
  19. /**
  20. * 消息规则列表
  21. */
  22. public function index(Request $request)
  23. {
  24. $productList = $this->noticeRuleRepository->lists($request->all());
  25. $fractal = new Manager();
  26. $resource = new Collection($productList, new NoticeRuleListTransformer());
  27. $resource->setPaginator(new IlluminatePaginatorAdapter($productList));
  28. $data = $fractal->createData($resource)->toArray();
  29. $data['extra'] = [
  30. 'filters' => [
  31. 'title',
  32. 'message_type'
  33. ],
  34. 'columns' => [
  35. 'id',
  36. 'title',
  37. 'message_type',
  38. 'cover',
  39. 'updated_at',
  40. 'sent_count',
  41. 'open_count',
  42. 'notice_groups',
  43. 'message_status'
  44. ]
  45. ];
  46. return $data;
  47. }
  48. /**
  49. * 创建消息规则
  50. */
  51. public function create(Request $request)
  52. {
  53. $validator = Validator::make($request->all(), [
  54. 'notice_type' => ['required',Rule::in(0, 1)],
  55. 'title' => 'required|string|max:30',
  56. 'notice_user_type' => ['required',Rule::in(0, 1, 2)],
  57. 'action_type' => ['required_if:notice_type,0',Rule::in('post', 'recommend', 'star', 'activity', 'product')],
  58. 'action_id' => 'required_if:notice_type,0|integer|min:1',
  59. 'content' => 'required|string|max:60',
  60. 'send_time' => 'nullable|date',
  61. 'attribute' => ['nullable',Rule::in(0, 1, 2)],
  62. 'category' => 'nullable|array',
  63. 'category.*' => 'nullable|integer',
  64. ]);
  65. if ($validator->fails()) {
  66. return $this->response->error($validator->errors()->first(), 500);
  67. }
  68. return $this->noticeRuleRepository->create($request->all());
  69. }
  70. /**
  71. * 编辑消息规则
  72. */
  73. public function update(Request $request)
  74. {
  75. $validator = Validator::make($request->all(), [
  76. 'id' => 'required|exists:message_rule',
  77. 'title' => 'required|string|max:20',
  78. 'notice_groups' => 'required|string|max:31',
  79. 'message_type' => ['required',Rule::in('star', 'system')],
  80. 'message_show_type' => ['required_if:message_type,star',Rule::in('only_show', 'user', 'post', 'activity', 'topic')],
  81. 'activity_url' => 'required_if:message_show_type,user,post,activity,topic|string|max:64',
  82. 'content' => 'required_if:message_type,system|string|max:200',
  83. 'cover' => 'required_if:message_type,star|url',
  84. 'send_time' => 'nullable|date',
  85. 'activity_time' => 'nullable|string|max:24',
  86. ]);
  87. if ($validator->fails()) {
  88. return $this->response->error($validator->errors()->first(), 500);
  89. }
  90. return $this->noticeRuleRepository->update($request->all());
  91. }
  92. /**
  93. * 消息规则详情
  94. */
  95. public function detail(Request $request)
  96. {
  97. $validator = Validator::make($request->all(), [
  98. 'id' => 'required|exists:message_rule'
  99. ]);
  100. if ($validator->fails()) {
  101. return $this->response->error($validator->errors()->first(), 500);
  102. }
  103. $post = $this->noticeRuleRepository->detail($request->all());
  104. return $this->response->item($post, new MessageRuleDetailTransformer());
  105. }
  106. /**
  107. * 发送消息规则
  108. */
  109. public function send(Request $request)
  110. {
  111. $validator = Validator::make($request->all(), [
  112. 'id' => 'required|exists:message_rule'
  113. ]);
  114. if ($validator->fails()) {
  115. return $this->response->error($validator->errors()->first(), 500);
  116. }
  117. return $this->noticeRuleRepository->send($request->all());
  118. }
  119. /**
  120. * 隐藏消息规则
  121. */
  122. public function hide(Request $request)
  123. {
  124. $validator = Validator::make($request->all(), [
  125. 'id' => 'required|exists:message_rule'
  126. ]);
  127. if ($validator->fails()) {
  128. return $this->response->error($validator->errors()->first(), 500);
  129. }
  130. return $this->noticeRuleRepository->hide($request->all());
  131. }
  132. }