routes.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package web
  2. import (
  3. _ "embed"
  4. "fmt"
  5. "html/template"
  6. "net/http"
  7. "path/filepath"
  8. "github.com/fgm/izidic"
  9. "github.com/gin-gonic/gin"
  10. "code.osinet.fr/fgm/sqs_demo/back/services"
  11. "code.osinet.fr/fgm/sqs_demo/back/services/redriver"
  12. "code.osinet.fr/fgm/sqs_demo/front"
  13. )
  14. func SetupRoutes(rd redriver.Redriver, renderer *template.Template) *gin.Engine {
  15. const assetsPrefix = "/assets/"
  16. r := gin.Default()
  17. r.SetHTMLTemplate(renderer)
  18. r.SetTrustedProxies(nil)
  19. r.GET("/", makeHomeHandler(rd))
  20. r.StaticFS(assetsPrefix, PrefixFileSystem(assetsPrefix, http.FS(front.Assets)))
  21. r.GET("/queue/:name", makeQueueHandler(rd))
  22. return r
  23. }
  24. func HttpService(dic *izidic.Container) (any, error) {
  25. rd := dic.MustService(services.SvcRedriver).(redriver.Redriver)
  26. re := dic.MustService(services.SvcRenderer).(*template.Template)
  27. return SetupRoutes(rd, re), nil
  28. }
  29. func RendererService(dic *izidic.Container) (any, error) {
  30. renderer := template.New("redriver")
  31. renderer, err := renderer.New("queue-get").Parse(front.QueueGet)
  32. if err != nil {
  33. return nil, fmt.Errorf("failed parsing queue-get template")
  34. }
  35. return renderer, nil
  36. }
  37. // PrefixFileSystem converts a http.FileSystem by serving it requests prefixed
  38. // by the passed prefix, allowing rooted static directories matching the name
  39. // of an embed.FS.
  40. func PrefixFileSystem(prefix string, ifs http.FileSystem) http.FileSystem {
  41. return &prefixedFS{
  42. prefix: prefix,
  43. ifs: ifs,
  44. }
  45. }
  46. type prefixedFS struct {
  47. prefix string
  48. ifs http.FileSystem
  49. }
  50. // Open implements http.FileSystem
  51. func (pfs *prefixedFS) Open(name string) (http.File, error) {
  52. return pfs.ifs.Open(filepath.Join(pfs.prefix, name))
  53. }