Total Complexity | 54 |
Total Lines | 374 |
Duplicated Lines | 0 % |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
Complex classes like ContentController often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use ContentController, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
10 | class ContentController extends Controller |
||
11 | { |
||
12 | private $model; |
||
13 | private $contentModel; |
||
14 | |||
15 | /** |
||
16 | * Create a new controller instance. |
||
17 | * |
||
18 | * @return void |
||
19 | */ |
||
20 | public function __construct(User $model, Content $contentModel) |
||
21 | { |
||
22 | $this->model = $model; |
||
23 | $this->contentModel = $contentModel; |
||
24 | } |
||
25 | |||
26 | public function index(Request $request) |
||
27 | { |
||
28 | $user = $this->model->where('id', $request->user()->id)->first(); |
||
29 | |||
30 | if (!$user) { |
||
31 | return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']); |
||
32 | } |
||
33 | |||
34 | //$contents = $this->contentModel->with('user')->orderBy('published_at','DESC')->paginate(5); |
||
35 | |||
36 | $friends = $user->friends()->pluck('id'); |
||
37 | $friends->push($user->id); |
||
38 | $contents = $this->contentModel->whereIn('user_id', $friends)->with('user')->orderBy('published_at','DESC')->paginate(5); |
||
39 | |||
40 | foreach($contents as $key => $content) { |
||
41 | $content->total_likes = $content->likes()->count(); |
||
42 | $content->comments = $content->comments()->with('user')->orderBy('created_at', 'DESC')->get(); |
||
43 | $content->user_like_content = $user->likes()->find($content->id) ? true : false; |
||
44 | } |
||
45 | |||
46 | return response()->json(['status' => 'success', 'data' => $contents]); |
||
47 | } |
||
48 | |||
49 | public function store(Request $request) |
||
50 | { |
||
51 | $rules = [ |
||
52 | 'title' => 'required|min:3|max:255', |
||
53 | 'text' => 'required', |
||
54 | ]; |
||
55 | |||
56 | $validator = \Validator::make($request->all(), $rules); |
||
57 | |||
58 | if ($validator->fails()) { |
||
59 | return response()->json(['status' => 'error', 'errors' => $validator->errors()]); |
||
60 | } |
||
61 | |||
62 | $user = $this->model->where('id', $request->user()->id)->first(); |
||
63 | |||
64 | if (!$user) { |
||
65 | return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']); |
||
66 | } |
||
67 | |||
68 | $data = $request->all(); |
||
69 | $data['link'] = $request->link ? $request->link : '#'; |
||
70 | $data['image'] = $request->image ? $request->image : '#'; |
||
71 | $data['published_at'] = date('Y-m-d H:s:i'); |
||
72 | |||
73 | $user->contents()->create($data); |
||
74 | |||
75 | $contents = $this->contentModel->with('user')->orderBy('published_at','DESC')->paginate(2); |
||
76 | |||
77 | return response()->json(['status' => 'success', 'message' => 'Conteúdo criada com sucesso', 'data' => $contents]); |
||
78 | } |
||
79 | |||
80 | public function show(Request $request, $id) |
||
81 | { |
||
82 | if (!$id) { |
||
83 | return response()->json(['status' => 'error', 'message' => 'Conteúdo não informada']); |
||
84 | } |
||
85 | |||
86 | $user = $this->model->where('id', $request->user()->id)->first(); |
||
87 | |||
88 | if (!$user) { |
||
89 | return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']); |
||
90 | } |
||
91 | |||
92 | $content = $user->contents()->find($id); |
||
93 | |||
94 | if (!$content) { |
||
95 | return response()->json(['status' => 'error', 'message' => 'Opss. Conteúdo não encontrada pra este usuário.']); |
||
96 | } |
||
97 | |||
98 | return response()->json(['status' => 'success', 'data' => $content]); |
||
99 | } |
||
100 | |||
101 | public function update(Request $request, $id) |
||
132 | } |
||
133 | |||
134 | public function destroy(Request $request, $id) |
||
135 | { |
||
136 | if (!$id) { |
||
137 | return response()->json(['status' => 'error', 'message' => 'Conteúdo não informada']); |
||
138 | } |
||
139 | |||
140 | $user = $this->model->where('id', $request->user()->id)->first(); |
||
141 | |||
142 | if (!$user) { |
||
143 | return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']); |
||
144 | } |
||
145 | |||
146 | $content = $user->contents()->find($id); |
||
147 | |||
148 | if (!$content) { |
||
149 | return response()->json(['status' => 'error', 'message' => 'Opss. Conteúdo não encontrada pra este usuário.']); |
||
150 | } |
||
151 | |||
152 | $content->delete(); |
||
153 | |||
154 | return response()->json(['status' => 'success', 'message' => 'Conteúdo deletada com sucesso.']); |
||
155 | } |
||
156 | |||
157 | public function like(Request $request, $id) |
||
158 | { |
||
159 | if (!$id) { |
||
160 | return response()->json(['status' => 'error', 'message' => 'Conteúdo não informada']); |
||
161 | } |
||
162 | |||
163 | $user = $this->model->where('id', $request->user()->id)->first(); |
||
164 | |||
165 | if (!$user) { |
||
166 | return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']); |
||
167 | } |
||
168 | |||
169 | $content = $this->contentModel->find($id); |
||
170 | |||
171 | if (!$content) { |
||
172 | return response()->json(['status' => 'error', 'message' => 'Opss. Conteúdo não encontrada pra este usuário.']); |
||
173 | } |
||
174 | |||
175 | $user->likes()->toggle($content->id); |
||
176 | |||
177 | return response()->json([ |
||
178 | 'status' => 'success', |
||
179 | 'message' => 'Conteúdo curtido com sucesso.', |
||
180 | 'data' => $content->likes()->count(), |
||
181 | 'listContent' => $this->index($request) |
||
182 | ]); |
||
183 | } |
||
184 | |||
185 | public function likePage(Request $request, $id) |
||
210 | ]); |
||
211 | } |
||
212 | |||
213 | public function comment(Request $request, $id) |
||
214 | { |
||
215 | $rules = [ |
||
216 | 'text' => 'required', |
||
217 | ]; |
||
218 | |||
219 | $validator = \Validator::make($request->all(), $rules); |
||
220 | |||
221 | if ($validator->fails()) { |
||
222 | return response()->json(['status' => 'error', 'errors' => $validator->errors()]); |
||
223 | } |
||
224 | |||
225 | $user = $this->model->where('id', $request->user()->id)->first(); |
||
226 | |||
227 | if (!$user) { |
||
228 | return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']); |
||
229 | } |
||
230 | |||
231 | $content = $this->contentModel->find($id); |
||
232 | |||
233 | if (!$content) { |
||
234 | return response()->json(['status' => 'error', 'message' => 'Opss. Conteúdo não encontrada pra este usuário.']); |
||
235 | } |
||
236 | |||
237 | $data = $request->all(); |
||
238 | $data['content_id'] = $content->id; |
||
239 | $data['text'] = $request->text; |
||
240 | |||
241 | $user->comments()->create($data); |
||
242 | |||
243 | return response()->json([ |
||
244 | 'status' => 'success', |
||
245 | 'message' => 'Comentário criado com sucesso.', |
||
246 | 'listContent' => $this->index($request) |
||
247 | ]); |
||
248 | } |
||
249 | |||
250 | public function commentPage(Request $request, $id) |
||
284 | ]); |
||
285 | } |
||
286 | |||
287 | public function page(Request $request, $id) |
||
288 | { |
||
289 | $user = $this->model->where('id', $request->user()->id)->first(); |
||
290 | |||
291 | if (!$user) { |
||
292 | return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']); |
||
293 | } |
||
294 | |||
295 | $userOwner = $this->model->where('id', $id)->first(); |
||
296 | |||
297 | if (!$userOwner) { |
||
298 | return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique.']); |
||
299 | } |
||
300 | |||
301 | $contents = $userOwner->contents()->with('user')->orderBy('published_at','DESC')->paginate(2); |
||
302 | |||
303 | foreach($contents as $key => $content) { |
||
304 | $content->total_likes = $content->likes()->count(); |
||
305 | $content->comments = $content->comments()->with('user')->orderBy('created_at', 'DESC')->get(); |
||
306 | $content->user_like_content = $user->likes()->find($content->id) ? true : false; |
||
307 | } |
||
308 | |||
309 | return response()->json(['status' => 'success', 'data' => $contents, 'user' => $userOwner]); |
||
310 | } |
||
311 | |||
312 | public function friend(Request $request) |
||
347 | ]); |
||
348 | } |
||
349 | |||
350 | public function friends(Request $request) |
||
351 | { |
||
352 | $user = $this->model->where('id', $request->user()->id)->first(); |
||
353 | |||
354 | if (!$user) { |
||
362 | } |
||
363 | |||
364 | public function friendspage(Request $request, $id) |
||
384 | } |
||
385 | } |