Skip to main content

max / goingson

4.1 KB · 103 lines History Blame Raw
1 //! Core domain models and business logic for GoingsOn.
2 //!
3 //! This crate provides the foundational types and traits for the GoingsOn
4 //! project management application, including:
5 //!
6 //! - **Domain Models**: [`Project`], [`Task`], [`Event`], [`Email`], and related types
7 //! - **Repository Traits**: Abstract data access layer for persistence
8 //! - **Business Logic**: Urgency calculation, recurrence handling, quick-add parsing
9 //! - **Error Handling**: Unified [`CoreError`] type for all operations
10 //!
11 //! # Architecture
12 //!
13 //! The crate follows a clean architecture pattern where domain models are
14 //! independent of persistence concerns. Repository traits define the data
15 //! access contract, allowing different implementations (SQLite, PostgreSQL).
16 //!
17 //! # Example
18 //!
19 //! ```rust,ignore
20 //! use goingson_core::{Task, Priority, TaskStatus, calculate_urgency};
21 //! use chrono::Utc;
22 //!
23 //! // Calculate task urgency based on priority, status, and due date
24 //! let urgency = calculate_urgency(
25 //! &Priority::High,
26 //! &TaskStatus::Pending,
27 //! None,
28 //! &Utc::now(),
29 //! &["urgent"],
30 //! );
31 //! ```
32
33 pub mod backup_restore;
34 pub mod constants;
35 pub mod contact;
36 pub mod date_parser;
37 pub mod date_utils;
38 pub mod day_planning;
39 pub mod email_compose;
40 pub mod email_id;
41 pub mod email_sync;
42 pub mod error;
43 pub mod id_types;
44 pub mod models;
45 pub mod parser;
46 pub mod import;
47 pub mod recurrence;
48 pub mod repository;
49 pub mod search_parser;
50 pub mod text_utils;
51 pub mod monthly_review;
52 pub mod urgency;
53 pub mod validation;
54 pub mod weekly_review;
55
56 pub use contact::{
57 ActivityItem, ActivityKind, Contact, ContactCustomField, ContactEmail, ContactEmailEntry,
58 ContactPhone, NewContact, NewContactCustomField, NewContactEmail, NewContactPhone,
59 NewSocialHandle, SocialHandle, UpdateContact, merge_activity,
60 };
61 pub use error::CoreError;
62 pub use id_types::{
63 AnnotationId, AttachmentId, ContactEmailId, ContactId, ContactPhoneId, CustomFieldId,
64 DailyNoteId, EmailAccountId, EmailId, EventId, MilestoneId, MonthlyGoalId,
65 MonthlyReflectionId, ProjectId, SavedViewId, SocialHandleId,
66 StatusTokenId, SubtaskId, SyncAccountId, TaskId, TimeSessionId, UserId, WeeklyReviewId,
67 };
68 pub use models::{
69 Annotation, Attachment, BackupSettings, BlockType, CssClass, DailyNote, DbValue, Email, EmailAccount,
70 EmailAuthType, EmailThread, Event, FolderSyncState, Milestone,
71 MilestoneStatus, MonthlyGoal, MonthlyGoalStatus, MonthlyReflection,
72 AttachmentMeta, NewAttachment, NewBackupSettings, NewEmail, NewEmailWithTracking, NewEvent, NewEventBuilder,
73 NewMilestone, NewProject, NewSavedView, NewTask, NewTaskBuilder, Priority,
74 Project, ParseableEnum, ProjectStatus, ProjectType, Recurrence, RecurrenceRule, MonthlySpec,
75 SavedView, SortDirection,
76 SyncAccount,
77 PositiveMinutes, SortField, StatusToken, Subtask, Task, TaskFilterQuery, TaskSortColumn, TaskStatus, TimeSession,
78 TokenState, TOKEN_KIND_COMMIT,
79 TimeSummaryPanel, TimeSummaryProject, TimeTrackingSummary, roll_up_time_summary,
80 UpdateEvent, UpdateProject, UpdateTask, User,
81 ViewFilters, ViewType, WeeklyReview,
82 format_file_size, mime_from_extension, snap_all_day_span,
83 };
84 pub use parser::{parse_quick_add, parse_quick_add_with_warnings, ParsedTask, ParseResult};
85 pub use date_parser::parse_natural_date;
86 pub use day_planning::{Conflict, TimelineItem, detect_conflicts};
87 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};
88 pub use repository::*;
89 pub use urgency::calculate_urgency;
90 pub use import::{
91 ImportEntityType, ImportEventData, ImportExecuteResult, ImportFailure, ImportItem,
92 ImportItemData, ImportOptions, ImportParseResult, ImportProjectData, ImportTaskData,
93 };
94 pub use email_id::deterministic_email_id;
95 pub use email_compose::{
96 forward_body, forward_subject, quoted_reply_body, reply_recipients, reply_subject,
97 ComposePrefill,
98 };
99 pub use validation::Validate;
100
101 /// A specialized `Result` type for core operations.
102 pub type Result<T> = std::result::Result<T, CoreError>;
103