2023-09-08 15:55:22 +08:00

69 lines
1.5 KiB
Go

package api
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/jmoiron/sqlx"
"main/token"
)
// Server serves HTTP requests for our banking service.
type Server struct {
store *sqlx.DB
tokenMaker token.Maker
router *gin.Engine
}
/*
Install
go get github.com/jmoiron/sqlx
go get -u github.com/golang-jwt/jwt/v5
go get -u github.com/o1egl/paseto
*/
var TokenSymmetricKey = "12345678901234567890123456789012"
func NewServer(store *sqlx.DB) (*Server, error) {
// NewPasetoMaker or NewJWTMaker, First use NewPasetoMaker
tokenMaker, err := token.NewPasetoMaker(TokenSymmetricKey)
if err != nil {
return nil, fmt.Errorf("cannot create token maker: %w", err)
}
server := &Server{
store: store,
tokenMaker: tokenMaker,
}
server.setupRouter()
return server, nil
}
func (server *Server) setupRouter() {
router := gin.Default()
// Default routers
router.GET("/welcome", server.welcome)
router.POST("/create_user", server.createUser)
router.POST("/login", server.loginUser)
// Authentication routers
authRoutes := router.Group("/").Use(authMiddleware(server.tokenMaker))
authRoutes.GET("/users", server.listUsers)
authRoutes.GET("/users/:user_id", server.getUser)
authRoutes.GET("/guilds/:guild_id", server.getGuild)
authRoutes.POST("/guilds", server.createGuild)
authRoutes.DELETE("/guilds/:guild_id", server.deleteGuild)
server.router = router
}
func (server *Server) Start(address string) error {
return server.router.Run(address)
}
func errorResponse(err error) gin.H {
return gin.H{"error": err.Error()}
}