11import client , { Connection , Channel , ConsumeMessage } from "amqplib" ;
22import { environment } from "../config/environment" ;
3- import { IResultSubmission , ISubmissionLearnify , ISubmissionRequest } from "../interfaces/submission.interface" ;
3+ import {
4+ IResultSubmission ,
5+ ISubmissionLearnify ,
6+ ISubmissionRequest ,
7+ } from "../interfaces/submission.interface" ;
48import {
59 ICompileRequest ,
610 languageType ,
@@ -11,7 +15,7 @@ import { problemService } from "./problem.service";
1115import { ITestCase } from "../interfaces/testcase.interface" ;
1216import { submissionService } from "./submission.service" ;
1317import { checkRedisHealth , publicTopic , redisClient } from "./redis.service" ;
14- import logger from ' ../utils/logger.util'
18+ import logger from " ../utils/logger.util" ;
1519
1620export const rabbitMQService = {
1721 sendDataToQueue : async ( queueName : string , data : any ) => {
@@ -34,14 +38,14 @@ export const rabbitMQService = {
3438 const connection : Connection = await client . connect (
3539 `amqp://${ environment . RMQUSER } :${ environment . RMQPASS } @${ environment . RMQHOST } :5672` ,
3640 ) ;
37- await redisClient . connect ( )
41+ await redisClient . connect ( ) ;
3842 if ( await checkRedisHealth ( ) ) {
39- logger . info ( "Redis Connected" )
43+ logger . info ( "Redis Connected" ) ;
4044 }
4145 const channel : Channel = await connection . createChannel ( ) ;
4246 await channel . assertQueue ( "compiler" , { durable : true } ) ;
4347 await channel . assertQueue ( "submission" , { durable : true } ) ;
44- await channel . assertQueue ( "learnify-submission" , { durable : true } )
48+ await channel . assertQueue ( "learnify-submission" , { durable : true } ) ;
4549
4650 channel . consume ( "submission" , async ( msg : ConsumeMessage | null ) => {
4751 try {
@@ -66,29 +70,42 @@ export const rabbitMQService = {
6670 submission ,
6771 testcases ,
6872 ) ;
69- if ( "status" in resultProblem ) {
70- const resultSubmit : IResultSubmission = await submissionService . submit (
71- {
72- problemId : submission . problemId ,
73- sourceCode : submission . sourceCode ,
74- results : resultProblem . result ,
75- stateSubmission : resultProblem . status ? "PASS" : "FAILED" ,
76- } ,
77- submission . token ,
78- ) ;
7973
80- redisClient . set ( `submission-${ resultSubmit . data . username } ` , JSON . stringify ( { submissionId : resultSubmit . data . submissionId } ) , { EX : 240 } )
74+ if ( "status" in resultProblem ) {
75+ const resultSubmit : IResultSubmission =
76+ await submissionService . submit (
77+ {
78+ problemId : submission . problemId ,
79+ sourceCode : submission . sourceCode ,
80+ results : resultProblem . result ,
81+ stateSubmission : resultProblem . status ? "PASS" : "FAILED" ,
82+ } ,
83+ submission . token ,
84+ ) ;
8185
82- redisClient . set ( `submissionState-${ submission . username } ` , "false" , { EX : 240 } )
86+ redisClient . set (
87+ `submission-${ resultSubmit . data . username } ` ,
88+ JSON . stringify ( { submissionId : resultSubmit . data . submissionId } ) ,
89+ { EX : 240 } ,
90+ ) ;
8391
84- publicTopic ( 'submission' , JSON . stringify ( { submissionId : resultSubmit . data . submissionId , username : resultSubmit . data . username } ) )
92+ redisClient . set ( `submissionState-${ submission . username } ` , "false" , {
93+ EX : 240 ,
94+ } ) ;
8595
96+ publicTopic (
97+ "submission" ,
98+ JSON . stringify ( {
99+ submissionId : resultSubmit . data . submissionId ,
100+ username : resultSubmit . data . username ,
101+ } ) ,
102+ ) ;
86103 } else {
87104 throw new Error ( "Error To Submission File: " + resultProblem . result ) ;
88105 }
89106 channel . ack ( msg ) ;
90107 } catch ( error ) {
91- console . log ( error )
108+ console . log ( error ) ;
92109 throw new Error ( "Error receiveData" ) ;
93110 }
94111 } ) ;
@@ -113,44 +130,53 @@ export const rabbitMQService = {
113130 updateFileName ,
114131 ) ;
115132
116- await redisClient . set ( `compiler-${ data . username } ` , JSON . stringify ( outputResult ) , { EX : 240 } )
117- const updateOutputResult = { ...outputResult , username : data . username }
118- publicTopic ( 'compiler' , JSON . stringify ( updateOutputResult ) )
133+ await redisClient . set (
134+ `compiler-${ data . username } ` ,
135+ JSON . stringify ( outputResult ) ,
136+ { EX : 240 } ,
137+ ) ;
138+ const updateOutputResult = { ...outputResult , username : data . username } ;
139+ publicTopic ( "compiler" , JSON . stringify ( updateOutputResult ) ) ;
119140
120141 channel . ack ( msg ) ;
121142 } catch ( error ) {
122- console . log ( error )
143+ console . log ( error ) ;
123144 throw new Error ( "Error receiveData" ) ;
124145 }
125146 } ) ;
126147
127- channel . consume ( "learnify-submission" , async ( msg : ConsumeMessage | null ) => {
128- try {
129- if ( ! msg ) {
130- throw new Error ( "Invalid Incoming Message" ) ;
131- }
132- const submission : ISubmissionLearnify = JSON . parse (
133- msg ?. content . toString ( ) as string ,
134- ) ;
135- const updateSourceCode = strip ( submission . sourceCode ) ;
136- const updateFileName =
137- submission . language === languageType . JAVA
138- ? submission . fileName
139- : `${ process . pid } ` ;
140- submission . sourceCode = updateSourceCode ;
141- submission . fileName = updateFileName ;
142- const resultProblem = await resultService . outputResultWithTestCaseLeanify ( submission )
143- console . log ( resultProblem )
144- if ( "status" in resultProblem ) {
145- // save to learnify database
146- } else {
147- throw new Error ( "Error To Submission File: " + resultProblem . result ) ;
148+ channel . consume (
149+ "learnify-submission" ,
150+ async ( msg : ConsumeMessage | null ) => {
151+ try {
152+ if ( ! msg ) {
153+ throw new Error ( "Invalid Incoming Message" ) ;
154+ }
155+ const submission : ISubmissionLearnify = JSON . parse (
156+ msg ?. content . toString ( ) as string ,
157+ ) ;
158+ const updateSourceCode = strip ( submission . sourceCode ) ;
159+ const updateFileName =
160+ submission . language === languageType . JAVA
161+ ? submission . fileName
162+ : `${ process . pid } ` ;
163+ submission . sourceCode = updateSourceCode ;
164+ submission . fileName = updateFileName ;
165+ const resultProblem =
166+ await resultService . outputResultWithTestCaseLeanify ( submission ) ;
167+ console . log ( resultProblem ) ;
168+ if ( "status" in resultProblem ) {
169+ // save to learnify database
170+ } else {
171+ throw new Error (
172+ "Error To Submission File: " + resultProblem . result ,
173+ ) ;
174+ }
175+ channel . ack ( msg ) ;
176+ } catch ( error ) {
177+ throw new Error ( "Error receiveData" ) ;
148178 }
149- channel . ack ( msg ) ;
150- } catch ( error ) {
151- throw new Error ( "Error receiveData" ) ;
152- }
153- } ) ;
154-
179+ } ,
180+ ) ;
155181 } ,
156182} ;
0 commit comments