package models import ( "time" "gorm.io/gorm" ) // A user describes an account for creating content. // This may be controlled by either a human or some external script // // Data stored in external types: // - Custom info fields // - Being types // - Tags // - Relations // - Pronouns // - Roles // - AP remote links // - Auth methods and tokens (hashed pw, totp key, passkey id) type User struct { ID string `gorm:"primarykey"` // ID is a uuid for this account // Username of the user (eg "max" if the full username is @max@example.com) // Assume unchangable (once set by a user) to be kind to other implementations // Would be an easy avenue to fuck with them though Username string `gorm:"unique"` CreatedAt time.Time // When this entry was created. Automatically set by gorm // When this account was last updated. Will also be used for refreshing remote accounts. Automatically set by gorm UpdatedAt time.Time // When this entry was deleted (for soft deletions) // Soft delete means that this entry still exists in the db, but gorm won't include it anymore unless specifically told to // If not null, this entry is marked as deleted DeletedAt gorm.DeletedAt `gorm:"index"` // Server RemoteServer // `gorm:"foreignKey:ServerId;references:ID"` // The server this user is from ServerId uint // Id of the server this user is from, needed for including RemoteServer DisplayName string // The display name of the user. Can be different from the handle Description string // The description of a user account IsBot bool // Whether to mark this account as a script controlled one Icon MediaMetadata IconId string // ID of a media file used as icon Background *MediaMetadata BackgroundId *string // ID of a media file used as background image Banner *MediaMetadata BannerId *string // ID of a media file used as banner Indexable bool // Whether this account can be found by crawlers PublicKey []byte // The public key of the account // Whether this account restricts following // If true, the owner must approve of a follow request first RestrictedFollow bool Location *string Birthday *time.Time // --- And internal account stuff --- // Whether the account got verified and is allowed to be active // For local accounts being active means being allowed to login and perform interactions // For remote users, if an account is not verified, any interactions it sends are discarded Verified bool }