init
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Donation struct {
|
||||
Name string `json:"name"`
|
||||
Amount int `json:"amount"`
|
||||
Message string `json:"message"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
}
|
||||
|
||||
type CampaignStats struct {
|
||||
TotalDonors int `json:"totalDonors"`
|
||||
TotalAmount int `json:"totalAmount"`
|
||||
ReleasedFish int `json:"releasedFish"` // 마리
|
||||
CollectedWaste int `json:"collectedWaste"` // kg
|
||||
PurifiedArea int `json:"purifiedArea"` // m²
|
||||
}
|
||||
|
||||
type CampaignService struct {
|
||||
mu sync.Mutex
|
||||
donations []Donation
|
||||
stats CampaignStats
|
||||
}
|
||||
|
||||
func NewCampaignService() *CampaignService {
|
||||
// 기본 통계치 설정
|
||||
return &CampaignService{
|
||||
donations: []Donation{
|
||||
{Name: "김어부", Amount: 50000, Message: "바다가 다시 풍요로워지길 바랍니다.", Timestamp: time.Now().Add(-10 * time.Minute)},
|
||||
{Name: "이바다", Amount: 30000, Message: "깨끗한 바다를 우리 아이들에게!", Timestamp: time.Now().Add(-1 * time.Hour)},
|
||||
{Name: "박수협", Amount: 100000, Message: "어업인 여러분 힘내세요!", Timestamp: time.Now().Add(-3 * time.Hour)},
|
||||
},
|
||||
stats: CampaignStats{
|
||||
TotalDonors: 12543,
|
||||
TotalAmount: 627150000, // 6억 2천만원
|
||||
ReleasedFish: 4200000, // 420만 마리
|
||||
CollectedWaste: 185000, // 185,000 kg (185톤)
|
||||
PurifiedArea: 95000, // 95,000 m²
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (c *CampaignService) GetStats() CampaignStats {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
return c.stats
|
||||
}
|
||||
|
||||
func (c *CampaignService) GetRecentDonations() []Donation {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
|
||||
// 최근 10개만 반환
|
||||
n := len(c.donations)
|
||||
if n > 10 {
|
||||
return c.donations[n-10:]
|
||||
}
|
||||
return c.donations
|
||||
}
|
||||
|
||||
func (c *CampaignService) Donate(name string, amount int, message string) CampaignStats {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
|
||||
if name == "" {
|
||||
name = "익명의 기부자"
|
||||
}
|
||||
|
||||
newDonation := Donation{
|
||||
Name: name,
|
||||
Amount: amount,
|
||||
Message: message,
|
||||
Timestamp: time.Now(),
|
||||
}
|
||||
c.donations = append(c.donations, newDonation)
|
||||
|
||||
// 기부로 인한 통계치 상승 효과 시뮬레이션
|
||||
c.stats.TotalDonors += 1
|
||||
c.stats.TotalAmount += amount
|
||||
|
||||
// 기부금에 비례하여 환경 개선 지표 증가
|
||||
// 10,000원 당: 종자 2마리 방류, 0.5kg 쓰레기 수거, 0.2m² 정화
|
||||
multiplier := float64(amount) / 10000.0
|
||||
c.stats.ReleasedFish += int(multiplier * 2)
|
||||
c.stats.CollectedWaste += int(multiplier * 0.5)
|
||||
c.stats.PurifiedArea += int(multiplier * 0.2)
|
||||
|
||||
return c.stats
|
||||
}
|
||||
Reference in New Issue
Block a user