44
55use App \Http \Requests \ComputerScienceResource \StoreResourceRequest ;
66use App \Models \ComputerScienceResource ;
7+ use App \Models \ResourceEdits ;
8+ use App \Models \ResourceReview ;
79use App \Services \CommentService ;
10+ use App \Services \UpvoteService ;
811use Illuminate \Http \Request ;
912use Illuminate \Support \Facades \Auth ;
1013use Illuminate \Support \Facades \Log ;
1114use Inertia \Inertia ;
1215
1316class ComputerScienceResourceController extends Controller
1417{
18+ protected $ commentService ;
19+ protected $ upvoteService ;
20+
21+ function __construct (CommentService $ commentService , UpvoteService $ upvoteService )
22+ {
23+ $ this ->commentService = $ commentService ;
24+ $ this ->upvoteService = $ upvoteService ;
25+ }
26+
1527 /**
1628 * Display a listing of the resource.
1729 */
@@ -54,7 +66,7 @@ public function store(StoreResourceRequest $request)
5466
5567 // Add topics as tags
5668 $ resource ->topic_tags = $ validatedData ['topic_tags ' ];
57-
69+
5870 // Add programming languages as tags (if provided)
5971 if (isset ($ validatedData ['programming_language_tags ' ])) {
6072 $ resource ->programming_language_tags = $ validatedData ['programming_language_tags ' ];
@@ -67,51 +79,59 @@ public function store(StoreResourceRequest $request)
6779
6880 Log::debug ("Created resource " . json_encode ($ resource ));
6981
70- return redirect (route ('resources.show ' , ['computerScienceResource ' => $ resource ->id ]))
82+ return redirect (route ('resources.show ' , ['computerScienceResource ' => $ resource ->id ]))
7183 ->with ('success ' , 'Created Resource Succesfully! ' );
7284 }
7385
7486 /**
7587 * Display the specified resource.
7688 */
77- public function show (Request $ request , CommentService $ commentService , ComputerScienceResource $ computerScienceResource , string $ tab = 'reviews ' )
89+ public function show (Request $ request , ComputerScienceResource $ computerScienceResource , string $ tab = 'reviews ' )
7890 {
7991 $ validTabs = ['reviews ' , 'discussion ' , 'edits ' ];
80-
92+
8193 if (!in_array ($ tab , $ validTabs )) {
8294 // Redirect to default if invalid
8395 return redirect ()->route ('resources.show ' , [
8496 'computerScienceResource ' => $ computerScienceResource ->id ,
8597 'tab ' => 'reviews ' ,
8698 ]);
8799 }
88-
100+
89101 // return the resource and tab
90102 $ data = [
91103 'tab ' => $ tab ,
92104 'resource ' => $ computerScienceResource ,
93105 ];
94-
106+
107+ $ sortBy = $ request ->query ('sort_by ' , 'top ' );
95108 // Load only the necessary tab data
96109 if ($ tab === 'reviews ' ) {
97- $ data ['reviews ' ] = Inertia::defer (fn () =>
98- $ computerScienceResource ->reviews ()->orderByDesc ('created_at ' )->get ()
110+ $ data ['reviews ' ] = Inertia::defer (
111+ function () use ($ computerScienceResource , $ sortBy ) {
112+ $ query = ResourceReview::where ('computer_science_resource_id ' , $ computerScienceResource ->id );
113+ $ query = $ this ->upvoteService ->applySort ($ query , $ sortBy , ResourceReview::class);
114+ return $ query ->get ();
115+ }
99116 );
100117 } elseif ($ tab === 'edits ' ) {
101- $ data ['resourceEdits ' ] = Inertia::defer (fn () =>
102- $ computerScienceResource ->edits
118+ $ data ['resourceEdits ' ] = Inertia::defer (
119+ function () use ($ computerScienceResource , $ sortBy ) {
120+ $ query = ResourceEdits::where ('computer_science_resource_id ' , $ computerScienceResource ->id );
121+ $ query = $ this ->upvoteService ->applySort ($ query , $ sortBy , ResourceEdits::class);
122+ return $ query ->get ();
123+ }
103124 );
104125 } elseif ($ tab === 'discussion ' ) {
105- $ sortBy = $ request -> query ( ' sort_by ' , ' top ' );
106- $ data [ ' discussion ' ] = Inertia:: defer ( fn () =>
107- $ commentService ->getPaginatedComments ('resource ' , $ computerScienceResource ->id , 0 , 150 , $ sortBy )
126+ $ data [ ' discussion ' ] = Inertia:: defer (
127+ fn () =>
128+ $ this -> commentService ->getPaginatedComments ('resource ' , $ computerScienceResource ->id , 0 , 150 , $ sortBy )
108129 );
109- $ data ['discussionSortByValue ' ] = $ sortBy ;
110130 }
111-
131+
112132 return Inertia::render ('Resources/Show ' , $ data );
113133 }
114-
134+
115135
116136 /**
117137 * Remove the specified resource from storage.
0 commit comments