Files
zineshop/main.go

85 lines
2.2 KiB
Go

package main
import(
"os"
"io"
"net/http"
"fmt"
"github.com/gin-gonic/gin"
"github.com/joho/godotenv"
"example.com/gin/test/controllers"
"example.com/gin/test/repositories"
"example.com/gin/test/middlewares"
)
var(
roomController controllers.RoomController = controllers.NewRoomController()
userController controllers.UserController = controllers.UserController{}
authValidator middlewares.AuthValidator = middlewares.AuthValidator{}
)
func LoadEnvVariables() {
err := godotenv.Load(".env")
if err != nil {
fmt.Println("Error loading .env file")
}
}
func setupLogOutput() {
f, _ := os.Create("gin.log")
gin.DefaultWriter = io.MultiWriter(f, os.Stdout)
}
func SetReply(ctx *gin.Context, err error, message any) {
if err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{ "error": err.Error() })
} else {
ctx.JSON(http.StatusOK, message)
}
}
func main() {
LoadEnvVariables()
repositories.InitRepositories()
server := gin.New()
server.Use(gin.Recovery())
server.Use(gin.Logger())
server.Static("/static", "./static")
server.LoadHTMLGlob("views/*.html")
apiRoutes := server.Group("/api")
//apiRoutes.Use(middlewares.BasicAuth())
{
apiRoutes.POST("/rooms", authValidator.RequireAuth, roomController.Create)
apiRoutes.GET("/rooms", authValidator.OptionalAuth, roomController.GetAll)
apiRoutes.GET("/rooms/:id", authValidator.OptionalAuth, roomController.GetById)
apiRoutes.PUT("/rooms/:id", authValidator.RequireAuth, roomController.Update)
apiRoutes.DELETE("/rooms/:id", authValidator.RequireAuth, roomController.Delete)
apiRoutes.GET("/rooms/:id/users", authValidator.RequireAuth, authValidator.RequireRoomAdmin, roomController.GetUsers)
apiRoutes.POST("/rooms/:id/users", authValidator.RequireAuth, roomController.AddUser)
apiRoutes.POST("/users/register", userController.Register)
apiRoutes.POST("/users/login", userController.Login)
apiRoutes.GET("/users/validate", authValidator.OptionalAuth, userController.Validate)
}
viewRoutes := server.Group("/")
{
viewRoutes.GET("/", userController.MainView)
viewRoutes.GET("/login", userController.LoginView)
viewRoutes.GET("/register", userController.RegisterView)
viewRoutes.GET("/passwordreset", userController.ResetView)
}
server.Run(":"+os.Getenv("PORT"))
}