This commit is contained in:
2026-07-18 23:29:57 +02:00
parent 4fed9bd059
commit 2dc544b2c0
109 changed files with 5134 additions and 2163 deletions
+2 -7
View File
@@ -1,5 +1,4 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Musify.Domain.Abstractions;
namespace Musify.Domain.Entities
@@ -18,10 +17,9 @@ namespace Musify.Domain.Entities
[MaxLength(200)]
public required string NormalizedName { get; set; }
public long? UserId { get; set; }
[Required]
[MaxLength(64)]
public string? ExternalId { get; set; }
public required string ExternalId { get; set; }
[Required]
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
@@ -29,9 +27,6 @@ namespace Musify.Domain.Entities
[Required]
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
[ForeignKey(nameof(UserId)) ]
public User? User { get; set; }
public ICollection<TrackArtist> TrackArtists { get; set; } = new List<TrackArtist>();
}
}
@@ -0,0 +1,17 @@
using System.ComponentModel.DataAnnotations;
using Musify.Domain.ValueObjects;
namespace Musify.Domain.Entities
{
public class ExternalTrack : Track
{
[Required]
public required TrackSource Source { get; set; }
[Required]
[MaxLength(64)]
public required string ExternalId { get; set; }
public ICollection<TrackArtist> TrackArtists { get; set; } = new List<TrackArtist>();
}
}
@@ -0,0 +1,14 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Musify.Domain.Entities
{
public class LocalTrack : Track
{
[Required]
public required long OwnerUserId { get; set; }
[ForeignKey(nameof(OwnerUserId)) ]
public required User Owner { get; set; }
}
}
+2 -2
View File
@@ -26,9 +26,9 @@ namespace Musify.Domain.Entities
[Required]
[MaxLength(256)]
public string Description { get; set; } = "No description was provided.";
public string? Description { get; set; }
public required PlayListPictures Pictures { get; set; }
public PlayListPictures? Pictures { get; set; }
[Required]
public LifeCycleStatus LifeCycleStatus { get; set; } = LifeCycleStatus.Active;
+2 -19
View File
@@ -1,12 +1,11 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Musify.Domain.Abstractions;
using Musify.Domain.ValueObjects;
namespace Musify.Domain.Entities
{
#pragma warning disable CS8618
public class Track : IAuditable
public abstract class Track : IAuditable
{
[Key]
public Guid Id { get; set; } = Guid.NewGuid();
@@ -22,14 +21,6 @@ namespace Musify.Domain.Entities
[Required]
public int DurationSeconds { get; set; }
public long? OwnerUserId { get; set; }
[Required]
public TrackSource Source { get; set; } = TrackSource.Local;
[MaxLength(16)]
public string? ExternalId { get; set; }
[Required]
public LifeCycleStatus LifeCycleStatus { get; set; } = LifeCycleStatus.Active;
@@ -43,18 +34,10 @@ namespace Musify.Domain.Entities
public TrackAudio Audio { get; set; } = new();
[ForeignKey(nameof(OwnerUserId)) ]
public User? Owner { get; set; }
public ICollection<UserHasTrack> UserTracks { get; set; } = new List<UserHasTrack>();
public ICollection<PlayListHasTrack> PlayListTracks { get; set; } = new List<PlayListHasTrack>();
public ICollection<ListeningHistory> ListeningHistories { get; set; } = new List<ListeningHistory>();
public ICollection<TrackArtist> TrackArtists { get; set; } = new List<TrackArtist>();
[NotMapped]
public bool IsExternal => Source != TrackSource.Local;
}
}
}
@@ -17,7 +17,7 @@ namespace Musify.Domain.Entities
public int Position { get; set; } = 0;
[ForeignKey(nameof(TrackId)) ]
public Track Track { get; set; }
public ExternalTrack Track { get; set; }
[ForeignKey(nameof(ArtistId)) ]
public Artist Artist { get; set; }