...
This commit is contained in:
parent
04ee493cd9
commit
f388fde388
@ -1,19 +1,5 @@
|
|||||||
module biz
|
module biz
|
||||||
import base
|
|
||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
// DEPRECATED: This file is deprecated and should not be used.
|
||||||
|
// Please use circle.User instead, which has all the necessary fields for MCC functionality.
|
||||||
|
// The biz.User struct has been removed as per the specifications.
|
||||||
// User represents a user in the Freezone Manager system
|
|
||||||
pub struct User {
|
|
||||||
base.Base // Base struct for common fields
|
|
||||||
pub mut:
|
|
||||||
id u32
|
|
||||||
name string
|
|
||||||
email string
|
|
||||||
password string
|
|
||||||
company string // here its just a best effort
|
|
||||||
role string
|
|
||||||
created_at ourtime.OurTime
|
|
||||||
updated_at ourtime.OurTime
|
|
||||||
}
|
|
||||||
|
15
specs/models/circle/attachment.v
Normal file
15
specs/models/circle/attachment.v
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
module circle
|
||||||
|
|
||||||
|
// Attachment represents an attachment usable for any object
|
||||||
|
// such as email, chat, etc.
|
||||||
|
// It is a generic struct that can be used for any object
|
||||||
|
// that requires an attachment.
|
||||||
|
|
||||||
|
pub struct Attachment {
|
||||||
|
pub mut:
|
||||||
|
filename string
|
||||||
|
content_type string
|
||||||
|
hash string // Hash of the attachment data
|
||||||
|
size u32 // Size in bytes
|
||||||
|
}
|
39
specs/models/circle/config.v
Normal file
39
specs/models/circle/config.v
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
module mcc
|
||||||
|
import base
|
||||||
|
|
||||||
|
|
||||||
|
//there is only 1 of this per circle called "configs"
|
||||||
|
pub struct Configs {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
configs map[string]Config //string is namefixed
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//generic config per circle, can be more than 1
|
||||||
|
pub struct Config {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
labels []Label
|
||||||
|
colors []Color
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Label {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
comment string
|
||||||
|
color u16
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub struct Color {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
id u16
|
||||||
|
name string
|
||||||
|
comment string
|
||||||
|
colorcode string //hex color code
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
module circle
|
module circle
|
||||||
|
|
||||||
// import freeflowuniverse.herolib.data.ourtime
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
import base
|
import base
|
||||||
|
|
||||||
// Role represents the role of a member in a circle
|
// Role represents the role of a member in a circle
|
||||||
@ -13,7 +13,17 @@ pub enum Role {
|
|||||||
external // means no right in this circle appart from we register this user
|
external // means no right in this circle appart from we register this user
|
||||||
}
|
}
|
||||||
|
|
||||||
// Member represents a member of a circle
|
// UserPreferences represents user preferences for MCC
|
||||||
|
pub struct UserPreferences {
|
||||||
|
pub mut:
|
||||||
|
default_calendar_id u32 // Default calendar ID
|
||||||
|
default_view string // Default view (day, week, month)
|
||||||
|
email_signature string // Default email signature
|
||||||
|
theme string // UI theme preference
|
||||||
|
notifications bool // Enable/disable notifications
|
||||||
|
}
|
||||||
|
|
||||||
|
// User represents a member of a circle
|
||||||
pub struct User {
|
pub struct User {
|
||||||
base.Base
|
base.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
@ -23,5 +33,10 @@ pub mut:
|
|||||||
contact_ids []u32 // IDs of contacts linked to this member
|
contact_ids []u32 // IDs of contacts linked to this member
|
||||||
wallet_ids []u32 // IDs of wallets owned by this member which are relevant to this circle
|
wallet_ids []u32 // IDs of wallets owned by this member which are relevant to this circle
|
||||||
pubkey string // public key of the member as used in this circle
|
pubkey string // public key of the member as used in this circle
|
||||||
|
|
||||||
|
// Additional fields needed for MCC functionality
|
||||||
|
email string // Primary email address
|
||||||
|
timezone string // User's preferred timezone
|
||||||
|
preferences UserPreferences // User preferences for MCC
|
||||||
}
|
}
|
||||||
|
|
||||||
|
284
specs/models/mcc/README.md
Normal file
284
specs/models/mcc/README.md
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
# MCC (Mail, Calendar, Contacts) Specification
|
||||||
|
|
||||||
|
This document outlines the data models for the MCC system, which is designed to be a self-hosted alternative to Google's Mail, Calendar, and Contacts services with full control over data.
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The MCC system consists of three main components:
|
||||||
|
|
||||||
|
1. **Mail**: A messaging system that can be used for email as well as chat
|
||||||
|
2. **Calendar**: A calendar system for managing events and appointments
|
||||||
|
3. **Contacts**: A contact management system
|
||||||
|
|
||||||
|
All components are integrated with the `circle.User` model, which serves as the primary user model for the system.
|
||||||
|
|
||||||
|
## Data Models
|
||||||
|
|
||||||
|
### User Model
|
||||||
|
|
||||||
|
The user model is defined in `circle/user.v` and has been enhanced with additional fields for MCC functionality:
|
||||||
|
|
||||||
|
```v
|
||||||
|
// User represents a member of a circle
|
||||||
|
pub struct User {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string // name of the member as used in this circle
|
||||||
|
description string // optional description which is relevant to this circle
|
||||||
|
role Role // role of the member in the circle
|
||||||
|
contact_ids []u32 // IDs of contacts linked to this member
|
||||||
|
wallet_ids []u32 // IDs of wallets owned by this member which are relevant to this circle
|
||||||
|
pubkey string // public key of the member as used in this circle
|
||||||
|
|
||||||
|
// Additional fields needed for MCC functionality
|
||||||
|
email string // Primary email address
|
||||||
|
timezone string // User's preferred timezone
|
||||||
|
preferences UserPreferences // User preferences for MCC
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserPreferences represents user preferences for MCC
|
||||||
|
pub struct UserPreferences {
|
||||||
|
pub mut:
|
||||||
|
default_calendar_id u32 // Default calendar ID
|
||||||
|
default_view string // Default view (day, week, month)
|
||||||
|
email_signature string // Default email signature
|
||||||
|
theme string // UI theme preference
|
||||||
|
notifications bool // Enable/disable notifications
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mail Models
|
||||||
|
|
||||||
|
The mail models are defined in `mcc/message.v`:
|
||||||
|
|
||||||
|
```v
|
||||||
|
// Message represents an email message
|
||||||
|
pub struct Message {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
id u32 // Database ID
|
||||||
|
message_id string // Unique identifier for the email
|
||||||
|
conversation_id string // ID for grouping messages in the same thread
|
||||||
|
folder string // The folder this email belongs to (inbox, sent, drafts, etc.)
|
||||||
|
labels []string // Google-style labels for organization
|
||||||
|
message string // The email body content
|
||||||
|
attachments []Attachment // Any file attachments
|
||||||
|
send_time ourtime.OurTime
|
||||||
|
|
||||||
|
date i64 // Unix timestamp when the email was sent/received
|
||||||
|
size u32 // Size of the message in bytes
|
||||||
|
read bool // Whether the email has been read
|
||||||
|
flagged bool // Whether the email has been flagged/starred
|
||||||
|
priority string // Priority level (high, normal, low)
|
||||||
|
|
||||||
|
// Header information
|
||||||
|
subject string
|
||||||
|
from []u32 // List of user IDs who sent the email
|
||||||
|
sender []u32
|
||||||
|
reply_to []u32
|
||||||
|
to []u32
|
||||||
|
cc []u32
|
||||||
|
bcc []u32
|
||||||
|
in_reply_to u32
|
||||||
|
|
||||||
|
// Additional fields
|
||||||
|
draft bool // Whether this is a draft message
|
||||||
|
scheduled_send ourtime.OurTime // Time to send if scheduled
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attachment represents an email attachment
|
||||||
|
pub struct Attachment {
|
||||||
|
pub mut:
|
||||||
|
filename string
|
||||||
|
content_type string
|
||||||
|
hash string // Hash of the attachment data
|
||||||
|
size u32 // Size in bytes
|
||||||
|
content []byte // Optional, for storing small attachments directly
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Calendar Models
|
||||||
|
|
||||||
|
The calendar models are defined in `mcc/calendar.v`:
|
||||||
|
|
||||||
|
```v
|
||||||
|
// Calendar represents a collection of events
|
||||||
|
pub struct Calendar {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string // Name of the calendar
|
||||||
|
description string // Description of the calendar
|
||||||
|
color string // Color for the calendar
|
||||||
|
owner_id u32 // User who owns this calendar
|
||||||
|
timezone string // Default timezone for this calendar
|
||||||
|
visibility string // Public, private, etc.
|
||||||
|
shared_with []CalendarShare // Users this calendar is shared with
|
||||||
|
}
|
||||||
|
|
||||||
|
// CalendarShare represents calendar sharing permissions
|
||||||
|
pub struct CalendarShare {
|
||||||
|
pub mut:
|
||||||
|
user_id u32 // User ID this calendar is shared with
|
||||||
|
permission string // Read, write, owner, etc.
|
||||||
|
}
|
||||||
|
|
||||||
|
// CalendarEvent represents a calendar event with all its properties
|
||||||
|
pub struct CalendarEvent {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
calendar_id u32 // ID of the calendar this event belongs to
|
||||||
|
title string // Event title
|
||||||
|
description string // Event details
|
||||||
|
location string // Event location
|
||||||
|
start_time ourtime.OurTime
|
||||||
|
end_time ourtime.OurTime // End time
|
||||||
|
all_day bool // True if it's an all-day event
|
||||||
|
recurrence string // RFC 5545 Recurrence Rule (e.g., "FREQ=DAILY;COUNT=10")
|
||||||
|
attendees []Attendee // List of attendees
|
||||||
|
organizer u32 // The user who created the event
|
||||||
|
status string // "CONFIRMED", "CANCELLED", "TENTATIVE"
|
||||||
|
color string // User-friendly color categorization
|
||||||
|
reminders []Reminder // Reminders for this event
|
||||||
|
timezone string // Timezone for this specific event
|
||||||
|
visibility string // Public, private, etc.
|
||||||
|
attachments []Attachment // Attachments for this event
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reminder represents a reminder for an event
|
||||||
|
pub struct Reminder {
|
||||||
|
pub mut:
|
||||||
|
event_id u32 // Event this reminder is for
|
||||||
|
time ourtime.OurTime // When to send the reminder
|
||||||
|
method string // How to deliver the reminder (email, notification, etc.)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attendee represents an attendee of an event
|
||||||
|
pub struct Attendee {
|
||||||
|
pub mut:
|
||||||
|
user_id u32 // User ID of the attendee
|
||||||
|
email string // Email of the attendee (for external attendees)
|
||||||
|
name string // Name of the attendee
|
||||||
|
response string // "ACCEPTED", "DECLINED", "TENTATIVE", "NEEDS-ACTION"
|
||||||
|
optional bool // Whether attendance is optional
|
||||||
|
comment string // Attendee's comment
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Contacts Models
|
||||||
|
|
||||||
|
The contacts models are defined in `mcc/contacts.v`:
|
||||||
|
|
||||||
|
```v
|
||||||
|
// Contact represents a contact with all their information
|
||||||
|
pub struct Contact {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string // Display name of the contact
|
||||||
|
first_name string
|
||||||
|
last_name string
|
||||||
|
nickname string
|
||||||
|
email []ContactEmail // Multiple email addresses with labels
|
||||||
|
phone []ContactPhone // Multiple phone numbers with labels
|
||||||
|
address []ContactAddress // Multiple addresses with labels
|
||||||
|
company string
|
||||||
|
job_title string
|
||||||
|
notes string
|
||||||
|
birthday ourtime.OurTime
|
||||||
|
website []string
|
||||||
|
social_profiles []SocialProfile
|
||||||
|
photo string // Path or URL to contact photo
|
||||||
|
groups []u32 // IDs of groups this contact belongs to
|
||||||
|
custom_fields []CustomField // User-defined fields
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContactEmail represents an email address with a label
|
||||||
|
pub struct ContactEmail {
|
||||||
|
pub mut:
|
||||||
|
email string
|
||||||
|
label string // Home, Work, Other, etc.
|
||||||
|
primary bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContactPhone represents a phone number with a label
|
||||||
|
pub struct ContactPhone {
|
||||||
|
pub mut:
|
||||||
|
number string
|
||||||
|
label string // Mobile, Home, Work, etc.
|
||||||
|
primary bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContactAddress represents a physical address with a label
|
||||||
|
pub struct ContactAddress {
|
||||||
|
pub mut:
|
||||||
|
street string
|
||||||
|
city string
|
||||||
|
state string
|
||||||
|
postal_code string
|
||||||
|
country string
|
||||||
|
label string // Home, Work, Other, etc.
|
||||||
|
primary bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// SocialProfile represents a social media profile
|
||||||
|
pub struct SocialProfile {
|
||||||
|
pub mut:
|
||||||
|
platform string // Facebook, Twitter, LinkedIn, etc.
|
||||||
|
username string
|
||||||
|
url string
|
||||||
|
}
|
||||||
|
|
||||||
|
// CustomField represents a user-defined field
|
||||||
|
pub struct CustomField {
|
||||||
|
pub mut:
|
||||||
|
label string
|
||||||
|
value string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContactGroup represents a group of contacts
|
||||||
|
pub struct ContactGroup {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
contacts []u32 // IDs of contacts in this group
|
||||||
|
owner_id u32 // User who owns this group
|
||||||
|
shared_with []u32 // Users this group is shared with
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Integration Points
|
||||||
|
|
||||||
|
The MCC system integrates with the existing system in the following ways:
|
||||||
|
|
||||||
|
1. **User Integration**:
|
||||||
|
- Uses `circle.User` as the primary user model
|
||||||
|
- The `biz.User` model has been deprecated and should not be used
|
||||||
|
|
||||||
|
2. **Cross-Component Integration**:
|
||||||
|
- Calendar events can reference contacts as attendees
|
||||||
|
- Emails can reference calendar events (for invitations)
|
||||||
|
- Contacts can be used in email addressing
|
||||||
|
|
||||||
|
3. **Base Integration**:
|
||||||
|
- All models extend the `base.Base` struct for common fields
|
||||||
|
- Consistent ID and timestamp handling
|
||||||
|
|
||||||
|
## System Architecture
|
||||||
|
|
||||||
|
```
|
||||||
|
+----------------+ +----------------+ +----------------+
|
||||||
|
| | | | | |
|
||||||
|
| Mail System |<----->| User System |<----->| Contact System |
|
||||||
|
| | | | | |
|
||||||
|
+----------------+ +----------------+ +----------------+
|
||||||
|
^ ^ ^
|
||||||
|
| | |
|
||||||
|
v v v
|
||||||
|
+----------------+ +----------------+ +----------------+
|
||||||
|
| | | | | |
|
||||||
|
| Calendar System|<----->| Base System |<----->| Group System |
|
||||||
|
| | | | | |
|
||||||
|
+----------------+ +----------------+ +----------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
This specification provides a comprehensive data model for creating a self-hosted alternative to Google's Mail, Calendar, and Contacts services, with a focus on data ownership and control.
|
@ -3,10 +3,67 @@ import base
|
|||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
|
|
||||||
|
// EventStatus represents the status of a calendar event
|
||||||
|
pub enum EventStatus {
|
||||||
|
confirmed
|
||||||
|
cancelled
|
||||||
|
tentative
|
||||||
|
}
|
||||||
|
|
||||||
|
// EventColor represents the color categorization of a calendar event
|
||||||
|
pub enum EventColor {
|
||||||
|
red
|
||||||
|
blue
|
||||||
|
green
|
||||||
|
yellow
|
||||||
|
purple
|
||||||
|
orange
|
||||||
|
cyan
|
||||||
|
magenta
|
||||||
|
gray
|
||||||
|
custom // For custom color values
|
||||||
|
}
|
||||||
|
|
||||||
|
// EventVisibility represents the visibility setting of a calendar event
|
||||||
|
pub enum EventVisibility {
|
||||||
|
public
|
||||||
|
private
|
||||||
|
confidential
|
||||||
|
}
|
||||||
|
|
||||||
|
// AttendeeResponse represents an attendee's response to an event invitation
|
||||||
|
pub enum AttendeeResponse {
|
||||||
|
accepted
|
||||||
|
declined
|
||||||
|
tentative
|
||||||
|
needs_action
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calendar represents a collection of events
|
||||||
|
pub struct Calendar {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string // Name of the calendar
|
||||||
|
description string // Description of the calendar
|
||||||
|
color string // Color for the calendar
|
||||||
|
owner_id u32 // User who owns this calendar
|
||||||
|
timezone string // Default timezone for this calendar
|
||||||
|
visibility string // Public, private, etc.
|
||||||
|
shared_with []CalendarShare // Users this calendar is shared with
|
||||||
|
}
|
||||||
|
|
||||||
|
// CalendarShare represents calendar sharing permissions
|
||||||
|
pub struct CalendarShare {
|
||||||
|
pub mut:
|
||||||
|
user_id u32 // User ID this calendar is shared with
|
||||||
|
permission string // Read, write, owner, etc.
|
||||||
|
}
|
||||||
|
|
||||||
// CalendarEvent represents a calendar event with all its properties
|
// CalendarEvent represents a calendar event with all its properties
|
||||||
pub struct CalendarEvent {
|
pub struct CalendarEvent {
|
||||||
base.Base
|
base.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
|
calendar_id u32 // ID of the calendar this event belongs to
|
||||||
title string // Event title
|
title string // Event title
|
||||||
description string // Event details
|
description string // Event details
|
||||||
location string // Event location
|
location string // Event location
|
||||||
@ -14,9 +71,38 @@ pub mut:
|
|||||||
end_time ourtime.OurTime // End time
|
end_time ourtime.OurTime // End time
|
||||||
all_day bool // True if it's an all-day event
|
all_day bool // True if it's an all-day event
|
||||||
recurrence string // RFC 5545 Recurrence Rule (e.g., "FREQ=DAILY;COUNT=10")
|
recurrence string // RFC 5545 Recurrence Rule (e.g., "FREQ=DAILY;COUNT=10")
|
||||||
attendees []u32 // List of contact id's
|
attendees []Attendee // List of attendees
|
||||||
organizer u32 // The user (see circle) who created the event
|
organizer u32 // The user (see circle) who created the event
|
||||||
status string // "CONFIRMED", "CANCELLED", "TENTATIVE" //TODO: make enum
|
status EventStatus // Status of the event
|
||||||
color string // User-friendly color categorization, e.g., "red", "blue" //TODO: make enum
|
color EventColor // User-friendly color categorization
|
||||||
reminder []ourtime.OurTime // Reminder time before the event
|
reminders []Reminder // Reminders for this event
|
||||||
|
timezone string // Timezone for this specific event
|
||||||
|
visibility EventVisibility // Visibility setting for the event
|
||||||
|
attachments []Attachment // Attachments for this event
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reminder represents a reminder for an event
|
||||||
|
pub struct Reminder {
|
||||||
|
pub mut:
|
||||||
|
event_id u32 // Event this reminder is for
|
||||||
|
time ourtime.OurTime // When to send the reminder
|
||||||
|
method string // How to deliver the reminder (email, notification, etc.)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attendee represents an attendee of an event
|
||||||
|
pub struct Attendee {
|
||||||
|
pub mut:
|
||||||
|
contact_id u32 // User ID of the attendee
|
||||||
|
response AttendeeResponse // Attendee's response to the event invitation
|
||||||
|
optional bool // Whether attendance is optional
|
||||||
|
comment string // Attendee's comment
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attachment represents an attachment for a calendar event
|
||||||
|
pub struct Attachment {
|
||||||
|
pub mut:
|
||||||
|
filename string
|
||||||
|
content_type string
|
||||||
|
hash string // Hash of the attachment data
|
||||||
|
size u32 // Size in bytes
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,111 @@
|
|||||||
module biz
|
module biz
|
||||||
import base
|
import base
|
||||||
|
|
||||||
// import freeflowuniverse.herolib.data.ourtime
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
|
|
||||||
|
// ContactLabelType represents the type of label for contact information
|
||||||
|
pub enum ContactLabelType {
|
||||||
|
home
|
||||||
|
work
|
||||||
|
mobile
|
||||||
|
other
|
||||||
|
main
|
||||||
|
personal
|
||||||
|
business
|
||||||
|
school
|
||||||
|
custom // For user-defined labels
|
||||||
|
}
|
||||||
|
|
||||||
|
// SocialPlatformType represents the type of social media platform
|
||||||
|
pub enum SocialPlatformType {
|
||||||
|
facebook
|
||||||
|
twitter
|
||||||
|
linkedin
|
||||||
|
instagram
|
||||||
|
github
|
||||||
|
youtube
|
||||||
|
tiktok
|
||||||
|
reddit
|
||||||
|
pinterest
|
||||||
|
snapchat
|
||||||
|
whatsapp
|
||||||
|
telegram
|
||||||
|
discord
|
||||||
|
mastodon
|
||||||
|
other
|
||||||
|
}
|
||||||
|
|
||||||
|
// Contact represents a contact with all their information
|
||||||
pub struct Contact {
|
pub struct Contact {
|
||||||
base.Base
|
base.Base
|
||||||
pub mut:
|
pub mut:
|
||||||
name string // name of the contact as we use in this circle
|
name string // Display name of the contact
|
||||||
first_name string
|
first_name string
|
||||||
last_name string
|
last_name string
|
||||||
email []string
|
nickname string
|
||||||
tel []string
|
email []ContactEmail // Multiple email addresses with labels
|
||||||
|
phone []ContactPhone // Multiple phone numbers with labels
|
||||||
|
address []ContactAddress // Multiple addresses with labels
|
||||||
|
company string
|
||||||
|
job_title string
|
||||||
|
notes string
|
||||||
|
birthday ourtime.OurTime
|
||||||
|
website []string
|
||||||
|
social_profiles []SocialProfile
|
||||||
|
photo u32 // link to the attachment in the circle
|
||||||
|
custom_fields []CustomField // User-defined fields
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ContactEmail represents an email address with a label
|
||||||
|
pub struct ContactEmail {
|
||||||
|
pub mut:
|
||||||
|
email string
|
||||||
|
label ContactLabelType // Type of email address
|
||||||
|
primary bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContactPhone represents a phone number with a label
|
||||||
|
pub struct ContactPhone {
|
||||||
|
pub mut:
|
||||||
|
number string
|
||||||
|
label ContactLabelType // Type of phone number
|
||||||
|
primary bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContactAddress represents a physical address with a label
|
||||||
|
pub struct ContactAddress {
|
||||||
|
pub mut:
|
||||||
|
street string
|
||||||
|
city string
|
||||||
|
state string
|
||||||
|
postal_code string
|
||||||
|
country string
|
||||||
|
label ContactLabelType // Type of address
|
||||||
|
primary bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// SocialProfile represents a social media profile
|
||||||
|
pub struct SocialProfile {
|
||||||
|
pub mut:
|
||||||
|
platform SocialPlatformType // Type of social media platform
|
||||||
|
username string
|
||||||
|
url string
|
||||||
|
}
|
||||||
|
|
||||||
|
// CustomField represents a user-defined field
|
||||||
|
pub struct CustomField {
|
||||||
|
pub mut:
|
||||||
|
label string
|
||||||
|
value string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContactGroup represents a group of contacts
|
||||||
|
pub struct ContactGroup {
|
||||||
|
base.Base
|
||||||
|
pub mut:
|
||||||
|
name string
|
||||||
|
description string
|
||||||
|
contacts []u32 // IDs of contacts in this group
|
||||||
|
owner_id u32 // User who owns this group
|
||||||
|
shared_with []u32 // Users this group is shared with
|
||||||
|
}
|
||||||
|
@ -3,22 +3,29 @@ import base
|
|||||||
|
|
||||||
import freeflowuniverse.herolib.data.ourtime
|
import freeflowuniverse.herolib.data.ourtime
|
||||||
|
|
||||||
// our attempt to make a message object which can be used for email as well as chat
|
// MessagePriority represents the priority level of a message
|
||||||
|
pub enum MessagePriority {
|
||||||
|
low
|
||||||
|
normal
|
||||||
|
high
|
||||||
|
}
|
||||||
|
|
||||||
|
// Message represents an email message that can be used for email as well as chat
|
||||||
pub struct Message {
|
pub struct Message {
|
||||||
base.Base // Base struct for common fields
|
base.Base // Base struct for common fields
|
||||||
pub mut:
|
pub mut:
|
||||||
// Database ID
|
// Database ID
|
||||||
id u32 // Database ID (assigned by DBHandler)
|
conversation_id string // ID for grouping messages in the same thread
|
||||||
message_id string // Unique identifier for the email
|
folder string // The folder this email belongs to (inbox, sent, drafts, etc.)
|
||||||
folder string // The folder this email belongs to (inbox, sent, drafts, etc.)
|
labels []u16 //from circle config called message (config with name message)
|
||||||
message string // The email body content
|
message string // The email body content
|
||||||
attachments []Attachment // Any file attachments
|
attachments []u32// Any file attachment, is in circle
|
||||||
send_time ourtime.OurTime
|
send_time ourtime.OurTime
|
||||||
|
scheduled_send ourtime.OurTime // Time to send if scheduled
|
||||||
date i64 // Unix timestamp when the email was sent/received
|
size u32 // Size of the message in bytes
|
||||||
size u32 // Size of the message in bytes
|
read bool // Whether the email has been read
|
||||||
read bool // Whether the email has been read
|
flagged bool // Whether the email has been flagged/starred
|
||||||
flagged bool // Whether the email has been flagged/starred
|
priority MessagePriority // Priority level
|
||||||
|
|
||||||
// Header information
|
// Header information
|
||||||
subject string
|
subject string
|
||||||
@ -29,12 +36,5 @@ pub mut:
|
|||||||
cc []u32
|
cc []u32
|
||||||
bcc []u32
|
bcc []u32
|
||||||
in_reply_to u32
|
in_reply_to u32
|
||||||
}
|
draft bool // Whether this is a draft message
|
||||||
|
|
||||||
// Attachment represents an email attachment
|
|
||||||
pub struct Attachment {
|
|
||||||
pub mut:
|
|
||||||
filename string
|
|
||||||
content_type string
|
|
||||||
hash string // Hash of the attachment data
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user