website/api/routes/visitor.go
2025-01-08 00:20:11 +03:00

51 lines
951 B
Go

package routes
import (
"github.com/gofiber/fiber/v2"
"github.com/ngn13/website/api/database"
"github.com/ngn13/website/api/util"
)
const LAST_ADDRS_MAX = 30
var last_addrs []string
func GET_Visitor(c *fiber.Ctx) error {
var (
err error
count uint64
)
db := c.Locals("database").(*database.Type)
new_addr := util.GetSHA1(util.IP(c))
for _, addr := range last_addrs {
if new_addr == addr {
if count, err = db.VisitorGet(); err != nil {
return util.ErrInternal(c, err)
}
return util.JSON(c, 200, fiber.Map{
"result": count,
})
}
}
if err = db.VisitorIncrement(); err != nil {
return util.ErrInternal(c, err)
}
if count, err = db.VisitorGet(); err != nil {
return util.ErrInternal(c, err)
}
if len(last_addrs) > LAST_ADDRS_MAX {
last_addrs = append(last_addrs[:0], last_addrs[1:]...)
last_addrs = append(last_addrs, new_addr)
}
return util.JSON(c, 200, fiber.Map{
"result": count,
})
}