feat(inboxes): enforce chatwoot inbox limits

This commit is contained in:
2026-06-05 11:35:38 +08:00
parent ec94fb1ab2
commit 4ddfaed845
20 changed files with 425 additions and 138 deletions
@@ -107,6 +107,13 @@ func (h *GoogleChannelHandler) OAuthCallback(c *gin.Context) {
}
ctx := c.Request.Context()
if err := h.inboxSvc.EnsureCanCreateInbox(ctx, uint(accountID)); err != nil {
if renderInboxLimitExceeded(c, err) {
return
}
c.JSON(http.StatusUnprocessableEntity, gin.H{"error": "failed to create google inbox"})
return
}
// Exchange the code for tokens
tokenResult, err := h.goProvider.ExchangeToken(ctx, req.Code, req.RedirectURL)
@@ -146,6 +153,12 @@ func (h *GoogleChannelHandler) OAuthCallback(c *gin.Context) {
inbox, err := h.inboxSvc.Create(ctx, uint(accountID), inboxReq)
if err != nil {
applogger.L().Errorf("Failed to create Google inbox: %v", err)
if delErr := h.goService.Delete(ctx, goChannel.ID); delErr != nil {
applogger.L().Warnf("Failed to rollback Google channel after inbox creation failure: %v", delErr)
}
if renderInboxLimitExceeded(c, err) {
return
}
c.JSON(http.StatusUnprocessableEntity, gin.H{"error": "failed to create google inbox"})
return
}