diff --git a/donateApp/service/entity.go b/donateApp/service/entity.go deleted file mode 100644 index 6d43c336..00000000 --- a/donateApp/service/entity.go +++ /dev/null @@ -1 +0,0 @@ -package service diff --git a/donateApp/service/entity/campiagn.go b/donateApp/service/entity/campiagn.go new file mode 100644 index 00000000..bd914808 --- /dev/null +++ b/donateApp/service/entity/campiagn.go @@ -0,0 +1,47 @@ +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. +} + diff --git a/donateApp/service/entity/donation.go b/donateApp/service/entity/donation.go new file mode 100644 index 00000000..3c064929 --- /dev/null +++ b/donateApp/service/entity/donation.go @@ -0,0 +1,25 @@ +package service + + + +// DonationLevel represents the level of a donation (e.g., Bronze, Silver, Gold) +type DonationLevel string + +const ( + DonationLevelBronze DonationLevel = "Bronze" + DonationLevelSilver DonationLevel = "Silver" + DonationLevelGold DonationLevel = "Gold" +) + +// Donation represents a donation made to a campaign +type Donation struct { + ID DonationID `json:"id"` + UserID UserID `json:"user_id"` // Foreign Key to User service + CampaignID CampaignID `json:"campaign_id"` // Foreign Key to Campaign + Amount float64 `json:"amount"` // Using float64 for decimal, consider a dedicated decimal type + PointsEarned int `json:"points_earned"` // امتیازی که از این تراکنش خاص کسب شده + TransactionID TransactionID `json:"transaction_id"` // Foreign Key to Transaction service + CreatedAt time.Time `json:"created_at"` + DonationLevel *DonationLevel `json:"donation_level,omitempty"` // Pointer to DonationLevel, allows nil. omitempty hides if nil. +} +