1 Star 0 Fork 0

carlmax_my/console-core-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
store.go 1.90 KB
一键复制 编辑 原始数据 按行查看 历史
carlmax_my 提交于 2024-12-02 21:32 . init project
package store
import (
"encoding/json"
"errors"
"os"
"github.com/samber/lo"
)
type BaseModel[T interface{}] interface {
GetID() string
Assign(record T)
AssignForce(record T)
}
type BaseJsonStore[T BaseModel[T]] struct {
data []T
jsonFile string
}
func NewStore[T BaseModel[T]](jsonFile string) *BaseJsonStore[T] {
r := &BaseJsonStore[T]{jsonFile: jsonFile}
r.Init()
return r
}
// load from json file, tmp use
func (s *BaseJsonStore[T]) Init() error {
bytes, err := os.ReadFile(s.jsonFile)
if err != nil {
return errors.New("read json file error:" + err.Error())
}
var data []T
if err := json.Unmarshal(bytes, &data); err != nil {
return errors.New("parse json file error:" + err.Error())
}
s.data = data
return nil
}
func (s *BaseJsonStore[T]) Refresh() error {
return s.Init()
}
// save to json file, tmp use
func (s *BaseJsonStore[T]) Save() error {
bytes, err := json.Marshal(s.data)
if err != nil {
return errors.New("marshal json file error:" + err.Error())
}
if err := os.WriteFile(s.jsonFile, bytes, 0777); err != nil {
return errors.New("write json file error:" + err.Error())
}
return nil
}
func (s *BaseJsonStore[T]) Data() []T {
return s.data
}
func (s *BaseJsonStore[T]) ById(id string) T {
found, ok := lo.Find(s.data, func(p T) bool {
return p.GetID() == id
})
if ok {
return found
}
return found
}
// add if not exist, or force replace it
func (s *BaseJsonStore[T]) Add(record T) bool {
return s.addOrUpdate(record, true)
}
// add if not exist, or update it, not force
func (s *BaseJsonStore[T]) Update(record T) bool {
return s.addOrUpdate(record, false)
}
func (s *BaseJsonStore[T]) addOrUpdate(record T, replace bool) bool {
old, ok := lo.Find(s.data, func(p T) bool {
return p.GetID() == record.GetID()
})
if !ok {
s.data = append(s.data, record)
return true
}
if replace {
old.AssignForce(record)
} else {
old.Assign(record)
}
return true
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/carlmax_my/console-core-go.git
git@gitee.com:carlmax_my/console-core-go.git
carlmax_my
console-core-go
console-core-go
v0.0.5

搜索帮助

0d507c66 1850385 C8b1a773 1850385