-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmarket_item.go
136 lines (110 loc) · 3.06 KB
/
market_item.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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package retropg
import (
"context"
"strings"
"github.com/kralamoure/retro"
)
func (r *Db) CreateMarketItem(ctx context.Context, item retro.MarketItem) (id int, err error) {
query := "INSERT INTO retro.markets_items (template_id, quantity, effects, price, market_id)" +
" VALUES ($1, $2, $3, $4, $5)" +
" RETURNING id;"
effects := retro.EncodeItemEffects(item.Effects)
err = dbError(
r.pool.QueryRow(ctx, query,
item.TemplateId, item.Quantity, strings.Join(effects, ","), item.Price, item.MarketId,
).Scan(&id),
)
return
}
func (r *Db) DeleteMarketItem(ctx context.Context, id int) error {
query := "DELETE FROM retro.markets_items" +
" WHERE id = $1;"
tag, err := r.pool.Exec(ctx, query, id)
if err != nil {
return err
}
if tag.RowsAffected() == 0 {
return retro.ErrNotFound
}
return nil
}
func (r *Db) MarketItems(ctx context.Context, gameServerId int) (items map[int]retro.MarketItem, err error) {
query := "SELECT id, template_id, quantity, effects, price, market_id" +
" FROM retro.markets_items" +
" INNER JOIN markets m ON market_id = m.id" +
" WHERE m.gameserver_id = $1;"
rows, err := r.pool.Query(ctx, query, gameServerId)
if err != nil {
return
}
defer rows.Close()
items = make(map[int]retro.MarketItem)
for rows.Next() {
var item retro.MarketItem
var effectsStr string
err = rows.Scan(&item.Id, &item.TemplateId, &item.Quantity, &effectsStr, &item.Price, &item.MarketId)
if err != nil {
return
}
if effectsStr != "" {
effects, err2 := retro.DecodeItemEffects(strings.Split(effectsStr, ","))
if err2 != nil {
err = err2
return
}
item.Effects = effects
}
items[item.Id] = item
}
return
}
func (r *Db) MarketItemsByMarketId(ctx context.Context, marketId string) (items map[int]retro.MarketItem, err error) {
query := "SELECT id, template_id, quantity, effects, price, market_id" +
" FROM retro.markets_items" +
" WHERE market_id = $1;"
rows, err := r.pool.Query(ctx, query, marketId)
if err != nil {
return
}
defer rows.Close()
items = make(map[int]retro.MarketItem)
for rows.Next() {
var item retro.MarketItem
var effectsStr string
err = rows.Scan(&item.Id, &item.TemplateId, &item.Quantity, &effectsStr, &item.Price, &item.MarketId)
if err != nil {
return
}
if effectsStr != "" {
effects, err2 := retro.DecodeItemEffects(strings.Split(effectsStr, ","))
if err2 != nil {
err = err2
return
}
item.Effects = effects
}
items[item.Id] = item
}
return
}
func (r *Db) MarketItem(ctx context.Context, id int) (item retro.MarketItem, err error) {
query := "SELECT id, template_id, quantity, effects, price, market_id" +
" FROM retro.markets_items" +
" WHERE market_id = $1;"
var effectsStr string
err = dbError(
r.pool.QueryRow(ctx, query, id).Scan(&item.Id, &item.TemplateId, &item.Quantity, &effectsStr, &item.Price, &item.MarketId),
)
if err != nil {
return
}
if effectsStr != "" {
effects, err2 := retro.DecodeItemEffects(strings.Split(effectsStr, ","))
if err2 != nil {
err = err2
return
}
item.Effects = effects
}
return
}