You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
5.1 KiB
149 lines
5.1 KiB
package com.campus.controller;
|
|
|
|
import com.campus.common.PageResult;
|
|
import com.campus.common.Result;
|
|
import com.campus.dto.request.AddFriendRequest;
|
|
import com.campus.dto.request.FriendFilterRequest;
|
|
import com.campus.dto.request.FriendSearchRequest;
|
|
import com.campus.dto.request.GreetRequest;
|
|
import com.campus.dto.response.FriendDTO;
|
|
import com.campus.dto.response.UserProfileDTO;
|
|
import com.campus.entity.Friendship;
|
|
import com.campus.service.FriendService;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import javax.validation.Valid;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
/**
|
|
* 交友模块统一入口(保留旧 /api/friendships 路径)
|
|
*/
|
|
@RestController
|
|
@RequestMapping("/api/friendships")
|
|
@RequiredArgsConstructor
|
|
public class FriendshipController {
|
|
|
|
private final FriendService friendService;
|
|
|
|
// ===================== 关系管理 =====================
|
|
|
|
@GetMapping("/my")
|
|
public Result<List<FriendDTO>> getMyFriends() {
|
|
return Result.success(friendService.listMyFriendCards());
|
|
}
|
|
|
|
@GetMapping("/pending")
|
|
public Result<List<Map<String, Object>>> getPendingRequests() {
|
|
return Result.success(friendService.getMyReceivedPendingWithUser());
|
|
}
|
|
|
|
@GetMapping("/pending/sent")
|
|
public Result<List<Map<String, Object>>> getSentRequests() {
|
|
return Result.success(friendService.getMySentRequests());
|
|
}
|
|
|
|
@PostMapping("/add")
|
|
public Result<Friendship> addFriend(@Valid @RequestBody AddFriendRequest request) {
|
|
return Result.success(friendService.addFriend(request));
|
|
}
|
|
|
|
/** 打招呼:向推荐/陌生人发送默认问候语私聊消息 */
|
|
@PostMapping("/greet")
|
|
public Result<Void> greet(@Valid @RequestBody GreetRequest request) {
|
|
friendService.greetUser(request);
|
|
return Result.success();
|
|
}
|
|
|
|
@PostMapping
|
|
public Result<Friendship> sendFriendRequest(@RequestParam String friendId) {
|
|
AddFriendRequest req = new AddFriendRequest();
|
|
req.setFriendId(friendId);
|
|
return Result.success(friendService.addFriend(req));
|
|
}
|
|
|
|
@PutMapping("/accept")
|
|
public Result<Friendship> acceptRequest(@RequestParam String id) {
|
|
return Result.success(friendService.acceptFriendRequest(id));
|
|
}
|
|
|
|
@PutMapping("/acceptByUserId")
|
|
public Result<Friendship> acceptRequestByUserId(@RequestParam String userId) {
|
|
return Result.success(friendService.acceptFriendRequestByUserId(userId));
|
|
}
|
|
|
|
@DeleteMapping("/reject")
|
|
public Result<Void> rejectRequest(@RequestParam String id) {
|
|
friendService.rejectFriendRequest(id);
|
|
return Result.success();
|
|
}
|
|
|
|
/** 删除好友(双向,仅限已是好友) */
|
|
@DeleteMapping("/delete")
|
|
public Result<Void> deleteFriend(@RequestParam String friendId) {
|
|
friendService.deleteFriend(friendId);
|
|
return Result.success();
|
|
}
|
|
|
|
/** 撤回自己发起的好友申请(PENDING 状态) */
|
|
@DeleteMapping("/requests")
|
|
public Result<Void> cancelFriendRequest(@RequestParam String friendId) {
|
|
friendService.cancelFriendRequest(friendId);
|
|
return Result.success();
|
|
}
|
|
|
|
/** 拉黑好友(将 ACCEPTED 关系改为 BLOCKED) */
|
|
@PostMapping("/block")
|
|
public Result<Void> blockFriend(@RequestParam String friendId) {
|
|
friendService.blockFriend(friendId);
|
|
return Result.success();
|
|
}
|
|
|
|
/** 获取当前用户的黑名单。 */
|
|
@GetMapping("/blacklist")
|
|
public Result<List<FriendDTO>> getBlacklist() {
|
|
return Result.success(friendService.listBlacklist());
|
|
}
|
|
|
|
/** 移出黑名单;移出后不会自动恢复好友关系。 */
|
|
@DeleteMapping("/blacklist")
|
|
public Result<Void> unblockFriend(@RequestParam String friendId) {
|
|
friendService.unblockFriend(friendId);
|
|
return Result.success();
|
|
}
|
|
|
|
// ===================== 推荐 / 搜索 / 筛选 =====================
|
|
|
|
/**
|
|
* 智能推荐(首次 / 换一批)
|
|
*
|
|
* @param limit 本批数量(默认 20)
|
|
* @param batchToken 上一批返回的 token;首次不传或传空 → 开启新批次
|
|
*/
|
|
@GetMapping("/recommend")
|
|
public Result<com.campus.dto.response.RecommendBatchDTO> recommend(
|
|
@RequestParam(required = false, defaultValue = "20") Integer limit,
|
|
@RequestParam(required = false) String batchToken) {
|
|
return Result.success(friendService.recommendBatch(
|
|
limit == null || limit < 1 ? 20 : limit,
|
|
batchToken));
|
|
}
|
|
|
|
@GetMapping("/search")
|
|
public Result<PageResult<FriendDTO>> search(FriendSearchRequest request) {
|
|
return Result.success(friendService.search(request));
|
|
}
|
|
|
|
@GetMapping("/filter")
|
|
public Result<PageResult<FriendDTO>> filter(FriendFilterRequest request) {
|
|
return Result.success(friendService.filter(request));
|
|
}
|
|
|
|
// ===================== 资料 / 共同好友 =====================
|
|
|
|
@GetMapping("/mutual")
|
|
public Result<List<FriendDTO>> getMutualFriends(@RequestParam String userId) {
|
|
return Result.success(friendService.getMutualFriends(userId));
|
|
}
|
|
}
|
|
|