/
rates.go
85 lines (69 loc) · 1.68 KB
/
rates.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package models
import (
"fmt"
"os"
"time"
"github.com/gocarina/gocsv"
// postgress db driver
_ "github.com/jinzhu/gorm/dialects/postgres"
)
// Rate struct
type Rate struct {
ID uint64 `gorm:"primary_key" json:"id"`
CreatedAt time.Time `json:"-"`
UpdatedAt time.Time `json:"-"`
DeletedAt *time.Time `json:"-"`
Name string `gorm:"not null" json:"name"`
// add reference to a client
}
// RateCSV csv struct
type RateCSV struct {
CreatedAt DateTime `csv:"created_at"`
Name string `csv:"name"`
}
// RateManager struct
type RateManager struct {
db *DB
}
// NewRateManager - Create a Rate manager that can be used for retrieving ReportedRecordss
func NewRateManager(db *DB) (*RateManager, error) {
db.AutoMigrate(&Rate{})
rateMgr := RateManager{}
rateMgr.db = db
return &rateMgr, nil
}
// RatesGetAll - return all records of Rates
func (db *RateManager) RatesGetAll() []Rate {
rates := []Rate{}
// Limit(100)
if err := db.db.Find(&rates); err != nil {
return rates
}
return nil
}
// RateCount - return all records of Rates
func (db *RateManager) RateCount() int {
rates := []Rate{}
var count int
if err := db.db.Find(&rates).Count(&count); err != nil {
return count
}
return 0
}
// RateSeed - will load data from data file
func (db *RateManager) RateSeed(file string) int {
csvfile, err := os.OpenFile(file, os.O_RDWR, os.ModePerm)
if err != nil {
fmt.Println(err)
}
defer csvfile.Close()
ratesCSV := []*ConsultantCSV{}
if err := gocsv.UnmarshalFile(csvfile, &ratesCSV); err != nil {
fmt.Println(err)
}
for _, r := range ratesCSV {
newR := Rate{CreatedAt: r.CreatedAt.Time, Name: r.Name}
db.db.Create(&newR)
}
return len(ratesCSV)
}