aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorBobby <[email protected]>2025-07-17 18:47:30 +0530
committerBobby <[email protected]>2025-07-17 18:47:30 +0530
commit8df8cdd7e1bdefded59d073c14aa74666740be8c (patch)
tree0af31475e1a5ffecd04a9fbce3faf5cd6bf80140 /utils
parent3c39a30a53656fa1c51afb30bb8c07f862bd39e2 (diff)
downloadimageboard-8df8cdd7e1bdefded59d073c14aa74666740be8c.tar.xz
imageboard-8df8cdd7e1bdefded59d073c14aa74666740be8c.zip
tags and ratings filter in posts, uploads progress
Diffstat (limited to 'utils')
-rw-r--r--utils/format/image.go14
-rw-r--r--utils/format/numbers.go9
-rw-r--r--utils/handlers/req_map.go57
3 files changed, 80 insertions, 0 deletions
diff --git a/utils/format/image.go b/utils/format/image.go
new file mode 100644
index 0000000..b68271c
--- /dev/null
+++ b/utils/format/image.go
@@ -0,0 +1,14 @@
+package format
+
+import (
+ "imageboard/config"
+ "strings"
+)
+
+func GetCDNURL() string {
+ cdnURL := strings.TrimRight(config.S3.PublicURL, "/") + "/" + config.S3.BucketName
+ if config.S3.FolderPath != "" {
+ cdnURL += "/" + config.S3.FolderPath
+ }
+ return cdnURL
+}
diff --git a/utils/format/numbers.go b/utils/format/numbers.go
index 8f546f1..b1561e5 100644
--- a/utils/format/numbers.go
+++ b/utils/format/numbers.go
@@ -18,3 +18,12 @@ func Int64ToString(value int64) string {
}
return fmt.Sprintf("%d", value)
}
+
+func StringToUint(value string) (uint, error) {
+ var uintValue uint
+ _, err := fmt.Sscanf(value, "%d", &uintValue)
+ if err != nil {
+ return 0, fmt.Errorf("invalid string to uint conversion: %w", err)
+ }
+ return uintValue, nil
+}
diff --git a/utils/handlers/req_map.go b/utils/handlers/req_map.go
new file mode 100644
index 0000000..2b1145c
--- /dev/null
+++ b/utils/handlers/req_map.go
@@ -0,0 +1,57 @@
+package handlers
+
+import (
+ "imageboard/config"
+ "strings"
+)
+
+func ExtractRatingsAndMap(queryParams []config.QueryParam) ([]config.Rating, map[string]bool) {
+ var ratings []config.Rating
+ ratingsMap := map[string]bool{}
+ for _, param := range queryParams {
+ if param.Key == "rating" {
+ switch strings.ToLower(param.Value) {
+ case "safe":
+ ratings = append(ratings, config.RatingSafe)
+ ratingsMap["Safe"] = true
+ case "questionable":
+ ratings = append(ratings, config.RatingQuestionable)
+ ratingsMap["Questionable"] = true
+ case "sensitive":
+ ratings = append(ratings, config.RatingSensitive)
+ ratingsMap["Sensitive"] = true
+ case "explicit":
+ ratings = append(ratings, config.RatingExplicit)
+ ratingsMap["Explicit"] = true
+ }
+ }
+ }
+ if len(ratings) == 0 {
+ ratings = []config.Rating{
+ config.RatingSafe,
+ config.RatingQuestionable,
+ config.RatingSensitive,
+ }
+ ratingsMap["Safe"] = true
+ ratingsMap["Questionable"] = true
+ ratingsMap["Sensitive"] = true
+ }
+ return ratings, ratingsMap
+}
+
+func ExtractQueryTags(queryParams []config.QueryParam) (string, []string) {
+ for _, param := range queryParams {
+ if param.Key == "tags" {
+ tags := strings.TrimSpace(param.Value)
+ if tags == "" {
+ return "", nil
+ }
+ tagList := strings.Split(tags, ",")
+ for i := range tagList {
+ tagList[i] = strings.TrimSpace(tagList[i])
+ }
+ return tags, tagList
+ }
+ }
+ return "", nil
+}