//! Core domain models and business logic for GoingsOn. //! //! This crate provides the foundational types and traits for the GoingsOn //! project management application, including: //! //! - **Domain Models**: [`Project`], [`Task`], [`Event`], [`Email`], and related types //! - **Repository Traits**: Abstract data access layer for persistence //! - **Business Logic**: Urgency calculation, recurrence handling, quick-add parsing //! - **Error Handling**: Unified [`CoreError`] type for all operations //! //! # Architecture //! //! The crate follows a clean architecture pattern where domain models are //! independent of persistence concerns. Repository traits define the data //! access contract, allowing different implementations (SQLite, PostgreSQL). //! //! # Example //! //! ```rust,ignore //! use goingson_core::{Task, Priority, TaskStatus, calculate_urgency}; //! use chrono::Utc; //! //! // Calculate task urgency based on priority, status, and due date //! let urgency = calculate_urgency( //! &Priority::High, //! &TaskStatus::Pending, //! None, //! &Utc::now(), //! &["urgent"], //! ); //! ``` pub mod backup_restore; pub mod constants; pub mod contact; pub mod date_parser; pub mod date_utils; pub mod day_planning; pub mod email_compose; pub mod email_id; pub mod email_sync; pub mod error; pub mod id_types; pub mod models; pub mod parser; pub mod import; pub mod recurrence; pub mod repository; pub mod search_parser; pub mod text_utils; pub mod monthly_review; pub mod urgency; pub mod validation; pub mod weekly_review; pub use contact::{ ActivityItem, ActivityKind, Contact, ContactCustomField, ContactEmail, ContactEmailEntry, ContactPhone, NewContact, NewContactCustomField, NewContactEmail, NewContactPhone, NewSocialHandle, SocialHandle, UpdateContact, merge_activity, }; pub use error::CoreError; pub use id_types::{ AnnotationId, AttachmentId, ContactEmailId, ContactId, ContactPhoneId, CustomFieldId, DailyNoteId, EmailAccountId, EmailId, EventId, MilestoneId, MonthlyGoalId, MonthlyReflectionId, ProjectId, SavedViewId, SocialHandleId, StatusTokenId, SubtaskId, SyncAccountId, TaskId, TimeSessionId, UserId, WeeklyReviewId, }; pub use models::{ Annotation, Attachment, BackupSettings, BlockType, CssClass, DailyNote, DbValue, Email, EmailAccount, EmailAuthType, EmailThread, Event, FolderSyncState, Milestone, MilestoneStatus, MonthlyGoal, MonthlyGoalStatus, MonthlyReflection, AttachmentMeta, NewAttachment, NewBackupSettings, NewEmail, NewEmailWithTracking, NewEvent, NewEventBuilder, NewMilestone, NewProject, NewSavedView, NewTask, NewTaskBuilder, Priority, Project, ParseableEnum, ProjectStatus, ProjectType, Recurrence, RecurrenceRule, MonthlySpec, SavedView, SortDirection, SyncAccount, PositiveMinutes, SortField, StatusToken, Subtask, Task, TaskFilterQuery, TaskSortColumn, TaskStatus, TimeSession, TokenState, TOKEN_KIND_COMMIT, TimeSummaryPanel, TimeSummaryProject, TimeTrackingSummary, roll_up_time_summary, UpdateEvent, UpdateProject, UpdateTask, User, ViewFilters, ViewType, WeeklyReview, format_file_size, mime_from_extension, snap_all_day_span, }; pub use parser::{parse_quick_add, parse_quick_add_with_warnings, ParsedTask, ParseResult}; pub use date_parser::parse_natural_date; pub use day_planning::{Conflict, TimelineItem, detect_conflicts}; pub use recurrence::{calculate_next_due, calculate_next_due_in_tz, calculate_next_due_with_day, calculate_next_due_with_day_in_tz, calculate_next_due_rich, calculate_next_due_rich_in_tz, expand_recurrence, expand_recurrence_in_tz, should_recur}; pub use repository::*; pub use urgency::calculate_urgency; pub use import::{ ImportEntityType, ImportEventData, ImportExecuteResult, ImportFailure, ImportItem, ImportItemData, ImportOptions, ImportParseResult, ImportProjectData, ImportTaskData, }; pub use email_id::deterministic_email_id; pub use email_compose::{ forward_body, forward_subject, quoted_reply_body, reply_recipients, reply_subject, ComposePrefill, }; pub use validation::Validate; /// A specialized `Result` type for core operations. pub type Result = std::result::Result;