
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package com.example.educatback.controller;
import com.example.educatback.Application.MemberAppService;
import com.example.educatback.DuplicateIdException;
import com.example.educatback.controller.request.MemberRequest;
import com.example.educatback.controller.response.ApiResponse;
import com.example.educatback.controller.response.MemberResponse;
import com.example.educatback.controller.response.ResponseCode;
import com.example.educatback.controller.response.SolvedResponse;
import com.example.educatback.model.entity.Solved;
import jakarta.persistence.EntityNotFoundException;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@RequestMapping
@RequiredArgsConstructor
public class MemberController {
private final MemberAppService memberAppService;
@PostMapping("/register")
public ApiResponse<MemberResponse.Detail> create(@Valid @RequestBody MemberRequest.Create memberRequest) {
try {
MemberResponse.Detail member = memberAppService.createMember(memberRequest);
return ApiResponse.response(true, ResponseCode.Created, member);
} catch (Exception e) {
return handleException(e);
}
}
@GetMapping("/rating")
public ApiResponse<Object> rating(@AuthenticationPrincipal UserDetails auth) {
try {
MemberResponse.Rating member = memberAppService.getMemberRating(auth.getUsername());
return ApiResponse.response(true, ResponseCode.OK, member);
} catch (Exception e) {
return handleException(e);
}
}
@GetMapping("/member")
public ApiResponse<Object> show(@AuthenticationPrincipal UserDetails auth) {
try {
MemberResponse.Detail member = memberAppService.getMember(auth.getUsername());
return ApiResponse.response(true, ResponseCode.OK, member);
} catch (Exception e) {
return handleException(e);
}
}
@GetMapping("/member/solved")
public ApiResponse<List<SolvedResponse>> listSolvedByMember(@AuthenticationPrincipal UserDetails user) {
try {
List<Solved> solveds = memberAppService.getSolvedByMember(user.getUsername());
List<SolvedResponse> solvedResponses = solveds.stream().map(SolvedResponse::from).collect(Collectors.toList());
return ApiResponse.response(true, ResponseCode.OK, solvedResponses);
} catch (Exception e) {
return handleException(e);
}
}
private <T> ApiResponse<T> handleException(Exception e) {
if (e instanceof MethodArgumentNotValidException) {
return ApiResponse.response(false, ResponseCode.ValidationError, null);
}
if (e instanceof DuplicateIdException) {
return ApiResponse.response(false, ResponseCode.DuplicateError, null);
}
if (e instanceof EntityNotFoundException) {
return ApiResponse.response(false, ResponseCode.NOT_FOUND, null);
}
return ApiResponse.response(false, ResponseCode.InternalServerError, null);
}
}