Files
Memoh/internal/email/types.go
T

140 lines
4.7 KiB
Go

package email
import "time"
type ProviderName string
// FieldSchema describes a single configuration field for dynamic form generation.
type FieldSchema struct {
Key string `json:"key"`
Type string `json:"type"`
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
Required bool `json:"required,omitempty"`
Enum []string `json:"enum,omitempty"`
Example any `json:"example,omitempty"`
Order int `json:"order"`
}
type ConfigSchema struct {
Fields []FieldSchema `json:"fields"`
}
type ProviderMeta struct {
Provider string `json:"provider"`
DisplayName string `json:"display_name"`
ConfigSchema ConfigSchema `json:"config_schema"`
}
// ---- Provider CRUD DTOs ----
type CreateProviderRequest struct {
Name string `json:"name"`
Provider ProviderName `json:"provider"`
Config map[string]any `json:"config,omitempty"`
}
type UpdateProviderRequest struct {
Name *string `json:"name,omitempty"`
Provider *ProviderName `json:"provider,omitempty"`
Config map[string]any `json:"config,omitempty"`
}
type ProviderResponse struct {
ID string `json:"id"`
Name string `json:"name"`
Provider string `json:"provider"`
Config map[string]any `json:"config,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// ---- Binding DTOs ----
type CreateBindingRequest struct {
EmailProviderID string `json:"email_provider_id"`
EmailAddress string `json:"email_address"`
CanRead *bool `json:"can_read,omitempty"`
CanWrite *bool `json:"can_write,omitempty"`
CanDelete *bool `json:"can_delete,omitempty"`
Config map[string]any `json:"config,omitempty"`
}
type UpdateBindingRequest struct {
EmailAddress *string `json:"email_address,omitempty"`
CanRead *bool `json:"can_read,omitempty"`
CanWrite *bool `json:"can_write,omitempty"`
CanDelete *bool `json:"can_delete,omitempty"`
Config map[string]any `json:"config,omitempty"`
}
type BindingResponse struct {
ID string `json:"id"`
BotID string `json:"bot_id"`
EmailProviderID string `json:"email_provider_id"`
EmailAddress string `json:"email_address"`
CanRead bool `json:"can_read"`
CanWrite bool `json:"can_write"`
CanDelete bool `json:"can_delete"`
Config map[string]any `json:"config,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
// ---- Email message types ----
type OutboundEmail struct {
To []string `json:"to"`
Subject string `json:"subject"`
Body string `json:"body"`
HTML bool `json:"html,omitempty"`
}
type InboundEmail struct {
MessageID string `json:"message_id"`
From string `json:"from"`
To []string `json:"to"`
Subject string `json:"subject"`
BodyText string `json:"body_text"`
BodyHTML string `json:"body_html"`
Attachments []any `json:"attachments,omitempty"`
Headers map[string]any `json:"headers,omitempty"`
ReceivedAt time.Time `json:"received_at"`
}
// ---- Inbox / Outbox response DTOs ----
type InboxItemResponse struct {
ID string `json:"id"`
ProviderID string `json:"provider_id"`
BotID string `json:"bot_id,omitempty"`
MessageID string `json:"message_id"`
From string `json:"from"`
To []string `json:"to"`
Subject string `json:"subject"`
BodyText string `json:"body_text,omitempty"`
BodyHTML string `json:"body_html,omitempty"`
Attachments []any `json:"attachments,omitempty"`
Headers any `json:"headers,omitempty"`
ReceivedAt time.Time `json:"received_at"`
Status string `json:"status"`
CreatedAt time.Time `json:"created_at"`
}
type OutboxItemResponse struct {
ID string `json:"id"`
ProviderID string `json:"provider_id"`
BotID string `json:"bot_id"`
MessageID string `json:"message_id,omitempty"`
From string `json:"from"`
To []string `json:"to"`
Subject string `json:"subject"`
BodyText string `json:"body_text,omitempty"`
BodyHTML string `json:"body_html,omitempty"`
Attachments []any `json:"attachments,omitempty"`
Status string `json:"status"`
Error string `json:"error,omitempty"`
SentAt time.Time `json:"sent_at,omitempty"`
CreatedAt time.Time `json:"created_at"`
}