classDiagram
class AiProblemController {
-aiProblemService
-aiAddSolveService
-problemService
-problemTestService
-testcaseGeneratorService
+c
+problem
+c
+c
+super()
+import()
+generateAiSolution()
+generateTestcases()
}
class ProblemTestController {
-problemTestService
+c
+super()
+upsertTests()
+getTestsForProblem()
+getTestsForProblemAndType()
}
class ProblemController {
-problemService
-problemValidatorService
+req
+req
+totalItems
+itemCount
+perPage
+totalPages
+currentPage
+req
+super()
+createProblem()
+getProblemBySlug()
+getProblemById()
+getProblemsByTopic()
+getProblems()
+getUserSolvedProblems()
}
class AiAddSolveService {
-problemRepo
-bedrockClient
+region
+is_signature_inaccurate
+fixed_judging_policy
+comparator_mode
+multi_answer
+output_order
+solutions
+language
+approach_name
+editorial_explanation
+language
+approach_name
+editorial_explanation
+IMPORTANT
+problemId
+prompt
+modelId
+max_completion_tokens
+temperature
+messages
+role
+content
+type
+text
+modelId
+contentType
+accept
+processSingleProblem()
-buildPrompt()
-extractAndParseJSON()
-invokeModelOnBedrock()
}
class AiProblemService {
-llm
+input
+title
+problem_id
+difficulty
+problem_slug
+topics
+description
+examples
+constraints
+follow_ups
+hints
+code_snippets
+problem_type
+is_premium
+problem
+rawLlmResponse
+solution
+solutions
+type
+properties
+problem
+type
+properties
+problem_type
+hints
+function_signature
+type
+properties
+name
+return_type
+params
+type
+items
+type
+properties
+name
+type
+inplace_param_index
+class_signature
+type
+properties
+class_name
+constructor_params
+type
+items
+type
+properties
+methods
+type
+items
+type
+properties
+name
+return_type
+params
+type
+items
+type
+properties
+judging_policy
+type
+properties
+comparator_mode
+multi_answer
+validation_policy
+output_order
+audit_hints
+temperature
+solutions
+title
+description
+problem_slug
+difficulty
+problem_id
+topics
+examples
+constraints
+follow_ups
+code_snippets
+judging_policy
+comparator_mode
+multi_answer
+validation_policy
+output_order
+audit_hints
+problem
+rawLlmResponse
+rewriteAndGenerate()
}
class ProblemTestService {
-problemTestRepository
+problem_id
+type
+getTestsForProblem()
+getTestsForProblemAndType()
+upsertTests()
}
class ProblemValidatorService {
-problemRepository
+validateProblemExists()
+validateProblemBySlug()
}
class ProblemService {
-problemRepository
+page
+limit
+getProblemBySlug()
+getProblemById()
+searchByTopic()
+getAllProblems()
+upsertProblem()
+getUserSolvedProblems()
}
class TestcaseGeneratorService {
-llm
+title
+description
+constraints
+examples
+function_signature
+model
+temperature
+maxTokens
+input
+expected_output
+weight
+is_sample
+input
+expected_output
+weight
+is_sample
+Count
+hiddenCount
+rawLlmResponse
+generateTestcases()
}
class ProblemTestRepository {
+problem_id
+type
+cases
+returnDocument
+upsert
+super()
+findByProblemAndType()
+findAllByProblem()
+upsertTests()
}
class ProblemRepository {
+page
+limit
+topics
+examples
+constraints
+follow_ups
+hints
+code_snippets
+returnDocument
+upsert
+super()
+findByProblemId()
+findManyByProblemIds()
+findBySlug()
+searchByTopic()
+findPaginated()
+createOrUpdate()
+getUserSolvedProblems()
+eq()
}
class TaxonomyController {
-taxonomyService
+super()
+getTree()
+getUserProgress()
+getCategoryDetail()
+getCategoryDetailById()
+createCategory()
+mapProblem()
+unmapProblem()
+batchMapProblems()
}
class TaxonomyService {
-taxonomyRepo
-problemRepo
+children
+parent
+parent
+categoryId
+problemId
+order
+categoryId
+problemId
+order
+getTaxonomyTree()
+getUserRoadmapProgress()
+getCategoryDetail()
+getCategoryDetailById()
+createCategory()
+mapProblemToCategory()
+batchMapProblemsToCategory()
+invalidateUserProgress()
+unmapProblemFromCategory()
}
class TaxonomyRepository {
+target
+set
+target
+set
+categoryId
+problemId
+findAllCategories()
+findCategoryBySlug()
+findCategoryById()
+findChildren()
+getProblemMappings()
+createCategory()
+mapProblem()
+batchMapProblems()
+unmapProblem()
+and()
+eq()
+eq()
+getProblemCount()
+getProblemCountRecursive()
+getAllProblemCounts()
+getUserRoadmapProgress()
+eq()
+getSolvedProblemIds()
+and()
+eq()
+inArray()
}
class CompanyController {
-companyService
+super()
+getCompanies()
+getCompanyProblems()
+createCompany()
}
class CompanyService {
-companyRepository
-problemRepository
+company
+getCompanies()
+getCompanyProblems()
+createCompany()
}
class CompanyRepository {
+super()
+getCompanies()
+getCompanyBySlug()
+createOrUpdate()
}
classDiagram
class SubmissionController {
-submissionService
-executionService
-submissionQueue
-matchValidatorService
-problemValidatorService
-clock
-userRepository
+userId
+problemTitle
+userId
+status
+submissionId
+userId
+clerkId
+requestId
+jobId
+submissionId
+status
+message
+req
+req
+req
+submissions
+pagination
+super()
+run()
+submit()
+getSubmissionStatus()
+getUserSubmissions()
+getRecentSubmissions()
}
class ExecutionService {
-problemTestService
-aiCodeJudgeService
-driverJudgeExecutionService
+problemId
+languageId
+sourceCode
+includeHidden
+problemId
+languageId
+sourceCode
+index
+input
+expected_output
+isPublic
+index
+input
+expected_output
+isPublic
+index
+input
+expected_output
+isPublic
+problemId
+languageId
+sourceCode
+includeHidden
+problemId
+languageId
+sourceCode
+index
+runSamples()
+runFullSubmission()
}
class SubmissionService {
-submissionRepository
-arenaMatchRepository
-arenaRepository
-arenaSubmissionRepository
-statsSubmissionService
-clock
+input
+input
+userId
+problemId
+userId
+limit
+offset
+submissions
+pagination
+pagination
+createSubmission()
+validateServiceInput()
+updateSubmissionStatus()
+validateServiceInput()
+getSubmissionById()
+getUserSubmissions()
+getArenaMatchById()
+getArenaRoom()
+getRecentSubmissions()
}
class SubmissionRepository {
-clock
+input
+problemId
+problemTitle
+userId
+languageId
+sourceCode
+status
+input
+status
+time
+memory
+details
+userId
+problemId
+excludeIds
+userId
+problemId
+userId
+limit
+offset
+super()
+createSubmission()
+updateSubmissionStatus()
+findByUserAndProblem()
+getRecentSubmissions()
}
class AiCodeJudgeService {
-unifiedLlmService
-problemService
+temperature
+index
+input
+expected_output
+stdout
+stderr
+compile_output
+message
+status
+time
+memory
+rawLlmResponse
+runSamples()
}
class AiVerdictAuditService {
-llm
-problemService
+temperature
+maxTokens
+model
+confidence
+summary
+tests
+rawLlmResponse
+audit()
-mapAuditVerdictToSubmissionStatus()
}
class DriverJudgeExecutionService {
-judge0Service
-problemRepository
-problemTestRepository
-aiVerdictAuditService
+param_order
+input
+expected_output
+is_sample
+userCode
+signature
+source_code
+language_id
+stdin
+parsedWarnings
+traceId
+problemId
+judge0Status
+suspicionScore
+suspicionReasons
+traceId
+problemId
+suspicionScore
+suspicionReasons
+problemId
+languageId
+sourceCode
+driverVerdict
+parserWarnings
+suspicionReasons
+judge0Status
+overallStatus
+disagreedWithDriver
+traceId
+problemId
+aiOverallStatus
+confidence
+reasons
+overallStatus
+tests
+parserWarnings
+driverVerdict
+suspicion
+score
+reasons
+aiAuditTriggered
+traceId
+problemId
+score
+reasons
+aiOverallStatus
+confidence
+aiSummary
+traceId
+problemId
+finalSource
+finalStatus
+overallStatus
+parserWarnings
+compileOutput
+stderr
+driverVerdict
+suspicion
+score
+reasons
+aiAuditTriggered
+payload
+source_code
+language_id
+stdin
+driverTest
+originalCase
+judgeRaw
+index
+stdout
+stderr
+compile_output
+message
+rawStatus
+memory
+verdict
+default
+verdict
+default
+supportsLanguage()
+evaluate()
-executeAndPoll()
-mapDriverCaseToExecutionResult()
-mapDriverVerdictToExecutionVerdict()
-mapDriverVerdictToSubmissionStatus()
-resolveLanguageKey()
}
class Judge0Service {
+signal
+submissions
+expected_output
+base64_encoded
+submissions
+method
+base64_encoded
+fields
+method
+stdout
+stderr
+compile_output
+message
-ensureConfigured()
+return()
+clearTimeout()
+createBatchSubmissions()
+return()
+getBatchResults()
}
class WandboxService {
+method
+headers
+getCompilers()
+return()
+compile()
+return()
}
class CompilerController {
-compilerService
+super()
+getLanguages()
+execute()
}
class CompilerService {
-wandboxService
+compiler
+code
+stdin
+save
+output
+error
+url
+getLanguages()
+execute()
+validateServiceInput()
}
classDiagram
class FollowController {
-followService
+super()
+follow()
+unfollow()
+getFollowers()
+getFollowing()
}
class ProfileController {
-userRepository
-statsService
+message
+user
+githubUsername
+linkedinUsername
+leetcodeUsername
+super()
+updateProfile()
}
class UserController {
-userService
+id
+username
+fullName
+avatarUrl
+super()
+searchUsers()
}
class FollowService {
-followRepository
-userRepository
-statsService
+followerClerkId
+followingUsername
+followerClerkId
+targetUsername
+currentClerkId
+targetUsername
+followUser()
+unfollowUser()
+getFollowers()
+getFollowing()
+getFollowStatus()
}
class UserService {
-userRepository
+searchUsers()
}
class FollowRepository {
+userId
+id
+username
+fullName
+avatarUrl
+id
+username
+fullName
+avatarUrl
+follow()
+unfollow()
+and()
+eq()
+eq()
+isFollowing()
+and()
+eq()
+eq()
+getFollowCounts()
+getFollowersList()
+getFollowingList()
}
class UserRepository {
-clock
+findByClerkId()
+findById()
+findByUsername()
+findByEmail()
+search()
+or()
+ilike()
+ilike()
+findAll()
+create()
+update()
+deleteByClerkId()
}
class StatsController {
-statsService
+message
+super()
+getProfileStats()
+getLeaderboard()
+syncLeaderboard()
+searchLeaderboard()
}
class LeetCodeService {
-baseUrl
+solved
+total
+easy
+medium
+hard
+contest
+globalRank
+totalParticipants
+topPercentile
+attended
+getUserStats()
+fetch()
+fetch()
}
class StatsSubmissionService {
-statsRepository
-problemRepository
-userRepository
-statsService
-taxonomyService
-leaderboardCache
+submissionId
+userId
+status
+submissionId
+inputUserId
+submission
+user
+userId
+isMatch
+totalSolved
+userId
+problemId
+languageId
+rankedPlayers
+userId
+points
+arenaPoints
+isMatch
+totalSolved
+handleSubmissionUpdate()
-processAcceptedSolve()
+handleArenaMatchFinalization()
}
class StatsService {
-statsRepository
-userRepository
-followRepository
-leetcodeService
+user
+id
+clerkId
+username
+fullName
+avatarUrl
+githubUsername
+linkedinUsername
+leetcodeUsername
+joinedAt
+stats
+totalPoints
+arenaPoints
+totalSolved
+easySolved
+mediumSolved
+hardSolved
+arenaGames
+currentStreak
+bestStreak
+rank
+activityLog
+social
+leetcode
+userId
+username
+fullName
+avatarUrl
+points
+rank
+totalSolved
+limit
+offset
+syncLeaderboard()
+invalidateProfile()
+getProfileStats()
+searchLeaderboard()
-getFollowContext()
+getLeaderboard()
}
class StatsRepository {
-clock
+totalPoints
+arenaPoints
+totalSolved
+easySolved
+mediumSolved
+hardSolved
+arenaGames
+target
+set
+totalPoints
+arenaPoints
+totalSolved
+easySolved
+mediumSolved
+hardSolved
+arenaGames
+currentStreak
+bestStreak
+lastSolveDate
+target
+set
+currentStreak
+bestStreak
+lastSolveDate
+date
+pointsEarned
+arenaPointsEarned
+submissions
+matches
+target
+set
+pointsEarned
+arenaPointsEarned
+submissions
+matches
+updateUserStats()
+updateLanguageCount()
+COALESCE()
+updateStreak()
+GREATEST()
+logActivity()
+getTopUsers()
+getUserStats()
+getUserActivityLog()
+recordSolvedProblem()
+recordSolvedLanguage()
}
class AuthController {
+id
+clerkId
+username
+email
+avatarUrl
+status
+role
+super()
+me()
}
class ClerkWebhookController {
-authService
+clerkId
+originalClerkUsername
+username
+email
+avatarUrl
+received
+type
+super()
+handle()
}
class AuthService {
-userRepository
-clerkClient
-clock
-statsService
+email
+fullName
+avatarUrl
+status
+role
+username
+fullName
+email
+avatarUrl
+email
+fullName
+avatarUrl
+status
+role
+ensureUser()
+ensureUserFromIdOnly()
+syncUser()
+validateServiceInput()
+deleteUser()
-generateUniqueUsername()
-pushUsernameToClerk()
}
classDiagram
class ArenaController {
-arenaService
-arenaMatchService
+pagination
+total
+req
+super()
+getUserHistory()
+createRoom()
+updateRoomProblem()
+startMatch()
+getMatchStatus()
+getRoom()
+getMatchDetail()
}
class ArenaMatchService {
-arenaMatchRepository
-arenaSubmissionRepository
-arenaRepository
-matchDomainEngine
-matchBroadcaster
-statsSubmissionService
-clock
+userId
+status
+status
+submissionOrder
+status
+submissionOrder
+roomId
+match
+roomId
+match
+handleMatchSubmission()
+finalizeMatch()
-internalFinalizeMatch()
+forceFinishMatch()
+getMatchHistory()
+getMatchDetail()
}
class ArenaService {
-arenaRepository
-userRepository
-arenaMatchRepository
-arenaSubmissionRepository
-clock
+clerkUserId
+details
+userId
+username
+fullName
+avatarUrl
+isCreator
+score
+testsPassed
+totalTests
+status
+isOffline
+status
+topic
+problemId
+problemSlug
+difficulty
+language
+players
+roomId
+clerkUserId
+clerkUserId
+roomId
+details
+problemId
+problemSlug
+problemId
+problemSlug
+difficulty
+language
+topic
+type
+payload
+clerkUserId
+roomId
+userId
+username
+fullName
+avatarUrl
+submissionOrder
+verdict
+score
+testsPassed
+totalTests
+roomId
+hostId
+problemId
+problemTitle
+problemSlug
+difficulty
+language
+id
+status
+status
+matchId
+players
+topic
+createRoom()
+validateServiceInput()
-ensureIsHost()
+updateRoomProblem()
+validateServiceInput()
+startMatch()
+validateServiceInput()
+getMatchStatus()
+getRoom()
}
class MatchBroadcasterService {
+type
+roomId
+matchId
+finalRankings
+type
+payload
+roomId
+userId
+submissionId
+notifyLeaderboardUpdate()
+broadcastMatchOver()
+notifyPlayerSubmission()
+broadcastUpdate()
}
class MatchDomainEngine {
+currentOrder
+allPlayers
+calculateScore()
+calculateTimeTaken()
+differenceInMilliseconds()
+determineSubmissionOrder()
+rankPlayers()
+return()
+return()
+return()
}
class MatchValidatorService {
-arenaMatchRepository
-arenaRepository
+arenaMatchId
+userId
+submission
+userId
+validateSubmissionEligibility()
+validateSubmissionOwnership()
}
class ArenaMatchRepository {
-clock
+input
+roomId
+hostId
+problemId
+problemTitle
+problemSlug
+difficulty
+status
+players
+language
+roomId
+input
+status
+returnDocument
+matchId
+userId
+progress
+arrayFilters
+returnDocument
+matchId
+player
+id
+from
+let
+pipeline
+as
+from
+let
+pipeline
+as
+_id
+roomId
+hostId
+problemId
+problemTitle
+problemSlug
+difficulty
+language
+status
+expiresAt
+startedAt
+endedAt
+createdAt
+updatedAt
+players
+matchId
+userId
+verdict
+matchId
+unfinishedCount
+input
+as
+cond
+matchId
+matchId
+updates
+returnDocument
+super()
+create()
+findByRoomId()
+updateStatus()
+updatePlayerProgress()
+addPlayer()
+getHistoryByUserId()
+findByIdWithSubmissions()
+getPlayersStatuses()
+countUnfinishedPlayers()
+atomicMarkStatusCompleted()
+updateMatch()
}
class ArenaSubmissionRepository {
+input
+status
+userId
+matchId
+super()
+create()
+findByMatchId()
+getSubmissionOrder()
+findByUserAndMatch()
+findAllSubmissionIdsByUser()
}
class ArenaRepository {
+status
+matchId
+startTime
+endTime
+status
+matchId
+startTime
+endTime
+roomId
+userId
+updates
+roomId
+updates
+createRoom()
+getRoom()
+getAllPlayingRooms()
+saveRoom()
+deleteRoom()
+getUserCurrentRoomId()
+joinRoom()
+leaveRoom()
+finishRoom()
+resetRoom()
+updateRoomPlayer()
+updateRoomStatus()
}
classDiagram
class SystemDesignController {
-systemDesignService
+super()
+getTopics()
+getTopicContent()
+createTopic()
}
class SystemDesignService {
-systemDesignRepository
+getTopics()
+getTopicContent()
+createTopic()
}
class SystemDesignRepository {
+super()
+getTopics()
+getTopicContent()
+createTopic()
}
class ChatController {
-chatService
+super()
+createThread()
+getThreads()
+deleteThread()
+getMessages()
+sendMessage()
}
class ChatService {
-chatRepository
-workspaceService
-groqDiagramService
+userId
+diagramId
+userId
+threadId
+userId
+input
+diagramId
+title
+userId
+diagramId
+userId
+threadId
+input
+diagramId
+title
+role
+content
+threadId
+role
+content
+threadId
+role
+content
+textResponse
+canvasActions
+thread
-verifyDiagramAccess()
-verifyThreadAccess()
+createThread()
+getThreadsByDiagramId()
+deleteThread()
+getMessages()
+sendMessage()
}
class ChatRepository {
+createThread()
+findThreadById()
+findThreadsByDiagramId()
+deleteThread()
+touchThread()
+createMessage()
+findMessagesByThreadId()
}
class WorkspaceController {
-workspaceService
+super()
+createWorkspace()
+getWorkspaces()
+getWorkspaceById()
+updateWorkspace()
+deleteWorkspace()
+createDiagram()
+getDiagrams()
+getDiagramById()
+updateDiagram()
+deleteDiagram()
+cloneDiagram()
}
class WorkspaceService {
-workspaceRepository
+name
+isDefault
+name
+isDefault
+title
+documentState
+workspaceId
+title
+documentState
-checkWorkspaceOwnership()
-checkDiagramOwnership()
+createWorkspace()
+getWorkspaces()
+getWorkspaceById()
+updateWorkspace()
+deleteWorkspace()
+getOrCreateDefaultWorkspace()
+getWorkspaceRaw()
+createDiagram()
+getDiagrams()
+getDiagramById()
+updateDiagram()
+deleteDiagram()
+cloneDiagram()
}
class WorkspaceRepository {
+createWorkspace()
+findWorkspaceById()
+findWorkspacesByUserId()
+findDefaultWorkspaceByUserId()
+and()
+eq()
+eq()
+updateWorkspace()
+deleteWorkspace()
+createDiagram()
+findDiagramById()
+findDiagramsByWorkspaceId()
+updateDiagram()
+deleteDiagram()
}
class DiagramResolverService {
-techAliases
+postgres
+postgresql
+mysql
+mssql
+sql
+database
+db
+dynamo
+dynamodb
+mongo
+mongodb
+cassandra
+redis
+memcached
+node
+nodejs
+lambda
+serverless
+docker
+k8s
+kubernetes
+ec2
+vm
+server
+nginx
+haproxy
+envoy
+proxy
+loadbalancer
+lb
+dns
+route53
+apigateway
+gateway
+s3
+storage
+bucket
+blob
+cloudfront
+cdn
+kafka
+rabbitmq
+queue
+mq
+sqs
+sns
+react
+vue
+angular
+nextjs
+html
+css
+javascript
+typescript
-initializeMaps()
+resolveIconId()
}
class GeminiLlmService {
-clock
-apiKeys
-genAIs
-circuitBreakers
+systemPrompt
+userPrompt
+modelName
+opts
+systemPrompt
+userPrompt
+keyIndex
+model
+systemInstruction
+contents
+generationConfig
+temperature
+maxOutputTokens
+responseMimeType
+data
+raw
}
class GroqDiagramService {
-unifiedLlmService
-diagramResolverService
+prompt
+pastMessages
+temperature
+textResponse
+canvasActions
+textResponse
+canvasActions
+textResponse
+canvasActions
+textResponse
+canvasActions
+textResponse
+canvasActions
+generateDiagram()
}
class GroqLlmService {
-clock
-apiKeys
-baseUrl
+systemPrompt
+userPrompt
+modelName
+opts
+systemPrompt
+userPrompt
+keyIndex
+model
+messages
+temperature
+max_tokens
+response_format
+raw
+method
+headers
+authorization
+data
+raw
}
class UnifiedLlmService {
-groqLlmService
-geminiLlmService
}
classDiagram
class AcademyExecutionController {
-academyExecutionService
+req
+super()
+runExercise()
}
class AcademyController {
-academyService
+super()
+getTracks()
+getTrackConfig()
+getTrackConcept()
+getTrackExercise()
+getSolvedExercises()
}
class AcademyAiJudgeService {
-unifiedLlmService
+Language
+temperature
+isRawExecution
+isAiEvaluation
+evaluate()
}
class AcademyExecutionService {
-academyRepository
-judge0Service
-academyAiJudgeService
-userRepository
-statsRepository
-leaderboardCache
-statsService
-submissionService
+source_code
+language_id
+compiler_options
+problemId
+problemTitle
+userId
+languageId
+sourceCode
+status
+payload
+source_code
+language_id
+userId
+difficulty
+isMatch
+source
+totalSolved
+runExercise()
-storeSubmission()
-executeAndPoll()
-handleGamification()
}
class AcademyService {
-academyRepository
+getTracks()
+getTrackConfig()
+getTrackConcept()
+getTrackExercise()
+getSolvedExercises()
}
class AcademyRepository {
+target
+getTracks()
+getTrackConfig()
+getTrackConcept()
+getTrackExercise()
+markExerciseSolved()
+getSolvedExercises()
}
classDiagram
class SolutionController {
-solutionService
+super()
+createSolution()
+getSolutionsForProblem()
+voteForSolution()
+updateSolution()
+deleteSolution()
+getSolutionsByUser()
}
class SolutionService {
-solutionRepository
-problemRepository
-userRepository
-isUUID()
+createSolution()
+getSolutionsForProblem()
+getSolutionById()
+voteForSolution()
+updateSolution()
+deleteSolution()
+getSolutionsByUser()
}
class SolutionRepository {
-clock
+solution
+author
+username
+avatarUrl
+fullName
+author
+solution
+author
+username
+avatarUrl
+fullName
+author
+target
+set
+voteType
+type
+solution
+author
+username
+avatarUrl
+fullName
+author
+create()
+findById()
+findByProblemId()
+upsertVote()
+getUserVote()
+and()
+eq()
+eq()
+updateVoteCounts()
+update()
+delete()
+deleteVote()
+and()
+eq()
+eq()
+findByUserId()
+countByUserId()
}
class ContestController {
-contestService
+super()
+async()
+async()
+async()
}
class ClistService {
+getContests()
}
class ContestService {
-clistService
-contestRepository
-contestCache
+clistId
+title
+platform
+icon
+duration
+href
+resourceId
+status
+syncExternalContests()
+getUpcomingContests()
+getExternalContests()
}
class ContestRepository {
-clock
+target
+set
+title
+description
+platform
+startTime
+endTime
+duration
+href
+icon
+status
+findById()
+findByClistId()
+findUpcoming()
+upsert()
+deleteOld()
}
class ReportBugController {
-reportBugService
+title
+description
+type
+super()
}
class ReportBugService {
-reportBugRepository
-cloudinaryService
+reportBugRepository
+cloudinaryService
+title
+description
+type
+images
+submitReport()
}
class ReportBugRepository {
+createReport()
}
class SeoController {
-seoService
+super()
+getSitemapProblems()
+getSitemapAcademyTracks()
+getSitemapAcademyExercises()
+getSitemapSystemDesignLessons()
+getSitemapCompanyTags()
+getSitemapUsers()
}
class SeoService {
-seoRepository
+getProblemsSitemapData()
+getAcademyTracksSitemapData()
+getAcademyExercisesSitemapData()
+getSystemDesignLessonsSitemapData()
+getCompanyTagsSitemapData()
+getUsersSitemapData()
}
class SeoRepository {
+username
+updatedAt
+getProblemsForSitemap()
+getAcademyTracksForSitemap()
+getAcademyExercisesForSitemap()
+getSystemDesignLessonsForSitemap()
+getCompanyTagsForSitemap()
+getUsersForSitemap()
}
class SystemClockService {
+now()
+nowDate()
+nowIso()
}
class CloudinaryService {
+cloud_name
+api_key
+api_secret
+resource_type
+uploadImage()
+reject()
+resolve()
+deleteImage()
+reject()
+resolve()
}