@@ -16,6 +16,10 @@ import { getUserDiscussionsQuery } from "../graphql/user/discussions.graphql"
16
16
import { getUserLanguagesQuery } from "../graphql/user/languages.graphql"
17
17
import { ProblemsSolvedBeatsStatsMatchedUser , ProblemsSolvedBeatsStatsResponse } from "../models/user/problems-solved-beats-stats"
18
18
import { getUserProblemsSolvedBeatsStatsQuery } from "../graphql/user/problems-solved-beats-stats.graphql"
19
+ import { ProfileMatchedUser , ProfileResponse } from "../models/user/profile"
20
+ import { getUserProfileQuery } from "../graphql/user/profile.graphql"
21
+ import { RecentSubmissionsAcList , RecentSubmissionsResponse } from "../models/user/recent-submissions"
22
+ import { getUserRecentSubmissionsQuery } from "../graphql/user/recent-submissions.graphql"
19
23
20
24
function getInvalidUsernameErrorResponse ( username : string ) : ErrorResponse {
21
25
let errorResponse : ErrorResponse
@@ -302,4 +306,101 @@ export class UserService {
302
306
return problemsSolvedBeatsStatsResponse
303
307
}
304
308
309
+ static async getUserProfile ( username : string ) : Promise < ProfileResponse > {
310
+ const invalidUsernameResponse : ErrorResponse = getInvalidUsernameErrorResponse ( username )
311
+ if ( invalidUsernameResponse !== null ) {
312
+ return {
313
+ isError : true ,
314
+ error : invalidUsernameResponse ,
315
+ profile : null
316
+ }
317
+ }
318
+ let profileResponse : ProfileResponse
319
+ const response : { data : ProfileMatchedUser } = await apolloClient . query < ProfileMatchedUser > ( {
320
+ query : getUserProfileQuery ( ) ,
321
+ variables : { "username" : username }
322
+ } ) . catch ( err => {
323
+ profileResponse = {
324
+ isError : true ,
325
+ error : {
326
+ errorCode : 500 ,
327
+ errorMessage : `An error occurred while retrieving user profile - ${ err } . Please inform the developer.`
328
+ } ,
329
+ profile : null
330
+ }
331
+ return null
332
+ } )
333
+ if ( profileResponse === undefined ) {
334
+ profileResponse = {
335
+ isError : false ,
336
+ error : null ,
337
+ profile : response . data . matchedUser . profile
338
+ }
339
+ }
340
+ return profileResponse
341
+ }
342
+
343
+ static async getUserRecentSubmissions ( username : string , limit ?: string ) : Promise < RecentSubmissionsResponse > {
344
+ const invalidUsernameResponse : ErrorResponse = getInvalidUsernameErrorResponse ( username )
345
+ if ( invalidUsernameResponse !== null ) {
346
+ return {
347
+ isError : true ,
348
+ error : invalidUsernameResponse ,
349
+ recentSubmissions : null
350
+ }
351
+ }
352
+ let recentSubmissionsResponse : RecentSubmissionsResponse
353
+ let variables = {
354
+ "username" : username
355
+ }
356
+ if ( limit !== undefined ) {
357
+ let limitValue = Number ( limit )
358
+ if ( isNaN ( limitValue ) ) {
359
+ recentSubmissionsResponse = {
360
+ isError : true ,
361
+ error : {
362
+ errorCode : 400 ,
363
+ errorMessage : `The provided limit value ${ limit } is not a number, please provide a correct limit numeric value greater than zero`
364
+ } ,
365
+ recentSubmissions : null
366
+ }
367
+ return recentSubmissionsResponse
368
+ }
369
+ if ( limitValue <= 0 ) {
370
+ recentSubmissionsResponse = {
371
+ isError : true ,
372
+ error : {
373
+ errorCode : 400 ,
374
+ errorMessage : `The provided limit value should be greater than zero, but you have provided ${ limit } `
375
+ } ,
376
+ recentSubmissions : null
377
+ }
378
+ return recentSubmissionsResponse
379
+ }
380
+ variables [ "limit" ] = limit
381
+ }
382
+ const response : { data : RecentSubmissionsAcList } = await apolloClient . query < RecentSubmissionsAcList > ( {
383
+ query : getUserRecentSubmissionsQuery ( ) ,
384
+ variables : variables
385
+ } ) . catch ( err => {
386
+ recentSubmissionsResponse = {
387
+ isError : true ,
388
+ error : {
389
+ errorCode : 500 ,
390
+ errorMessage : `An error occurred while retrieving user recent submissions - ${ err } . Please inform the developer.`
391
+ } ,
392
+ recentSubmissions : null
393
+ }
394
+ return null
395
+ } )
396
+ if ( recentSubmissionsResponse === undefined ) {
397
+ recentSubmissionsResponse = {
398
+ isError : false ,
399
+ error : null ,
400
+ recentSubmissions : response . data . recentAcSubmissionList
401
+ }
402
+ }
403
+ return recentSubmissionsResponse
404
+ }
405
+
305
406
}
0 commit comments