//! 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_utils; pub mod day_planning; pub mod email_id; pub mod email_sync; pub mod error; pub mod id_types; pub mod models; pub mod parser; pub mod plugin; 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::{ Contact, ContactCustomField, ContactEmail, ContactPhone, NewContact, NewContactCustomField, NewContactEmail, NewContactPhone, NewSocialHandle, SocialHandle, UpdateContact, }; pub use error::CoreError; pub use id_types::{ AnnotationId, AttachmentId, ContactEmailId, ContactId, ContactPhoneId, CustomFieldId, DailyNoteId, EmailAccountId, EmailId, EventId, MilestoneId, MonthlyGoalId, MonthlyReflectionId, ProjectId, SavedViewId, SocialHandleId, 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, SortField, Subtask, Task, TaskFilterQuery, TaskSortColumn, TaskStatus, TimeSession, TimeTrackingSummary, UpdateEvent, UpdateProject, UpdateTask, User, ViewFilters, ViewType, WeeklyReview, format_file_size, mime_from_extension, }; pub use parser::{parse_quick_add, parse_quick_add_with_warnings, ParsedTask, ParseResult}; pub use day_planning::{Conflict, TimelineItem, detect_conflicts}; pub use recurrence::{calculate_next_due, calculate_next_due_with_day, calculate_next_due_rich, expand_recurrence, should_recur}; pub use repository::*; pub use urgency::calculate_urgency; pub use plugin::{ ExportPluginConfig, ImportEntityType, ImportExecuteResult, ImportFailure, ImportItem, ImportItemData, ImportOptions, ImportParseResult, ImportPluginConfig, ImportProgress, ImportProjectData, ImportTaskData, ImportEventData, PluginCapabilities, PluginMeta, PluginType, }; pub use email_id::deterministic_email_id; pub use validation::Validate; /// A specialized `Result` type for core operations. pub type Result = std::result::Result;