using Microsoft.AspNetCore.Identity;
using Roadie.Library.Data;
using Roadie.Library.Enums;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Roadie.Library.Identity
{
///
/// Application User for Identity
///
/// As this is used by UserManager to get for each request in API *do not* lazy load properties as the object
/// is too heavy and requires multiple DB hits to poplate - which is data not needed to authenticate a user.
///
///
[Table("user")]
public partial class User : IdentityUser
{
[Column("id")]
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public override int Id { get; set; }
[Column("apiToken")]
[StringLength(100)]
public string ApiToken { get; set; }
[InverseProperty("User")]
public virtual ICollection ArtistRatings { get; set; }
[InverseProperty("User")]
public virtual ICollection Bookmarks { get; set; }
[InverseProperty("User")]
public virtual ICollection ChatMessages { get; set; }
[InverseProperty("User")]
public virtual ICollection UserClaims { get; set; }
[InverseProperty("Maintainer")]
public virtual ICollection Collections { get; set; }
[InverseProperty("User")]
public virtual ICollection Comments { get; set; }
[InverseProperty("User")]
public virtual ICollection CommentReactions { get; set; }
[Column("createdDate")]
public DateTime? CreatedDate { get; set; }
[Column("doUseHtmlPlayer")]
public bool? DoUseHtmlPlayer { get; set; }
[Column("email")]
[Required]
[StringLength(100)]
public override string Email { get; set; }
[Column("ftpDirectory")]
[StringLength(500)]
public string FtpDirectory { get; set; }
[Column("ftpPassword")]
[StringLength(500)]
public string FtpPassword { get; set; }
[Column("ftpUrl")]
[StringLength(250)]
public string FtpUrl { get; set; }
[Column("ftpUsername")]
[StringLength(50)]
public string FtpUsername { get; set; }
[Column("isActive")]
public bool? IsActive { get; set; }
[Column("isLocked")]
public bool? IsLocked { get; set; }
[Column("isPrivate")]
public bool? IsPrivate { get; set; }
///
/// This is the last time a user access Roadie via an API (ie Subsonic or Plex or Apache)
///
[Column("lastApiAccess")]
public DateTime? LastApiAccess { get; set; }
[Column("lastFMSessionKey")]
[StringLength(50)]
public string LastFMSessionKey { get; set; }
[Column("lastLogin")]
public DateTime? LastLogin { get; set; }
[Column("lastUpdated")]
public DateTime? LastUpdated { get; set; }
[Column("password")]
[Required]
[StringLength(100)]
public override string PasswordHash { get; set; }
[Column("playerTrackLimit")]
public short? PlayerTrackLimit { get; set; }
public virtual ICollection Playlists { get; set; }
[Column("profile", TypeName = "text")]
[StringLength(65535)]
public string Profile { get; set; }
[Column("randomReleaseLimit")]
public short? RandomReleaseLimit { get; set; }
[Column("recentlyPlayedLimit")]
public short? RecentlyPlayedLimit { get; set; }
[Column("registeredOn")]
public DateTime? RegisteredOn { get; set; }
[InverseProperty("User")]
public virtual ICollection UserReleases { get; set; }
[Column("removeTrackFromQueAfterPlayed")]
public bool? RemoveTrackFromQueAfterPlayed { get; set; }
[InverseProperty("CreatedByUser")]
public virtual ICollection InviteTokens { get; set; }
[InverseProperty("User")]
public virtual ICollection Requests { get; set; }
[Column("RoadieId")]
[StringLength(36)]
public Guid RoadieId { get; set; }
[Column("status")]
public Statuses? Status { get; set; }
[InverseProperty("User")]
public virtual ICollection Submissions { get; set; }
[Column("timeformat")]
[StringLength(50)]
public string Timeformat { get; set; }
[Column("timezone")]
[StringLength(50)]
public string Timezone { get; set; }
[Column("defaultRowsPerPage")]
public short? DefaultRowsPerPage { get; set; }
[InverseProperty("User")]
public virtual ICollection UserTracks { get; set; }
[InverseProperty("User")]
public virtual ICollection UserQues { get; set; }
[InverseProperty("User")]
public virtual ICollection UserRoles { get; set; }
}
}