ContentController   C
last analyzed

Complexity

Total Complexity 54

Size/Duplication

Total Lines 374
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 179
dl 0
loc 374
rs 6.4799
c 1
b 0
f 0
wmc 54

14 Methods

Rating   Name   Duplication   Size   Complexity  
A update() 0 31 5
A likePage() 0 25 4
A commentPage() 0 34 4
A friend() 0 35 5
A comment() 0 34 4
A destroy() 0 21 4
A __construct() 0 4 1
A like() 0 25 4
A show() 0 19 4
A store() 0 29 5
A page() 0 23 5
A friends() 0 12 2
A friendspage() 0 20 3
A index() 0 21 4

How to fix   Complexity   

Complex Class

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
2
3
namespace App\Http\Controllers\Api\V1;
4
5
use App\Http\Controllers\Controller;
6
use Illuminate\Http\Request;
7
use App\User;
8
use App\Content;
9
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)
102
    {
103
        $rules = [
104
            'name' => 'required|min:3|max:255'
105
        ];
106
107
        $validator = \Validator::make($request->all(), $rules);
108
109
        if ($validator->fails()) {
110
           return response()->json(['status' => 'error', 'errors' => $validator->errors()]);
111
        }
112
        
113
        if (!$id) {
114
           return response()->json(['status' => 'error', 'message' => 'Conteúdo não informada']);
115
        }
116
117
        $user = $this->model->where('id', $request->user()->id)->first();
118
119
        if (!$user) {
120
            return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']);
121
        }
122
        
123
        $content = $user->contents()->find($id);
124
125
        if (!$content) {
126
            return response()->json(['status' => 'error', 'message' => 'Opss. Conteúdo não encontrada pra este usuário.']);
127
        }
128
129
        $content->update($request->all());
130
131
        return response()->json(['status' => 'success', 'message' => 'Conteúdo atualizada com sucesso.']);
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)
186
    {
187
        if (!$id) {
188
           return response()->json(['status' => 'error', 'message' => 'Conteúdo não informada']);
189
        }
190
191
        $user = $this->model->where('id', $request->user()->id)->first();
192
193
        if (!$user) {
194
            return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']);
195
        }
196
        
197
        $content = $this->contentModel->find($id);
198
199
        if (!$content) {
200
            return response()->json(['status' => 'error', 'message' => 'Opss. Conteúdo não encontrada pra este usuário.']);
201
        }
202
203
        $user->likes()->toggle($content->id);
204
205
        return response()->json([
206
          'status' => 'success', 
207
          'message' => 'Conteúdo curtido com sucesso.', 
208
          'data' => $content->likes()->count(),
209
          'listContent' => $this->page($request, $content->user_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)
251
    {
252
        $rules = [
253
            'text' => 'required',
254
        ];
255
256
        $validator = \Validator::make($request->all(), $rules);
257
258
        if ($validator->fails()) {
259
           return response()->json(['status' => 'error', 'errors' => $validator->errors()]);
260
        }
261
262
        $user = $this->model->where('id', $request->user()->id)->first();
263
264
        if (!$user) {
265
            return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']);
266
        }
267
      
268
        $content = $this->contentModel->find($id);
269
270
        if (!$content) {
271
            return response()->json(['status' => 'error', 'message' => 'Opss. Conteúdo não encontrada pra este usuário.']);
272
        }
273
      
274
        $data = $request->all();
275
        $data['content_id'] = $content->id;
276
        $data['text'] = $request->text;
277
        
278
        $user->comments()->create($data);
279
      
280
        return response()->json([
281
          'status' => 'success', 
282
          'message' => 'Comentário criado com sucesso.', 
283
          'listContent' => $this->page($request, $content->user_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)
313
    {
314
        $rules = [
315
            'id' => 'required',
316
        ];
317
318
        $validator = \Validator::make($request->all(), $rules);
319
320
        if ($validator->fails()) {
321
           return response()->json(['status' => 'error', 'errors' => $validator->errors()]);
322
        }
323
      
324
        $user = $this->model->where('id', $request->user()->id)->first();
325
326
        if (!$user) {
327
            return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']);
328
        }
329
      
330
        $friend = $this->model->where('id', $request->id)->first();
331
      
332
        if (!$friend) {
333
            return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verificar.']);
334
        }
335
      
336
        if ($user->id == $friend->id) {
337
            return response()->json(['status' => 'error', 'message' => 'Opss. Você não pode seguir você mesmo.']);
338
        }
339
        
340
        $user->friends()->toggle($friend->id);
341
342
        return response()->json([
343
          'status' => 'success', 
344
          'message' => 'Segguindo '.$friend->name.' com sucesso.', 
345
          'data' => $user->friends,
346
          'followers' => $friend->followers
347
        ]);
348
    }
349
  
350
    public function friends(Request $request)
351
    {
352
        $user = $this->model->where('id', $request->user()->id)->first();
353
354
        if (!$user) {
355
          return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']);
356
        }
357
      
358
        $friends = $user->friends;
359
        $followers = $user->followers;
360
361
        return response()->json(['status' => 'success', 'friends' => $friends, 'followers' => $followers]);
362
    }
363
  
364
    public function friendspage(Request $request, $id)
365
    {
366
        $user = $this->model->where('id', $request->user()->id)->first();
367
368
        if (!$user) {
369
          return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verifique se esta logado.']);
370
        }
371
      
372
        $my_friends = $user->friends;
373
      
374
        $oldUser = $this->model->where('id', $id)->first();
375
      
376
        if (!$oldUser) {
377
            return response()->json(['status' => 'error', 'message' => 'Opss. Usuário não foi encontrado, favor verificar.']);
378
        }
379
      
380
        $oldUser_friends = $oldUser->friends;
381
        $oldUser_followers = $oldUser->followers;
382
383
        return response()->json(['status' => 'success', 'friends' => $oldUser_friends, 'friends_loggedin' => $my_friends, 'followers' => $oldUser_followers]);
384
    }
385
}