diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java b/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java index 57e035b..ba10ecd 100644 --- a/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java +++ b/src/main/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerController.java @@ -8,8 +8,14 @@ import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepOneCheckRequest; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepOneCheckResult; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepTwoValidationRequest; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepTwoValidationResult; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationResult; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationResult; import com.sztzjy.linkCommerce.service.NewProductSurveyStepOneService; import com.sztzjy.linkCommerce.service.NewProductSurveyStepTwoService; +import com.sztzjy.linkCommerce.service.NewProductSurveyStepThreeService; +import com.sztzjy.linkCommerce.service.NewProductSurveyStepFourService; import com.sztzjy.linkCommerce.service.StudentTrainingAnswerService; import com.sztzjy.linkCommerce.util.ResultEntity; import io.swagger.annotations.Api; @@ -33,6 +39,12 @@ public class StudentTrainingAnswerController { @Autowired private NewProductSurveyStepTwoService newProductSurveyStepTwoService; + @Autowired + private NewProductSurveyStepThreeService newProductSurveyStepThreeService; + + @Autowired + private NewProductSurveyStepFourService newProductSurveyStepFourService; + @GetMapping("/{taskKey}") @ApiOperation("查询当前学生指定实训任务答案") public ResultEntity detail(@PathVariable String taskKey, @@ -83,6 +95,30 @@ public class StudentTrainingAnswerController { } } + @PostMapping("/new-product-survey/step-3/validate") + @ApiOperation("新产品调查与分析第三步校验") + public ResultEntity validateNewProductSurveyStepThree( + @RequestBody NewProductSurveyStepThreeValidationRequest answer, HttpServletRequest request) { + try { + JwtUser user = TokenProvider.getJWTUser(request); + return new ResultEntity<>(HttpStatus.OK, "校验通过", newProductSurveyStepThreeService.validate(answer, user)); + } catch (ServiceException e) { + return new ResultEntity<>(e.getCode(), e.getMessage()); + } + } + + @PostMapping("/new-product-survey/step-4/validate") + @ApiOperation("新产品调查与分析第四步校验") + public ResultEntity validateNewProductSurveyStepFour( + @RequestBody NewProductSurveyStepFourValidationRequest answer, HttpServletRequest request) { + try { + JwtUser user = TokenProvider.getJWTUser(request); + return new ResultEntity<>(HttpStatus.OK, "校验通过", newProductSurveyStepFourService.validate(answer, user)); + } catch (ServiceException e) { + return new ResultEntity<>(e.getCode(), e.getMessage()); + } + } + @DeleteMapping("/{taskKey}") @ApiOperation("删除当前学生指定实训任务答案") public ResultEntity delete(@PathVariable String taskKey, diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepFourValidationRequest.java b/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepFourValidationRequest.java new file mode 100644 index 0000000..919a2d9 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepFourValidationRequest.java @@ -0,0 +1,14 @@ +package com.sztzjy.linkCommerce.entity.dto; + +public class NewProductSurveyStepFourValidationRequest { + private String coreValue; + private String tangibleValue; + private String extendedValue; + + public String getCoreValue() { return coreValue; } + public void setCoreValue(String coreValue) { this.coreValue = coreValue; } + public String getTangibleValue() { return tangibleValue; } + public void setTangibleValue(String tangibleValue) { this.tangibleValue = tangibleValue; } + public String getExtendedValue() { return extendedValue; } + public void setExtendedValue(String extendedValue) { this.extendedValue = extendedValue; } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepFourValidationResult.java b/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepFourValidationResult.java new file mode 100644 index 0000000..67c8747 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepFourValidationResult.java @@ -0,0 +1,11 @@ +package com.sztzjy.linkCommerce.entity.dto; + +public class NewProductSurveyStepFourValidationResult { + private boolean valid; + private String message; + + public boolean isValid() { return valid; } + public void setValid(boolean valid) { this.valid = valid; } + public String getMessage() { return message; } + public void setMessage(String message) { this.message = message; } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepThreeValidationRequest.java b/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepThreeValidationRequest.java new file mode 100644 index 0000000..f3ff981 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepThreeValidationRequest.java @@ -0,0 +1,20 @@ +package com.sztzjy.linkCommerce.entity.dto; + +import java.util.List; + +public class NewProductSurveyStepThreeValidationRequest { + private List rows; + + public List getRows() { return rows; } + public void setRows(List rows) { this.rows = rows; } + + public static class Row { + private String dimension; + private List points; + + public String getDimension() { return dimension; } + public void setDimension(String dimension) { this.dimension = dimension; } + public List getPoints() { return points; } + public void setPoints(List points) { this.points = points; } + } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepThreeValidationResult.java b/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepThreeValidationResult.java new file mode 100644 index 0000000..42f7928 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/entity/dto/NewProductSurveyStepThreeValidationResult.java @@ -0,0 +1,11 @@ +package com.sztzjy.linkCommerce.entity.dto; + +public class NewProductSurveyStepThreeValidationResult { + private boolean valid; + private String message; + + public boolean isValid() { return valid; } + public void setValid(boolean valid) { this.valid = valid; } + public String getMessage() { return message; } + public void setMessage(String message) { this.message = message; } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/NewProductSurveyStepFourService.java b/src/main/java/com/sztzjy/linkCommerce/service/NewProductSurveyStepFourService.java new file mode 100644 index 0000000..7e57266 --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/NewProductSurveyStepFourService.java @@ -0,0 +1,9 @@ +package com.sztzjy.linkCommerce.service; + +import com.sztzjy.linkCommerce.config.security.JwtUser; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationResult; + +public interface NewProductSurveyStepFourService { + NewProductSurveyStepFourValidationResult validate(NewProductSurveyStepFourValidationRequest request, JwtUser user); +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/NewProductSurveyStepThreeService.java b/src/main/java/com/sztzjy/linkCommerce/service/NewProductSurveyStepThreeService.java new file mode 100644 index 0000000..f1df47a --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/NewProductSurveyStepThreeService.java @@ -0,0 +1,9 @@ +package com.sztzjy.linkCommerce.service; + +import com.sztzjy.linkCommerce.config.security.JwtUser; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationResult; + +public interface NewProductSurveyStepThreeService { + NewProductSurveyStepThreeValidationResult validate(NewProductSurveyStepThreeValidationRequest request, JwtUser user); +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepFourServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepFourServiceImpl.java new file mode 100644 index 0000000..92c236e --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepFourServiceImpl.java @@ -0,0 +1,48 @@ +package com.sztzjy.linkCommerce.service.impl; + +import com.sztzjy.linkCommerce.config.exception.handler.ServiceException; +import com.sztzjy.linkCommerce.config.security.JwtUser; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationResult; +import com.sztzjy.linkCommerce.service.NewProductSurveyStepFourService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +@Service +public class NewProductSurveyStepFourServiceImpl implements NewProductSurveyStepFourService { + @Override + public NewProductSurveyStepFourValidationResult validate(NewProductSurveyStepFourValidationRequest request, JwtUser user) { + requireStudent(user); + if (request == null) { + throw badRequest("请完成三层次AI应用价值分析"); + } + requireNonBlank(request.getCoreValue(), "请填写核心层AI应用价值分析"); + requireNonBlank(request.getTangibleValue(), "请填写有形层AI应用价值分析"); + requireNonBlank(request.getExtendedValue(), "请填写延伸层AI应用价值分析"); + + NewProductSurveyStepFourValidationResult result = new NewProductSurveyStepFourValidationResult(); + result.setValid(true); + result.setMessage("校验通过"); + return result; + } + + private void requireStudent(JwtUser user) { + if (user == null || StringUtils.isBlank(user.getUserId())) { + throw new ServiceException(HttpStatus.UNAUTHORIZED, "请先登录后再提交"); + } + if (user.getRoleId() != 4) { + throw new ServiceException(HttpStatus.FORBIDDEN, "仅学生可提交实训答案"); + } + } + + private void requireNonBlank(String value, String message) { + if (StringUtils.isBlank(value)) { + throw badRequest(message); + } + } + + private ServiceException badRequest(String message) { + return new ServiceException(HttpStatus.BAD_REQUEST, message); + } +} diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepThreeServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepThreeServiceImpl.java new file mode 100644 index 0000000..fad0e1b --- /dev/null +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepThreeServiceImpl.java @@ -0,0 +1,63 @@ +package com.sztzjy.linkCommerce.service.impl; + +import com.sztzjy.linkCommerce.config.exception.handler.ServiceException; +import com.sztzjy.linkCommerce.config.security.JwtUser; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationResult; +import com.sztzjy.linkCommerce.service.NewProductSurveyStepThreeService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +@Service +public class NewProductSurveyStepThreeServiceImpl implements NewProductSurveyStepThreeService { + private static final Set DIMENSIONS = new LinkedHashSet<>(Arrays.asList("核心层", "有形层", "延伸层")); + + @Override + public NewProductSurveyStepThreeValidationResult validate(NewProductSurveyStepThreeValidationRequest request, JwtUser user) { + requireStudent(user); + if (request == null || request.getRows() == null || request.getRows().size() != DIMENSIONS.size()) { + throw badRequest("请完成核心层、有形层和延伸层分析"); + } + Set submittedDimensions = new LinkedHashSet<>(); + for (NewProductSurveyStepThreeValidationRequest.Row row : request.getRows()) { + String dimension = row == null ? "" : StringUtils.trimToEmpty(row.getDimension()); + if (!DIMENSIONS.contains(dimension) || !submittedDimensions.add(dimension)) { + throw badRequest("提交的分析维度不完整或重复"); + } + List points = row.getPoints() == null ? Arrays.asList() : row.getPoints().stream() + .filter(StringUtils::isNotBlank) + .map(StringUtils::trim) + .collect(Collectors.toList()); + if (points.size() < 2) { + throw badRequest(dimension + "至少填写 2 条分析要点"); + } + } + if (!submittedDimensions.equals(DIMENSIONS)) { + throw badRequest("请完成核心层、有形层和延伸层分析"); + } + NewProductSurveyStepThreeValidationResult result = new NewProductSurveyStepThreeValidationResult(); + result.setValid(true); + result.setMessage("校验通过"); + return result; + } + + private void requireStudent(JwtUser user) { + if (user == null || StringUtils.isBlank(user.getUserId())) { + throw new ServiceException(HttpStatus.UNAUTHORIZED, "请先登录后再提交"); + } + if (user.getRoleId() != 4) { + throw new ServiceException(HttpStatus.FORBIDDEN, "仅学生可提交实训答案"); + } + } + + private ServiceException badRequest(String message) { + return new ServiceException(HttpStatus.BAD_REQUEST, message); + } +} diff --git a/src/test/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerControllerTest.java b/src/test/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerControllerTest.java index 59256c2..1dd2a3f 100644 --- a/src/test/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerControllerTest.java +++ b/src/test/java/com/sztzjy/linkCommerce/controller/stu/StudentTrainingAnswerControllerTest.java @@ -7,8 +7,14 @@ import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepOneCheckRequest; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepOneCheckResult; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepTwoValidationRequest; import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepTwoValidationResult; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationResult; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationResult; import com.sztzjy.linkCommerce.service.NewProductSurveyStepOneService; import com.sztzjy.linkCommerce.service.NewProductSurveyStepTwoService; +import com.sztzjy.linkCommerce.service.NewProductSurveyStepThreeService; +import com.sztzjy.linkCommerce.service.NewProductSurveyStepFourService; import com.sztzjy.linkCommerce.util.ResultEntity; import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus; @@ -59,6 +65,40 @@ class StudentTrainingAnswerControllerTest { verify(service).validate(any(NewProductSurveyStepTwoValidationRequest.class), any(JwtUser.class)); } + @Test + void validateStepThreeUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { + StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); + NewProductSurveyStepThreeService service = mock(NewProductSurveyStepThreeService.class); + ReflectionTestUtils.setField(controller, "newProductSurveyStepThreeService", service); + NewProductSurveyStepThreeValidationResult validation = new NewProductSurveyStepThreeValidationResult(); + validation.setValid(true); + when(service.validate(any(NewProductSurveyStepThreeValidationRequest.class), any(JwtUser.class))).thenReturn(validation); + + NewProductSurveyStepThreeValidationRequest answer = new NewProductSurveyStepThreeValidationRequest(); + ResultEntity result = controller.validateNewProductSurveyStepThree(answer, authenticatedStudentRequest()); + + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals(validation, result.getBody().getData()); + verify(service).validate(any(NewProductSurveyStepThreeValidationRequest.class), any(JwtUser.class)); + } + + @Test + void validateStepFourUsesTheAuthenticatedStudentAndReturnsTheValidationResult() { + StudentTrainingAnswerController controller = new StudentTrainingAnswerController(); + NewProductSurveyStepFourService service = mock(NewProductSurveyStepFourService.class); + ReflectionTestUtils.setField(controller, "newProductSurveyStepFourService", service); + NewProductSurveyStepFourValidationResult validation = new NewProductSurveyStepFourValidationResult(); + validation.setValid(true); + when(service.validate(any(NewProductSurveyStepFourValidationRequest.class), any(JwtUser.class))).thenReturn(validation); + + NewProductSurveyStepFourValidationRequest answer = new NewProductSurveyStepFourValidationRequest(); + ResultEntity result = controller.validateNewProductSurveyStepFour(answer, authenticatedStudentRequest()); + + assertEquals(HttpStatus.OK, result.getStatusCode()); + assertEquals(validation, result.getBody().getData()); + verify(service).validate(any(NewProductSurveyStepFourValidationRequest.class), any(JwtUser.class)); + } + private HttpServletRequest authenticatedStudentRequest() { JwtUser user = new JwtUser(); user.setUserId("stu-1"); diff --git a/src/test/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepFourServiceImplTest.java b/src/test/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepFourServiceImplTest.java new file mode 100644 index 0000000..8401163 --- /dev/null +++ b/src/test/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepFourServiceImplTest.java @@ -0,0 +1,59 @@ +package com.sztzjy.linkCommerce.service.impl; + +import com.sztzjy.linkCommerce.config.exception.handler.ServiceException; +import com.sztzjy.linkCommerce.config.security.JwtUser; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepFourValidationResult; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class NewProductSurveyStepFourServiceImplTest { + + @Test + void acceptsStudentWithAllThreeNonBlankValues() { + NewProductSurveyStepFourServiceImpl service = new NewProductSurveyStepFourServiceImpl(); + + NewProductSurveyStepFourValidationResult result = service.validate(request("核心分析", "有形分析", "延伸分析"), student()); + + assertTrue(result.isValid()); + } + + @Test + void rejectsBlankValuesForEachLayer() { + NewProductSurveyStepFourServiceImpl service = new NewProductSurveyStepFourServiceImpl(); + + assertThrows(ServiceException.class, () -> service.validate(request(" ", "有形分析", "延伸分析"), student())); + assertThrows(ServiceException.class, () -> service.validate(request("核心分析", "\t", "延伸分析"), student())); + assertThrows(ServiceException.class, () -> service.validate(request("核心分析", "有形分析", ""), student())); + } + + @Test + void rejectsNonStudent() { + NewProductSurveyStepFourServiceImpl service = new NewProductSurveyStepFourServiceImpl(); + + assertThrows(ServiceException.class, () -> service.validate(request("核心分析", "有形分析", "延伸分析"), teacher())); + } + + private NewProductSurveyStepFourValidationRequest request(String coreValue, String tangibleValue, String extendedValue) { + NewProductSurveyStepFourValidationRequest request = new NewProductSurveyStepFourValidationRequest(); + request.setCoreValue(coreValue); + request.setTangibleValue(tangibleValue); + request.setExtendedValue(extendedValue); + return request; + } + + private JwtUser student() { + JwtUser user = new JwtUser(); + user.setUserId("stu-1"); + user.setRoleId(4); + return user; + } + + private JwtUser teacher() { + JwtUser user = student(); + user.setRoleId(3); + return user; + } +} diff --git a/src/test/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepThreeServiceImplTest.java b/src/test/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepThreeServiceImplTest.java new file mode 100644 index 0000000..70886cc --- /dev/null +++ b/src/test/java/com/sztzjy/linkCommerce/service/impl/NewProductSurveyStepThreeServiceImplTest.java @@ -0,0 +1,77 @@ +package com.sztzjy.linkCommerce.service.impl; + +import com.sztzjy.linkCommerce.config.exception.handler.ServiceException; +import com.sztzjy.linkCommerce.config.security.JwtUser; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationRequest; +import com.sztzjy.linkCommerce.entity.dto.NewProductSurveyStepThreeValidationResult; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class NewProductSurveyStepThreeServiceImplTest { + + @Test + void validatesThreeDimensionsWithTwoPointsEach() { + NewProductSurveyStepThreeServiceImpl service = new NewProductSurveyStepThreeServiceImpl(); + + NewProductSurveyStepThreeValidationResult result = service.validate(completeRequest(), student()); + + assertTrue(result.isValid()); + } + + @Test + void rejectsAOnePointRowDuplicateDimensionAndNonStudent() { + NewProductSurveyStepThreeServiceImpl service = new NewProductSurveyStepThreeServiceImpl(); + + assertThrows(ServiceException.class, () -> service.validate(request( + row("核心层", "仅一条"), tangible(), extended()), student())); + assertThrows(ServiceException.class, () -> service.validate(request( + core(), core(), extended()), student())); + assertThrows(ServiceException.class, () -> service.validate(completeRequest(), teacher())); + } + + private NewProductSurveyStepThreeValidationRequest completeRequest() { + return request(core(), tangible(), extended()); + } + + private NewProductSurveyStepThreeValidationRequest request(NewProductSurveyStepThreeValidationRequest.Row... rows) { + NewProductSurveyStepThreeValidationRequest request = new NewProductSurveyStepThreeValidationRequest(); + request.setRows(Arrays.asList(rows)); + return request; + } + + private NewProductSurveyStepThreeValidationRequest.Row core() { + return row("核心层", "AI 作业批改", "自适应学习路径"); + } + + private NewProductSurveyStepThreeValidationRequest.Row tangible() { + return row("有形层", "护眼屏幕", "NPU 芯片"); + } + + private NewProductSurveyStepThreeValidationRequest.Row extended() { + return row("延伸层", "题库持续更新", "家长社群服务"); + } + + private NewProductSurveyStepThreeValidationRequest.Row row(String dimension, String... points) { + NewProductSurveyStepThreeValidationRequest.Row row = new NewProductSurveyStepThreeValidationRequest.Row(); + row.setDimension(dimension); + row.setPoints(Arrays.asList(points)); + return row; + } + + private JwtUser student() { + JwtUser user = new JwtUser(); + user.setUserId("stu-1"); + user.setRoleId(4); + return user; + } + + private JwtUser teacher() { + JwtUser user = student(); + user.setRoleId(3); + return user; + } +}