Добавьте файлы проекта.
This commit is contained in:
12
PlaylistShared.Shared/DTO/AddTrackRequest.cs
Normal file
12
PlaylistShared.Shared/DTO/AddTrackRequest.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
public class AddTrackRequest
|
||||
{
|
||||
[JsonPropertyName("sharedPlaylistToken")]
|
||||
public string SharedPlaylistToken { get; set; } = null!;
|
||||
|
||||
[JsonPropertyName("trackIds")]
|
||||
public List<string> TrackIds { get; set; } = new();
|
||||
}
|
||||
32
PlaylistShared.Shared/DTO/ApiResponse.cs
Normal file
32
PlaylistShared.Shared/DTO/ApiResponse.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
/// <summary>Универсальный контейнер ответа API.</summary>
|
||||
/// <typeparam name="T">Тип данных ответа.</typeparam>
|
||||
public class ApiResponse<T>
|
||||
{
|
||||
/// <summary>Успешен ли запрос.</summary>
|
||||
[JsonPropertyName("success")]
|
||||
public bool Success { get; set; }
|
||||
|
||||
/// <summary>Данные ответа (при успехе).</summary>
|
||||
[JsonPropertyName("data")]
|
||||
public T? Data { get; set; }
|
||||
|
||||
/// <summary>Сообщение (опционально).</summary>
|
||||
[JsonPropertyName("message")]
|
||||
public string? Message { get; set; }
|
||||
|
||||
/// <summary>Ошибка (при неудаче).</summary>
|
||||
[JsonPropertyName("error")]
|
||||
public ErrorResponse? Error { get; set; }
|
||||
|
||||
/// <summary>Создаёт успешный ответ.</summary>
|
||||
public static ApiResponse<T> Ok(T data, string? message = null) =>
|
||||
new() { Success = true, Data = data, Message = message };
|
||||
|
||||
/// <summary>Создаёт ответ с ошибкой.</summary>
|
||||
public static ApiResponse<T> Fail(ErrorResponse error) =>
|
||||
new() { Success = false, Error = error };
|
||||
}
|
||||
19
PlaylistShared.Shared/DTO/ErrorResponse.cs
Normal file
19
PlaylistShared.Shared/DTO/ErrorResponse.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
/// <summary>Стандартный ответ сервера при ошибке.</summary>
|
||||
public class ErrorResponse
|
||||
{
|
||||
/// <summary>HTTP статус-код.</summary>
|
||||
[JsonPropertyName("statusCode")]
|
||||
public int StatusCode { get; set; }
|
||||
|
||||
/// <summary>Сообщение об ошибке.</summary>
|
||||
[JsonPropertyName("message")]
|
||||
public string Message { get; set; } = null!;
|
||||
|
||||
/// <summary>Дополнительные детали (опционально).</summary>
|
||||
[JsonPropertyName("details")]
|
||||
public string? Details { get; set; }
|
||||
}
|
||||
12
PlaylistShared.Shared/DTO/ExternalLoginCallbackRequest.cs
Normal file
12
PlaylistShared.Shared/DTO/ExternalLoginCallbackRequest.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
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!;
|
||||
}
|
||||
19
PlaylistShared.Shared/DTO/LoginRequest.cs
Normal file
19
PlaylistShared.Shared/DTO/LoginRequest.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
/// <summary>Запрос на вход по паролю.</summary>
|
||||
public class LoginRequest
|
||||
{
|
||||
/// <summary>Имя пользователя (логин).</summary>
|
||||
[JsonPropertyName("username")]
|
||||
public string Username { get; set; } = null!;
|
||||
|
||||
/// <summary>Пароль.</summary>
|
||||
[JsonPropertyName("password")]
|
||||
public string Password { get; set; } = null!;
|
||||
|
||||
/// <summary>Запомнить пользователя (продлить сессию).</summary>
|
||||
[JsonPropertyName("rememberMe")]
|
||||
public bool RememberMe { get; set; }
|
||||
}
|
||||
19
PlaylistShared.Shared/DTO/LoginResponse.cs
Normal file
19
PlaylistShared.Shared/DTO/LoginResponse.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
/// <summary>Ответ после успешного входа.</summary>
|
||||
public class LoginResponse
|
||||
{
|
||||
/// <summary>JWT токен доступа.</summary>
|
||||
[JsonPropertyName("token")]
|
||||
public string Token { get; set; } = null!;
|
||||
|
||||
/// <summary>Refresh токен для обновления сессии.</summary>
|
||||
[JsonPropertyName("refreshToken")]
|
||||
public string RefreshToken { get; set; } = null!;
|
||||
|
||||
/// <summary>Время истечения токена (UTC).</summary>
|
||||
[JsonPropertyName("expiration")]
|
||||
public DateTime Expiration { get; set; }
|
||||
}
|
||||
11
PlaylistShared.Shared/DTO/RefreshTokenRequest.cs
Normal file
11
PlaylistShared.Shared/DTO/RefreshTokenRequest.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
/// <summary>Запрос на обновление JWT токена.</summary>
|
||||
public class RefreshTokenRequest
|
||||
{
|
||||
/// <summary>Refresh токен, полученный при входе.</summary>
|
||||
[JsonPropertyName("refreshToken")]
|
||||
public string RefreshToken { get; set; } = null!;
|
||||
}
|
||||
19
PlaylistShared.Shared/DTO/RegisterRequest.cs
Normal file
19
PlaylistShared.Shared/DTO/RegisterRequest.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
/// <summary>Запрос на регистрацию нового пользователя.</summary>
|
||||
public class RegisterRequest
|
||||
{
|
||||
/// <summary>Имя пользователя (логин).</summary>
|
||||
[JsonPropertyName("username")]
|
||||
public string Username { get; set; } = null!;
|
||||
|
||||
/// <summary>Email пользователя.</summary>
|
||||
[JsonPropertyName("email")]
|
||||
public string Email { get; set; } = null!;
|
||||
|
||||
/// <summary>Пароль.</summary>
|
||||
[JsonPropertyName("password")]
|
||||
public string Password { get; set; } = null!;
|
||||
}
|
||||
6
PlaylistShared.Shared/DTO/SetYandexTokenRequest.cs
Normal file
6
PlaylistShared.Shared/DTO/SetYandexTokenRequest.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
public class SetYandexTokenRequest
|
||||
{
|
||||
public string Token { get; set; }
|
||||
}
|
||||
48
PlaylistShared.Shared/DTO/SharePlaylistDto.cs
Normal file
48
PlaylistShared.Shared/DTO/SharePlaylistDto.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using PlaylistShared.Shared.Enums;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
/// <summary>Запрос на создание нового шеринг-плейлиста.</summary>
|
||||
public class SharePlaylistDto
|
||||
{
|
||||
/// <summary>Идентификатор плейлиста в Яндекс.Музыке (kind).</summary>
|
||||
[JsonPropertyName("yandexPlaylistKind")]
|
||||
public string YandexPlaylistKind { get; set; } = null!;
|
||||
|
||||
/// <summary>Идентификатор владельца плейлиста в Яндекс.Музыке (uid).</summary>
|
||||
[JsonPropertyName("yandexPlaylistOwnerUid")]
|
||||
public string YandexPlaylistOwnerUid { get; set; } = null!;
|
||||
|
||||
/// <summary>Название плейлиста.</summary>
|
||||
[JsonPropertyName("title")]
|
||||
public string Title { get; set; } = null!;
|
||||
|
||||
/// <summary>Описание плейлиста.</summary>
|
||||
[JsonPropertyName("description")]
|
||||
public string? Description { get; set; }
|
||||
|
||||
/// <summary>Ссылка на обложку.</summary>
|
||||
[JsonPropertyName("coverUrl")]
|
||||
public string? CoverUrl { get; set; }
|
||||
|
||||
/// <summary>Дата создания плейлиста.</summary>
|
||||
[JsonPropertyName("createdAt")]
|
||||
public DateTime CreatedAt { get; set; }
|
||||
|
||||
/// <summary>Токен для расшаривания плейлиста.</summary>
|
||||
[JsonPropertyName("shareToken")]
|
||||
public string ShareToken { get; set; }
|
||||
|
||||
/// <summary>Права на просмотр.</summary>
|
||||
[JsonPropertyName("viewPermission")]
|
||||
public ViewPermission ViewPermission { get; set; }
|
||||
|
||||
/// <summary>Права на добавление треков.</summary>
|
||||
[JsonPropertyName("addPermission")]
|
||||
public EditPermission AddPermission { get; set; }
|
||||
|
||||
/// <summary>Права на удаление треков.</summary>
|
||||
[JsonPropertyName("removePermission")]
|
||||
public EditPermission RemovePermission { get; set; }
|
||||
}
|
||||
15
PlaylistShared.Shared/DTO/TrackOperationDto.cs
Normal file
15
PlaylistShared.Shared/DTO/TrackOperationDto.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
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();
|
||||
}
|
||||
20
PlaylistShared.Shared/DTO/UpdatePermissionsDto.cs
Normal file
20
PlaylistShared.Shared/DTO/UpdatePermissionsDto.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using PlaylistShared.Shared.Enums;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
/// <summary>Запрос на обновление прав доступа шеринг-плейлиста.</summary>
|
||||
public class UpdatePermissionsDto
|
||||
{
|
||||
/// <summary>Новые права на просмотр.</summary>
|
||||
[JsonPropertyName("viewPermission")]
|
||||
public ViewPermission ViewPermission { get; set; }
|
||||
|
||||
/// <summary>Новые права на добавление треков.</summary>
|
||||
[JsonPropertyName("addPermission")]
|
||||
public EditPermission AddPermission { get; set; }
|
||||
|
||||
/// <summary>Новые права на удаление треков.</summary>
|
||||
[JsonPropertyName("removePermission")]
|
||||
public EditPermission RemovePermission { get; set; }
|
||||
}
|
||||
45
PlaylistShared.Shared/DTO/YandexPlaylistInfo.cs
Normal file
45
PlaylistShared.Shared/DTO/YandexPlaylistInfo.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
/// <summary>Информация о плейлисте из Яндекс.Музыки (для импорта).</summary>
|
||||
public class YandexPlaylistInfo
|
||||
{
|
||||
/// <summary>Идентификатор плейлиста (kind).</summary>
|
||||
[JsonPropertyName("kind")]
|
||||
public string Kind { get; set; } = null!;
|
||||
|
||||
/// <summary>Идентификатор владельца плейлиста (uid).</summary>
|
||||
[JsonPropertyName("ownerUid")]
|
||||
public string OwnerUid { get; set; } = null!;
|
||||
|
||||
/// <summary>Название плейлиста.</summary>
|
||||
[JsonPropertyName("title")]
|
||||
public string Title { get; set; } = null!;
|
||||
|
||||
/// <summary>Описание плейлиста.</summary>
|
||||
[JsonPropertyName("description")]
|
||||
public string? Description { get; set; }
|
||||
|
||||
/// <summary>URL обложки.</summary>
|
||||
[JsonPropertyName("coverUrl")]
|
||||
public string? CoverUrl { get; set; }
|
||||
|
||||
/// <summary>Кол-во треков.</summary>
|
||||
[JsonPropertyName("trackCount")]
|
||||
public int TrackCount { get; set; }
|
||||
|
||||
/// <summary>Расшаренный</summary>
|
||||
[JsonPropertyName("isShared")]
|
||||
public bool IsShared { get; set; }
|
||||
|
||||
/// <summary>Расшаренная ссылка</summary>
|
||||
[JsonPropertyName("shareToken")]
|
||||
public string? ShareToken { get; set; }
|
||||
}
|
||||
|
||||
public class SharePlaylistRequest
|
||||
{
|
||||
public string Kind { get; set; }
|
||||
public string OwnerUid { get; set; }
|
||||
}
|
||||
8
PlaylistShared.Shared/DTO/YandexTokenStatus.cs
Normal file
8
PlaylistShared.Shared/DTO/YandexTokenStatus.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace PlaylistShared.Shared.DTO;
|
||||
|
||||
public class YandexTokenStatus
|
||||
{
|
||||
public bool HasToken { get; set; }
|
||||
public bool IsValid { get; set; }
|
||||
public DateTime ExpiryUtc { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user