67 lines
1.1 KiB
Go
67 lines
1.1 KiB
Go
package repo
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
|
|
models "github.com/ESilva15/PTInvCertSWDB/sw/models"
|
|
"gopkg.in/yaml.v2"
|
|
)
|
|
|
|
type YamlRepo struct {
|
|
Data map[int]models.SW
|
|
}
|
|
|
|
func getSWList(fp string) (models.SWList, error) {
|
|
var swList models.SWList
|
|
|
|
file, err := os.ReadFile(fp)
|
|
if err != nil {
|
|
return models.SWList{}, err
|
|
}
|
|
|
|
err = yaml.Unmarshal(file, &swList)
|
|
if err != nil {
|
|
return models.SWList{}, err
|
|
}
|
|
|
|
return swList, nil
|
|
}
|
|
|
|
func loadDataFromFile(fp string) (map[int]models.SW, error) {
|
|
list, err := getSWList(fp)
|
|
if err != nil {
|
|
return map[int]models.SW{}, err
|
|
}
|
|
|
|
m := make(map[int]models.SW, len(list))
|
|
for k := range list {
|
|
m[list[k].CertNo] = list[k]
|
|
}
|
|
|
|
return m, nil
|
|
}
|
|
|
|
func NewYAMLRepo(fp string) (*YamlRepo, error) {
|
|
data, err := loadDataFromFile(fp)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &YamlRepo{
|
|
Data: data,
|
|
}, nil
|
|
}
|
|
|
|
func (yr YamlRepo) Get(id int) (models.SW, error) {
|
|
if val, ok := yr.Data[id]; ok {
|
|
return val, nil
|
|
}
|
|
|
|
return models.SW{}, errors.New("not found")
|
|
}
|
|
|
|
func (yr YamlRepo) Count() int {
|
|
return len(yr.Data)
|
|
}
|