49 lines
		
	
	
		
			830 B
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			49 lines
		
	
	
		
			830 B
		
	
	
	
		
			Go
		
	
	
	
|  | package frontend | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"embed" | ||
|  | 	"io/fs" | ||
|  | 	"net/http" | ||
|  | 
 | ||
|  | 	"github.com/gin-gonic/gin" | ||
|  | ) | ||
|  | 
 | ||
|  | //go:embed dist
 | ||
|  | var embeddedFiles embed.FS | ||
|  | 
 | ||
|  | type Handler struct { | ||
|  | } | ||
|  | 
 | ||
|  | func NewHandler() *Handler { | ||
|  | 	return &Handler{} | ||
|  | } | ||
|  | 
 | ||
|  | func Routes(router *gin.Engine, h *Handler) { | ||
|  | 
 | ||
|  | 	router.Use(staticMiddleware("dist")) | ||
|  | 	router.Static("/assets", "dist/assets") | ||
|  | 
 | ||
|  | 	// Gzip compression middleware
 | ||
|  | 	router.Group("/assets").Use(func(c *gin.Context) { | ||
|  | 		c.Header("Cache-Control", "max-age=31536000, immutable") | ||
|  | 		c.Next() | ||
|  | 	}) | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | func staticMiddleware(root string) gin.HandlerFunc { | ||
|  | 	fileServer := http.FileServer(getFileSystem(root)) | ||
|  | 
 | ||
|  | 	return func(c *gin.Context) { | ||
|  | 		fileServer.ServeHTTP(c.Writer, c.Request) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func getFileSystem(path string) http.FileSystem { | ||
|  | 	fs, err := fs.Sub(embeddedFiles, path) | ||
|  | 	if err != nil { | ||
|  | 		panic(err) | ||
|  | 	} | ||
|  | 	return http.FS(fs) | ||
|  | } |