From 94aa4001d3deab67d18ac7b60bfaf3577f455cbe Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Fri, 24 Apr 2026 11:14:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(im-service):=20=E6=B7=BB=E5=8A=A0=E7=BE=A4?= =?UTF-8?q?=E7=BB=84=20HTTP=20API=20(GroupController)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - POST /api/im/groups:创建群组(含成员列表) - GET /api/im/groups:按 appId 列出群组 - POST /api/im/groups/{groupId}/members:添加成员 - DELETE /api/im/groups/{groupId}/members/{targetUserId}:移除成员 ImGroupService 已有实现,仅补充 controller 层 Co-Authored-By: Claude Sonnet 4.6 --- .../xuqm/im/controller/GroupController.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 im-service/src/main/java/com/xuqm/im/controller/GroupController.java diff --git a/im-service/src/main/java/com/xuqm/im/controller/GroupController.java b/im-service/src/main/java/com/xuqm/im/controller/GroupController.java new file mode 100644 index 0000000..dd46c80 --- /dev/null +++ b/im-service/src/main/java/com/xuqm/im/controller/GroupController.java @@ -0,0 +1,55 @@ +package com.xuqm.im.controller; + +import com.xuqm.common.model.ApiResponse; +import com.xuqm.im.entity.ImGroupEntity; +import com.xuqm.im.service.ImGroupService; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/im/groups") +public class GroupController { + + private final ImGroupService groupService; + + public GroupController(ImGroupService groupService) { + this.groupService = groupService; + } + + @PostMapping + public ResponseEntity> create( + @RequestBody CreateGroupRequest req, + @AuthenticationPrincipal String userId, + @RequestParam String appId) { + return ResponseEntity.ok(ApiResponse.success( + groupService.create(appId, req.name(), userId, req.memberIds()))); + } + + @GetMapping + public ResponseEntity>> list( + @RequestParam String appId) { + return ResponseEntity.ok(ApiResponse.success(groupService.listByApp(appId))); + } + + @PostMapping("/{groupId}/members") + public ResponseEntity> addMember( + @PathVariable String groupId, + @RequestBody MemberRequest req, + @AuthenticationPrincipal String userId) { + return ResponseEntity.ok(ApiResponse.success(groupService.addMember(groupId, req.userId()))); + } + + @DeleteMapping("/{groupId}/members/{targetUserId}") + public ResponseEntity> removeMember( + @PathVariable String groupId, + @PathVariable String targetUserId, + @AuthenticationPrincipal String userId) { + return ResponseEntity.ok(ApiResponse.success(groupService.removeMember(groupId, targetUserId, userId))); + } + + public record CreateGroupRequest(String name, List memberIds) {} + public record MemberRequest(String userId) {} +}