diff --git a/db/migration/V0082__Change_questionNumber_to_bigint.SQL b/db/migration/V0082__Change_questionNumber_to_bigint.SQL new file mode 100644 index 000000000..d4d248943 --- /dev/null +++ b/db/migration/V0082__Change_questionNumber_to_bigint.SQL @@ -0,0 +1,5 @@ +ALTER TABLE "Question" +ALTER COLUMN "questionNumber" TYPE BIGINT; + +ALTER TABLE "QuestionBank" +ALTER COLUMN "questionNumber" TYPE BIGINT; diff --git a/src/main/java/org/patinanetwork/codebloom/common/db/models/question/Question.java b/src/main/java/org/patinanetwork/codebloom/common/db/models/question/Question.java index fe3ae8e27..caa3aa7c0 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/db/models/question/Question.java +++ b/src/main/java/org/patinanetwork/codebloom/common/db/models/question/Question.java @@ -31,7 +31,7 @@ public class Question { private QuestionDifficulty questionDifficulty; - private int questionNumber; + private long questionNumber; private String questionLink; diff --git a/src/main/java/org/patinanetwork/codebloom/common/db/models/question/bank/QuestionBank.java b/src/main/java/org/patinanetwork/codebloom/common/db/models/question/bank/QuestionBank.java index ae031af75..bc0e6705a 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/db/models/question/bank/QuestionBank.java +++ b/src/main/java/org/patinanetwork/codebloom/common/db/models/question/bank/QuestionBank.java @@ -27,7 +27,7 @@ public class QuestionBank { private String questionTitle; - private int questionNumber; + private long questionNumber; private String questionLink; diff --git a/src/main/java/org/patinanetwork/codebloom/common/db/repos/question/QuestionSqlRepository.java b/src/main/java/org/patinanetwork/codebloom/common/db/repos/question/QuestionSqlRepository.java index 0bf5530a9..3c3a7e494 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/db/repos/question/QuestionSqlRepository.java +++ b/src/main/java/org/patinanetwork/codebloom/common/db/repos/question/QuestionSqlRepository.java @@ -2,6 +2,7 @@ import java.sql.Array; import java.sql.Connection; +import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; import java.time.OffsetDateTime; @@ -41,79 +42,40 @@ public QuestionSqlRepository( this.jdbcClient = jdbcClient; this.questionTopicRepository = questionTopicRepository; this.questionTopicService = questionTopicService; - this.questionRowMapper = (rs, rowNum) -> { - var questionId = rs.getString("id"); - var userId = rs.getString("userId"); - var questionSlug = rs.getString("questionSlug"); - var questionDifficulty = QuestionDifficulty.valueOf(rs.getString("questionDifficulty")); - var questionNumber = rs.getInt("questionNumber"); - var questionLink = rs.getString("questionLink"); - int points = rs.getInt("pointsAwarded"); - Optional pointsAwarded = rs.wasNull() ? Optional.empty() : Optional.of(points); - var questionTitle = rs.getString("questionTitle"); - var acceptanceRate = rs.getFloat("acceptanceRate"); - var createdAt = rs.getTimestamp("createdAt").toLocalDateTime(); - var submittedAt = rs.getTimestamp("submittedAt").toLocalDateTime(); - - return Question.builder() - .id(questionId) - .userId(userId) - .questionSlug(questionSlug) - .questionDifficulty(questionDifficulty) - .questionNumber(questionNumber) - .questionLink(questionLink) - .pointsAwarded(pointsAwarded) - .questionTitle(questionTitle) - .description(Optional.ofNullable(rs.getString("description"))) - .acceptanceRate(acceptanceRate) - .createdAt(createdAt) - .submittedAt(submittedAt) - .runtime(Optional.ofNullable(rs.getString("runtime"))) - .memory(Optional.ofNullable(rs.getString("memory"))) - .code(Optional.ofNullable(rs.getString("code"))) - .language(Optional.ofNullable(rs.getString("language"))) - .submissionId(Optional.ofNullable(rs.getString("submissionId"))) - .topics(questionTopicRepository.findQuestionTopicsByQuestionId(questionId)) - .build(); - }; - this.questionWithUserRowMapper = (rs, rowNum) -> { - var questionId = rs.getString("id"); - var userId = rs.getString("userId"); - var questionSlug = rs.getString("questionSlug"); - var questionDifficulty = QuestionDifficulty.valueOf(rs.getString("questionDifficulty")); - var questionNumber = rs.getInt("questionNumber"); - var questionLink = rs.getString("questionLink"); - int points = rs.getInt("pointsAwarded"); - Optional pointsAwarded = rs.wasNull() ? Optional.empty() : Optional.of(points); - var questionTitle = rs.getString("questionTitle"); - var acceptanceRate = rs.getFloat("acceptanceRate"); - var createdAt = rs.getTimestamp("createdAt").toLocalDateTime(); - var submittedAt = rs.getTimestamp("submittedAt").toLocalDateTime(); - - return QuestionWithUser.builder() - .id(questionId) - .userId(userId) - .questionSlug(questionSlug) - .questionDifficulty(questionDifficulty) - .questionNumber(questionNumber) - .questionLink(questionLink) - .pointsAwarded(pointsAwarded) - .questionTitle(questionTitle) - .description(Optional.ofNullable(rs.getString("description"))) - .acceptanceRate(acceptanceRate) - .createdAt(createdAt) - .submittedAt(submittedAt) - .runtime(Optional.ofNullable(rs.getString("runtime"))) - .memory(Optional.ofNullable(rs.getString("memory"))) - .code(Optional.ofNullable(rs.getString("code"))) - .language(Optional.ofNullable(rs.getString("language"))) - .submissionId(Optional.ofNullable(rs.getString("submissionId"))) - .discordName(Optional.ofNullable(rs.getString("discordName"))) - .leetcodeUsername(Optional.ofNullable(rs.getString("leetcodeUsername"))) - .nickname(Optional.ofNullable(rs.getString("nickname"))) - .topics(questionTopicRepository.findQuestionTopicsByQuestionId(questionId)) - .build(); - }; + this.questionRowMapper = + (rs, rowNum) -> mapQuestionColumns(Question.builder(), rs).build(); + this.questionWithUserRowMapper = (rs, rowNum) -> mapQuestionColumns(QuestionWithUser.builder(), rs) + .discordName(Optional.ofNullable(rs.getString("discordName"))) + .leetcodeUsername(Optional.ofNullable(rs.getString("leetcodeUsername"))) + .nickname(Optional.ofNullable(rs.getString("nickname"))) + .build(); + } + + private > B mapQuestionColumns(final B builder, final ResultSet rs) + throws SQLException { + var questionId = rs.getString("id"); + int points = rs.getInt("pointsAwarded"); + Optional pointsAwarded = rs.wasNull() ? Optional.empty() : Optional.of(points); + + builder.id(questionId) + .userId(rs.getString("userId")) + .questionSlug(rs.getString("questionSlug")) + .questionDifficulty(QuestionDifficulty.valueOf(rs.getString("questionDifficulty"))) + .questionNumber(rs.getLong("questionNumber")) + .questionLink(rs.getString("questionLink")) + .pointsAwarded(pointsAwarded) + .questionTitle(rs.getString("questionTitle")) + .description(Optional.ofNullable(rs.getString("description"))) + .acceptanceRate(rs.getFloat("acceptanceRate")) + .createdAt(rs.getTimestamp("createdAt").toLocalDateTime()) + .submittedAt(rs.getTimestamp("submittedAt").toLocalDateTime()) + .runtime(Optional.ofNullable(rs.getString("runtime"))) + .memory(Optional.ofNullable(rs.getString("memory"))) + .code(Optional.ofNullable(rs.getString("code"))) + .language(Optional.ofNullable(rs.getString("language"))) + .submissionId(Optional.ofNullable(rs.getString("submissionId"))) + .topics(questionTopicRepository.findQuestionTopicsByQuestionId(questionId)); + return builder; } @Override diff --git a/src/main/java/org/patinanetwork/codebloom/common/db/repos/question/questionbank/QuestionBankSqlRepository.java b/src/main/java/org/patinanetwork/codebloom/common/db/repos/question/questionbank/QuestionBankSqlRepository.java index 9d257c948..0e0a7076a 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/db/repos/question/questionbank/QuestionBankSqlRepository.java +++ b/src/main/java/org/patinanetwork/codebloom/common/db/repos/question/questionbank/QuestionBankSqlRepository.java @@ -31,7 +31,7 @@ public QuestionBankSqlRepository( var questionBankId = rs.getString("id"); var questionSlug = rs.getString("questionSlug"); var questionDifficulty = QuestionDifficulty.valueOf(rs.getString("questionDifficulty")); - var questionNumber = rs.getInt("questionNumber"); + var questionNumber = rs.getLong("questionNumber"); var questionLink = rs.getString("questionLink"); var questionTitle = rs.getString("questionTitle"); var description = rs.getString("description"); diff --git a/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionBankDto.java b/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionBankDto.java index 9ef1c56ff..ade2cc42f 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionBankDto.java +++ b/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionBankDto.java @@ -32,7 +32,7 @@ public class QuestionBankDto { private String questionTitle; @Schema(requiredMode = Schema.RequiredMode.REQUIRED) - private int questionNumber; + private long questionNumber; @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private String questionLink; diff --git a/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionDto.java b/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionDto.java index a91a80e6a..dd73a62ab 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionDto.java +++ b/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionDto.java @@ -35,7 +35,7 @@ public class QuestionDto { private QuestionDifficulty questionDifficulty; @Schema(requiredMode = Schema.RequiredMode.REQUIRED) - private int questionNumber; + private long questionNumber; @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private String questionLink; diff --git a/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionWithUserDto.java b/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionWithUserDto.java index da02353bb..b4f3b53cc 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionWithUserDto.java +++ b/src/main/java/org/patinanetwork/codebloom/common/dto/question/QuestionWithUserDto.java @@ -35,7 +35,7 @@ public class QuestionWithUserDto { private QuestionDifficulty questionDifficulty; @Schema(requiredMode = Schema.RequiredMode.REQUIRED) - private int questionNumber; + private long questionNumber; @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private String questionLink; diff --git a/src/main/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClient.java b/src/main/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClient.java index 305c4f151..844a02c69 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClient.java +++ b/src/main/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClient.java @@ -28,7 +28,7 @@ public interface LeetcodeClient { List findSubmissionsByUsername(String username, int limit); /** @implNote requires authentication */ - LeetcodeDetailedQuestion findSubmissionDetailBySubmissionId(int submissionId); + LeetcodeDetailedQuestion findSubmissionDetailBySubmissionId(long submissionId); POTD getPotd(); diff --git a/src/main/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClientImpl.java b/src/main/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClientImpl.java index 39ac1b450..db125de88 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClientImpl.java +++ b/src/main/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClientImpl.java @@ -163,8 +163,8 @@ public LeetcodeQuestion findQuestionBySlug(final String slug) { throw new LeetcodeClientException("LeetCode returned no question data"); } - int questionId = - node.path("data").path("question").path("questionId").asInt(); + long questionId = + node.path("data").path("question").path("questionId").asLong(); String questionTitle = node.path("data").path("question").path("title").asText(); String titleSlug = @@ -258,7 +258,7 @@ public ArrayList findSubmissionsByUsername(final String user } for (JsonNode submission : submissionsNode) { - int id = submission.path("id").asInt(); + long id = submission.path("id").asLong(); String title = submission.path("title").asText(); String titleSlug = submission.path("titleSlug").asText(); String timestampString = submission.path("timestamp").asText(); @@ -285,7 +285,7 @@ public ArrayList findSubmissionsByUsername(final String user @Override @Retry(name = "leetcodeClient") @CircuitBreaker(name = "leetcodeClient") - public LeetcodeDetailedQuestion findSubmissionDetailBySubmissionId(final int submissionId) { + public LeetcodeDetailedQuestion findSubmissionDetailBySubmissionId(final long submissionId) { String requestBody; try { requestBody = GetSubmissionDetails.body(submissionId); @@ -312,10 +312,10 @@ public LeetcodeDetailedQuestion findSubmissionDetailBySubmissionId(final int sub JsonNode node = mapper.readTree(body); JsonNode baseNode = node.path("data").path("submissionDetails"); - int runtime = baseNode.path("runtime").asInt(); + long runtime = baseNode.path("runtime").asLong(); String runtimeDisplay = baseNode.path("runtimeDisplay").asText(); float runtimePercentile = (float) baseNode.path("runtimePercentile").asDouble(); - int memory = baseNode.path("memory").asInt(); + long memory = baseNode.path("memory").asLong(); String memoryDisplay = baseNode.path("memoryDisplay").asText(); float memoryPercentile = (float) baseNode.path("memoryPercentile").asDouble(); String code = baseNode.path("code").asText(); @@ -531,7 +531,7 @@ public List getAllProblems() { result.add(LeetcodeQuestion.builder() .link("https://leetcode.com/problems/" + question.get("titleSlug").asText()) - .questionId(question.get("questionFrontendId").asInt()) + .questionId(question.get("questionFrontendId").asLong()) .questionTitle(question.get("title").asText()) .titleSlug(question.get("titleSlug").asText()) .difficulty(question.get("difficulty").asText()) diff --git a/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeDetailedQuestion.java b/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeDetailedQuestion.java index 1c5329626..18bea7f3e 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeDetailedQuestion.java +++ b/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeDetailedQuestion.java @@ -2,20 +2,20 @@ public class LeetcodeDetailedQuestion { - private int runtime; + private long runtime; private String runtimeDisplay; private float runtimePercentile; - private int memory; + private long memory; private String memoryDisplay; private float memoryPercentile; private String code; private Lang lang; public LeetcodeDetailedQuestion( - final int runtime, + final long runtime, final String runtimeDisplay, final float runtimePercentile, - final int memory, + final long memory, final String memoryDisplay, final float memoryPercentile, final String code, @@ -30,11 +30,11 @@ public LeetcodeDetailedQuestion( this.lang = lang; } - public int getRuntime() { + public long getRuntime() { return runtime; } - public void setRuntime(final int runtime) { + public void setRuntime(final long runtime) { this.runtime = runtime; } @@ -54,11 +54,11 @@ public void setRuntimePercentile(final float runtimePercentile) { this.runtimePercentile = runtimePercentile; } - public int getMemory() { + public long getMemory() { return memory; } - public void setMemory(final int memory) { + public void setMemory(final long memory) { this.memory = memory; } diff --git a/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeQuestion.java b/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeQuestion.java index d8a03329b..5e99dbb8c 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeQuestion.java +++ b/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeQuestion.java @@ -15,7 +15,7 @@ public class LeetcodeQuestion { private String link; - private int questionId; + private long questionId; private String questionTitle; private String titleSlug; private String difficulty; diff --git a/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeSubmission.java b/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeSubmission.java index c9c60a727..bfa94117e 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeSubmission.java +++ b/src/main/java/org/patinanetwork/codebloom/common/leetcode/models/LeetcodeSubmission.java @@ -4,7 +4,7 @@ public class LeetcodeSubmission { - private int id; + private long id; private String title; private String titleSlug; @@ -12,7 +12,7 @@ public class LeetcodeSubmission { private String statusDisplay; public LeetcodeSubmission( - final int id, + final long id, final String title, final String titleSlug, final LocalDateTime timestamp, @@ -24,11 +24,11 @@ public LeetcodeSubmission( this.statusDisplay = statusDisplay; } - public int getId() { + public long getId() { return id; } - public void setId(final int id) { + public void setId(final long id) { this.id = id; } diff --git a/src/main/java/org/patinanetwork/codebloom/common/leetcode/queries/GetSubmissionDetails.java b/src/main/java/org/patinanetwork/codebloom/common/leetcode/queries/GetSubmissionDetails.java index 8cb7ab13f..4f5a968bb 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/leetcode/queries/GetSubmissionDetails.java +++ b/src/main/java/org/patinanetwork/codebloom/common/leetcode/queries/GetSubmissionDetails.java @@ -28,13 +28,13 @@ query submissionDetails($submissionId: Int!) { } """; - public static String body(final int submissionId) throws JsonProcessingException { + public static String body(final long submissionId) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); Map requestBodyMap = new HashMap<>(); requestBodyMap.put("query", QUERY); - Map variables = new HashMap<>(); + Map variables = new HashMap<>(); variables.put("submissionId", submissionId); requestBodyMap.put("variables", variables); diff --git a/src/main/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClient.java b/src/main/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClient.java index 2ca46d944..5e50ea295 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClient.java +++ b/src/main/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClient.java @@ -35,7 +35,7 @@ public interface ThrottledLeetcodeClient extends LeetcodeClient { List findSubmissionsByUsernameFast(String username, int limit); /** @implNote requires authentication */ - LeetcodeDetailedQuestion findSubmissionDetailBySubmissionIdFast(int submissionId); + LeetcodeDetailedQuestion findSubmissionDetailBySubmissionIdFast(long submissionId); POTD getPotdFast(); diff --git a/src/main/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClientImpl.java b/src/main/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClientImpl.java index ed34c60ef..211ca670d 100644 --- a/src/main/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClientImpl.java +++ b/src/main/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClientImpl.java @@ -71,7 +71,7 @@ public List findSubmissionsByUsernameFast(final String usern } @Override - public LeetcodeDetailedQuestion findSubmissionDetailBySubmissionIdFast(final int submissionId) { + public LeetcodeDetailedQuestion findSubmissionDetailBySubmissionIdFast(final long submissionId) { waitForToken(true); return leetcodeClient.findSubmissionDetailBySubmissionId(submissionId); } @@ -119,7 +119,7 @@ public List findSubmissionsByUsername(String username, int l } @Override - public LeetcodeDetailedQuestion findSubmissionDetailBySubmissionId(int submissionId) { + public LeetcodeDetailedQuestion findSubmissionDetailBySubmissionId(long submissionId) { waitForToken(false); return leetcodeClient.findSubmissionDetailBySubmissionId(submissionId); } diff --git a/src/main/java/org/patinanetwork/codebloom/scheduled/leetcode/LeetcodeQuestionProcessService.java b/src/main/java/org/patinanetwork/codebloom/scheduled/leetcode/LeetcodeQuestionProcessService.java index e66379938..762d8d8bd 100644 --- a/src/main/java/org/patinanetwork/codebloom/scheduled/leetcode/LeetcodeQuestionProcessService.java +++ b/src/main/java/org/patinanetwork/codebloom/scheduled/leetcode/LeetcodeQuestionProcessService.java @@ -214,8 +214,8 @@ private void fetchAndUpdate(final Job job) { && question.getSubmissionId().isPresent() && !question.getSubmissionId().get().isEmpty()) { try { - int submissionId = - Integer.parseInt(question.getSubmissionId().get()); + long submissionId = + Long.parseLong(question.getSubmissionId().get()); log.info("Fetching submission details from Leetcode for submission ID: {}", submissionId); var detailedSubmission = leetcodeClient.findSubmissionDetailBySubmissionId(submissionId); diff --git a/src/test/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClientTest.java b/src/test/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClientTest.java index 11996bc79..6f491f35e 100644 --- a/src/test/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClientTest.java +++ b/src/test/java/org/patinanetwork/codebloom/common/leetcode/LeetcodeClientTest.java @@ -204,6 +204,35 @@ void testFindSubmissionsByUsernameWithLimit() throws Exception { assertEquals(1, result.size()); } + @Test + void testFindSubmissionsByUsernameParsesIdsAboveIntMax() throws Exception { + String responseJson = """ + { + "data": { + "recentAcSubmissionList": [ + { + "id": "2163200710", + "title": "Search in Rotated Sorted Array II", + "titleSlug": "search-in-rotated-sorted-array-ii", + "timestamp": "1791209563", + "statusDisplay": "Accepted" + } + ] + } + } + """; + + when(httpResponse.statusCode()).thenReturn(200); + when(httpResponse.body()).thenReturn(responseJson); + when(httpClient.send(any(HttpRequest.class), any(HttpResponse.BodyHandler.class))) + .thenReturn(httpResponse); + + List result = leetcodeClient.findSubmissionsByUsername("testuser"); + + assertEquals(1, result.size()); + assertEquals(2163200710L, result.get(0).getId()); + } + @Test void testFindSubmissionDetailBySubmissionId() throws Exception { String responseJson = """ diff --git a/src/test/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClientTest.java b/src/test/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClientTest.java index aaf6f6eb0..e4a0f8066 100644 --- a/src/test/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClientTest.java +++ b/src/test/java/org/patinanetwork/codebloom/common/leetcode/throttled/ThrottledLeetcodeClientTest.java @@ -101,7 +101,7 @@ void testFindSubmissionsByUsernameWithLimit() { @Test void testFindSubmissionDetailBySubmissionIdFast() { - int submissionId = 123; + long submissionId = 123L; LeetcodeDetailedQuestion detail = new LeetcodeDetailedQuestion(0, null, 0, 0, null, 0, null, null); when(leetcodeClientImpl.findSubmissionDetailBySubmissionId(submissionId)) .thenReturn(detail); @@ -112,7 +112,7 @@ void testFindSubmissionDetailBySubmissionIdFast() { @Test void testFindSubmissionDetailBySubmissionId() { - int submissionId = 123; + long submissionId = 123L; LeetcodeDetailedQuestion detail = new LeetcodeDetailedQuestion(0, null, 0, 0, null, 0, null, null); when(leetcodeClientImpl.findSubmissionDetailBySubmissionId(submissionId)) .thenReturn(detail); diff --git a/src/test/java/org/patinanetwork/codebloom/scheduled/leetcode/LeetcodeQuestionProcessServiceUnitTest.java b/src/test/java/org/patinanetwork/codebloom/scheduled/leetcode/LeetcodeQuestionProcessServiceUnitTest.java index b5991a6d1..9438ad0e8 100644 --- a/src/test/java/org/patinanetwork/codebloom/scheduled/leetcode/LeetcodeQuestionProcessServiceUnitTest.java +++ b/src/test/java/org/patinanetwork/codebloom/scheduled/leetcode/LeetcodeQuestionProcessServiceUnitTest.java @@ -120,7 +120,7 @@ void premiumDescriptionIsRememberedAndNotRetried() { question.setSubmissionId(Optional.of("123")); runQueue(); assertTrue(cached.isPaidOnly()); - verify(client, never()).findSubmissionDetailBySubmissionId(anyInt()); + verify(client, never()).findSubmissionDetailBySubmissionId(anyLong()); verify(bank).updateQuestion(cached); assertEquals(JobStatus.COMPLETE, job.getStatus()); @@ -136,10 +136,19 @@ void knownPremiumStillRetriesMissingSubmissionDetails() { question.setSubmissionId(Optional.of("123")); runQueue(); verify(client, never()).findQuestionBySlug(anyString()); - verify(client).findSubmissionDetailBySubmissionId(123); + verify(client).findSubmissionDetailBySubmissionId(123L); assertEquals(JobStatus.INCOMPLETE, job.getStatus()); } + @Test + void fetchesSubmissionDetailsForIdsAboveIntMax() { + cached.setPaidOnly(true); + question.setCode(Optional.empty()); + question.setSubmissionId(Optional.of("2163200710")); + runQueue(); + verify(client).findSubmissionDetailBySubmissionId(2163200710L); + } + @Test void usesCachedDescriptionWithoutFetching() { cached.setDescription(Optional.of("Cached description"));