Добавление треков неаторизованным пользователям. Убран лишний код
This commit is contained in:
@@ -30,25 +30,6 @@ public class PlaylistsController : ControllerBase
|
|||||||
_yandexService = yandexService;
|
_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]
|
[HttpGet]
|
||||||
public async Task<ActionResult<ApiResponse<List<YandexPlaylistInfo>>>> GetMyPlaylists()
|
public async Task<ActionResult<ApiResponse<List<YandexPlaylistInfo>>>> GetMyPlaylists()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,6 +11,5 @@ public class AppMappingProfile : Profile
|
|||||||
CreateMap<SharedPlaylistEntity, SharedPlaylistDto>()
|
CreateMap<SharedPlaylistEntity, SharedPlaylistDto>()
|
||||||
.ForMember(dest => dest.Creator, opt => opt.MapFrom(src => src.Creator));
|
.ForMember(dest => dest.Creator, opt => opt.MapFrom(src => src.Creator));
|
||||||
CreateMap<ApplicationUser, ApplicationUserDto>();
|
CreateMap<ApplicationUser, ApplicationUserDto>();
|
||||||
CreateMap<TrackAdditionLogEntity, TrackAdditionLogDto>();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -121,12 +121,6 @@ public class SharedPlaylistService
|
|||||||
.TrimEnd('=');
|
.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)
|
public async Task<List<SharedPlaylistEntity>> GetAllByUserAsync(Guid userId)
|
||||||
{
|
{
|
||||||
return await _db.SharedPlaylists
|
return await _db.SharedPlaylists
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"ConnectionStrings": {
|
"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": {
|
"Jwt": {
|
||||||
"Key": "your-32-character-secret-key-for-jwt-minimum-length",
|
"Key": "your-32-character-secret-key-for-jwt-minimum-length",
|
||||||
@@ -8,11 +8,11 @@
|
|||||||
"Audience": "PlaylistShared.Client"
|
"Audience": "PlaylistShared.Client"
|
||||||
},
|
},
|
||||||
"Yandex": {
|
"Yandex": {
|
||||||
"ClientId": "your-yandex-oauth-client-id",
|
"ClientId": "0916685f8a3641ca8fc382dbccf77236",
|
||||||
"ClientSecret": "your-yandex-oauth-client-secret"
|
"ClientSecret": "f7398893cd814f8b84b85aeb2a0a6698"
|
||||||
},
|
},
|
||||||
"Client": {
|
"Client": {
|
||||||
"BaseUrl": "https://localhost:5002"
|
"BaseUrl": "https://playlistshare.frigat.duckdns.org"
|
||||||
},
|
},
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
|
|||||||
@@ -146,10 +146,18 @@
|
|||||||
<MudImage Src="@FormatCoverUrl(context.CoverUri, "50x50")" Height="50" Width="50" Class="rounded" />
|
<MudImage Src="@FormatCoverUrl(context.CoverUri, "50x50")" Height="50" Width="50" Class="rounded" />
|
||||||
}
|
}
|
||||||
</MudTd>
|
</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>@string.Join(", ", context.Artists)</MudTd>
|
||||||
<MudTd>@FormatDuration(context.DurationMs)</MudTd>
|
<MudTd>@FormatDuration(context.DurationMs)</MudTd>
|
||||||
@if (_isAuthenticated && _canRemove)
|
@if (_canRemove)
|
||||||
{
|
{
|
||||||
<MudTd>
|
<MudTd>
|
||||||
<MudIconButton Icon="@Icons.Material.Filled.Delete" Color="Color.Error" OnClick="() => RemoveTrack(context)" />
|
<MudIconButton Icon="@Icons.Material.Filled.Delete" Color="Color.Error" OnClick="() => RemoveTrack(context)" />
|
||||||
@@ -274,11 +282,6 @@
|
|||||||
|
|
||||||
private async Task AddTrack()
|
private async Task AddTrack()
|
||||||
{
|
{
|
||||||
if (!_isAuthenticated)
|
|
||||||
{
|
|
||||||
Snackbar.Add("Для добавления треков необходимо войти", Severity.Warning);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (string.IsNullOrWhiteSpace(_trackLink))
|
if (string.IsNullOrWhiteSpace(_trackLink))
|
||||||
{
|
{
|
||||||
Snackbar.Add("Введите ссылку на трек", Severity.Warning);
|
Snackbar.Add("Введите ссылку на трек", Severity.Warning);
|
||||||
@@ -314,12 +317,6 @@
|
|||||||
|
|
||||||
private async Task RemoveTrack(YandexTrackDisplay track)
|
private async Task RemoveTrack(YandexTrackDisplay track)
|
||||||
{
|
{
|
||||||
if (!_isAuthenticated)
|
|
||||||
{
|
|
||||||
Snackbar.Add("Для удаления треков необходимо войти", Severity.Warning);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var confirmed = await DialogService.ShowMessageBoxAsync(
|
var confirmed = await DialogService.ShowMessageBoxAsync(
|
||||||
"Подтверждение удаления",
|
"Подтверждение удаления",
|
||||||
$"Вы уверены, что хотите удалить трек \"{track.Title}\"?",
|
$"Вы уверены, что хотите удалить трек \"{track.Title}\"?",
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"ApiBaseUrl": "https://api.playlistshare.frigat.duckdns.org"
|
"ApiBaseUrl": "https://playlistshare.frigat.duckdns.org"
|
||||||
}
|
}
|
||||||
@@ -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!;
|
|
||||||
}
|
|
||||||
@@ -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();
|
|
||||||
}
|
|
||||||
@@ -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; }
|
|
||||||
}
|
|
||||||
@@ -16,8 +16,6 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "7001:80"
|
- "7001:80"
|
||||||
environment:
|
environment:
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
|
||||||
- DOTNET_ENVIRONMENT=Development
|
|
||||||
- ASPNETCORE_URLS=http://+:80
|
- ASPNETCORE_URLS=http://+:80
|
||||||
networks:
|
networks:
|
||||||
- playlistshared_network
|
- playlistshared_network
|
||||||
|
|||||||
Reference in New Issue
Block a user