65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
package api
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
db "github.com/itsscb/df/db/sqlc"
|
|
"github.com/itsscb/df/util"
|
|
)
|
|
|
|
// Server serves HTTP requests for df service
|
|
type Server struct {
|
|
store db.Store
|
|
router *gin.Engine
|
|
config util.Config
|
|
}
|
|
|
|
// NewServer creates a new HTTP server and sets up routing
|
|
func NewServer(config util.Config, store db.Store) *Server {
|
|
server := &Server{
|
|
store: store,
|
|
config: config,
|
|
}
|
|
|
|
logLevel := slog.LevelError
|
|
if config.Environment == "development" {
|
|
logLevel = slog.LevelDebug
|
|
}
|
|
|
|
opts := slog.HandlerOptions{
|
|
Level: logLevel,
|
|
}
|
|
logger := slog.New(slog.NewTextHandler(os.Stdout, &opts))
|
|
|
|
if config.LogOutput == "json" {
|
|
logger = slog.New(slog.NewJSONHandler(os.Stdout, &opts))
|
|
}
|
|
|
|
slog.SetDefault(logger)
|
|
|
|
router := gin.New()
|
|
|
|
router.Use(gin.Recovery())
|
|
|
|
router.Use(Logger())
|
|
|
|
router.POST("/accounts", server.createAccount)
|
|
router.PUT("/accounts", server.updateAccount)
|
|
router.PUT("/accounts/privacy", server.updateAccountPrivacy)
|
|
router.GET("/accounts/:id", server.getAccount)
|
|
router.GET("/accounts", server.listAccounts)
|
|
|
|
server.router = router
|
|
return server
|
|
}
|
|
|
|
func (server *Server) Start(address string) error {
|
|
return server.router.Run(address)
|
|
}
|
|
|
|
func errorResponse(err error) gin.H {
|
|
return gin.H{"error": err.Error()}
|
|
}
|