package service

import (
	"ulink-admin/modules/system/dao"
	"ulink-admin/modules/system/models/model"
	"ulink-admin/modules/system/models/req"
	"ulink-admin/pkg/cache"
)

type DictDataService struct {
	DictDataDao *dao.DictDataDao `inject:""`
}

// GetByType 根据字典类型查询字典数据
func (s DictDataService) GetByType(param string) []model.SysDictData {
	//先从缓存中拉数据
	key := cache.GetRedisDictKey(param)
	if key != nil {
		return key
	} else {
		//缓存中为空,从数据库中取数据
		return s.DictDataDao.GetByType(param)
	}
}

// GetList 查询字段数据集合
func (s DictDataService) GetList(query *req.DictDataQuery) (*[]model.SysDictData, int64) {
	return s.DictDataDao.GetList(query)
}
func (s DictDataService) ListAll() *[]model.SysDictData {
	return s.DictDataDao.GetDiceDataAll()
}

// GetByCode 根据code查询字典数据
func (s DictDataService) GetByCode(id int64) *model.SysDictData {
	return s.DictDataDao.GetByCode(id)
}

// Insert 新增字典数据
func (s DictDataService) Insert(data *model.SysDictData) bool {
	insert := s.DictDataDao.Insert(data)
	if insert > 0 {
		//刷新缓存数据
		byType := s.GetNoCacheByType(data.DictType)
		cache.SetDictCache(data.DictType, data.MarshalDictList(byType))
	}
	return insert > 0
}

// Insert 新增字典数据
func (s DictDataService) Update(data *model.SysDictData) bool {
	i := s.DictDataDao.Update(data)
	if i {
		//刷新缓存数据
		byType := s.GetNoCacheByType(data.DictType)
		cache.SetDictCache(data.DictType, data.MarshalDictList(byType))
		return true
	}
	return i
}

// Remove 删除数据
func (s DictDataService) Remove(codes []int64) bool {
	dictType := s.GetByCode(codes[0]).DictType
	m := model.SysDictData{}
	remove := s.DictDataDao.Remove(codes)
	if remove {
		//刷新缓存
		id := s.GetNoCacheByType(dictType)
		cache.SetDictCache(dictType, m.MarshalDictList(id))
	}
	return remove
}

// GetNoCacheByType 根据字典类型查询字典数据
func (s DictDataService) GetNoCacheByType(param string) []model.SysDictData {
	return s.DictDataDao.GetByType(param)
}