Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 00dcb93257 | |||
| 8abb196e1d | |||
| 12c4f56a22 | |||
| 6d650b7962 | |||
| 73bb417bde |
@@ -0,0 +1,19 @@
|
||||
# Top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.cs]
|
||||
# Use 'var' when possible
|
||||
csharp_style_var_for_built_in_types = true:suggestion
|
||||
csharp_style_var_when_type_is_apparent = true:suggestion
|
||||
csharp_style_var_elsewhere = true:suggestion
|
||||
|
||||
# Use expression body for methods
|
||||
csharp_style_expression_bodied_methods = true:silent
|
||||
@@ -92,29 +92,6 @@ public class DirectoryManager : BaseManager
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteEmptyDirectories()
|
||||
{
|
||||
try
|
||||
{
|
||||
var albumDirectory = AlbumDirectory();
|
||||
var artistDirectory = ArtistDirectory();
|
||||
if (IsDirectoryEmpty(albumDirectory))
|
||||
{
|
||||
Directory.Delete(albumDirectory);
|
||||
Console.WriteLine($"directory {albumDirectory} deleted");
|
||||
}
|
||||
if (IsDirectoryEmpty(artistDirectory))
|
||||
{
|
||||
Directory.Delete(artistDirectory);
|
||||
Console.WriteLine($"directory {artistDirectory} deleted");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var exMsg = ex.Message;
|
||||
Console.WriteLine($"An error occurred {exMsg}");
|
||||
}
|
||||
}
|
||||
|
||||
public int DeleteEmptyDirectories(string? directory, int level)
|
||||
{
|
||||
@@ -157,12 +134,12 @@ public class DirectoryManager : BaseManager
|
||||
var albumDirectory = AlbumDirectory(song);
|
||||
var artistDirectory = ArtistDirectory(song);
|
||||
|
||||
if (IsDirectoryEmpty(albumDirectory))
|
||||
if (Directory.Exists(albumDirectory) && IsDirectoryEmpty(albumDirectory))
|
||||
{
|
||||
Directory.Delete(albumDirectory);
|
||||
_logger.Info("Album directory deleted");
|
||||
}
|
||||
if (IsDirectoryEmpty(artistDirectory))
|
||||
if (Directory.Exists(artistDirectory) && IsDirectoryEmpty(artistDirectory))
|
||||
{
|
||||
Directory.Delete(artistDirectory);
|
||||
_logger.Info("Artist directory deleted");
|
||||
@@ -175,66 +152,7 @@ public class DirectoryManager : BaseManager
|
||||
}
|
||||
}
|
||||
|
||||
public string RetrieveAlbumPath(Song song)
|
||||
{
|
||||
_logger.Info("Retrieving album song path");
|
||||
|
||||
var albumPath = string.Empty;
|
||||
albumPath = AlbumDirectory(song);
|
||||
|
||||
return albumPath;
|
||||
}
|
||||
public string RetrieveArtistPath(Song song)
|
||||
{
|
||||
_logger.Info("Retrieving artist path");
|
||||
|
||||
var artistPath = string.Empty;
|
||||
artistPath = ArtistDirectory(song);
|
||||
|
||||
return artistPath;
|
||||
}
|
||||
|
||||
public string GenerateSongPath(Song song)
|
||||
{
|
||||
_logger.Info("Generating song path");
|
||||
|
||||
var artistPath = ArtistDirectory(song);
|
||||
var albumPath = AlbumDirectory(song);
|
||||
|
||||
GenerateDirectories(new List<DirEnt>{
|
||||
new DirEnt
|
||||
{
|
||||
Pre = "Artist path does not exist",
|
||||
Path = artistPath,
|
||||
Post = "Creating artist path"
|
||||
},
|
||||
new DirEnt
|
||||
{
|
||||
Pre = "Album path does not exist",
|
||||
Path = albumPath,
|
||||
Post = "Created album path"
|
||||
}
|
||||
});
|
||||
|
||||
return albumPath;
|
||||
}
|
||||
|
||||
private class DirEnt
|
||||
{
|
||||
public string? Pre { get; set; }
|
||||
public string? Path { get; set; }
|
||||
public string? Post { get; set; }
|
||||
}
|
||||
|
||||
private void GenerateDirectories(List<DirEnt> dirs)
|
||||
{
|
||||
foreach (var di in dirs)
|
||||
{
|
||||
_logger.Info(di.Pre);
|
||||
Directory.CreateDirectory(di.Path!);
|
||||
_logger.Info(di.Post);
|
||||
}
|
||||
}
|
||||
|
||||
private void Initialize(DirectoryType dirTypes = DirectoryType.Music)
|
||||
{
|
||||
@@ -249,10 +167,8 @@ public class DirectoryManager : BaseManager
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsDirectoryEmpty(string path)
|
||||
{
|
||||
return !Directory.EnumerateFileSystemEntries(path).Any();
|
||||
}
|
||||
private bool IsDirectoryEmpty(string path) =>
|
||||
!(Directory.EnumerateFileSystemEntries(path).Any());
|
||||
|
||||
private string AlbumDirectory()
|
||||
{
|
||||
@@ -267,10 +183,6 @@ public class DirectoryManager : BaseManager
|
||||
|
||||
return directory;
|
||||
}
|
||||
private string ArtistDirectory()
|
||||
{
|
||||
return ArtistDirectory(_song!);
|
||||
}
|
||||
private string ArtistDirectory(Song song)
|
||||
{
|
||||
var directory = _rootSongDirectory;
|
||||
|
||||
@@ -149,7 +149,7 @@ public class TokenManager : BaseManager
|
||||
return null;
|
||||
}
|
||||
|
||||
public int? RetrieveUserIdFromToken(string token)
|
||||
public Guid? RetrieveUserIdFromToken(string token)
|
||||
{
|
||||
var parsedToken = this.ContainsBearer(token) ? this.StripBearer(token) : token;
|
||||
var tokenHandler = new JwtSecurityTokenHandler();
|
||||
@@ -159,7 +159,15 @@ public class TokenManager : BaseManager
|
||||
{
|
||||
if (item.Key == "user_id")
|
||||
{
|
||||
return Convert.ToInt32(item.Value);
|
||||
if (item.Value != null)
|
||||
{
|
||||
var id = item.Value.ToString();
|
||||
return Guid.Parse(id!);
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,9 +27,9 @@ public class AccessLevelController : BaseController
|
||||
|
||||
#region HTTP Routes
|
||||
[HttpGet]
|
||||
public IActionResult GetAccessLevels(int? id, int? songId)
|
||||
public IActionResult GetAccessLevels(Guid? id, Guid? songId)
|
||||
{
|
||||
var accLevel = new Models.AccessLevel { Id = 0 };
|
||||
var accLevel = new Models.AccessLevel { };
|
||||
var accessLevelContext = new Database.Contexts.AccessLevelContext(_connectionString!);
|
||||
|
||||
if (id != null)
|
||||
@@ -43,7 +43,7 @@ public class AccessLevelController : BaseController
|
||||
|
||||
var response = new GetAccessLevelsResponse { Data = new List<Models.AccessLevel>() };
|
||||
|
||||
if (accLevel?.Id > 0)
|
||||
if (accLevel?.Id.ToString().Length > 0)
|
||||
{
|
||||
response.Subject = "Successful";
|
||||
response.Data.Add(accLevel);
|
||||
@@ -57,7 +57,7 @@ public class AccessLevelController : BaseController
|
||||
}
|
||||
|
||||
[HttpPatch("{id}")]
|
||||
public IActionResult UpdateAccessLevel(int id, [FromBody] Models.AccessLevel accessLevel)
|
||||
public IActionResult UpdateAccessLevel(Guid id, [FromBody] Models.AccessLevel accessLevel)
|
||||
{
|
||||
var response = new UpdateAccessLevelResponse { Data = new List<Models.AccessLevel>() };
|
||||
var targetLevel = accessLevel.Level;
|
||||
|
||||
@@ -46,7 +46,7 @@ public class AlbumController : BaseController
|
||||
}
|
||||
|
||||
[HttpGet("{id}")]
|
||||
public IActionResult GetAlbum(int id)
|
||||
public IActionResult GetAlbum(Guid id)
|
||||
{
|
||||
Album album = new Album { Id = id };
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ public class ArtistController : BaseController
|
||||
}
|
||||
|
||||
[HttpGet("{id}")]
|
||||
public IActionResult GetArtist(int id)
|
||||
public IActionResult GetArtist(Guid id)
|
||||
{
|
||||
Artist artist = new Artist { Id = id };
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ public class CoverArtController : BaseController
|
||||
}
|
||||
|
||||
[HttpGet("{id}")]
|
||||
public IActionResult GetCoverArt(int id)
|
||||
public IActionResult GetCoverArt(Guid id)
|
||||
{
|
||||
var coverArt = new CoverArt { Id = id };
|
||||
|
||||
@@ -74,7 +74,7 @@ public class CoverArtController : BaseController
|
||||
}
|
||||
|
||||
[HttpGet("data/download/{id}")]
|
||||
public async Task<IActionResult> Download(int id, [FromQuery] bool? randomizeFilename)
|
||||
public async Task<IActionResult> Download(Guid id, [FromQuery] bool? randomizeFilename)
|
||||
{
|
||||
var songContext = new SongContext(_connectionString!);
|
||||
var covMgr = new CoverArtManager(this._config!);
|
||||
|
||||
@@ -50,7 +50,7 @@ public class GenreController : BaseController
|
||||
}
|
||||
|
||||
[HttpGet("{id}")]
|
||||
public IActionResult GetGenre(int id)
|
||||
public IActionResult GetGenre(Guid id)
|
||||
{
|
||||
var genre = new Genre { Id = id };
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ public class SongCompressedDataController : BaseController
|
||||
|
||||
#region API Routes
|
||||
[HttpGet("{id}")]
|
||||
public async Task<IActionResult> DownloadCompressedSong(int id, [FromQuery] bool? randomizeFilename)
|
||||
public async Task<IActionResult> DownloadCompressedSong(Guid id, [FromQuery] bool? randomizeFilename)
|
||||
{
|
||||
var context = new SongContext(_connectionString!);
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ public class SongController : BaseController
|
||||
}
|
||||
|
||||
[HttpGet("{id}")]
|
||||
public IActionResult GetSong(int id)
|
||||
public IActionResult GetSong(Guid id)
|
||||
{
|
||||
var context = new SongContext(_connectionString!);
|
||||
|
||||
@@ -65,14 +65,14 @@ public class SongController : BaseController
|
||||
|
||||
Console.WriteLine("Here");
|
||||
|
||||
if (song.Id != 0)
|
||||
if (song.Id.ToString().Length != 0)
|
||||
return Ok(song);
|
||||
else
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
[HttpPut("{id}")]
|
||||
public IActionResult UpdateSong(int id, [FromBody] Song song)
|
||||
public IActionResult UpdateSong(Guid id, [FromBody] Song song)
|
||||
{
|
||||
song.Id = id;
|
||||
Console.WriteLine("Retrieving filepath of song");
|
||||
|
||||
@@ -40,7 +40,7 @@ public class SongDataController : BaseController
|
||||
|
||||
|
||||
[HttpGet("download/{id}")]
|
||||
public IActionResult Download(int id, [FromQuery] bool? randomizeFilename)
|
||||
public IActionResult Download(Guid id, [FromQuery] bool? randomizeFilename)
|
||||
{
|
||||
var tokenManager = new TokenManager(this._config!);
|
||||
var songContext = new SongContext(this._connectionString!);
|
||||
@@ -172,7 +172,7 @@ public class SongDataController : BaseController
|
||||
}
|
||||
|
||||
[HttpDelete("delete/{id}")]
|
||||
public IActionResult DeleteSong(int id)
|
||||
public IActionResult DeleteSong(Guid id)
|
||||
{
|
||||
var songContext = new SongContext(_connectionString!);
|
||||
var songMetaData = songContext.RetrieveRecord(new Song { Id = id });
|
||||
|
||||
@@ -32,7 +32,7 @@ public class SongStreamController : BaseController
|
||||
|
||||
#region HTTP endpoints
|
||||
[HttpGet("{id}")]
|
||||
public async Task<IActionResult> StreamSong(int id)
|
||||
public async Task<IActionResult> StreamSong(Guid id)
|
||||
{
|
||||
var context = new SongContext(_config!.GetConnectionString("DefaultConnection")!);
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ public class AccessLevelContext : DbContext
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
public Models.AccessLevel? GetAccessLevel(int songId)
|
||||
public Models.AccessLevel? GetAccessLevel(Guid songId)
|
||||
{
|
||||
var accessLevel = this.AccessLevels!.FirstOrDefault(acc => acc.SongId == songId);
|
||||
return accessLevel;
|
||||
@@ -30,6 +30,14 @@ public class AccessLevelContext : DbContext
|
||||
{
|
||||
modelBuilder.Entity<Models.AccessLevel>().ToTable("AccessLevel");
|
||||
|
||||
modelBuilder.Entity<Models.AccessLevel>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id);
|
||||
|
||||
entity.Property(e => e.Id)
|
||||
.HasColumnType("binary(16)");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Models.AccessLevel>().Property(m => m.Level).IsRequired(true);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -18,6 +18,14 @@ public class AlbumContext : DbContext
|
||||
{
|
||||
modelBuilder.Entity<Album>()
|
||||
.ToTable("Album");
|
||||
|
||||
modelBuilder.Entity<Album>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id);
|
||||
|
||||
entity.Property(e => e.Id)
|
||||
.HasColumnType("binary(16)");
|
||||
});
|
||||
}
|
||||
|
||||
public Album RetrieveRecord(Album album)
|
||||
|
||||
@@ -18,6 +18,14 @@ public class ArtistContext : DbContext
|
||||
{
|
||||
modelBuilder.Entity<Artist>()
|
||||
.ToTable("Artist");
|
||||
|
||||
modelBuilder.Entity<Artist>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id);
|
||||
|
||||
entity.Property(e => e.Id)
|
||||
.HasColumnType("binary(16)");
|
||||
});
|
||||
}
|
||||
|
||||
public Artist RetrieveRecord(Artist artist)
|
||||
|
||||
@@ -20,6 +20,13 @@ public class CoverArtContext : DbContext
|
||||
{
|
||||
modelBuilder.Entity<CoverArt>()
|
||||
.ToTable("CoverArt");
|
||||
modelBuilder.Entity<CoverArt>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id);
|
||||
|
||||
entity.Property(e => e.Id)
|
||||
.HasColumnType("binary(16)");
|
||||
});
|
||||
}
|
||||
|
||||
public CoverArt RetrieveRecord(CoverArt cover)
|
||||
|
||||
@@ -20,6 +20,14 @@ public class GenreContext : DbContext
|
||||
{
|
||||
modelBuilder.Entity<Genre>()
|
||||
.ToTable("Genre");
|
||||
|
||||
modelBuilder.Entity<Genre>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id);
|
||||
|
||||
entity.Property(e => e.Id)
|
||||
.HasColumnType("binary(16)");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -21,6 +21,14 @@ public class SongContext : DbContext
|
||||
modelBuilder.Entity<Song>()
|
||||
.ToTable("Song");
|
||||
|
||||
modelBuilder.Entity<Song>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id);
|
||||
|
||||
entity.Property(e => e.Id)
|
||||
.HasColumnType("binary(16)");
|
||||
});
|
||||
|
||||
modelBuilder.Entity<Song>()
|
||||
.Property(s => s.Year)
|
||||
.IsRequired(false);
|
||||
|
||||
@@ -23,6 +23,14 @@ public class UserContext : DbContext
|
||||
{
|
||||
modelBuilder.Entity<User>()
|
||||
.ToTable("User");
|
||||
|
||||
modelBuilder.Entity<User>(entity =>
|
||||
{
|
||||
entity.HasKey(e => e.Id);
|
||||
|
||||
entity.Property(e => e.Id)
|
||||
.HasColumnType("binary(16)"); // **** Map Guid to BINARY(16) ****
|
||||
});
|
||||
modelBuilder.Entity<User>()
|
||||
.Property(u => u.LastLogin).IsRequired(false);
|
||||
modelBuilder.Entity<User>()
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
|
||||
<Version>0.1.22</Version>
|
||||
<Version>0.1.40</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Top-most EditorConfig file
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[*.cs]
|
||||
# Use 'var' when possible
|
||||
csharp_style_var_for_built_in_types = true:suggestion
|
||||
csharp_style_var_when_type_is_apparent = true:suggestion
|
||||
csharp_style_var_elsewhere = true:suggestion
|
||||
|
||||
# Use expression body for methods
|
||||
csharp_style_expression_bodied_methods = true:silent
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Icarus.Models;
|
||||
@@ -6,11 +7,12 @@ public class AccessLevel
|
||||
{
|
||||
#region Properties
|
||||
[Newtonsoft.Json.JsonProperty("id")]
|
||||
public int Id { get; set; }
|
||||
[Key]
|
||||
public Guid Id { get; set; }
|
||||
[Newtonsoft.Json.JsonProperty("level")]
|
||||
public string? Level { get; set; }
|
||||
[Newtonsoft.Json.JsonProperty("song_id")]
|
||||
public int SongId { get; set; }
|
||||
public Guid SongId { get; set; }
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
+3
-1
@@ -1,3 +1,4 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
@@ -8,7 +9,8 @@ public class Album
|
||||
{
|
||||
#region Properties
|
||||
[JsonProperty("id")]
|
||||
public int Id { get; set; }
|
||||
[Key]
|
||||
public Guid Id { get; set; }
|
||||
[JsonProperty("title")]
|
||||
public string? Title { get; set; }
|
||||
[JsonProperty("album_artist")]
|
||||
|
||||
+3
-1
@@ -1,3 +1,4 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
@@ -8,7 +9,8 @@ public class Artist
|
||||
{
|
||||
#region Properties
|
||||
[JsonProperty("id")]
|
||||
public int Id { get; set; }
|
||||
[Key]
|
||||
public Guid Id { get; set; }
|
||||
[JsonProperty("name")]
|
||||
[Column("Artist")]
|
||||
public string? Name { get; set; }
|
||||
|
||||
+4
-1
@@ -1,3 +1,5 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Icarus.Models;
|
||||
@@ -6,7 +8,8 @@ public class CoverArt
|
||||
{
|
||||
#region Properties
|
||||
[JsonProperty("id")]
|
||||
public int Id { get; set; }
|
||||
[Key]
|
||||
public Guid Id { get; set; }
|
||||
[JsonProperty("title")]
|
||||
public string? SongTitle { get; set; }
|
||||
[JsonIgnore]
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
|
||||
|
||||
|
||||
namespace Icarus.Models;
|
||||
|
||||
public enum CreateFileResult
|
||||
|
||||
+2
-1
@@ -1,3 +1,4 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
@@ -8,7 +9,7 @@ public class Genre
|
||||
{
|
||||
#region Properties
|
||||
[JsonProperty("id")]
|
||||
public int Id { get; set; }
|
||||
public Guid Id { get; set; }
|
||||
[JsonProperty("genre")]
|
||||
[Column("Category")]
|
||||
public string? GenreName { get; set; }
|
||||
|
||||
@@ -6,7 +6,7 @@ public class LoginResult : BaseResult
|
||||
{
|
||||
#region Properties
|
||||
[JsonProperty("user_id")]
|
||||
public int UserId { get; set; }
|
||||
public Guid UserId { get; set; }
|
||||
[JsonProperty("username")]
|
||||
public string? Username { get; set; }
|
||||
[JsonProperty("token")]
|
||||
|
||||
+8
-6
@@ -1,3 +1,4 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
@@ -8,7 +9,8 @@ public class Song
|
||||
{
|
||||
#region Properties
|
||||
[JsonProperty("id")]
|
||||
public int Id { get; set; }
|
||||
[Key]
|
||||
public Guid Id { get; set; }
|
||||
[JsonProperty("title")]
|
||||
public string? Title { get; set; }
|
||||
[JsonProperty("album")]
|
||||
@@ -39,17 +41,17 @@ public class Song
|
||||
[JsonProperty("disc_count")]
|
||||
public int DiscCount { get; set; } = 0;
|
||||
[JsonIgnore]
|
||||
public int? AlbumId { get; set; }
|
||||
public Guid? AlbumId { get; set; }
|
||||
[JsonIgnore]
|
||||
public int? ArtistId { get; set; }
|
||||
public Guid? ArtistId { get; set; }
|
||||
[JsonIgnore]
|
||||
public int? GenreId { get; set; }
|
||||
public Guid? GenreId { get; set; }
|
||||
[JsonIgnore]
|
||||
public int? CoverArtId { get; set; }
|
||||
public Guid? CoverArtId { get; set; }
|
||||
[JsonProperty("date_created")]
|
||||
public DateTime DateCreated { get; set; }
|
||||
[JsonProperty("user_id")]
|
||||
public int UserId { get; set; }
|
||||
public Guid UserId { get; set; }
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@ namespace Icarus.Models;
|
||||
public class SongData
|
||||
{
|
||||
#region Properties
|
||||
public int ID { get; set; }
|
||||
public Guid ID { get; set; }
|
||||
public byte[]? Data { get; set; }
|
||||
public int SongID { get; set; }
|
||||
#endregion
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@ public class User
|
||||
[JsonProperty("id")]
|
||||
[Column("Id")]
|
||||
[Key]
|
||||
public int Id { get; set; }
|
||||
public Guid Id { get; set; }
|
||||
[JsonProperty("username")]
|
||||
public string? Username { get; set; }
|
||||
[JsonProperty("password")]
|
||||
|
||||
Reference in New Issue
Block a user