add the visitor API endpoint
This commit is contained in:
50
api/routes/visitor.go
Normal file
50
api/routes/visitor.go
Normal file
@ -0,0 +1,50 @@
|
||||
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,
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user