IM/backend/IM_API/Controllers/FriendController.cs
2026-02-12 21:53:26 +08:00

118 lines
4.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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