1717use Symfony \Component \HttpFoundation \Request ;
1818use Symfony \Component \Console \Output \ConsoleOutput ;
1919
20+ use App \Message \FullRescanMessage ;
21+ use Symfony \Component \Messenger \MessageBusInterface ;
22+
2023class SyncController extends ApiController
2124{
2225 protected $ maxAge = '1D ' ;
26+ private MessageBusInterface $ bus ;
27+
28+ public function __construct (MessageBusInterface $ bus )
29+ {
30+ $ this ->bus = $ bus ;
31+ }
32+
2333
2434 /** @var UtilityService $util */
2535 protected $ util ;
@@ -75,11 +85,67 @@ public function requestSync(Course $course, LmsFetchService $lmsFetch) {
7585 return new JsonResponse ($ response );
7686 }
7787
88+ // #[Route('/api/sync/rescan/{course}', name: 'full_rescan')]
89+ // public function fullCourseRescan(Course $course, LmsFetchService $lmsFetch){
90+ // $response = new ApiResponse();
91+ // $user = $this->getUser();
92+ // $reportArr = false;
93+
94+ // try {
95+ // if (!$this->userHasCourseAccess($course)) {
96+ // throw new \Exception('msg.no_permissions');
97+ // }
98+ // if ($course->isDirty()) {
99+ // throw new \Exception('msg.course_scanning');
100+ // }
101+ // if (!$course->isActive()) {
102+ // $response->setData(0);
103+ // throw new \Exception('msg.sync.course_inactive');
104+ // }
105+
106+ // $prevReport = $course->getPreviousReport();
107+
108+ // $lmsFetch->refreshLmsContent($course, $user, true);
109+ // // $course->removeAllReports();
110+
111+ // // $lmsFetch->asyncRefreshLmsContent($course, $user);
112+
113+ // $report = $course->getLatestReport();
114+
115+ // if (!$report) {
116+ // throw new \Exception('msg.no_report_created');
117+ // }
118+
119+ // $reportArr = $report->toArray();
120+ // $reportArr['files'] = $course->getFileItems();
121+ // $reportArr['issues'] = $course->getAllIssues();
122+ // $reportArr['contentItems'] = $course->getContentItems();
123+ // $reportArr['contentSections'] = $lmsFetch->getCourseSections($course, $user);
124+
125+ // $response->setData($reportArr);
126+
127+ // if ($prevReport && ($prevReport->getIssueCount() == $report->getIssueCount())) {
128+ // $response->addMessage('msg.no_new_content', 'success', 5000);
129+ // } else {
130+ // $response->addMessage('msg.new_content', 'success', 5000);
131+ // }
132+ // } catch (\Exception $e) {
133+ // if ('msg.course_scanning' === $e->getMessage()) {
134+ // $response->addMessage($e->getMessage(), 'info', 0, false);
135+ // } else {
136+ // $response->addMessage($e->getMessage(), 'error', 0);
137+ // }
138+ // }
139+
140+ // return new JsonResponse($response);
141+ // }
142+
143+
78144 #[Route('/api/sync/rescan/{course} ' , name: 'full_rescan ' )]
79- public function fullCourseRescan (Course $ course , LmsFetchService $ lmsFetch ){
145+ public function fullCourseRescan (Course $ course ): JsonResponse
146+ {
80147 $ response = new ApiResponse ();
81148 $ user = $ this ->getUser ();
82- $ reportArr = false ;
83149
84150 try {
85151 if (!$ this ->userHasCourseAccess ($ course )) {
@@ -93,38 +159,19 @@ public function fullCourseRescan(Course $course, LmsFetchService $lmsFetch){
93159 throw new \Exception ('msg.sync.course_inactive ' );
94160 }
95161
96- $ prevReport = $ course ->getPreviousReport ();
97-
98- $ lmsFetch ->refreshLmsContent ($ course , $ user , true );
99- // $course->removeAllReports();
100-
101- // $lmsFetch->asyncRefreshLmsContent($course, $user);
102-
103- $ report = $ course ->getLatestReport ();
104-
105- if (!$ report ) {
106- throw new \Exception ('msg.no_report_created ' );
107- }
108-
109- $ reportArr = $ report ->toArray ();
110- $ reportArr ['files ' ] = $ course ->getFileItems ();
111- $ reportArr ['issues ' ] = $ course ->getAllIssues ();
112- $ reportArr ['contentItems ' ] = $ course ->getContentItems ();
113- $ reportArr ['contentSections ' ] = $ lmsFetch ->getCourseSections ($ course , $ user );
114-
115- $ response ->setData ($ reportArr );
116-
117- if ($ prevReport && ($ prevReport ->getIssueCount () == $ report ->getIssueCount ())) {
118- $ response ->addMessage ('msg.no_new_content ' , 'success ' , 5000 );
119- } else {
120- $ response ->addMessage ('msg.new_content ' , 'success ' , 5000 );
121- }
162+ // ✅ Use $this->bus
163+ $ this ->bus ->dispatch (new FullRescanMessage (
164+ $ course ->getId (),
165+ $ user ->getId (),
166+ $ user ->getApiKey (),
167+ $ user ->getInstitution ()->getLmsId (),
168+ $ user ->getInstitution ()->getLmsDomain ()
169+ ));
170+
171+ $ response ->addMessage ('msg.scan_queued ' , 'success ' , 5000 );
172+ $ response ->setData (['status ' => 'queued ' ]);
122173 } catch (\Exception $ e ) {
123- if ('msg.course_scanning ' === $ e ->getMessage ()) {
124- $ response ->addMessage ($ e ->getMessage (), 'info ' , 0 , false );
125- } else {
126- $ response ->addMessage ($ e ->getMessage (), 'error ' , 0 );
127- }
174+ $ response ->addMessage ($ e ->getMessage (), 'error ' , 0 );
128175 }
129176
130177 return new JsonResponse ($ response );
0 commit comments