package service import ( "time" ) // --- Type Aliases --- // UserID is a type alias for clarity, representing foreign keys to the User service type UserID uint32 // TransactionID is a type alias for clarity, representing foreign keys to the Transaction service type TransactionID uint32 // CampaignID is a type alias for clarity, representing primary keys for Campaigns type CampaignID uint32 // DonationID is a type alias for clarity, representing primary keys for Donations type DonationID uint32 // --- Campaign Module Entities --- // CampaignStatus represents the possible states of a campaign type CampaignStatus string const ( StatusActive CampaignStatus = "active" StatusCompleted CampaignStatus = "completed" StatusCancelled CampaignStatus = "cancelled" StatusExpired CampaignStatus = "expired" // New status for deadlines ) // Campaign represents a fundraising campaign entity type Campaign struct { ID CampaignID `json:"id"` Title string `json:"title"` Description string `json:"description"` GoalAmount float64 `json:"goal_amount"` // Using float64 for decimal, consider using a dedicated decimal type for precision RaisedAmount float64 `json:"raised_amount"` Status CampaignStatus `json:"status"` CreatedAt time.Time `json:"created_at"` DeadlineAt *time.Time `json:"deadline_at,omitempty"` // Pointer to time.Time, allows nil for no deadline. omitempty hides if nil. AdminID UserID `json:"admin_id"` // Foreign Key to User service InitiatedByUserID *UserID `json:"initiated_by_user_id,omitempty"` // Pointer to UserID, allows nil. omitempty hides if nil. }