58 lines
980 B
Go
58 lines
980 B
Go
package svc
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log/slog"
|
|
"sync"
|
|
)
|
|
|
|
type EcpmConfigCli struct {
|
|
*sync.Map
|
|
}
|
|
|
|
func NewEcpmConfig() *EcpmConfigCli {
|
|
return &EcpmConfigCli{
|
|
Map: &sync.Map{},
|
|
}
|
|
}
|
|
|
|
type Ecpm struct {
|
|
AppId string `json:"appId"`
|
|
ECPM float64 `json:"eCPM"`
|
|
IPU int `json:"IPU"`
|
|
}
|
|
|
|
func (c *EcpmConfigCli) Get(appId string) (*Ecpm, bool) {
|
|
v, ok := c.Map.Load(appId)
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
return v.(*Ecpm), true
|
|
}
|
|
|
|
func (c *EcpmConfigCli) Set(appId string, ecpmConfig *Ecpm) {
|
|
c.Map.Store(appId, ecpmConfig)
|
|
}
|
|
|
|
func (c *EcpmConfigCli) SetAll(list []Ecpm) {
|
|
c.Map.Clear()
|
|
for _, v := range list {
|
|
c.Map.Store(v.AppId, &v)
|
|
}
|
|
}
|
|
|
|
func (c *EcpmConfigCli) SetEcpm(list Ecpm) {
|
|
c.Map.Store(list.AppId, &list)
|
|
}
|
|
|
|
func (c *EcpmConfigCli) SetAllByJson(appId string, data []byte) {
|
|
var list Ecpm
|
|
err := json.Unmarshal(data, &list)
|
|
if err != nil {
|
|
return
|
|
}
|
|
list.AppId = appId
|
|
slog.Info("set ecpm config", slog.AnyValue(list))
|
|
c.SetEcpm(list)
|
|
}
|