77 行
3.2 KiB
Java
77 行
3.2 KiB
Java
|
|
package com.xuqm.im.controller;
|
||
|
|
|
||
|
|
import com.xuqm.common.model.ApiResponse;
|
||
|
|
import com.xuqm.im.entity.ImAccountEntity;
|
||
|
|
import com.xuqm.im.entity.ImGroupEntity;
|
||
|
|
import com.xuqm.im.repository.ImAccountRepository;
|
||
|
|
import com.xuqm.im.repository.ImGroupRepository;
|
||
|
|
import com.xuqm.im.repository.ImMessageRepository;
|
||
|
|
import org.springframework.data.domain.Page;
|
||
|
|
import org.springframework.data.domain.PageRequest;
|
||
|
|
import org.springframework.http.ResponseEntity;
|
||
|
|
import org.springframework.web.bind.annotation.*;
|
||
|
|
|
||
|
|
import java.util.List;
|
||
|
|
import java.util.Map;
|
||
|
|
|
||
|
|
@RestController
|
||
|
|
@RequestMapping("/api/im/admin")
|
||
|
|
public class ImAdminController {
|
||
|
|
|
||
|
|
private final ImAccountRepository accountRepository;
|
||
|
|
private final ImGroupRepository groupRepository;
|
||
|
|
private final ImMessageRepository messageRepository;
|
||
|
|
|
||
|
|
public ImAdminController(ImAccountRepository accountRepository,
|
||
|
|
ImGroupRepository groupRepository,
|
||
|
|
ImMessageRepository messageRepository) {
|
||
|
|
this.accountRepository = accountRepository;
|
||
|
|
this.groupRepository = groupRepository;
|
||
|
|
this.messageRepository = messageRepository;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** List all registered IM users for the given appId. */
|
||
|
|
@GetMapping("/users")
|
||
|
|
public ResponseEntity<ApiResponse<Page<ImAccountEntity>>> listUsers(
|
||
|
|
@RequestParam String appId,
|
||
|
|
@RequestParam(defaultValue = "0") int page,
|
||
|
|
@RequestParam(defaultValue = "20") int size) {
|
||
|
|
return ResponseEntity.ok(ApiResponse.success(
|
||
|
|
accountRepository.findByAppId(appId, PageRequest.of(page, size))));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Ban or unban a user. */
|
||
|
|
@PutMapping("/users/{userId}/status")
|
||
|
|
public ResponseEntity<ApiResponse<ImAccountEntity>> updateUserStatus(
|
||
|
|
@RequestParam String appId,
|
||
|
|
@PathVariable String userId,
|
||
|
|
@RequestBody Map<String, String> body) {
|
||
|
|
ImAccountEntity account = accountRepository.findByAppIdAndUserId(appId, userId)
|
||
|
|
.orElseThrow(() -> new RuntimeException("User not found"));
|
||
|
|
account.setStatus(ImAccountEntity.Status.valueOf(body.get("status").toUpperCase()));
|
||
|
|
return ResponseEntity.ok(ApiResponse.success(accountRepository.save(account)));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** List all groups for the given appId. */
|
||
|
|
@GetMapping("/groups")
|
||
|
|
public ResponseEntity<ApiResponse<List<ImGroupEntity>>> listGroups(@RequestParam String appId) {
|
||
|
|
return ResponseEntity.ok(ApiResponse.success(groupRepository.findByAppId(appId)));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Message statistics for the given appId. */
|
||
|
|
@GetMapping("/stats")
|
||
|
|
public ResponseEntity<ApiResponse<Map<String, Object>>> stats(@RequestParam String appId) {
|
||
|
|
long totalMessages = messageRepository.countByAppId(appId);
|
||
|
|
long totalUsers = accountRepository.countByAppId(appId);
|
||
|
|
long totalGroups = groupRepository.countByAppId(appId);
|
||
|
|
long todayMessages = messageRepository.countTodayByAppId(appId);
|
||
|
|
|
||
|
|
return ResponseEntity.ok(ApiResponse.success(Map.of(
|
||
|
|
"totalMessages", totalMessages,
|
||
|
|
"totalUsers", totalUsers,
|
||
|
|
"totalGroups", totalGroups,
|
||
|
|
"todayMessages", todayMessages
|
||
|
|
)));
|
||
|
|
}
|
||
|
|
}
|