mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-25 07:00:48 +09:00
140 lines
4.7 KiB
Go
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"`
|
|
}
|