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.DTO; namespace PlaylistShared.Api.Controllers; [ApiController] [Route("api/[controller]")] [Authorize] public class YandexTokenController : ControllerBase { private readonly UserManager _userManager; private readonly YandexMusicService _yandexService; public YandexTokenController(UserManager userManager, YandexMusicService yandexService) { _userManager = userManager; _yandexService = yandexService; } [HttpPost("set")] public async Task>> SetToken([FromBody] SetYandexTokenRequest request) { var userId = User.GetUserId(); var user = await _userManager.FindByIdAsync(userId.ToString()); if (user == null) return Unauthorized(); user.YandexAccessToken = _yandexService.EncryptToken(request.Token); // Не храним refresh-токен, так как пользователь вводит только access-токен user.YandexTokenExpiryUtc = DateTime.UtcNow.AddMonths(1); // условно, т.к. срок жизни токена неизвестен await _userManager.UpdateAsync(user); return Ok(ApiResponse.Ok(new { message = "Токен сохранён" })); } [HttpGet("status")] public async Task>> GetStatus() { var userId = User.GetUserId(); var user = await _userManager.FindByIdAsync(userId.ToString()); if (user == null) return Unauthorized(); var hasToken = !string.IsNullOrEmpty(user.YandexAccessToken); var isValid = hasToken && user.YandexTokenExpiryUtc > DateTime.UtcNow; return Ok(ApiResponse.Ok(new YandexTokenStatus { HasToken = hasToken, IsValid = isValid, ExpiryUtc = user.YandexTokenExpiryUtc })); } }