Добавьте файлы проекта.

This commit is contained in:
FrigaT
2026-04-13 14:16:44 +03:00
parent b2b5a3945a
commit 37c997dbe0
120 changed files with 5364 additions and 0 deletions

View File

@@ -0,0 +1,163 @@
@page "/shared/{token}"
@attribute [Authorize]
@using PlaylistShared.Shared.DTO
@using PlaylistShared.Shared.Enums
@using PlaylistShared.Pwa.Services
@using PlaylistShared.Shared.Models
@inject HttpClient Http
@inject ISnackbar Snackbar
@inject NavigationManager Navigation
@inject AuthenticationStateProvider AuthProvider
<MudContainer MaxWidth="MaxWidth.Large" Class="mt-8">
@if (_loading)
{
<MudProgressCircular Indeterminate />
}
else if (_playlist == null)
{
<MudAlert Severity="Severity.Error">Плейлист не найден или у вас нет доступа</MudAlert>
}
else
{
<MudCard>
<MudCardHeader>
<CardHeaderContent>
<MudText Typo="Typo.h5">@_playlist.Title</MudText>
<MudText Typo="Typo.body2" Color="Color.Secondary">Владелец: @_playlist.Creator?.UserName</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
@if (_isCreator)
{
<MudPaper Class="pa-4 mb-4" Elevation="0" Style="background-color: rgba(0,0,0,0.05); border-radius: 8px;">
<MudText Typo="Typo.h6" GutterBottom>Настройки доступа</MudText>
<MudGrid>
<MudItem xs="12" sm="4">
<MudSelect T="ViewPermission" Label="Просмотр" @bind-Value="_editPermissions.ViewPermission" Variant="Variant.Outlined" FullWidth="true">
<MudSelectItem Value="ViewPermission.Everyone">Все</MudSelectItem>
<MudSelectItem Value="ViewPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
</MudSelect>
</MudItem>
<MudItem xs="12" sm="4">
<MudSelect T="EditPermission" Label="Добавление треков" @bind-Value="_editPermissions.AddPermission" Variant="Variant.Outlined" FullWidth="true">
<MudSelectItem Value="EditPermission.Everyone">Все</MudSelectItem>
<MudSelectItem Value="EditPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
<MudSelectItem Value="EditPermission.AddedByUserOnly">Только добавивший</MudSelectItem>
</MudSelect>
</MudItem>
<MudItem xs="12" sm="4">
<MudSelect T="EditPermission" Label="Удаление треков" @bind-Value="_editPermissions.RemovePermission" Variant="Variant.Outlined" FullWidth="true">
<MudSelectItem Value="EditPermission.Everyone">Все</MudSelectItem>
<MudSelectItem Value="EditPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
<MudSelectItem Value="EditPermission.AddedByUserOnly">Только добавивший</MudSelectItem>
</MudSelect>
</MudItem>
</MudGrid>
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="SavePermissions" Disabled="_savingPermissions">
@if (_savingPermissions)
{
<MudProgressCircular Size="Size.Small" Indeterminate />
}
else
{
<span>Сохранить</span>
}
</MudButton>
</MudPaper>
}
<!-- Здесь будет отображение треков и управление -->
<MudText>Функционал управления треками в разработке</MudText>
</MudCardContent>
</MudCard>
}
</MudContainer>
@code {
[Parameter] public string Token { get; set; }
private SharedPlaylistDto? _playlist;
private bool _loading = true;
private bool _isCreator;
private UpdatePermissionsDto _editPermissions = new();
private bool _savingPermissions;
private string? _currentUserId;
protected override async Task OnInitializedAsync()
{
var authState = await AuthProvider.GetAuthenticationStateAsync();
_currentUserId = authState.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value;
await LoadPlaylist();
}
private async Task LoadPlaylist()
{
try
{
var response = await Http.GetFromJsonAsync<ApiResponse<SharedPlaylistDto>>($"/api/sharedplaylist/{Token}");
if (response?.Success == true)
{
_playlist = response.Data;
_isCreator = _playlist.CreatorUserId.ToString() == _currentUserId;
if (_isCreator)
{
_editPermissions = new UpdatePermissionsDto
{
ViewPermission = _playlist.ViewPermission,
AddPermission = _playlist.AddPermission,
RemovePermission = _playlist.RemovePermission
};
}
}
else
{
Snackbar.Add(response?.Error?.Message ?? "Не удалось загрузить плейлист", Severity.Error);
}
}
catch (Exception ex)
{
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
}
finally
{
_loading = false;
StateHasChanged();
}
}
private async Task SavePermissions()
{
_savingPermissions = true;
try
{
var response = await Http.PutAsJsonAsync($"/api/sharedplaylist/{Token}/permissions", _editPermissions);
if (response.IsSuccessStatusCode)
{
var result = await response.Content.ReadFromJsonAsync<ApiResponse<SharedPlaylistDto>>();
if (result?.Success == true)
{
_playlist = result.Data;
Snackbar.Add("Права доступа обновлены", Severity.Success);
}
else
{
Snackbar.Add(result?.Error?.Message ?? "Ошибка обновления", Severity.Error);
}
}
else
{
Snackbar.Add("Ошибка сохранения прав", Severity.Error);
}
}
catch (Exception ex)
{
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
}
finally
{
_savingPermissions = false;
}
}
}