package models import ( "database/sql" "time" "gorm.io/gorm" ) // A note describes some user generated text content. type Note struct { ID string `gorm:"primarykey;default:gen_random_uuid()"` // Make ID a string (uuid) for other implementations CreatedAt time.Time // When this entry was created UpdatedAt time.Time // When this entry was last updated // 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"` Creator User // The user that created this note CreatorId string // Id of the creator user Remote bool // Whether the note is originally a remote one and just "cached" // Raw content of the note. So without additional formatting applied // Might already have formatting applied beforehand from the origin server RawContent string ContentWarning sql.NullString // Content warnings of the note, if it contains any RepliesTo sql.NullString // Url of the message this replies to Quotes sql.NullString // url of the message this note quotes AccessLevel NoteAccessLevel // Where to send this message to (public, home, followers, dm) Origin RemoteServer OriginId uint AttachmentRelations []NoteToAttachment `gorm:"foreignKey:NoteId"` // Attachments added on to this note EmoteRelations []NoteToEmote `gorm:"foreignKey:NoteId"` // Emotes used in this note PingRelations []NoteToPing `gorm:"foreignKey:NoteId"` // Pings/mentions this note performs Tags []NoteTag `gorm:"foreignKey:NoteId"` // Tags this note contains } type INote interface { // Get all notes by a user, paged, that are a specific access level. // Ordered by age, descending (newest first) // // SELECT * FROM @@table // WHERE creator_id = @userId AND access_level = @accessLevel // ORDER BY created_at DESC LIMIT 50 OFFSET @pageNr * 50 GetNotesPaged(userId string, pageNr uint, accessLevel uint8) ([]Note, error) }