snow/person/gift.go
Eccentric 250e85732d feat: update to latest;
new shop system
more config options
arena & hype
per season stats
battle pass
better variant system
complete vbuck & starter pack store
fix bugs related to deleting account
update launcher endpoints
fixed gift loot not deleting
2024-03-10 18:16:42 +00:00

144 lines
2.7 KiB
Go

package person
import (
"time"
"github.com/ectrc/snow/aid"
"github.com/ectrc/snow/storage"
"github.com/google/uuid"
)
type Gift struct {
ID string
ProfileID string
TemplateID string
Quantity int
FromID string
GiftedAt int64
Message string
Loot []*Item
}
func NewGift(templateID string, quantity int, fromID string, message string) *Gift {
return &Gift{
ID: uuid.New().String(),
TemplateID: templateID,
Quantity: quantity,
FromID: fromID,
GiftedAt: time.Now().Unix(),
Message: message,
Loot: []*Item{},
}
}
func FromDatabaseGift(gift *storage.DB_Gift) *Gift {
loot := []*Item{}
for _, item := range gift.Loot {
loot = append(loot, FromDatabaseGiftLoot(&item))
}
return &Gift{
ID: gift.ID,
ProfileID: gift.ProfileID,
TemplateID: gift.TemplateID,
Quantity: gift.Quantity,
FromID: gift.FromID,
GiftedAt: gift.GiftedAt,
Message: gift.Message,
Loot: loot,
}
}
func (g *Gift) GenerateFortniteGiftEntry() aid.JSON {
json := aid.JSON{
"templateId": g.TemplateID,
"attributes": aid.JSON{
"params": aid.JSON{},
"lootList": []aid.JSON{},
"fromAccountId": g.FromID,
"giftedOn": time.Unix(g.GiftedAt, 0).Format(time.RFC3339),
},
"quantity": 1,
}
for _, loot := range g.Loot {
json["attributes"].(aid.JSON)["lootList"] = append(json["attributes"].(aid.JSON)["lootList"].([]aid.JSON), aid.JSON{
"itemGuid": loot.ID,
"itemType": loot.TemplateID,
"itemProfile": loot.ProfileType,
"quantity": loot.Quantity,
})
}
if g.Message != "" {
json["attributes"].(aid.JSON)["params"].(aid.JSON)["userMessage"] = g.Message
}
return json
}
func (g *Gift) AddLoot(loot *Item) {
g.Loot = append(g.Loot, loot)
//storage.Repo.SaveGiftLoot(g.ID, loot)
}
func (g *Gift) FillLoot(loot []*Item) {
g.Loot = loot
}
func (g *Gift) Delete() {
for _, item := range g.Loot {
item.DeleteLoot()
}
storage.Repo.DeleteGift(g.ID)
}
func (g *Gift) ToDatabase(profileId string) *storage.DB_Gift {
profileLoot := []storage.DB_GiftLoot{}
for _, item := range g.Loot {
profileLoot = append(profileLoot, *item.ToGiftLootDatabase(g.ID))
}
return &storage.DB_Gift{
ID: g.ID,
ProfileID: profileId,
TemplateID: g.TemplateID,
Quantity: g.Quantity,
FromID: g.FromID,
GiftedAt: g.GiftedAt,
Message: g.Message,
Loot: profileLoot,
}
}
func (g *Gift) Save() {
if g.ProfileID == "" {
return
}
storage.Repo.SaveGift(g.ToDatabase(g.ProfileID))
for _, item := range g.Loot {
item.SaveLoot(g.ID)
}
}
func (g *Gift) Snapshot() GiftSnapshot {
loot := []Item{}
for _, item := range g.Loot {
loot = append(loot, *item)
}
return GiftSnapshot{
ID: g.ID,
TemplateID: g.TemplateID,
Quantity: g.Quantity,
FromID: g.FromID,
GiftedAt: g.GiftedAt,
Message: g.Message,
Loot: loot,
}
}