using IM_API.Dtos; using IM_API.Dtos.Friend; using IM_API.Interface.Services; using IM_API.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Security.Claims; namespace IM_API.Controllers { [Authorize] [Route("api/[controller]/[action]")] [ApiController] public class FriendController : ControllerBase { private readonly IFriendSerivce _friendService; private readonly ILogger _logger; public FriendController(IFriendSerivce friendService, ILogger logger) { _friendService = friendService; _logger = logger; } /// /// 发起好友请求 /// /// /// [HttpPost] public async Task Request(FriendRequestDto dto) { var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); int userId = int.Parse(userIdStr); dto.FromUserId = userId; await _friendService.SendFriendRequestAsync(dto); var res = new BaseResponse(); return Ok(res); } /// /// 获取好友请求列表 /// /// /// /// /// /// [HttpGet] public async Task Requests(int page,int limit,bool desc) { var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); int userId = int.Parse(userIdStr); var list = await _friendService.GetFriendRequestListAsync(userId,page,limit,desc); var res = new BaseResponse>(list); return Ok(res); } /// /// 处理好友请求 /// /// /// /// [HttpPost] public async Task HandleRequest( [FromQuery]int id, [FromBody]FriendRequestHandleDto dto ) { await _friendService.HandleFriendRequestAsync(new HandleFriendRequestDto() { RequestId = id, RemarkName = dto.RemarkName, Action = dto.Action }); var res = new BaseResponse(); return Ok(res); } /// /// 获取好友列表 /// /// /// /// /// [HttpGet] public async Task List(int page,int limit,bool desc) { var userIdStr = User.FindFirstValue(ClaimTypes.NameIdentifier); int userId = int.Parse(userIdStr); var list = await _friendService.GetFriendListAsync(userId,page,limit,desc); var res = new BaseResponse>(list); return Ok(res); } /// /// 删除好友 /// /// /// [HttpPost] public async Task Delete([FromRoute] int friendId) { //TODO: 这里存在安全问题,当用户传入的id与用户无关时也可以删除成功,待修复。 await _friendService.DeleteFriendAsync(friendId); return Ok(new BaseResponse()); } /// /// 拉黑好友 /// /// /// [HttpPost] public async Task Block([FromRoute] int friendId) { //TODO: 这里存在安全问题,当用户传入的id与用户无关时也可以拉黑成功,待修复。 await _friendService.BlockeFriendAsync(friendId); return Ok(new BaseResponse()); } } }