chore: init commit from GitHub
Some checks are pending
Deploy / update (push) Waiting to run
Build Project .NET / build (push) Waiting to run

This commit is contained in:
Lisoveliy
2025-05-12 19:44:33 +03:00
parent 11a3f40596
commit aebe654c38
107 changed files with 18953 additions and 403 deletions

View File

@@ -0,0 +1,28 @@
using System.Text.Json.Serialization;
using SWAD.API.Services.MusicAPI.Auth;
namespace SWAD.API.Models.JsonStructures.MusicAPI;
public abstract class DefaultAuthResponse : IAuthResponse
{
private int? _expire;
private DateTime? _revokedAt;
[JsonPropertyName("access_token")]
// ReSharper disable once NullableWarningSuppressionIsUsed
public string Token { get; set; } = null!;
[JsonPropertyName("expires_in")]
public int? ExpireTime
{
get => _expire;
set
{
_expire = value;
_revokedAt = DateTime.UtcNow;
}
}
public DateTime? ExpireAt => _revokedAt?.AddSeconds(ExpireTime ?? 0);
}

View File

@@ -0,0 +1,6 @@
namespace SWAD.API.Models.JsonStructures.MusicAPI.Spotify;
/// <summary>
/// Json Structure for spotify auth response
/// </summary>
public class SpotifyAuthResponse : DefaultAuthResponse;

View File

@@ -0,0 +1,31 @@
using System.Text.Json.Serialization;
namespace SWAD.API.Models.JsonStructures.MusicAPI.Spotify;
/// <summary>
/// Json Structure for spotify search response
/// </summary>
internal class SpotifySearchResponse
{
// ReSharper disable NullableWarningSuppressionIsUsed
[JsonPropertyName("tracks")] public TrackList Tracks { get; set; } = null!;
public class TrackList
{
[JsonPropertyName("items")] public List<Item> Items { get; set; } = null!;
}
public class ExternalUrls
{
[JsonPropertyName("spotify")] public string Spotify { get; set; } = null!;
}
public class Item
{
[JsonPropertyName("href")] public string? Href { get; set; } = null!;
[JsonPropertyName("id")] public string? Id { get; set; } = null!;
[JsonPropertyName("external_urls")] public ExternalUrls ExternalUrls { get; set; } = null!;
}
}

View File

@@ -0,0 +1,30 @@
using System.Text.Json.Serialization;
namespace SWAD.API.Models.JsonStructures.MusicAPI.Spotify;
/// <summary>
/// Json Structure for tidal track response
/// </summary>
public class SpotifyTrackResponse
{
// ReSharper disable NullableWarningSuppressionIsUsed
[JsonPropertyName("name")] public string Name { get; set; } = null!;
[JsonPropertyName("artists")] public Artist[] Artists { get; set; } = null!;
[JsonPropertyName("album")] public Album Albums { get; set; } = null!;
public class Artist
{
[JsonPropertyName("id")] public string Id { get; set; } = null!;
[JsonPropertyName("name")] public string Name { get; set; } = null!;
}
public class Album
{
[JsonPropertyName("id")] public string Id { get; set; } = null!;
[JsonPropertyName("name")] public string Name { get; set; } = null!;
}
}

View File

@@ -0,0 +1,25 @@
using System.Text.Json.Serialization;
// ReSharper disable NullableWarningSuppressionIsUsed
namespace SWAD.API.Models.JsonStructures.MusicAPI.Tidal;
/// <summary>
/// Json Structure for tidal track response
/// </summary>
public class TidalArtistResponse
{
[JsonPropertyName("data")] public DataObject Data { get; set; } = new();
public class DataObject
{
[JsonPropertyName("attributes")] public AttributesObject Attributes { get; set; } = new();
}
public class AttributesObject
{
[JsonPropertyName("name")] public string Name { get; set; } = null!;
}
}

View File

@@ -0,0 +1,3 @@
namespace SWAD.API.Models.JsonStructures.MusicAPI.Tidal;
public class TidalAuthResponse : DefaultAuthResponse;

View File

@@ -0,0 +1,15 @@
using System.Text.Json.Serialization;
// ReSharper disable NullableWarningSuppressionIsUsed
namespace SWAD.API.Models.JsonStructures.MusicAPI.Tidal;
internal class TidalSearchResponse
{
[JsonPropertyName("data")] public TidalTrackResponse.DataObject Data { get; set; } = null!;
public class Track
{
[JsonPropertyName("resource")] public TidalTrackResponse.DataObject DataObject { get; set; } = null!;
}
}

View File

@@ -0,0 +1,53 @@
using System.Text.Json.Serialization;
// ReSharper disable NullableWarningSuppressionIsUsed
namespace SWAD.API.Models.JsonStructures.MusicAPI.Tidal;
/// <summary>
/// Json Structure for tidal track response
/// </summary>
public class TidalTrackResponse
{
[JsonPropertyName("data")] public DataObject Data { get; set; } = new();
public class DataObject
{
[JsonPropertyName("attributes")] public AttributesObject Attributes { get; set; } = new();
[JsonPropertyName("relationships")] public RelationShipsObject RelationShips { get; set; } = new();
}
public class AttributesObject
{
[JsonPropertyName("title")] public string Title { get; set; } = null!;
}
public class RelationShipsObject
{
[JsonPropertyName("artists")] public ArtistObject Artist { get; set; } = null!;
[JsonPropertyName("tracks")] public ArtistObject Track { get; set; } = null!;
}
public class ArtistObject
{
[JsonPropertyName("data")] public List<ArtistDataObject> Data { get; set; } = null!;
}
public class TrackObject
{
[JsonPropertyName("data")] public List<TrackDataObject> Data { get; set; } = null!;
}
public class TrackDataObject
{
[JsonPropertyName("id")] public string Id { get; set; } = null!;
}
public class ArtistDataObject
{
[JsonPropertyName("id")] public string Id { get; set; } = null!;
}
}

View File

@@ -0,0 +1,268 @@
using System.Text.Json.Serialization;
namespace SWAD.API.Models.JsonStructures.MusicAPI.Yandex;
/*
* ВНИМАНИЕ
* Yandex API писали шизы поэтому когда будешь добавлять поля в YandexSearchResponse
* ПОМНИ: ID у артистов и альбомов в разных местах JSON в одних и тех же объектах то string то number
* ЭТО ВЫЗОВЕТ ИСКЛЮЧЕНИЕ
* Думой
*/
public class YandexSearchResponse
{
[JsonPropertyName("status")]
public string Status { get; set; }
[JsonPropertyName("entities")]
public List<Entity> Entities { get; set; }
}
public class Album
{
[JsonPropertyName("title")]
public string Title { get; set; }
[JsonPropertyName("year")]
public int? Year { get; set; }
[JsonPropertyName("trackCount")]
public int? TrackCount { get; set; }
}
public class Album2
{
[JsonPropertyName("title")]
public string Title { get; set; }
[JsonPropertyName("year")]
public int? Year { get; set; }
[JsonPropertyName("trackCount")]
public int? TrackCount { get; set; }
}
public class Artist
{
[JsonPropertyName("name")]
public string Name { get; set; }
}
public class Artist2
{
[JsonPropertyName("name")]
public string Name { get; set; }
}
public class Counts
{
[JsonPropertyName("tracks")]
public int? Tracks { get; set; }
[JsonPropertyName("directAlbums")]
public int? DirectAlbums { get; set; }
[JsonPropertyName("alsoAlbums")]
public int? AlsoAlbums { get; set; }
[JsonPropertyName("alsoTracks")]
public int? AlsoTracks { get; set; }
}
public class Cover
{
[JsonPropertyName("type")]
public string Type { get; set; }
[JsonPropertyName("prefix")]
public string Prefix { get; set; }
[JsonPropertyName("uri")]
public string Uri { get; set; }
}
public class DerivedColors
{
[JsonPropertyName("average")]
public string Average { get; set; }
[JsonPropertyName("waveText")]
public string WaveText { get; set; }
[JsonPropertyName("miniPlayer")]
public string MiniPlayer { get; set; }
[JsonPropertyName("accent")]
public string Accent { get; set; }
}
public class Entity
{
[JsonPropertyName("type")]
public string Type { get; set; }
[JsonPropertyName("results")]
public List<Result> Results { get; set; }
}
public class Fade
{
[JsonPropertyName("inStart")]
public double? InStart { get; set; }
[JsonPropertyName("inStop")]
public double? InStop { get; set; }
[JsonPropertyName("outStart")]
public double? OutStart { get; set; }
[JsonPropertyName("outStop")]
public double? OutStop { get; set; }
}
public class Label
{
[JsonPropertyName("id")]
public int? Id { get; set; }
[JsonPropertyName("name")]
public string Name { get; set; }
}
public class LyricsInfo
{
[JsonPropertyName("hasAvailableSyncLyrics")]
public bool? HasAvailableSyncLyrics { get; set; }
[JsonPropertyName("hasAvailableTextLyrics")]
public bool? HasAvailableTextLyrics { get; set; }
}
public class Major
{
[JsonPropertyName("id")]
public int? Id { get; set; }
[JsonPropertyName("name")]
public string Name { get; set; }
}
public class R128
{
[JsonPropertyName("i")]
public double? I { get; set; }
[JsonPropertyName("tp")]
public double? Tp { get; set; }
}
public class Ratings
{
[JsonPropertyName("month")]
public int? Month { get; set; }
}
public class Result
{
[JsonPropertyName("text")]
public string Text { get; set; }
[JsonPropertyName("track")]
public Track Track { get; set; }
}
public class Track
{
[JsonPropertyName("id")]
public string Id { get; set; }
[JsonPropertyName("realId")]
public string RealId { get; set; }
[JsonPropertyName("title")]
public string Title { get; set; }
[JsonPropertyName("version")]
public string Version { get; set; }
[JsonPropertyName("trackSource")]
public string TrackSource { get; set; }
[JsonPropertyName("major")]
public Major Major { get; set; }
[JsonPropertyName("available")]
public bool? Available { get; set; }
[JsonPropertyName("availableForPremiumUsers")]
public bool? AvailableForPremiumUsers { get; set; }
[JsonPropertyName("availableFullWithoutPermission")]
public bool? AvailableFullWithoutPermission { get; set; }
[JsonPropertyName("disclaimers")]
public List<object> Disclaimers { get; set; }
[JsonPropertyName("availableForOptions")]
public List<string> AvailableForOptions { get; set; }
[JsonPropertyName("albums")]
public List<Album> Albums { get; set; }
[JsonPropertyName("durationMs")]
public int? DurationMs { get; set; }
[JsonPropertyName("storageDir")]
public string StorageDir { get; set; }
[JsonPropertyName("fileSize")]
public int? FileSize { get; set; }
[JsonPropertyName("r128")]
public R128 R128 { get; set; }
[JsonPropertyName("fade")]
public Fade Fade { get; set; }
[JsonPropertyName("previewDurationMs")]
public int? PreviewDurationMs { get; set; }
[JsonPropertyName("coverUri")]
public string CoverUri { get; set; }
[JsonPropertyName("ogImage")]
public string OgImage { get; set; }
[JsonPropertyName("lyricsAvailable")]
public bool? LyricsAvailable { get; set; }
[JsonPropertyName("lyricsInfo")]
public LyricsInfo LyricsInfo { get; set; }
[JsonPropertyName("derivedColors")]
public DerivedColors DerivedColors { get; set; }
[JsonPropertyName("type")]
public string Type { get; set; }
[JsonPropertyName("rememberPosition")]
public bool? RememberPosition { get; set; }
[JsonPropertyName("trackSharingFlag")]
public string TrackSharingFlag { get; set; }
[JsonPropertyName("contentWarning")]
public string ContentWarning { get; set; }
}
public class TrackPosition
{
[JsonPropertyName("volume")]
public int? Volume { get; set; }
[JsonPropertyName("index")]
public int? Index { get; set; }
}

View File

@@ -0,0 +1,222 @@
using System.Text.Json.Serialization;
namespace SWAD.API.Models.JsonStructures.MusicAPI.Yandex;
public class YandexTrackResponse
{
[JsonPropertyName("artists")]
public List<Artist> Artists { get; set; }
[JsonPropertyName("track")] public Track Track { get; set; }
[JsonPropertyName("lyric")] public List<Lyric> Lyric { get; set; }
}
public class AlsoInAlbum
{
[JsonPropertyName("id")] public int Id { get; set; }
[JsonPropertyName("title")] public string Title { get; set; }
[JsonPropertyName("metaType")] public string MetaType { get; set; }
[JsonPropertyName("contentWarning")] public string ContentWarning { get; set; }
[JsonPropertyName("year")] public int Year { get; set; }
[JsonPropertyName("releaseDate")] public DateTime ReleaseDate { get; set; }
[JsonPropertyName("coverUri")] public string CoverUri { get; set; }
[JsonPropertyName("ogImage")] public string OgImage { get; set; }
[JsonPropertyName("genre")] public string Genre { get; set; }
[JsonPropertyName("trackCount")] public int TrackCount { get; set; }
[JsonPropertyName("likesCount")] public int LikesCount { get; set; }
[JsonPropertyName("recent")] public bool Recent { get; set; }
[JsonPropertyName("veryImportant")] public bool VeryImportant { get; set; }
[JsonPropertyName("artists")] public List<Artist> Artists { get; set; }
[JsonPropertyName("labels")] public List<System.Reflection.Emit.Label> Labels { get; set; }
[JsonPropertyName("available")] public bool Available { get; set; }
[JsonPropertyName("availableForPremiumUsers")]
public bool AvailableForPremiumUsers { get; set; }
[JsonPropertyName("availableForOptions")]
public List<string> AvailableForOptions { get; set; }
[JsonPropertyName("availableForMobile")]
public bool AvailableForMobile { get; set; }
[JsonPropertyName("availablePartially")]
public bool AvailablePartially { get; set; }
[JsonPropertyName("bests")] public List<int> Bests { get; set; }
[JsonPropertyName("disclaimers")] public List<object> Disclaimers { get; set; }
[JsonPropertyName("trackPosition")] public TrackPosition TrackPosition { get; set; }
}
public class Credit
{
[JsonPropertyName("title")] public string Title { get; set; }
[JsonPropertyName("value")] public string Value { get; set; }
}
public class Link
{
[JsonPropertyName("title")] public string Title { get; set; }
[JsonPropertyName("href")] public string Href { get; set; }
[JsonPropertyName("type")] public string Type { get; set; }
[JsonPropertyName("socialNetwork")] public string SocialNetwork { get; set; }
}
public class Live
{
[JsonPropertyName("id")] public string Id { get; set; }
[JsonPropertyName("realId")] public string RealId { get; set; }
[JsonPropertyName("title")] public string Title { get; set; }
[JsonPropertyName("version")] public string Version { get; set; }
[JsonPropertyName("contentWarning")] public string ContentWarning { get; set; }
[JsonPropertyName("major")] public Major Major { get; set; }
[JsonPropertyName("available")] public bool Available { get; set; }
[JsonPropertyName("availableForPremiumUsers")]
public bool AvailableForPremiumUsers { get; set; }
[JsonPropertyName("availableFullWithoutPermission")]
public bool AvailableFullWithoutPermission { get; set; }
[JsonPropertyName("availableForOptions")]
public List<string> AvailableForOptions { get; set; }
[JsonPropertyName("disclaimers")] public List<object> Disclaimers { get; set; }
[JsonPropertyName("storageDir")] public string StorageDir { get; set; }
[JsonPropertyName("durationMs")] public int DurationMs { get; set; }
[JsonPropertyName("fileSize")] public int FileSize { get; set; }
[JsonPropertyName("r128")] public R128 R128 { get; set; }
[JsonPropertyName("fade")] public Fade Fade { get; set; }
[JsonPropertyName("previewDurationMs")]
public int PreviewDurationMs { get; set; }
[JsonPropertyName("artists")] public List<Artist> Artists { get; set; }
[JsonPropertyName("albums")] public List<Album> Albums { get; set; }
[JsonPropertyName("coverUri")] public string CoverUri { get; set; }
[JsonPropertyName("derivedColors")] public DerivedColors DerivedColors { get; set; }
[JsonPropertyName("ogImage")] public string OgImage { get; set; }
[JsonPropertyName("lyricsAvailable")] public bool LyricsAvailable { get; set; }
[JsonPropertyName("type")] public string Type { get; set; }
[JsonPropertyName("rememberPosition")] public bool RememberPosition { get; set; }
[JsonPropertyName("trackSharingFlag")] public string TrackSharingFlag { get; set; }
[JsonPropertyName("lyricsInfo")] public LyricsInfo LyricsInfo { get; set; }
[JsonPropertyName("trackSource")] public string TrackSource { get; set; }
}
public class Lyric
{
[JsonPropertyName("lyricsAvailable")] public bool LyricsAvailable { get; set; }
[JsonPropertyName("fullLyrics")] public string FullLyrics { get; set; }
[JsonPropertyName("lyrics")] public string Lyrics { get; set; }
}
public class OtherVersions
{
[JsonPropertyName("live")] public List<Live> Live { get; set; }
}
public class SimilarTrack
{
[JsonPropertyName("id")] public string Id { get; set; }
[JsonPropertyName("realId")] public string RealId { get; set; }
[JsonPropertyName("title")] public string Title { get; set; }
[JsonPropertyName("major")] public Major Major { get; set; }
[JsonPropertyName("available")] public bool Available { get; set; }
[JsonPropertyName("availableForPremiumUsers")]
public bool AvailableForPremiumUsers { get; set; }
[JsonPropertyName("availableFullWithoutPermission")]
public bool AvailableFullWithoutPermission { get; set; }
[JsonPropertyName("availableForOptions")]
public List<string> AvailableForOptions { get; set; }
[JsonPropertyName("disclaimers")] public List<object> Disclaimers { get; set; }
[JsonPropertyName("storageDir")] public string StorageDir { get; set; }
[JsonPropertyName("durationMs")] public int DurationMs { get; set; }
[JsonPropertyName("fileSize")] public int FileSize { get; set; }
[JsonPropertyName("r128")] public R128 R128 { get; set; }
[JsonPropertyName("fade")] public Fade Fade { get; set; }
[JsonPropertyName("previewDurationMs")]
public int PreviewDurationMs { get; set; }
[JsonPropertyName("artists")] public List<Artist> Artists { get; set; }
[JsonPropertyName("albums")] public List<Album> Albums { get; set; }
[JsonPropertyName("coverUri")] public string CoverUri { get; set; }
[JsonPropertyName("derivedColors")] public DerivedColors DerivedColors { get; set; }
[JsonPropertyName("ogImage")] public string OgImage { get; set; }
[JsonPropertyName("lyricsAvailable")] public bool LyricsAvailable { get; set; }
[JsonPropertyName("type")] public string Type { get; set; }
[JsonPropertyName("rememberPosition")] public bool RememberPosition { get; set; }
[JsonPropertyName("trackSharingFlag")] public string TrackSharingFlag { get; set; }
[JsonPropertyName("lyricsInfo")] public LyricsInfo LyricsInfo { get; set; }
[JsonPropertyName("trackSource")] public string TrackSource { get; set; }
[JsonPropertyName("contentWarning")] public string ContentWarning { get; set; }
}