Files
sea/campaignservice.go
T
2026-07-13 13:02:23 +00:00

94 lines
2.5 KiB
Go

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
}