青核后端
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

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));
}
}