Files
PlaylistShared/PlaylistShared.Api/Controllers/FavoritesController.cs

82 lines
3.4 KiB
C#

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using PlaylistShared.Api.Entities;
using PlaylistShared.Api.Extensions;
using PlaylistShared.Api.Services;
using PlaylistShared.Shared;
using PlaylistShared.Shared.Shared;
namespace PlaylistShared.Api.Controllers;
[ApiController]
[Route("api/[controller]")]
[Authorize]
public class FavoritesController : ControllerBase
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly FavoritesService _favoritesService;
private readonly SharedPlaylistService _sharedPlaylistService;
public FavoritesController(
UserManager<ApplicationUser> userManager,
FavoritesService favoritesService,
SharedPlaylistService sharedPlaylistService)
{
_userManager = userManager;
_favoritesService = favoritesService;
_sharedPlaylistService = sharedPlaylistService;
}
/// <summary>Получить список избранных плейлистов текущего пользователя.</summary>
[HttpGet]
public async Task<ActionResult<ApiResponse<List<SharedPlaylistDto>>>> GetFavorites()
{
var userId = User.GetUserId();
var user = await _userManager.FindByIdAsync(userId.ToString());
if (user == null) return Unauthorized();
var favorites = await _favoritesService.GetUserFavoritesAsync(userId);
return Ok(ApiResponse<List<SharedPlaylistDto>>.Ok(favorites));
}
/// <summary>Проверить, добавлен ли плейлист в избранное.</summary>
[HttpGet("{shareToken}/check")]
public async Task<ActionResult<ApiResponse<bool>>> CheckFavorite(string shareToken)
{
var userId = User.GetUserId();
var user = await _userManager.FindByIdAsync(userId.ToString());
if (user == null) return Unauthorized();
var isFavorite = await _favoritesService.IsFavoriteAsync(userId, shareToken);
return Ok(ApiResponse<bool>.Ok(isFavorite));
}
/// <summary>Добавить плейлист в избранное.</summary>
[HttpPost("{shareToken}")]
public async Task<ActionResult<ApiResponse<object>>> AddFavorite(string shareToken)
{
var userId = User.GetUserId();
var user = await _userManager.FindByIdAsync(userId.ToString());
if (user == null) return Unauthorized();
var playlist = await _sharedPlaylistService.GetEntityByTokenAsync(shareToken);
if (playlist == null)
return NotFound(ApiResponse<object>.Fail(new ErrorResponse { StatusCode = 404, Message = "Плейлист не найден" }));
await _favoritesService.AddFavoriteAsync(userId, shareToken);
return Ok(ApiResponse<object>.Ok(new { message = "Плейлист добавлен в избранное" }));
}
/// <summary>Удалить плейлист из избранного.</summary>
[HttpDelete("{shareToken}")]
public async Task<ActionResult<ApiResponse<object>>> RemoveFavorite(string shareToken)
{
var userId = User.GetUserId();
var user = await _userManager.FindByIdAsync(userId.ToString());
if (user == null) return Unauthorized();
await _favoritesService.RemoveFavoriteAsync(userId, shareToken);
return Ok(ApiResponse<object>.Ok(new { message = "Плейлист удалён из избранного" }));
}
}