package server import ( "net/http" "fmt" "log" "time" "github.com/gin-gonic/gin" "github.com/a-h/templ" "io/fs" "template_blueprint/cmd/web" "github.com/coder/websocket" "github.com/gin-contrib/cors" patientHandler "template_blueprint/pkg/handlers/patient" ) func (s *Server) RegisterRoutes() http.Handler { r := gin.Default() r.GET("/", s.HelloWorldHandler) r.GET("/websocket", s.websocketHandler) staticFiles, _ := fs.Sub(web.Files, "assets") r.StaticFS("/assets", http.FS(staticFiles)) r.GET("/web", func(c *gin.Context) { templ.Handler(web.HelloForm()).ServeHTTP(c.Writer, c.Request) }) r.POST("/hello", func(c *gin.Context) { web.HelloWebHandler(c.Writer, c.Request) }) api := r.Group("/api") patient := api.Group("/patient") { patient.POST("/insertpatient", patientHandler.InsertPatient) patient.GET("/getallpatient", patientHandler.GetAllPatient) } r.Use(cors.New(cors.Config{ AllowOrigins: []string{"*"}, // or specific domains like "http://example.com" AllowMethods: []string{"GET", "POST", "PUT", "DELETE"}, AllowHeaders: []string{"Origin", "Content-Type"}, AllowCredentials: true, })) return r } func (s *Server) HelloWorldHandler(c *gin.Context) { resp := make(map[string]string) resp["message"] = "Hello World" c.JSON(http.StatusOK, resp) } func (s *Server) websocketHandler(c *gin.Context) { w := c.Writer r := c.Request socket, err := websocket.Accept(w, r, nil) if err != nil { log.Printf("could not open websocket: %v", err) _, _ = w.Write([]byte("could not open websocket")) w.WriteHeader(http.StatusInternalServerError) return } defer socket.Close(websocket.StatusGoingAway, "server closing websocket") ctx := r.Context() socketCtx := socket.CloseRead(ctx) for { payload := fmt.Sprintf("server timestamp: %d", time.Now().UnixNano()) err := socket.Write(socketCtx, websocket.MessageText, []byte(payload)) if err != nil { break } time.Sleep(time.Second * 2) } }