-
Notifications
You must be signed in to change notification settings - Fork 1
/
repository.go
86 lines (77 loc) · 1.83 KB
/
repository.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
86
package gallery
import (
"github.com/flandiayingman/arkwaifu/internal/app/infra"
"github.com/flandiayingman/arkwaifu/internal/pkg/ark"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type repository struct {
db *infra.Gorm
}
func newRepository(db *infra.Gorm) (*repository, error) {
r := repository{db: db}
err := r.init()
if err != nil {
return nil, err
}
return &r, nil
}
func (r *repository) init() (err error) {
err = r.db.CreateCollateNumeric()
if err != nil {
return err
}
err = r.db.CreateEnum("game_server",
ark.CnServer,
ark.EnServer,
ark.JpServer,
ark.KrServer,
ark.TwServer,
)
if err != nil {
return err
}
err = r.db.AutoMigrate(&Gallery{})
if err != nil {
return err
}
err = r.db.AutoMigrate(&Art{})
if err != nil {
return err
}
return nil
}
func (r *repository) ListGalleries(server ark.Server) ([]Gallery, error) {
var galleries []Gallery
return galleries, r.db.
Preload("Arts", func(db *gorm.DB) *gorm.DB { return db.Order("gallery_arts.sort_id") }).
Order("id").
Find(&galleries, "server = ?", server).
Error
}
func (r *repository) GetGalleryByID(server ark.Server, id string) (*Gallery, error) {
var galleries Gallery
return &galleries, r.db.
Preload("Arts", func(db *gorm.DB) *gorm.DB { return db.Order("gallery_arts.sort_id") }).
Take(&galleries, "(server, id) = (?, ?)", server, id).
Error
}
func (r *repository) ListGalleryArts(server ark.Server) ([]Art, error) {
var arts []Art
return arts, r.db.
Order("gallery_id, sort_id, id").
Find(&arts, "server = ?", server).
Error
}
func (r *repository) GetGalleryArtByID(server ark.Server, id string) (*Art, error) {
var art Art
return &art, r.db.
Take(&art, "(server, id) = (?, ?)", server, id).
Error
}
func (r *repository) Put(g []Gallery) error {
return r.db.
Clauses(clause.OnConflict{UpdateAll: true}).
Create(&g).
Error
}