Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ public final class ApiConstants {
public static final String SOLVED_AC_PROBLEM_API_URL = "https://solved.ac/api/v3/problem/lookup?problemIds=";
public static final String BOJ_USER_PROFILE_URL = "https://www.acmicpc.net/user/";
public static final String BOJ_PROBLEM_URL = "www.acmicpc.net";
public static final String BOJ_PROBLEM_FORMAT = "https://www.acmicpc.net/problem/";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

백준 URL이 맞네요! 그냥 BOJ_URL로 수정해주시면 감사하겠습니다 ㅎㅎ
/problem 붙은 url은 BOJ_PROBLEM_URL로 해주시면 될 것 같아요!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵!

public static final String SERVER_HTTPS_ENDPOINT = "https://api.algohub.kr";
public static final String RC_SERVER_HTTPS_ENDPOINT = "https://api.rc.algohub.kr";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public class EdgeCase {
@JoinColumn(name = "user_id")
private User author;

private LocalDateTime createdAt;
private LocalDateTime deletedAt;

@Column(nullable = false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import lombok.Builder;

@Builder
public record CreateEdgeCaseRequest(@NotBlank(message = "문제 링크 입력은 필수입니다.") String link,
public record CreateEdgeCaseRequest(@NotBlank(message = "문제 링크 또는 문제 번호 입력은 필수입니다.") String linkOrProblemNumber,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

흠 근데 드는 생각이 이 부분은 프론트에서 요청을 할 때 일관적으로 포맷 통일해서 보내주는게 좋지 않을까요?

문제 링크와 번호 입력 모두 지원한다는 것이 결국은 사용자에게 편리함을 제공하기 위한거라면,
백엔드 비즈니스 로직보단 UX 관점에서 가져 가야 할 역할일거라고 생각했습니다.

어차피 문제 번호는 백준 문제 URL 뒤에 넣어주면 되니까 문제 링크로만 요청 보내는건 프론트에서도 충분히 처리할 수 있지 않을까 싶었습니다!

value가 두 개로 쪼개지는거면 모를까, String request param 하나로 이렇게 링크 또는 문제 번호를 받는 것도 API 명세 자체를 모호하게 만드는 원인이라고 생각합니다!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 동의해요! 이 부분은 그럼 프론트 분들과 논의를 해봐야하는 걸까요?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 프론트 담당자분과 논의해보시죠!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

백준 문제 URL 받는 거로 통일시켰습니다~!

@NotBlank(message = "반례 input 입력은 필수입니다.") String input,
@NotBlank(message = "반례 output 입력은 필수입니다.") String output){
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
import com.gamzabat.algohub.feature.edgecase.domain.EdgeCase;

public interface EdgeCaseRepository extends JpaRepository<EdgeCase, Long> {
List<EdgeCase> findAllByProblemNumber(Integer number);
List<EdgeCase> findAllByProblemNumberOrderByCreatedAtDesc(Integer problemNumber);
List<EdgeCase> findAllByOrderByCreatedAtDesc();
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,29 +37,36 @@ public class EdgeCaseService {

public void createEdgeCase(User user, CreateEdgeCaseRequest request) {
User author = user;
String link = request.link();
Boolean isNumber = isNumeric(request.linkOrProblemNumber());
String link, number;
if (isNumber) {
link = BOJ_PROBLEM_FORMAT + request.linkOrProblemNumber();
number = request.linkOrProblemNumber();
} else {
link = request.linkOrProblemNumber();
number = getProblemId(link);
}

String number = getProblemId(link);
JsonNode apiResult = problemService.fetchProblemDetails(number);
int level = problemService.getProblemLevel(apiResult);
String title = problemService.getProblemTitle(apiResult);

saveEdgeCase(author,request,level,title,Integer.parseInt(number));
saveEdgeCase(author,request,link,level,title,Integer.parseInt(number));
}

private void saveEdgeCase(User author, CreateEdgeCaseRequest request, int level, String title, int number) {
private void saveEdgeCase(User author, CreateEdgeCaseRequest request, String link, int level, String title, int number) {
EdgeCase edgeCase = EdgeCase.builder().input(request.input()).level(level).title(title).link(
request.link()).output(request.output()).problemNumber(number).author(author).build();
link).output(request.output()).problemNumber(number).author(author).build();

edgeCaseRepository.save(edgeCase);
}

public GetEdgeCaseListResponse getEdgeCaseList(Integer problemNumber) {
List<EdgeCase> edgeCaseList;
if (problemNumber == null)
edgeCaseList = edgeCaseRepository.findAll();
edgeCaseList = edgeCaseRepository.findAllByOrderByCreatedAtDesc();
else
edgeCaseList = edgeCaseRepository.findAllByProblemNumber(problemNumber);
edgeCaseList = edgeCaseRepository.findAllByProblemNumberOrderByCreatedAtDesc(problemNumber);

List<GetEdgeCaseResponse> responseList = edgeCaseList.stream()
.map(edgeCase -> new GetEdgeCaseResponse(
Expand Down Expand Up @@ -115,4 +122,8 @@ private String getProblemId(String url) {
throw new NotBojLinkException(HttpStatus.BAD_REQUEST.value(), "백준 링크가 아닙니다");
return parts[parts.length - 1];
}

private boolean isNumeric(String str) {
return str != null && str.matches("\\d+");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ void setUp() throws NoSuchFieldException, IllegalAccessException {
void createEdgeCaseSuccess() {
//given
CreateEdgeCaseRequest request = CreateEdgeCaseRequest.builder()
.link("https://www.acmicpc.net/problem/1000")
.linkOrProblemNumber("https://www.acmicpc.net/problem/1000")
.input("1 2")
.output("3")
.build();
Expand Down Expand Up @@ -156,7 +156,7 @@ void getEdgeCaseListSuccess_1() {
//given
Integer problemNumber = 1001;
List<EdgeCase> edgeCaseList = Arrays.asList(edgeCase1, edgeCase2);
when(edgeCaseRepository.findAllByProblemNumber(problemNumber))
when(edgeCaseRepository.findAllByProblemNumberOrderByCreatedAtDesc(problemNumber))
.thenReturn(edgeCaseList);

//when
Expand Down Expand Up @@ -186,7 +186,7 @@ void getEdgeCaseListSuccess_2() {
// given
Integer problemNumber = null;
List<EdgeCase> edgeCaseList = Arrays.asList(edgeCase1, edgeCase2, edgeCase3);
when(edgeCaseRepository.findAll())
when(edgeCaseRepository.findAllByOrderByCreatedAtDesc())
.thenReturn(edgeCaseList);
// when
GetEdgeCaseListResponse response = edgeCaseService.getEdgeCaseList(problemNumber);
Expand Down
Loading