mirror of
https://github.com/warmbly/warmbly.git
synced 2026-08-18 16:01:18 +00:00
46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
"strings"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// InternalSyncOwnConversation answers the worker's priority-lane question:
|
|
// does any of the given RFC message ids, or the provider thread id, belong to
|
|
// a message this mailbox sent or already holds? Workers call it once per new
|
|
// message so a reply to outreach is admitted ahead of fair-use throttling.
|
|
//
|
|
// GET /api/v1/internal/sync/own-conversation?user_id=&email_id=&message_ids=a,b&thread_id=
|
|
// -> 200 {"own": bool}
|
|
func (h *Handler) InternalSyncOwnConversation(c *gin.Context) {
|
|
if h.EmailSyncState == nil {
|
|
c.JSON(http.StatusOK, gin.H{"own": false})
|
|
return
|
|
}
|
|
userID, err := uuid.Parse(c.Query("user_id"))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid user_id"})
|
|
return
|
|
}
|
|
emailID, err := uuid.Parse(c.Query("email_id"))
|
|
if err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid email_id"})
|
|
return
|
|
}
|
|
var ids []string
|
|
for _, raw := range strings.Split(c.Query("message_ids"), ",") {
|
|
if id := strings.TrimSpace(raw); id != "" {
|
|
ids = append(ids, id)
|
|
}
|
|
}
|
|
own, err := h.EmailSyncState.IsOwnConversation(c.Request.Context(), userID, emailID, ids, c.Query("thread_id"))
|
|
if err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
|
return
|
|
}
|
|
c.JSON(http.StatusOK, gin.H{"own": own})
|
|
}
|