1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| package service
import ( "context" "editor/internal/repository/chat" "editor/internal/repository/user" "log/slog"
"github.com/gin-gonic/gin" red "github.com/redis/go-redis/v9" )
const tokenCookie = "token"
type Service struct { eng *gin.Engine red red.UniversalClient chat chat.Repository user user.Repository }
func Init(ctx context.Context, chat chat.Repository, user user.Repository, r red.UniversalClient) (Service, error) { return Service{ eng: gin.Default(), chat: chat, user: user, red: r, }, nil }
func (s *Service) Run() { s.routes() s.eng.Run(":3134") }
func CORSMiddleware() gin.HandlerFunc { return func(c *gin.Context) { c.Writer.Header().Set("Access-Control-Allow-Origin", "http://localhost:37755") c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With") c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT")
if c.Request.Method == "OPTIONS" { c.AbortWithStatus(204) return }
c.Next() } }
func ginBodyLogMiddleware(c *gin.Context) { for _, err := range c.Errors { if err == nil { slog.Error("nil error") continue } slog.Error("error", "err", err.Error()) } }
func (s *Service) routes() { eng := gin.Default() eng.Use(CORSMiddleware()) eng.Use(ginBodyLogMiddleware)
routes := eng.Group("/api")
routes.POST("/register", s.Register) routes.POST("/login", s.Login) routes.POST("/logout", s.Logout)
routes.POST("/chat/create", s.Create) routes.GET("/chat/list", s.List) routes.POST("/chat/get_drafts", s.GetDrafts) routes.POST("/chat/get", s.GetChat)
routes.POST("/send_message", s.SendMessage) routes.POST("/set_draft", s.SetDraft)
s.eng = eng }
|