watchyourlan/backend/internal/api/api-history.go
2025-09-06 01:23:39 +07:00

60 lines
2 KiB
Go

package api
import (
"net/http"
"strconv"
"github.com/gin-gonic/gin"
"github.com/aceberg/WatchYourLAN/internal/gdb"
)
// getHistory godoc
// @Summary Get full history
// @Description Retrieve the complete history of all hosts. Not recommended, the output can be a lot
// @Tags history
// @Produce json
// @Success 200 {array} models.Host
// @Router /history [get]
func getHistory(c *gin.Context) {
hosts, _ := gdb.Select("history")
c.IndentedJSON(http.StatusOK, hosts)
}
// getHistoryByMAC godoc
// @Summary Get history by MAC
// @Description Retrieve the latest history entries for a specific host by MAC address
// @Tags history
// @Produce json
// @Param mac path string true "MAC address of the host"
// @Param num query int true "Number of history entries to return"
// @Success 200 {array} models.Host
// @Router /history/{mac} [get]
func getHistoryByMAC(c *gin.Context) {
mac := c.Param("mac")
numStr := c.Query("num")
num, _ := strconv.Atoi(numStr)
hosts := gdb.SelectLatest(mac, num)
c.IndentedJSON(http.StatusOK, hosts)
}
// getHistoryByDate godoc
// @Summary Get history by date
// @Description Retrieve history for a specific host on a given date
// @Description The date format is flexible and can be:
// @Description - Year only: `2025`
// @Description - Year + month: `2025-09`
// @Description - Full date: `2025-09-06`
// @Description - Full timestamp: `2025-09-06 00:58:26`
// @Tags history
// @Produce json
// @Param mac path string true "MAC address of the host"
// @Param date path string true "Date filter (supports YYYY, YYYY-MM, YYYY-MM-DD, YYYY-MM-DD HH:mm:ss)"
// @Success 200 {array} models.Host
// @Router /history/{mac}/{date} [get]
func getHistoryByDate(c *gin.Context) {
mac := c.Param("mac")
date := c.Param("date")
hosts := gdb.SelectByDate(mac, date)
c.IndentedJSON(http.StatusOK, hosts)
}