118 lines
4.2 KiB
C#
118 lines
4.2 KiB
C#
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<FriendController> _logger;
|
||
public FriendController(IFriendSerivce friendService, ILogger<FriendController> logger)
|
||
{
|
||
_friendService = friendService;
|
||
_logger = logger;
|
||
}
|
||
/// <summary>
|
||
/// 发起好友请求
|
||
/// </summary>
|
||
/// <param name="dto"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<IActionResult> 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<object?>();
|
||
return Ok(res);
|
||
}
|
||
/// <summary>
|
||
/// 获取好友请求列表
|
||
/// </summary>
|
||
/// <param name="isReceived"></param>
|
||
/// <param name="page"></param>
|
||
/// <param name="limit"></param>
|
||
/// <param name="desc"></param>
|
||
/// <returns></returns>
|
||
[HttpGet]
|
||
public async Task<IActionResult> 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<FriendRequestResDto>>(list);
|
||
return Ok(res);
|
||
}
|
||
/// <summary>
|
||
/// 处理好友请求
|
||
/// </summary>
|
||
/// <param name="id"></param>
|
||
/// <param name="dto"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<IActionResult> HandleRequest(
|
||
[FromQuery]int id, [FromBody]FriendRequestHandleDto dto
|
||
)
|
||
{
|
||
await _friendService.HandleFriendRequestAsync(new HandleFriendRequestDto()
|
||
{
|
||
RequestId = id,
|
||
RemarkName = dto.RemarkName,
|
||
Action = dto.Action
|
||
});
|
||
var res = new BaseResponse<object?>();
|
||
return Ok(res);
|
||
}
|
||
/// <summary>
|
||
/// 获取好友列表
|
||
/// </summary>
|
||
/// <param name="page"></param>
|
||
/// <param name="limit"></param>
|
||
/// <param name="desc"></param>
|
||
/// <returns></returns>
|
||
[HttpGet]
|
||
public async Task<IActionResult> 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<FriendInfoDto>>(list);
|
||
return Ok(res);
|
||
}
|
||
/// <summary>
|
||
/// 删除好友
|
||
/// </summary>
|
||
/// <param name="friendId"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<IActionResult> Delete([FromRoute] int friendId)
|
||
{
|
||
//TODO: 这里存在安全问题,当用户传入的id与用户无关时也可以删除成功,待修复。
|
||
await _friendService.DeleteFriendAsync(friendId);
|
||
return Ok(new BaseResponse<object?>());
|
||
}
|
||
/// <summary>
|
||
/// 拉黑好友
|
||
/// </summary>
|
||
/// <param name="friendId"></param>
|
||
/// <returns></returns>
|
||
[HttpPost]
|
||
public async Task<IActionResult> Block([FromRoute] int friendId)
|
||
{
|
||
//TODO: 这里存在安全问题,当用户传入的id与用户无关时也可以拉黑成功,待修复。
|
||
await _friendService.BlockeFriendAsync(friendId);
|
||
return Ok(new BaseResponse<object?>());
|
||
}
|
||
}
|
||
}
|