feat: 添加对话接口错误日志(CRUD 操作)

This commit is contained in:
hhs
2026-06-21 22:14:41 +08:00
parent 0a59173476
commit 03c27e7790

View File

@@ -13,6 +13,7 @@ import (
"github.com/hhs/camtalk/internal/models" "github.com/hhs/camtalk/internal/models"
"github.com/hhs/camtalk/internal/session" "github.com/hhs/camtalk/internal/session"
"github.com/hhs/camtalk/internal/store" "github.com/hhs/camtalk/internal/store"
"github.com/hhs/camtalk/internal/trace"
) )
// ConversationHandler 提供对话相关的 REST 端点。 // ConversationHandler 提供对话相关的 REST 端点。
@@ -47,6 +48,7 @@ func (h *ConversationHandler) RegisterRoutes(rg *gin.RouterGroup) {
// List GET /api/conversations — 获取当前用户的对话列表。 // List GET /api/conversations — 获取当前用户的对话列表。
func (h *ConversationHandler) List(c *gin.Context) { func (h *ConversationHandler) List(c *gin.Context) {
log := trace.FromContext(c.Request.Context())
userID := c.GetString(auth.ContextKeyUserID) userID := c.GetString(auth.ContextKeyUserID)
page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
@@ -61,6 +63,9 @@ func (h *ConversationHandler) List(c *gin.Context) {
summaries, total, err := h.sessionMgr.ListByUser(c.Request.Context(), userID, page, size) summaries, total, err := h.sessionMgr.ListByUser(c.Request.Context(), userID, page, size)
if err != nil { if err != nil {
log.Errorw("list conversations failed",
"user_id", userID,
"error", err)
c.JSON(http.StatusInternalServerError, gin.H{ c.JSON(http.StatusInternalServerError, gin.H{
"code": apperr.CodeInternalError, "code": apperr.CodeInternalError,
"message": "failed to list conversations", "message": "failed to list conversations",
@@ -83,6 +88,7 @@ type CreateConversationRequest struct {
// Create POST /api/conversations — 创建新对话。 // Create POST /api/conversations — 创建新对话。
func (h *ConversationHandler) Create(c *gin.Context) { func (h *ConversationHandler) Create(c *gin.Context) {
log := trace.FromContext(c.Request.Context())
userID := c.GetString(auth.ContextKeyUserID) userID := c.GetString(auth.ContextKeyUserID)
var req CreateConversationRequest var req CreateConversationRequest
@@ -95,6 +101,9 @@ func (h *ConversationHandler) Create(c *gin.Context) {
sessionID, err := h.sessionMgr.Create(c.Request.Context(), userID, cfg) sessionID, err := h.sessionMgr.Create(c.Request.Context(), userID, cfg)
if err != nil { if err != nil {
log.Errorw("create conversation failed",
"user_id", userID,
"error", err)
c.JSON(http.StatusInternalServerError, gin.H{ c.JSON(http.StatusInternalServerError, gin.H{
"code": apperr.CodeInternalError, "code": apperr.CodeInternalError,
"message": "failed to create conversation", "message": "failed to create conversation",
@@ -104,6 +113,9 @@ func (h *ConversationHandler) Create(c *gin.Context) {
sess, err := h.sessionMgr.Get(c.Request.Context(), sessionID) sess, err := h.sessionMgr.Get(c.Request.Context(), sessionID)
if err != nil { if err != nil {
log.Errorw("retrieve created conversation failed",
"session_id", sessionID,
"error", err)
c.JSON(http.StatusInternalServerError, gin.H{ c.JSON(http.StatusInternalServerError, gin.H{
"code": apperr.CodeInternalError, "code": apperr.CodeInternalError,
"message": "failed to retrieve created conversation", "message": "failed to retrieve created conversation",
@@ -111,6 +123,9 @@ func (h *ConversationHandler) Create(c *gin.Context) {
return return
} }
log.Infow("conversation created",
"conversation_id", sess.ID,
"user_id", userID)
c.JSON(http.StatusCreated, gin.H{ c.JSON(http.StatusCreated, gin.H{
"id": sess.ID, "id": sess.ID,
"title": sess.Title, "title": sess.Title,
@@ -144,6 +159,7 @@ type UpdateTitleRequest struct {
// UpdateTitle PATCH /api/conversations/:id — 更新对话标题。 // UpdateTitle PATCH /api/conversations/:id — 更新对话标题。
func (h *ConversationHandler) UpdateTitle(c *gin.Context) { func (h *ConversationHandler) UpdateTitle(c *gin.Context) {
log := trace.FromContext(c.Request.Context())
sessionID := c.Param("id") sessionID := c.Param("id")
// 先校验归属 // 先校验归属
@@ -176,6 +192,9 @@ func (h *ConversationHandler) UpdateTitle(c *gin.Context) {
}) })
return return
} }
log.Errorw("update title failed",
"session_id", sessionID,
"error", err)
c.JSON(http.StatusInternalServerError, gin.H{ c.JSON(http.StatusInternalServerError, gin.H{
"code": apperr.CodeInternalError, "code": apperr.CodeInternalError,
"message": "failed to update title", "message": "failed to update title",
@@ -190,6 +209,7 @@ func (h *ConversationHandler) UpdateTitle(c *gin.Context) {
// Delete DELETE /api/conversations/:id — 删除对话。 // Delete DELETE /api/conversations/:id — 删除对话。
func (h *ConversationHandler) Delete(c *gin.Context) { func (h *ConversationHandler) Delete(c *gin.Context) {
log := trace.FromContext(c.Request.Context())
sessionID := c.Param("id") sessionID := c.Param("id")
// 先校验归属 // 先校验归属
@@ -205,6 +225,9 @@ func (h *ConversationHandler) Delete(c *gin.Context) {
}) })
return return
} }
log.Errorw("delete conversation failed",
"session_id", sessionID,
"error", err)
c.JSON(http.StatusInternalServerError, gin.H{ c.JSON(http.StatusInternalServerError, gin.H{
"code": apperr.CodeInternalError, "code": apperr.CodeInternalError,
"message": "failed to delete conversation", "message": "failed to delete conversation",
@@ -221,6 +244,7 @@ func (h *ConversationHandler) Delete(c *gin.Context) {
// - limit: 返回消息数量上限,默认 50 // - limit: 返回消息数量上限,默认 50
// - before: 消息 ID 游标(用于分页),返回此 ID 之前的消息 // - before: 消息 ID 游标(用于分页),返回此 ID 之前的消息
func (h *ConversationHandler) GetMessages(c *gin.Context) { func (h *ConversationHandler) GetMessages(c *gin.Context) {
log := trace.FromContext(c.Request.Context())
sessionID := c.Param("id") sessionID := c.Param("id")
// 先校验归属 // 先校验归属
@@ -239,6 +263,9 @@ func (h *ConversationHandler) GetMessages(c *gin.Context) {
if h.msgRepo != nil { if h.msgRepo != nil {
messages, err := h.msgRepo.GetMessages(c.Request.Context(), sessionID, limit, beforeID) messages, err := h.msgRepo.GetMessages(c.Request.Context(), sessionID, limit, beforeID)
if err != nil { if err != nil {
log.Errorw("get messages failed",
"session_id", sessionID,
"error", err)
c.JSON(http.StatusInternalServerError, gin.H{ c.JSON(http.StatusInternalServerError, gin.H{
"code": apperr.CodeInternalError, "code": apperr.CodeInternalError,
"message": "failed to get messages", "message": "failed to get messages",
@@ -263,6 +290,9 @@ func (h *ConversationHandler) GetMessages(c *gin.Context) {
}) })
return return
} }
log.Errorw("get messages failed",
"session_id", sessionID,
"error", err)
c.JSON(http.StatusInternalServerError, gin.H{ c.JSON(http.StatusInternalServerError, gin.H{
"code": apperr.CodeInternalError, "code": apperr.CodeInternalError,
"message": "failed to get messages", "message": "failed to get messages",