package listing import ( "errors" "sync" "time" "gorm.io/gorm" ) type Repository struct { db *gorm.DB publicZoneCountsMu sync.Mutex publicZoneCounts publicZoneCountCache } func NewRepository(db *gorm.DB) *Repository { return &Repository{db: db} } type publicZoneCountCache struct { Counts map[string]int64 ExpiresAt time.Time } const publicZoneCountCacheTTL = 5 * time.Second func initialPublishState(reviewRequired bool) (string, string, *time.Time) { if reviewRequired { return "draft", "pending", nil } now := time.Now() return "published", "approved", &now } func IsNotFound(err error) bool { return errors.Is(err, gorm.ErrRecordNotFound) } // roundMoney 使用统一的角精度(0.1元)