diff --git a/src/main/java/com/sztzjy/linkCommerce/controller/platformadmin/PlatformAdminController.java b/src/main/java/com/sztzjy/linkCommerce/controller/platformadmin/PlatformAdminController.java index bfa4bdd..447ba59 100644 --- a/src/main/java/com/sztzjy/linkCommerce/controller/platformadmin/PlatformAdminController.java +++ b/src/main/java/com/sztzjy/linkCommerce/controller/platformadmin/PlatformAdminController.java @@ -106,20 +106,20 @@ public class PlatformAdminController { return writeResult(count, "删除成功", "删除失败"); } - @GetMapping("/school-admins") - @ApiOperation("平台超管-学校管理员列表") - public ResultEntity> listSchoolAdmins(@RequestParam Integer index, - @RequestParam Integer size, - @RequestParam(required = false) String schoolId, - @RequestParam(required = false) String name, - @RequestParam(required = false) String username, - @RequestParam(required = false) String phone, - HttpServletRequest request) { + @GetMapping({"/teachers", "/school-admins"}) + @ApiOperation("平台超管-教师列表") + public ResultEntity> listTeachers(@RequestParam Integer index, + @RequestParam Integer size, + @RequestParam(required = false) String schoolId, + @RequestParam(required = false) String name, + @RequestParam(required = false) String username, + @RequestParam(required = false) String phone, + HttpServletRequest request) { requirePlatformAdmin(request); PageHelper.startPage(index, size); UserinfoExample example = new UserinfoExample(); UserinfoExample.Criteria criteria = example.createCriteria(); - criteria.andRoleEqualTo(2); + criteria.andRoleEqualTo(3); if (StringUtils.isNotBlank(schoolId)) { criteria.andSchoolIdEqualTo(schoolId); } @@ -136,55 +136,56 @@ public class PlatformAdminController { return new ResultEntity<>(HttpStatus.OK, "查询成功", new PageInfo<>(userinfoMapper.selectByExample(example))); } - @GetMapping("/school-admins/{id}") - @ApiOperation("平台超管-学校管理员详情") - public ResultEntity getSchoolAdmin(@PathVariable String id, HttpServletRequest request) { + @GetMapping({"/teachers/{id}", "/school-admins/{id}"}) + @ApiOperation("平台超管-教师详情") + public ResultEntity getTeacher(@PathVariable String id, HttpServletRequest request) { requirePlatformAdmin(request); - return new ResultEntity<>(HttpStatus.OK, "查询成功", requireSchoolAdminUser(id)); + return new ResultEntity<>(HttpStatus.OK, "查询成功", requireTeacherUser(id)); } - @PostMapping("/school-admins") - @ApiOperation("平台超管-新增学校管理员") - public ResultEntity addSchoolAdmin(@RequestBody Userinfo schoolAdmin, HttpServletRequest request) { + @PostMapping({"/teachers", "/school-admins"}) + @ApiOperation("平台超管-新增教师") + public ResultEntity addTeacher(@RequestBody Userinfo teacher, HttpServletRequest request) { requirePlatformAdmin(request); - if (StringUtils.isBlank(schoolAdmin.getUsername()) || StringUtils.isBlank(schoolAdmin.getName())) { - return new ResultEntity<>(HttpStatus.BAD_REQUEST, "学校管理员姓名和账号不能为空"); + if (StringUtils.isBlank(teacher.getUsername()) || StringUtils.isBlank(teacher.getName())) { + return new ResultEntity<>(HttpStatus.BAD_REQUEST, "教师姓名和账号不能为空"); } - String schoolId = platformAdminService.requireSchoolId(schoolAdmin.getSchoolId()); + String schoolId = platformAdminService.requireSchoolId(teacher.getSchoolId()); requireSchool(schoolId); - if (userInfoService.existsByUserName(schoolAdmin.getUsername())) { + if (userInfoService.existsByUserName(teacher.getUsername())) { return new ResultEntity<>(HttpStatus.BAD_REQUEST, "账号已存在"); } - schoolAdmin.setUserId(UUID.randomUUID().toString()); - if (StringUtils.isBlank(schoolAdmin.getPassword())) { - schoolAdmin.setPassword("123qwe"); + teacher.setUserId(UUID.randomUUID().toString()); + if (StringUtils.isBlank(teacher.getPassword())) { + teacher.setPassword("123qwe"); } - schoolAdmin.setCreateTime(new Date()); - platformAdminService.prepareSchoolAdminForSave(schoolAdmin, schoolId); - int count = userinfoMapper.insertSelective(schoolAdmin); + teacher.setCreateTime(new Date()); + platformAdminService.prepareTeacherForSave(teacher, schoolId); + int count = userinfoMapper.insertSelective(teacher); return writeResult(count, "新增成功", "新增失败"); } - @PutMapping("/school-admins/{id}") - @ApiOperation("平台超管-编辑学校管理员") - public ResultEntity updateSchoolAdmin(@PathVariable String id, - @RequestBody Userinfo schoolAdmin, - HttpServletRequest request) { + @PutMapping({"/teachers/{id}", "/school-admins/{id}"}) + @ApiOperation("平台超管-编辑教师") + public ResultEntity updateTeacher(@PathVariable String id, + @RequestBody Userinfo teacher, + HttpServletRequest request) { requirePlatformAdmin(request); - requireSchoolAdminUser(id); - String schoolId = platformAdminService.requireSchoolId(schoolAdmin.getSchoolId()); + requireTeacherUser(id); + String schoolId = platformAdminService.requireSchoolId(teacher.getSchoolId()); requireSchool(schoolId); - schoolAdmin.setUserId(id); - platformAdminService.prepareSchoolAdminForSave(schoolAdmin, schoolId); - int count = userinfoMapper.updateByPrimaryKeySelective(schoolAdmin); + teacher.setUserId(id); + platformAdminService.prepareTeacherForSave(teacher, schoolId); + int count = userinfoMapper.updateByPrimaryKeySelective(teacher); return writeResult(count, "编辑成功", "编辑失败"); } - @DeleteMapping("/school-admins/{id}") - @ApiOperation("平台超管-删除学校管理员") - public ResultEntity deleteSchoolAdmin(@PathVariable String id, HttpServletRequest request) { + @DeleteMapping({"/teachers/{id}", "/school-admins/{id}"}) + @ApiOperation("平台超管-删除教师") + public ResultEntity deleteTeacher(@PathVariable String id, HttpServletRequest request) { requirePlatformAdmin(request); - requireSchoolAdminUser(id); + requireTeacherUser(id); + platformAdminService.assertTeacherCanBeDeleted(countClassesCreatedBy(id)); int count = userinfoMapper.deleteByPrimaryKey(id); return writeResult(count, "删除成功", "删除失败"); } @@ -205,17 +206,23 @@ public class PlatformAdminController { return school; } - private Userinfo requireSchoolAdminUser(String userId) { + private Userinfo requireTeacherUser(String userId) { if (StringUtils.isBlank(userId)) { throw new IllegalArgumentException("用户ID不能为空"); } Userinfo userinfo = userinfoMapper.selectByPrimaryKey(userId); - if (userinfo == null || !Integer.valueOf(2).equals(userinfo.getRole())) { - throw new IllegalArgumentException("学校管理员不存在"); + if (userinfo == null || !Integer.valueOf(3).equals(userinfo.getRole())) { + throw new IllegalArgumentException("教师不存在"); } return userinfo; } + private long countClassesCreatedBy(String teacherId) { + SchoolClassExample example = new SchoolClassExample(); + example.createCriteria().andCreatedByEqualTo(teacherId); + return schoolClassMapper.countByExample(example); + } + private ResultEntity writeResult(int count, String success, String fail) { if (count > 0) { return new ResultEntity<>(HttpStatus.OK, success); diff --git a/src/main/java/com/sztzjy/linkCommerce/service/PlatformAdminService.java b/src/main/java/com/sztzjy/linkCommerce/service/PlatformAdminService.java index 35161b1..3233ab3 100644 --- a/src/main/java/com/sztzjy/linkCommerce/service/PlatformAdminService.java +++ b/src/main/java/com/sztzjy/linkCommerce/service/PlatformAdminService.java @@ -8,5 +8,9 @@ public interface PlatformAdminService { void prepareSchoolAdminForSave(Userinfo userinfo, String schoolId); + void prepareTeacherForSave(Userinfo userinfo, String schoolId); + + void assertTeacherCanBeDeleted(long createdClassCount); + String requireSchoolId(String schoolId); } diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/PlatformAdminServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/PlatformAdminServiceImpl.java index 3c74878..95f1a05 100644 --- a/src/main/java/com/sztzjy/linkCommerce/service/impl/PlatformAdminServiceImpl.java +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/PlatformAdminServiceImpl.java @@ -22,6 +22,22 @@ public class PlatformAdminServiceImpl implements PlatformAdminService { userinfo.setRole(2); } + @Override + public void prepareTeacherForSave(Userinfo userinfo, String schoolId) { + userinfo.setSchoolId(requireSchoolId(schoolId)); + userinfo.setRole(3); + if (userinfo.getTeacherAdmin() == null) { + userinfo.setTeacherAdmin(false); + } + } + + @Override + public void assertTeacherCanBeDeleted(long createdClassCount) { + if (createdClassCount > 0) { + throw new IllegalArgumentException("Teacher has created classes and cannot be deleted"); + } + } + @Override public String requireSchoolId(String schoolId) { if (StringUtils.isBlank(schoolId)) { diff --git a/src/test/java/com/sztzjy/linkCommerce/controller/platformadmin/PlatformAdminControllerTest.java b/src/test/java/com/sztzjy/linkCommerce/controller/platformadmin/PlatformAdminControllerTest.java new file mode 100644 index 0000000..b9ca224 --- /dev/null +++ b/src/test/java/com/sztzjy/linkCommerce/controller/platformadmin/PlatformAdminControllerTest.java @@ -0,0 +1,47 @@ +package com.sztzjy.linkCommerce.controller.platformadmin; + +import org.junit.jupiter.api.Test; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +class PlatformAdminControllerTest { + + @Test + void exposesPlatformTeacherManagementEndpoints() { + assertTrue(hasGet("/teachers"), "Platform admin must expose teacher list endpoint"); + assertTrue(hasGet("/teachers/{id}"), "Platform admin must expose teacher detail endpoint"); + assertTrue(hasPost("/teachers"), "Platform admin must expose teacher create endpoint"); + assertTrue(hasPut("/teachers/{id}"), "Platform admin must expose teacher update endpoint"); + assertTrue(hasDelete("/teachers/{id}"), "Platform admin must expose teacher delete endpoint"); + } + + private boolean hasGet(String path) { + return Arrays.stream(PlatformAdminController.class.getDeclaredMethods()) + .anyMatch(method -> method.isAnnotationPresent(GetMapping.class) + && Arrays.asList(method.getAnnotation(GetMapping.class).value()).contains(path)); + } + + private boolean hasPost(String path) { + return Arrays.stream(PlatformAdminController.class.getDeclaredMethods()) + .anyMatch(method -> method.isAnnotationPresent(PostMapping.class) + && Arrays.asList(method.getAnnotation(PostMapping.class).value()).contains(path)); + } + + private boolean hasPut(String path) { + return Arrays.stream(PlatformAdminController.class.getDeclaredMethods()) + .anyMatch(method -> method.isAnnotationPresent(PutMapping.class) + && Arrays.asList(method.getAnnotation(PutMapping.class).value()).contains(path)); + } + + private boolean hasDelete(String path) { + return Arrays.stream(PlatformAdminController.class.getDeclaredMethods()) + .anyMatch(method -> method.isAnnotationPresent(DeleteMapping.class) + && Arrays.asList(method.getAnnotation(DeleteMapping.class).value()).contains(path)); + } +} diff --git a/src/test/java/com/sztzjy/linkCommerce/service/impl/PlatformAdminServiceImplTest.java b/src/test/java/com/sztzjy/linkCommerce/service/impl/PlatformAdminServiceImplTest.java index 0cb7033..1d75e5b 100644 --- a/src/test/java/com/sztzjy/linkCommerce/service/impl/PlatformAdminServiceImplTest.java +++ b/src/test/java/com/sztzjy/linkCommerce/service/impl/PlatformAdminServiceImplTest.java @@ -6,7 +6,9 @@ import com.sztzjy.linkCommerce.entity.Userinfo; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; class PlatformAdminServiceImplTest { @Test @@ -47,4 +49,36 @@ class PlatformAdminServiceImplTest { assertThrows(IllegalArgumentException.class, () -> service.prepareSchoolAdminForSave(userinfo, " ")); } + + @Test + void prepareTeacherForSaveForcesTeacherRoleAndKeepsTeacherAdminFlag() { + PlatformAdminServiceImpl service = new PlatformAdminServiceImpl(); + Userinfo userinfo = new Userinfo(); + userinfo.setRole(1); + userinfo.setSchoolId("other-school"); + userinfo.setTeacherAdmin(true); + + service.prepareTeacherForSave(userinfo, "school-uuid-1"); + + assertEquals(3, userinfo.getRole()); + assertEquals("school-uuid-1", userinfo.getSchoolId()); + assertTrue(userinfo.getTeacherAdmin()); + } + + @Test + void prepareTeacherForSaveDefaultsTeacherAdminFalse() { + PlatformAdminServiceImpl service = new PlatformAdminServiceImpl(); + Userinfo userinfo = new Userinfo(); + + service.prepareTeacherForSave(userinfo, "school-uuid-1"); + + assertFalse(userinfo.getTeacherAdmin()); + } + + @Test + void assertTeacherCanBeDeletedRejectsTeachersWithCreatedClasses() { + PlatformAdminServiceImpl service = new PlatformAdminServiceImpl(); + + assertThrows(IllegalArgumentException.class, () -> service.assertTeacherCanBeDeleted(1)); + } }