<?php namespace App\Http\Controllers; use App\Repositories\NoticeRuleRepository; use App\Transformers\MessageRuleDetailTransformer; use App\Transformers\NoticeRuleListTransformer; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Illuminate\Validation\Rule; use League\Fractal\Manager; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Resource\Collection; use League\Fractal\Resource\Item; class NoticeRuleController extends Controller { public function __construct(NoticeRuleRepository $noticeRuleRepository) { $this->noticeRuleRepository = $noticeRuleRepository; } /** * 消息规则列表 */ public function index(Request $request) { $productList = $this->noticeRuleRepository->lists($request->all()); $fractal = new Manager(); $resource = new Collection($productList, new NoticeRuleListTransformer()); $resource->setPaginator(new IlluminatePaginatorAdapter($productList)); $data = $fractal->createData($resource)->toArray(); $data['extra'] = [ 'filters' => [ 'title', 'message_type' ], 'columns' => [ 'id', 'title', 'message_type', 'cover', 'updated_at', 'sent_count', 'open_count', 'notice_groups', 'message_status' ] ]; return $data; } /** * 创建消息规则 */ public function create(Request $request) { $validator = Validator::make($request->all(), [ 'notice_type' => ['required',Rule::in(0, 1)], 'title' => 'required|string|max:30', 'notice_user_type' => ['required',Rule::in(0, 1, 2)], 'action_type' => ['required_if:notice_type,0',Rule::in('post', 'recommend', 'star', 'activity', 'product')], 'action_id' => 'required_if:notice_type,0|integer|min:1', 'content' => 'required|string|max:60', 'send_time' => 'nullable|date', 'attribute' => ['nullable',Rule::in(0, 1, 2)], 'category' => 'nullable|array', 'category.*' => 'nullable|integer', ]); if ($validator->fails()) { return $this->response->error($validator->errors()->first(), 500); } return $this->noticeRuleRepository->create($request->all()); } /** * 编辑消息规则 */ public function update(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required|exists:message_rule', 'title' => 'required|string|max:20', 'notice_groups' => 'required|string|max:31', 'message_type' => ['required',Rule::in('star', 'system')], 'message_show_type' => ['required_if:message_type,star',Rule::in('only_show', 'user', 'post', 'activity', 'topic')], 'activity_url' => 'required_if:message_show_type,user,post,activity,topic|string|max:64', 'content' => 'required_if:message_type,system|string|max:200', 'cover' => 'required_if:message_type,star|url', 'send_time' => 'nullable|date', 'activity_time' => 'nullable|string|max:24', ]); if ($validator->fails()) { return $this->response->error($validator->errors()->first(), 500); } return $this->noticeRuleRepository->update($request->all()); } /** * 消息规则详情 */ public function detail(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required|exists:message_rule' ]); if ($validator->fails()) { return $this->response->error($validator->errors()->first(), 500); } $post = $this->noticeRuleRepository->detail($request->all()); return $this->response->item($post, new MessageRuleDetailTransformer()); } /** * 发送消息规则 */ public function send(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required|exists:message_rule' ]); if ($validator->fails()) { return $this->response->error($validator->errors()->first(), 500); } return $this->noticeRuleRepository->send($request->all()); } /** * 隐藏消息规则 */ public function hide(Request $request) { $validator = Validator::make($request->all(), [ 'id' => 'required|exists:message_rule' ]); if ($validator->fails()) { return $this->response->error($validator->errors()->first(), 500); } return $this->noticeRuleRepository->hide($request->all()); } }