From fce2c6bc4af498bb694c9ea3a3c735929c95c932 Mon Sep 17 00:00:00 2001 From: wangziqi Date: Fri, 31 Jul 2026 16:26:39 +0800 Subject: [PATCH] fix(education): complete classroom member contract --- .../classroom/EducationClassController.java | 5 ++--- .../vo/EducationClassMemberRespVO.java | 22 +++++++++++++++++++ .../EducationClassControllerContractTest.java | 11 +++++++++- 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/controller/admin/classroom/vo/EducationClassMemberRespVO.java diff --git a/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/controller/admin/classroom/EducationClassController.java b/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/controller/admin/classroom/EducationClassController.java index 1a277251..1fca383a 100644 --- a/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/controller/admin/classroom/EducationClassController.java +++ b/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/controller/admin/classroom/EducationClassController.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.education.controller.admin.classroom; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.module.education.controller.admin.classroom.vo.*; -import cn.iocoder.yudao.module.education.dal.dataobject.classroom.EducationClassMemberDO; import cn.iocoder.yudao.module.education.service.classroom.EducationClassService; import jakarta.validation.Valid; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -37,8 +36,8 @@ public class EducationClassController { @GetMapping("/{classId}/members") @PreAuthorize("@ss.hasPermission('education:class-member:query')") - public CommonResult> members(@PathVariable Long classId) { - return success(service.listMembers(classId)); + public CommonResult> members(@PathVariable Long classId) { + return success(service.listMembers(classId).stream().map(EducationClassMemberRespVO::from).toList()); } @PostMapping("/{classId}/invitations") diff --git a/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/controller/admin/classroom/vo/EducationClassMemberRespVO.java b/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/controller/admin/classroom/vo/EducationClassMemberRespVO.java new file mode 100644 index 00000000..0b881125 --- /dev/null +++ b/yudao-module-education/src/main/java/cn/iocoder/yudao/module/education/controller/admin/classroom/vo/EducationClassMemberRespVO.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.education.controller.admin.classroom.vo; + +import cn.iocoder.yudao.module.education.dal.dataobject.classroom.EducationClassMemberDO; +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class EducationClassMemberRespVO { + private Long id; + private Long classId; + private Long memberUserId; + private String role; + private LocalDateTime joinedAt; + + public static EducationClassMemberRespVO from(EducationClassMemberDO source) { + EducationClassMemberRespVO target = new EducationClassMemberRespVO(); + target.id = source.getId(); target.classId = source.getClassId(); target.memberUserId = source.getMemberUserId(); + target.role = source.getRole(); target.joinedAt = source.getJoinedAt(); + return target; + } +} diff --git a/yudao-module-education/src/test/java/cn/iocoder/yudao/module/education/controller/admin/classroom/EducationClassControllerContractTest.java b/yudao-module-education/src/test/java/cn/iocoder/yudao/module/education/controller/admin/classroom/EducationClassControllerContractTest.java index 581dc45a..4dc5c576 100644 --- a/yudao-module-education/src/test/java/cn/iocoder/yudao/module/education/controller/admin/classroom/EducationClassControllerContractTest.java +++ b/yudao-module-education/src/test/java/cn/iocoder/yudao/module/education/controller/admin/classroom/EducationClassControllerContractTest.java @@ -46,6 +46,11 @@ class EducationClassControllerContractTest { assertEquals(1, controller.list().getData().size()); assertThrows(AccessDeniedException.class, () -> controller.invite(100L, invitationRequest())); + security.permissions.clear(); security.permissions.add("education:class-member:query"); + var member = controller.members(100L).getData().getFirst(); + assertEquals(8L, member.getMemberUserId()); + assertEquals("STUDENT", member.getRole()); + security.permissions.clear(); security.permissions.add("education:class-invitation:create"); assertEquals(200L, controller.invite(100L, invitationRequest()).getData().getId()); assertEquals(7L, service.actorId); @@ -76,7 +81,11 @@ class EducationClassControllerContractTest { Long actorId; public Long createClass(String n, String d) { return 100L; } public List listClasses() { EducationClassDO c = new EducationClassDO(); c.setId(100L); return List.of(c); } - public List listMembers(Long id) { return List.of(); } + public List listMembers(Long id) { + EducationClassMemberDO member = new EducationClassMemberDO(); member.setId(300L); member.setTenantId(10L); + member.setClassId(id); member.setMemberUserId(8L); member.setRole("STUDENT"); + member.setCreator("7"); member.setDeleted(false); return List.of(member); + } public EducationClassInvitationDO createInvitation(Long c, Long u, String r, LocalDateTime e, String k, Long a) { actorId = a; EducationClassInvitationDO i = new EducationClassInvitationDO(); i.setId(200L); return i; }