Добавление треков неаторизованным пользователям. Убран лишний код

This commit is contained in:
FrigaT
2026-04-13 18:01:12 +03:00
parent e440529ea1
commit 5717b1ec0c
10 changed files with 15 additions and 100 deletions

View File

@@ -30,25 +30,6 @@ public class PlaylistsController : ControllerBase
_yandexService = yandexService;
}
[HttpGet("info/{ownerUid}/{kind}")]
public async Task<ActionResult<ApiResponse<object>>> GetPlaylistInfo(string ownerUid, string kind)
{
var currentUserId = User.GetUserId();
// Найти шеринг-плейлист по данным Яндекс
var shared = await _sharedService.GetEntityByTokenAsync(null); // не можем по токену, надо по параметрам
// Для простоты сделаем отдельный метод поиска по kind/ownerUid
var playlistEntity = await _sharedService.GetByYandexIdsAsync(ownerUid, kind);
if (playlistEntity == null)
return NotFound(ApiResponse<object>.Fail(new ErrorResponse { StatusCode = 404, Message = "Плейлист не найден" }));
if (!await _sharedService.CanViewAsync(playlistEntity, currentUserId))
return Unauthorized();
var creator = await _userManager.FindByIdAsync(playlistEntity.CreatorUserId.ToString());
var yandexPlaylist = await _yandexService.GetPlaylistAsync(creator, ownerUid, kind);
return Ok(ApiResponse<object>.Ok(yandexPlaylist));
}
[HttpGet]
public async Task<ActionResult<ApiResponse<List<YandexPlaylistInfo>>>> GetMyPlaylists()
{

View File

@@ -11,6 +11,5 @@ public class AppMappingProfile : Profile
CreateMap<SharedPlaylistEntity, SharedPlaylistDto>()
.ForMember(dest => dest.Creator, opt => opt.MapFrom(src => src.Creator));
CreateMap<ApplicationUser, ApplicationUserDto>();
CreateMap<TrackAdditionLogEntity, TrackAdditionLogDto>();
}
}

View File

@@ -121,12 +121,6 @@ public class SharedPlaylistService
.TrimEnd('=');
}
public async Task<SharedPlaylistEntity?> GetByYandexIdsAsync(string ownerUid, string kind)
{
return await _db.SharedPlaylists
.FirstOrDefaultAsync(sp => sp.YandexPlaylistOwnerUid == ownerUid && sp.YandexPlaylistKind == kind && !sp.IsDeleted);
}
public async Task<List<SharedPlaylistEntity>> GetAllByUserAsync(Guid userId)
{
return await _db.SharedPlaylists

View File

@@ -1,6 +1,6 @@
{
"ConnectionStrings": {
"DefaultConnection": "Server=FRIGAT-PC;Database=PlaylistShared;Trusted_Connection=True;TrustServerCertificate=True;MultipleActiveResultSets=true"
"DefaultConnection": "Server=host.docker.internal;Database=PlaylistShared;User Id=playlist_user;Password=playlist_user123!;TrustServerCertificate=True;MultipleActiveResultSets=true"
},
"Jwt": {
"Key": "your-32-character-secret-key-for-jwt-minimum-length",
@@ -8,11 +8,11 @@
"Audience": "PlaylistShared.Client"
},
"Yandex": {
"ClientId": "your-yandex-oauth-client-id",
"ClientSecret": "your-yandex-oauth-client-secret"
"ClientId": "0916685f8a3641ca8fc382dbccf77236",
"ClientSecret": "f7398893cd814f8b84b85aeb2a0a6698"
},
"Client": {
"BaseUrl": "https://localhost:5002"
"BaseUrl": "https://playlistshare.frigat.duckdns.org"
},
"Logging": {
"LogLevel": {

View File

@@ -146,10 +146,18 @@
<MudImage Src="@FormatCoverUrl(context.CoverUri, "50x50")" Height="50" Width="50" Class="rounded" />
}
</MudTd>
<MudTd>@context.Title</MudTd>
<MudTd>
<MudLink Href="@($"https://music.yandex.ru/track/{context.Id}")"
Target="_blank"
Underline="Underline.Hover"
Style="cursor: pointer; display: inline-flex; align-items: center;">
@context.Title
<MudIcon Icon="@Icons.Material.Filled.OpenInNew" Size="Size.Small" Class="ml-1" />
</MudLink>
</MudTd>
<MudTd>@string.Join(", ", context.Artists)</MudTd>
<MudTd>@FormatDuration(context.DurationMs)</MudTd>
@if (_isAuthenticated && _canRemove)
@if (_canRemove)
{
<MudTd>
<MudIconButton Icon="@Icons.Material.Filled.Delete" Color="Color.Error" OnClick="() => RemoveTrack(context)" />
@@ -274,11 +282,6 @@
private async Task AddTrack()
{
if (!_isAuthenticated)
{
Snackbar.Add("Для добавления треков необходимо войти", Severity.Warning);
return;
}
if (string.IsNullOrWhiteSpace(_trackLink))
{
Snackbar.Add("Введите ссылку на трек", Severity.Warning);
@@ -314,12 +317,6 @@
private async Task RemoveTrack(YandexTrackDisplay track)
{
if (!_isAuthenticated)
{
Snackbar.Add("Для удаления треков необходимо войти", Severity.Warning);
return;
}
var confirmed = await DialogService.ShowMessageBoxAsync(
"Подтверждение удаления",
$"Вы уверены, что хотите удалить трек \"{track.Title}\"?",

View File

@@ -1,3 +1,3 @@
{
"ApiBaseUrl": "https://api.playlistshare.frigat.duckdns.org"
"ApiBaseUrl": "https://playlistshare.frigat.duckdns.org"
}

View File

@@ -1,12 +0,0 @@
using System.Text.Json.Serialization;
namespace PlaylistShared.Shared.DTO;
public class ExternalLoginCallbackRequest
{
[JsonPropertyName("code")]
public string Code { get; set; } = null!;
[JsonPropertyName("state")]
public string State { get; set; } = null!;
}

View File

@@ -1,15 +0,0 @@
using System.Text.Json.Serialization;
namespace PlaylistShared.Shared.DTO;
/// <summary>Запрос на добавление или удаление треков.</summary>
public class TrackOperationDto
{
/// <summary>Токен шеринг-плейлиста (для проверки прав).</summary>
[JsonPropertyName("sharedPlaylistToken")]
public string SharedPlaylistToken { get; set; } = null!;
/// <summary>Список идентификаторов треков в Яндекс.Музыке.</summary>
[JsonPropertyName("trackIds")]
public List<string> TrackIds { get; set; } = new();
}

View File

@@ -1,27 +0,0 @@
using System.Text.Json.Serialization;
namespace PlaylistShared.Shared.Models;
/// <summary>DTO лога добавления трека (без навигации).</summary>
public class TrackAdditionLogDto
{
/// <summary>Уникальный идентификатор записи.</summary>
[JsonPropertyName("id")]
public Guid Id { get; set; }
/// <summary>Идентификатор шеринг-плейлиста.</summary>
[JsonPropertyName("sharedPlaylistId")]
public Guid SharedPlaylistId { get; set; }
/// <summary>Идентификатор трека в Яндекс.Музыке.</summary>
[JsonPropertyName("trackId")]
public string TrackId { get; set; } = null!;
/// <summary>Идентификатор пользователя, добавившего трек.</summary>
[JsonPropertyName("addedByUserId")]
public Guid AddedByUserId { get; set; }
/// <summary>Дата и время добавления (UTC).</summary>
[JsonPropertyName("addedAtUtc")]
public DateTime AddedAtUtc { get; set; }
}

View File

@@ -16,8 +16,6 @@ services:
ports:
- "7001:80"
environment:
- ASPNETCORE_ENVIRONMENT=Development
- DOTNET_ENVIRONMENT=Development
- ASPNETCORE_URLS=http://+:80
networks:
- playlistshared_network