summaryrefslogtreecommitdiff
path: root/internal/gtsmodel/status.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-11-25 13:48:59 +0000
committerLibravatar GitHub <noreply@github.com>2024-11-25 14:48:59 +0100
commitcac9d65029e972af9440ff79a2617d5c524a9d64 (patch)
tree87353498b2d6bb29679cd4af8744d5b3f7cd3423 /internal/gtsmodel/status.go
parent[chore]: Bump github.com/stretchr/testify from 1.9.0 to 1.10.0 (#3564) (diff)
downloadgotosocial-cac9d65029e972af9440ff79a2617d5c524a9d64.tar.xz
[performance] convert enum strings to ints (#3558)
* convert statuses.visibility and notifications.notification_type columns from type string -> int for performance / space savings * fix test trying to compare string to int * fix instance count query using string literal instead of gtsmodel const type * ensure a default value is always set * also migrate the account settings and sin bin status tables * initialize maps outside loops and place into singular enum mapping creation func * use int16 for enum types * update sinbinstatus creation to be from a snapshot at initial creation * add snapshot of poll type at creation time
Diffstat (limited to 'internal/gtsmodel/status.go')
-rw-r--r--internal/gtsmodel/status.go55
1 files changed, 43 insertions, 12 deletions
diff --git a/internal/gtsmodel/status.go b/internal/gtsmodel/status.go
index 91c0ada61..f8bd068ab 100644
--- a/internal/gtsmodel/status.go
+++ b/internal/gtsmodel/status.go
@@ -263,27 +263,58 @@ type StatusToEmoji struct {
Emoji *Emoji `bun:"rel:belongs-to"`
}
-// Visibility represents the visibility granularity of a status.
-type Visibility string
+// Visibility represents the
+// visibility granularity of a status.
+type Visibility enumType
const (
// VisibilityNone means nobody can see this.
// It's only used for web status visibility.
- VisibilityNone Visibility = "none"
- // VisibilityPublic means this status will be visible to everyone on all timelines.
- VisibilityPublic Visibility = "public"
- // VisibilityUnlocked means this status will be visible to everyone, but will only show on home timeline to followers, and in lists.
- VisibilityUnlocked Visibility = "unlocked"
+ VisibilityNone Visibility = 1
+
+ // VisibilityPublic means this status will
+ // be visible to everyone on all timelines.
+ VisibilityPublic Visibility = 2
+
+ // VisibilityUnlocked means this status will be visible to everyone,
+ // but will only show on home timeline to followers, and in lists.
+ VisibilityUnlocked Visibility = 3
+
// VisibilityFollowersOnly means this status is viewable to followers only.
- VisibilityFollowersOnly Visibility = "followers_only"
- // VisibilityMutualsOnly means this status is visible to mutual followers only.
- VisibilityMutualsOnly Visibility = "mutuals_only"
- // VisibilityDirect means this status is visible only to mentioned recipients.
- VisibilityDirect Visibility = "direct"
+ VisibilityFollowersOnly Visibility = 4
+
+ // VisibilityMutualsOnly means this status
+ // is visible to mutual followers only.
+ VisibilityMutualsOnly Visibility = 5
+
+ // VisibilityDirect means this status is
+ // visible only to mentioned recipients.
+ VisibilityDirect Visibility = 6
+
// VisibilityDefault is used when no other setting can be found.
VisibilityDefault Visibility = VisibilityUnlocked
)
+// String returns a stringified, frontend API compatible form of Visibility.
+func (v Visibility) String() string {
+ switch v {
+ case VisibilityNone:
+ return "none"
+ case VisibilityPublic:
+ return "public"
+ case VisibilityUnlocked:
+ return "unlocked"
+ case VisibilityFollowersOnly:
+ return "followers_only"
+ case VisibilityMutualsOnly:
+ return "mutuals_only"
+ case VisibilityDirect:
+ return "direct"
+ default:
+ panic("invalid visibility")
+ }
+}
+
// Content models the simple string content
// of a status along with its ContentMap,
// which contains content entries keyed by