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> getMyFriends() { return Result.success(friendService.listMyFriendCards()); } @GetMapping("/pending") public Result>> getPendingRequests() { return Result.success(friendService.getMyReceivedPendingWithUser()); } @GetMapping("/pending/sent") public Result>> getSentRequests() { return Result.success(friendService.getMySentRequests()); } @PostMapping("/add") public Result addFriend(@Valid @RequestBody AddFriendRequest request) { return Result.success(friendService.addFriend(request)); } /** 打招呼:向推荐/陌生人发送默认问候语私聊消息 */ @PostMapping("/greet") public Result greet(@Valid @RequestBody GreetRequest request) { friendService.greetUser(request); return Result.success(); } @PostMapping public Result sendFriendRequest(@RequestParam String friendId) { AddFriendRequest req = new AddFriendRequest(); req.setFriendId(friendId); return Result.success(friendService.addFriend(req)); } @PutMapping("/accept") public Result acceptRequest(@RequestParam String id) { return Result.success(friendService.acceptFriendRequest(id)); } @PutMapping("/acceptByUserId") public Result acceptRequestByUserId(@RequestParam String userId) { return Result.success(friendService.acceptFriendRequestByUserId(userId)); } @DeleteMapping("/reject") public Result rejectRequest(@RequestParam String id) { friendService.rejectFriendRequest(id); return Result.success(); } /** 删除好友(双向,仅限已是好友) */ @DeleteMapping("/delete") public Result deleteFriend(@RequestParam String friendId) { friendService.deleteFriend(friendId); return Result.success(); } /** 撤回自己发起的好友申请(PENDING 状态) */ @DeleteMapping("/requests") public Result cancelFriendRequest(@RequestParam String friendId) { friendService.cancelFriendRequest(friendId); return Result.success(); } /** 拉黑好友(将 ACCEPTED 关系改为 BLOCKED) */ @PostMapping("/block") public Result blockFriend(@RequestParam String friendId) { friendService.blockFriend(friendId); return Result.success(); } /** 获取当前用户的黑名单。 */ @GetMapping("/blacklist") public Result> getBlacklist() { return Result.success(friendService.listBlacklist()); } /** 移出黑名单;移出后不会自动恢复好友关系。 */ @DeleteMapping("/blacklist") public Result unblockFriend(@RequestParam String friendId) { friendService.unblockFriend(friendId); return Result.success(); } // ===================== 推荐 / 搜索 / 筛选 ===================== /** * 智能推荐(首次 / 换一批) * * @param limit 本批数量(默认 20) * @param batchToken 上一批返回的 token;首次不传或传空 → 开启新批次 */ @GetMapping("/recommend") public Result 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> search(FriendSearchRequest request) { return Result.success(friendService.search(request)); } @GetMapping("/filter") public Result> filter(FriendFilterRequest request) { return Result.success(friendService.filter(request)); } // ===================== 资料 / 共同好友 ===================== @GetMapping("/mutual") public Result> getMutualFriends(@RequestParam String userId) { return Result.success(friendService.getMutualFriends(userId)); } }