package controllers import ( "net/http" "strings" "lv8girl/internal/middleware" "lv8girl/internal/repositories" "lv8girl/internal/services" "github.com/gin-gonic/gin" ) type MessageController struct { messageSvc *services.MessageService userRepo *repositories.UserRepository } func NewMessageController() *MessageController { return &MessageController{ messageSvc: services.NewMessageService(), userRepo: repositories.NewUserRepository(), } } func (c *MessageController) ShowMessages(ctx *gin.Context) { currentUserID, currentUsername, currentUserRole, _ := middleware.GetCurrentUser(ctx) conversations, _ := c.messageSvc.GetConversations(currentUserID) ctx.HTML(http.StatusOK, "messages.html", gin.H{ "IsLoggedIn": true, "UserID": currentUserID, "Username": currentUsername, "UserRole": currentUserRole, "Conversations": conversations, }) } func (c *MessageController) ShowSendMessage(ctx *gin.Context) { currentUserID, currentUsername, currentUserRole, _ := middleware.GetCurrentUser(ctx) toUserID := parseUint(ctx.Query("to")) if toUserID == 0 { ctx.Redirect(http.StatusFound, "/") return } receiver, err := c.userRepo.FindByID(toUserID) if err != nil { ctx.String(http.StatusNotFound, "用户不存在") return } ctx.HTML(http.StatusOK, "send_message.html", gin.H{ "IsLoggedIn": true, "UserID": currentUserID, "Username": currentUsername, "UserRole": currentUserRole, "Receiver": receiver, "Error": "", "Success": "", }) } func (c *MessageController) SendMessage(ctx *gin.Context) { currentUserID, _, _, _ := middleware.GetCurrentUser(ctx) toUserID := parseUint(ctx.Query("to")) content := strings.TrimSpace(ctx.PostForm("content")) receiver, _ := c.userRepo.FindByID(toUserID) if content == "" { ctx.HTML(http.StatusOK, "send_message.html", gin.H{ "Receiver": receiver, "Error": "消息内容不能为空", "Success": "", }) return } err := c.messageSvc.SendMessage(currentUserID, toUserID, content) if err != nil { return } ctx.HTML(http.StatusOK, "send_message.html", gin.H{ "Receiver": receiver, "Error": "", "Success": "消息已发送!", }) }