Skip to content
Snippets Groups Projects
Commit 7cb0a36e authored by Levatax's avatar Levatax
Browse files

Merge branch 'registration-count' into 'main'

feat(api): add registration count API endpoint

See merge request !6
parents a60a8162 9c47618b
No related branches found
No related tags found
1 merge request!6feat(api): add registration count API endpoint
Pipeline #967 passed
...@@ -4,6 +4,7 @@ import ( ...@@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"log" "log"
"os" "os"
"sync/atomic"
"time" "time"
"github.com/gofiber/contrib/hcaptcha" "github.com/gofiber/contrib/hcaptcha"
...@@ -54,8 +55,14 @@ func serve(sig chan os.Signal, db *leveldb.DB) error { ...@@ -54,8 +55,14 @@ func serve(sig chan os.Signal, db *leveldb.DB) error {
confEnv[hCaptchaSiteKey][0], confEnv[hCaptchaSecretKey][0]) confEnv[hCaptchaSiteKey][0], confEnv[hCaptchaSecretKey][0])
} }
count := new(atomic.Uint64)
routeHCaptchaSiteKey(app, "/api", !hCaptchaEnable, conf[hCaptchaSiteKey]) routeHCaptchaSiteKey(app, "/api", !hCaptchaEnable, conf[hCaptchaSiteKey])
routeRegister(app, "/api/register", db, captcha) routeRegister(app, "/api/register", db, count, captcha)
if err := routeCount(app, "/api/count", db, count); err != nil {
return err
}
// graceful shutdown // graceful shutdown
go func() { go func() {
......
count.go 0 → 100644
package main
import (
"log"
"strconv"
"sync/atomic"
"github.com/gofiber/fiber/v3"
"github.com/syndtr/goleveldb/leveldb"
)
func routeCount(app *fiber.App, p string, db *leveldb.DB, count *atomic.Uint64) error {
var c uint64
iter := db.NewIterator(nil, nil)
for iter.Next() {
c++
}
iter.Release()
if err := iter.Error(); err != nil {
return err
}
count.Store(c)
log.Printf("registration count is %d on startup", c)
app.Get(p, func(c fiber.Ctx) error {
c.Set("Content-Type", "text/plain")
return c.SendString(strconv.FormatUint(count.Load(), 10))
})
return nil
}
...@@ -3,6 +3,7 @@ package main ...@@ -3,6 +3,7 @@ package main
import ( import (
"log" "log"
"regexp" "regexp"
"sync/atomic"
"github.com/gofiber/fiber/v3" "github.com/gofiber/fiber/v3"
"github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb"
...@@ -15,7 +16,7 @@ type registration struct { ...@@ -15,7 +16,7 @@ type registration struct {
} }
// Waitlist registration route // Waitlist registration route
func routeRegister(app *fiber.App, p string, db *leveldb.DB, captcha fiber.Handler) { func routeRegister(app *fiber.App, p string, db *leveldb.DB, count *atomic.Uint64, captcha fiber.Handler) {
app.Post(p, func(c fiber.Ctx) error { app.Post(p, func(c fiber.Ctx) error {
req := new(registration) req := new(registration)
...@@ -53,6 +54,7 @@ func routeRegister(app *fiber.App, p string, db *leveldb.DB, captcha fiber.Handl ...@@ -53,6 +54,7 @@ func routeRegister(app *fiber.App, p string, db *leveldb.DB, captcha fiber.Handl
} }
log.Printf("registered email %q", req.Email) log.Printf("registered email %q", req.Email)
count.Add(1)
return c.JSON(newMessage(true, "Email registered successfully")) return c.JSON(newMessage(true, "Email registered successfully"))
}, captcha) }, captcha)
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment