Добавлен playlist shared
This commit is contained in:
80
PlaylistShared/Components/Pages/CreatePlaylist.razor
Normal file
80
PlaylistShared/Components/Pages/CreatePlaylist.razor
Normal file
@@ -0,0 +1,80 @@
|
||||
@page "/createplaylist"
|
||||
@attribute [Authorize]
|
||||
@using System.Security.Claims
|
||||
@using Microsoft.AspNetCore.Components.Authorization
|
||||
@inject AuthenticationStateProvider AuthenticationStateProvider
|
||||
@inject AppDbContext Db
|
||||
@inject IYandexMusicService YandexService
|
||||
@inject NavigationManager Navigation
|
||||
|
||||
<h3>Создание общего плейлиста</h3>
|
||||
|
||||
<EditForm Model="@model" OnValidSubmit="@HandleSubmit">
|
||||
<div class="mb-3">
|
||||
<label for="title">Название плейлиста</label>
|
||||
<InputText id="title" class="form-control" @bind-Value="model.Title" />
|
||||
<ValidationMessage For="@(() => model.Title)" />
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="description">Описание (необязательно)</label>
|
||||
<InputText id="description" class="form-control" @bind-Value="model.Description" />
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary" disabled="@isLoading">@(isLoading ? "Создание..." : "Создать")</button>
|
||||
</EditForm>
|
||||
|
||||
@code {
|
||||
private CreateModel model = new();
|
||||
private bool isLoading;
|
||||
private string? userId;
|
||||
|
||||
public class CreateModel
|
||||
{
|
||||
[Required]
|
||||
public string Title { get; set; } = "";
|
||||
public string? Description { get; set; }
|
||||
}
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||
userId = authState.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
|
||||
}
|
||||
|
||||
private async Task HandleSubmit()
|
||||
{
|
||||
if (string.IsNullOrEmpty(userId))
|
||||
{
|
||||
// пользователь не авторизован
|
||||
return;
|
||||
}
|
||||
|
||||
isLoading = true;
|
||||
try
|
||||
{
|
||||
// 1. Создаём плейлист в Яндекс Музыке
|
||||
var yandexId = await YandexService.CreatePlaylistAsync(userId, model.Title);
|
||||
// 2. Сохраняем в БД
|
||||
var playlist = new SharedPlaylist
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
OwnerUserId = userId,
|
||||
YandexPlaylistId = yandexId,
|
||||
Title = model.Title,
|
||||
Description = model.Description,
|
||||
ShareSlug = Guid.NewGuid().ToString("N"),
|
||||
CreatedAt = DateTime.UtcNow
|
||||
};
|
||||
Db.SharedPlaylists.Add(playlist);
|
||||
await Db.SaveChangesAsync();
|
||||
Navigation.NavigateTo("/myplaylists");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// показать ошибку (можно добавить переменную errorMessage)
|
||||
}
|
||||
finally
|
||||
{
|
||||
isLoading = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user