XuqmGroup-Server/im-service/src/main/java/com/xuqm/im/controller/MessageController.java
XuqmGroup 624554a173 fix: group history endpoint, user-only group list, reset-password, change-password path
- im-service: add GET /messages/group-history/{groupId} for group message history
- im-service: add findGroupHistory query to ImMessageRepository
- im-service: listGroups now filters by user membership (JSON_CONTAINS on member_ids)
- im-service: add groupHistory/listUserGroups/addGroupMember/removeGroupMember methods
- demo-service: add POST /auth/reset-password (unauthenticated forgot-password flow)
- demo-service: rename /user/reset-password → /user/change-password to match client

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 11:57:46 +08:00

65 行
2.6 KiB
Java

package com.xuqm.im.controller;
import com.xuqm.common.model.ApiResponse;
import com.xuqm.im.entity.ImMessageEntity;
import com.xuqm.im.model.SendMessageRequest;
import com.xuqm.im.service.MessageService;
import io.jsonwebtoken.Claims;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/im/messages")
public class MessageController {
private final MessageService messageService;
public MessageController(MessageService messageService) {
this.messageService = messageService;
}
@PostMapping("/send")
public ResponseEntity<ApiResponse<ImMessageEntity>> send(
@Valid @RequestBody SendMessageRequest req,
@AuthenticationPrincipal String userId,
@RequestParam String appId) {
return ResponseEntity.ok(ApiResponse.success(messageService.send(appId, userId, req)));
}
@PostMapping("/{id}/revoke")
public ResponseEntity<ApiResponse<ImMessageEntity>> revoke(
@PathVariable String id,
@AuthenticationPrincipal String userId,
@RequestParam String appId) {
return ResponseEntity.ok(ApiResponse.success(messageService.revoke(appId, id, userId)));
}
@GetMapping("/history/{toId}")
public ResponseEntity<ApiResponse<?>> history(
@PathVariable String toId,
@AuthenticationPrincipal String userId,
@RequestParam String appId,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size) {
return ResponseEntity.ok(ApiResponse.success(messageService.history(appId, userId, toId, page, size)));
}
@GetMapping("/group-history/{groupId}")
public ResponseEntity<ApiResponse<?>> groupHistory(
@PathVariable String groupId,
@AuthenticationPrincipal String userId,
@RequestParam String appId,
@RequestParam(defaultValue = "0") int page,
@RequestParam(defaultValue = "20") int size) {
return ResponseEntity.ok(ApiResponse.success(messageService.groupHistory(appId, groupId, page, size)));
}
}