using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; using NpgsqlTypes; namespace Iceshrimp.Backend.Core.Database.Tables; [Table("user_profile")] [Index("EnableWordMute")] [Index("UserHost")] [Index("PinnedPageId", IsUnique = true)] public class UserProfile { [Key] [Column("userId")] [StringLength(32)] public string UserId { get; set; } = null!; /// /// The location of the User. /// [Column("location")] [StringLength(128)] public string? Location { get; set; } /// /// The birthday (YYYY-MM-DD) of the User. /// [Column("birthday")] [StringLength(10)] public string? Birthday { get; set; } /// /// The description (bio) of the User. /// [Column("description")] [StringLength(2048)] public string? Description { get; set; } [Column("fields", TypeName = "jsonb")] public string Fields { get; set; } = null!; /// /// Remote URL of the user. /// [Column("url")] [StringLength(512)] public string? Url { get; set; } [Column("ffVisibility")] public UserProfileFFVisibility FFVisibility { get; set; } [Column("mutingNotificationTypes")] public List MutingNotificationTypes { get; set; } = []; /// /// The email address of the User. /// [Column("email")] [StringLength(128)] public string? Email { get; set; } [Column("emailVerifyCode")] [StringLength(128)] public string? EmailVerifyCode { get; set; } [Column("emailVerified")] public bool EmailVerified { get; set; } [Column("twoFactorTempSecret")] [StringLength(128)] public string? TwoFactorTempSecret { get; set; } [Column("twoFactorSecret")] [StringLength(128)] public string? TwoFactorSecret { get; set; } [Column("twoFactorEnabled")] public bool TwoFactorEnabled { get; set; } /// /// The password hash of the User. It will be null if the origin of the user is local. /// [Column("password")] [StringLength(128)] public string? Password { get; set; } /// /// The client-specific data of the User. /// [Column("clientData", TypeName = "jsonb")] public string ClientData { get; set; } = null!; [Column("autoAcceptFollowed")] public bool AutoAcceptFollowed { get; set; } [Column("alwaysMarkNsfw")] public bool AlwaysMarkNsfw { get; set; } [Column("carefulBot")] public bool CarefulBot { get; set; } /// /// [Denormalized] /// [Column("userHost")] [StringLength(512)] public string? UserHost { get; set; } [Column("securityKeysAvailable")] public bool SecurityKeysAvailable { get; set; } [Column("usePasswordLessLogin")] public bool UsePasswordLessLogin { get; set; } [Column("pinnedPageId")] [StringLength(32)] public string? PinnedPageId { get; set; } /// /// The room data of the User. /// [Column("room", TypeName = "jsonb")] public string Room { get; set; } = null!; [Column("integrations", TypeName = "jsonb")] public string Integrations { get; set; } = null!; [Column("injectFeaturedNote")] public bool InjectFeaturedNote { get; set; } [Column("enableWordMute")] public bool EnableWordMute { get; set; } [Column("mutedWords", TypeName = "jsonb")] public string MutedWords { get; set; } = null!; /// /// Whether reject index by crawler. /// [Column("noCrawle")] public bool NoCrawle { get; set; } [Column("receiveAnnouncementEmail")] public bool ReceiveAnnouncementEmail { get; set; } [Column("emailNotificationTypes", TypeName = "jsonb")] public string EmailNotificationTypes { get; set; } = null!; [Column("lang")] [StringLength(32)] public string? Lang { get; set; } /// /// List of instances muted by the user. /// [Column("mutedInstances", TypeName = "jsonb")] public string MutedInstances { get; set; } = null!; [Column("publicReactions")] public bool PublicReactions { get; set; } [Column("moderationNote")] [StringLength(8192)] public string ModerationNote { get; set; } = null!; [Column("preventAiLearning")] public bool PreventAiLearning { get; set; } [Column("mentions", TypeName = "jsonb")] public string Mentions { get; set; } = null!; [ForeignKey("PinnedPageId")] [InverseProperty("UserProfile")] public virtual Page? PinnedPage { get; set; } [ForeignKey("UserId")] [InverseProperty("UserProfile")] public virtual User User { get; set; } = null!; [PgName("user_profile_ffvisibility_enum")] public enum UserProfileFFVisibility { [PgName("public")] Public, [PgName("followers")] Followers, [PgName("private")] Private, } [PgName("user_profile_mutingnotificationtypes_enum")] public enum MutingNotificationType { [PgName("follow")] Follow, [PgName("mention")] Mention, [PgName("reply")] Reply, [PgName("renote")] Renote, [PgName("quote")] Quote, [PgName("reaction")] Reaction, [PgName("pollVote")] PollVote, [PgName("pollEnded")] PollEnded, [PgName("receiveFollowRequest")] FollowRequestReceived, [PgName("followRequestAccepted")] FollowRequestAccepted, [PgName("groupInvited")] GroupInvited, [PgName("app")] App, } }