Files
gochat/backend/internal/model/enums.go
T

396 lines
12 KiB
Go

package model
// Enums defines string constants for all GoChat model enum fields.
// Pattern: Go string constants instead of Rails integer flags.
// Reference: Chatwoot uses integer enums; GoChat uses descriptive string values.
// --- User & Account Enums (M1) ---
type UserAvailability string
const (
UserAvailabilityOnline UserAvailability = "online"
UserAvailabilityOffline UserAvailability = "offline"
UserAvailabilityBusy UserAvailability = "busy"
)
type UserType string
const (
UserTypeUser UserType = "user"
UserTypeSuperAdmin UserType = "super_admin"
)
type AccountUserRole string
const (
AccountUserRoleAgent AccountUserRole = "agent"
AccountUserRoleAdministrator AccountUserRole = "administrator"
)
// --- Conversation & Message Enums (M3) ---
type ConversationStatus string
const (
ConversationStatusOpen ConversationStatus = "open"
ConversationStatusResolved ConversationStatus = "resolved"
ConversationStatusPending ConversationStatus = "pending"
ConversationStatusSnoozed ConversationStatus = "snoozed"
)
type ConversationPriority string
const (
ConversationPriorityUrgent ConversationPriority = "urgent"
ConversationPriorityHigh ConversationPriority = "high"
ConversationPriorityMedium ConversationPriority = "medium"
ConversationPriorityLow ConversationPriority = "low"
)
type MessageType string
const (
MessageTypeIncoming MessageType = "incoming"
MessageTypeOutgoing MessageType = "outgoing"
MessageTypeActivity MessageType = "activity"
MessageTypeTemplate MessageType = "template"
MessageTypePrivate MessageType = "private"
)
type MessageContentType string
const (
MessageContentTypeText MessageContentType = "text"
MessageContentTypeInputText MessageContentType = "input_text"
MessageContentTypeInputEmail MessageContentType = "input_email"
MessageContentTypeImage MessageContentType = "image"
MessageContentTypeAudio MessageContentType = "audio"
MessageContentTypeVideo MessageContentType = "video"
MessageContentTypeFile MessageContentType = "file"
MessageContentTypeLocation MessageContentType = "location"
MessageContentTypeEmoji MessageContentType = "emoji"
MessageContentTypeExtended MessageContentType = "extended"
MessageContentTypeQuote MessageContentType = "quote"
MessageContentTypeContact MessageContentType = "contact"
)
type SenderType string
const (
SenderTypeContact SenderType = "Contact"
SenderTypeUser SenderType = "User"
SenderTypeAgentBot SenderType = "AgentBot"
)
type MessageStatus string
const (
MessageStatusProgress MessageStatus = "progress"
MessageStatusSent MessageStatus = "sent"
MessageStatusDelivered MessageStatus = "delivered"
MessageStatusRead MessageStatus = "read"
MessageStatusFailed MessageStatus = "failed"
)
// ConversationEventType defines domain-specific events for conversation lifecycle.
type ConversationEventType string
const (
ConversationEventCreated ConversationEventType = "created"
ConversationEventUpdated ConversationEventType = "updated"
ConversationEventStatusChanged ConversationEventType = "status_changed"
ConversationEventAssigned ConversationEventType = "assigned"
ConversationEventUnassigned ConversationEventType = "unassigned"
ConversationEventDeleted ConversationEventType = "deleted"
ConversationEventMuted ConversationEventType = "muted"
ConversationEventUnmuted ConversationEventType = "unmuted"
ConversationEventLabelsUpdated ConversationEventType = "labels_updated"
ConversationEventPriorityUpdated ConversationEventType = "priority_updated"
)
// MessageEventType defines events for message lifecycle.
type MessageEventType string
const (
MessageEventCreated MessageEventType = "created"
MessageEventUpdated MessageEventType = "updated"
MessageEventDeleted MessageEventType = "deleted"
MessageEventStatusUpdated MessageEventType = "status_updated"
)
// --- Channel Enums (M2) ---
type InboxChannelType string
const (
InboxChannelTypeWebWidget InboxChannelType = "Channel::WebWidget"
InboxChannelTypeTelegram InboxChannelType = "Channel::Telegram"
InboxChannelTypeFacebook InboxChannelType = "Channel::FacebookPage"
InboxChannelTypeWhatsApp InboxChannelType = "Channel::Whatsapp"
InboxChannelTypeEmail InboxChannelType = "Channel::Email"
InboxChannelTypeTwilioSMS InboxChannelType = "Channel::TwilioSms"
InboxChannelTypeLine InboxChannelType = "Channel::Line"
InboxChannelTypeSMS InboxChannelType = "Channel::Sms"
InboxChannelTypeInstagram InboxChannelType = "Channel::Instagram"
InboxChannelTypeTikTok InboxChannelType = "Channel::TikTok"
InboxChannelTypeTwitter InboxChannelType = "Channel::Twitter"
InboxChannelTypeMicrosoft InboxChannelType = "Channel::Microsoft"
InboxChannelTypeGoogle InboxChannelType = "Channel::Google"
InboxChannelTypeAPI InboxChannelType = "Channel::Api"
InboxChannelTypeShangwutong InboxChannelType = "Channel::Shangwutong"
)
type AssignmentLogic string
const (
AssignmentLogicRoundRobin AssignmentLogic = "round_robin"
AssignmentLogicLeastBusy AssignmentLogic = "least_busy"
)
type ReplyTimeType string
const (
ReplyTimeInAFewMinutes ReplyTimeType = "in_a_few_minutes"
ReplyTimeInAFewHours ReplyTimeType = "in_a_few_hours"
ReplyTimeInADay ReplyTimeType = "in_a_day"
)
// --- Contact Enums (M4) ---
type ContactSource string
const (
ContactSourceChatwoot ContactSource = "chatwoot"
ContactSourceFacebook ContactSource = "facebook"
ContactSourceWhatsApp ContactSource = "whatsapp"
ContactSourceTelegram ContactSource = "telegram"
)
// --- Automation Enums (M6) ---
type AutomationEventType string
const (
AutomationEventMessageCreated AutomationEventType = "message_created"
AutomationEventConversationCreated AutomationEventType = "conversation_created"
AutomationEventConversationUpdated AutomationEventType = "conversation_updated"
)
type MacroVisibility string
const (
MacroVisibilityPersonal MacroVisibility = "personal"
MacroVisibilityTeam MacroVisibility = "team"
MacroVisibilityGlobal MacroVisibility = "global"
)
// --- Campaign Enums (M7) ---
type CampaignType string
const (
CampaignTypeOngoing CampaignType = "ongoing"
CampaignTypeOneOff CampaignType = "one_off"
)
// --- Notification Enums (M8) ---
type NotificationEventType string
const (
NotificationEventConversationCreated NotificationEventType = "conversation_created"
NotificationEventConversationAssigned NotificationEventType = "conversation_assigned"
NotificationEventMessageCreated NotificationEventType = "message_created"
NotificationEventConversationStatusChanged NotificationEventType = "conversation_status_changed"
NotificationEventAssigneeChanged NotificationEventType = "assignee_changed"
NotificationEventTeamChanged NotificationEventType = "team_changed"
)
type SubscriptionType string
const (
SubscriptionTypePush SubscriptionType = "push"
SubscriptionTypeEmail SubscriptionType = "email"
SubscriptionTypeWebPush SubscriptionType = "webpush"
)
// --- Knowledge Base Enums (M9) ---
type ArticleStatus string
const (
ArticleStatusDraft ArticleStatus = "draft"
ArticleStatusPublished ArticleStatus = "published"
ArticleStatusArchived ArticleStatus = "archived"
)
type PortalMemberRole string
const (
PortalMemberRoleReader PortalMemberRole = "reader"
PortalMemberRoleEditor PortalMemberRole = "editor"
PortalMemberRoleAdministrator PortalMemberRole = "administrator"
)
// --- SLA Enums (M11) ---
// Reference: Chatwoot enum sla_status: { active: 0, hit: 1, missed: 2, active_with_misses: 3 }
type SLAStatus string
const (
SLAStatusActive SLAStatus = "active"
SLAStatusHit SLAStatus = "hit"
SLAStatusMissed SLAStatus = "missed"
SLAStatusActiveWithMisses SLAStatus = "active_with_misses"
)
// SLAEventType represents the type of SLA threshold event.
// Reference: Chatwoot enum event_type: { frt: 0, nrt: 1, rt: 2 }
type SLAEventType string
const (
SLAEventFRT SLAEventType = "frt" // first response time threshold
SLAEventNRT SLAEventType = "nrt" // next response time threshold
SLAEventRT SLAEventType = "rt" // resolution time threshold
)
type AuditAction string
const (
AuditActionCreate AuditAction = "create"
AuditActionUpdate AuditAction = "update"
AuditActionDelete AuditAction = "delete"
)
type CallType string
const (
CallTypeInbound CallType = "inbound"
CallTypeOutbound CallType = "outbound"
)
type CallStatus string
const (
CallStatusRinging CallStatus = "ringing"
CallStatusOngoing CallStatus = "ongoing"
CallStatusCompleted CallStatus = "completed"
CallStatusFailed CallStatus = "failed"
)
// --- Copilot Enums (M10) ---
// NOTE: CopilotMessageType is defined in captain_models.go with user/assistant/assistant_thinking values.
// The enums below provide additional copilot-related constants.
type CopilotRole string
const (
CopilotRoleUser CopilotRole = "user"
CopilotRoleAssistant CopilotRole = "assistant"
CopilotRoleTool CopilotRole = "tool"
)
// CopilotMessageType is defined in captain_models.go (user/assistant/assistant_thinking).
// CopilotFeatureType defines the feature categories for copilot suggestions.
// --- Platform Enums (M12) ---
type DataImportStatus string
const (
DataImportStatusPending DataImportStatus = "pending"
DataImportStatusProcessing DataImportStatus = "processing"
DataImportStatusCompleted DataImportStatus = "completed"
DataImportStatusFailed DataImportStatus = "failed"
)
// --- Custom Attribute Enums (M4) ---
type AttributeModelType string
const (
AttributeModelConversation AttributeModelType = "conversation"
AttributeModelContact AttributeModelType = "contact"
)
type AttributeValueType string
const (
AttributeValueTypeText AttributeValueType = "text"
AttributeValueTypeNumber AttributeValueType = "number"
AttributeValueTypeDate AttributeValueType = "date"
AttributeValueTypeList AttributeValueType = "list"
AttributeValueTypeCheckbox AttributeValueType = "checkbox"
)
// --- Filter Enums (M4) ---
type FilterType string
const (
FilterTypeConversation FilterType = "conversation"
FilterTypeContact FilterType = "contact"
FilterTypeInbox FilterType = "inbox"
FilterTypeMessage FilterType = "message"
)
// --- Reporting Enums (M7) ---
type RollupType string
const (
RollupTypeDaily RollupType = "daily"
RollupTypeWeekly RollupType = "weekly"
RollupTypeMonthly RollupType = "monthly"
)
// --- Captain Enums (M10) ---
type CaptainDocumentStatus string
const (
CaptainDocumentStatusInProgress CaptainDocumentStatus = "in_progress"
CaptainDocumentStatusCompleted CaptainDocumentStatus = "completed"
CaptainDocumentStatusFailed CaptainDocumentStatus = "failed"
)
type HookType string
const (
HookTypeInboxOutgoing HookType = "inbox_outgoing"
HookTypeAccountOutgoing HookType = "account_outgoing"
// M11: Integration hook types (webhook/slack/shopify/linear/notion)
HookTypeWebhook HookType = "webhook"
HookTypeSlack HookType = "slack"
HookTypeShopify HookType = "shopify"
HookTypeLinear HookType = "linear"
HookTypeNotion HookType = "notion"
)
type HookStatus string
const (
HookStatusActive HookStatus = "active"
HookStatusDisabled HookStatus = "disabled"
HookStatusInactive HookStatus = "inactive"
)
// --- WhatsApp Provider ---
type WhatsAppProvider string
const (
WhatsAppProvider360Dialog WhatsAppProvider = "360dialog"
WhatsAppProviderWhatsAppCloud WhatsAppProvider = "whatsapp_cloud"
)
// --- Twilio Medium ---
type TwilioMedium string
const (
TwilioMediumSMS TwilioMedium = "sms"
TwilioMediumWhatsApp TwilioMedium = "whatsapp"
)