Fix Athena Profile has 0 anything!
This commit is contained in:
parent
4cc7032ea0
commit
6b09cd5e82
13
aid/aid.go
Normal file
13
aid/aid.go
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
package aid
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
)
|
||||||
|
|
||||||
|
func WaitForExit() {
|
||||||
|
sc := make(chan os.Signal, 1)
|
||||||
|
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
|
||||||
|
<-sc
|
||||||
|
}
|
21
main.go
21
main.go
|
@ -1,11 +1,6 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"os/signal"
|
|
||||||
"syscall"
|
|
||||||
|
|
||||||
"github.com/ectrc/snow/aid"
|
"github.com/ectrc/snow/aid"
|
||||||
"github.com/ectrc/snow/config"
|
"github.com/ectrc/snow/config"
|
||||||
"github.com/ectrc/snow/person"
|
"github.com/ectrc/snow/person"
|
||||||
|
@ -71,11 +66,10 @@ func init() {
|
||||||
user.CommonCoreProfile.Gifts.AddGift(giftBox)
|
user.CommonCoreProfile.Gifts.AddGift(giftBox)
|
||||||
|
|
||||||
currency := person.NewItem("Currency:MtxPurchased", 100)
|
currency := person.NewItem("Currency:MtxPurchased", 100)
|
||||||
user.CommonCoreProfile.Items.AddItem(currency)
|
user.AthenaProfile.Items.AddItem(currency)
|
||||||
|
|
||||||
user.Save()
|
user.Save()
|
||||||
user.AthenaProfile.Diff(snapshot)
|
user.AthenaProfile.Diff(snapshot)
|
||||||
aid.PrintJSON(user.CommonCoreProfile.Snapshot())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
go storage.Cache.CacheKiller()
|
go storage.Cache.CacheKiller()
|
||||||
|
@ -84,11 +78,14 @@ func init() {
|
||||||
func main() {
|
func main() {
|
||||||
persons := person.AllFromDatabase()
|
persons := person.AllFromDatabase()
|
||||||
|
|
||||||
for _, person := range persons {
|
for _, p := range persons {
|
||||||
fmt.Println(person)
|
p.AthenaProfile.Items.RangeItems(func(id string, item *person.Item) bool {
|
||||||
|
aid.PrintJSON(item)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
|
||||||
|
aid.PrintJSON(p.Snapshot())
|
||||||
}
|
}
|
||||||
|
|
||||||
sc := make(chan os.Signal, 1)
|
aid.WaitForExit()
|
||||||
signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
|
|
||||||
<-sc
|
|
||||||
}
|
}
|
49
person/attribute.go
Normal file
49
person/attribute.go
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
package person
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/ectrc/snow/storage"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Attribute struct {
|
||||||
|
Key string
|
||||||
|
Value interface{}
|
||||||
|
Type string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewAttribute(key string, value interface{}, attributeType string) *Attribute {
|
||||||
|
return &Attribute{
|
||||||
|
Key: key,
|
||||||
|
Value: value,
|
||||||
|
Type: attributeType,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func FromDatabaseAttribute(db *storage.DB_PAttribute) *Attribute {
|
||||||
|
var value interface{}
|
||||||
|
err := json.Unmarshal([]byte(db.ValueJSON), &value)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &Attribute{
|
||||||
|
Key: db.Key,
|
||||||
|
Value: value,
|
||||||
|
Type: db.Type,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *Attribute) ToDatabase(profileId string) *storage.DB_PAttribute {
|
||||||
|
value, err := json.Marshal(a.Value)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &storage.DB_PAttribute{
|
||||||
|
ProfileID: profileId,
|
||||||
|
Key: a.Key,
|
||||||
|
ValueJSON: string(value),
|
||||||
|
Type: a.Type,
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,13 +35,13 @@ func FromDatabase(personId string) *Person {
|
||||||
}
|
}
|
||||||
|
|
||||||
loadout := FromDatabaseLoadout(&person.Loadout)
|
loadout := FromDatabaseLoadout(&person.Loadout)
|
||||||
athenaProfile := &Profile{}
|
athenaProfile := NewProfile("athena")
|
||||||
commonCoreProfile := &Profile{}
|
commonCoreProfile := NewProfile("common_core")
|
||||||
|
|
||||||
for _, profile := range person.Profiles {
|
for _, profile := range person.Profiles {
|
||||||
if profile.Type == "athena" {
|
if profile.Type == "athena" {
|
||||||
athenaProfile := FromDatabaseProfile(&profile)
|
|
||||||
athenaProfile.ID = profile.ID
|
athenaProfile.ID = profile.ID
|
||||||
|
athenaProfile = FromDatabaseProfile(&profile)
|
||||||
}
|
}
|
||||||
|
|
||||||
if profile.Type == "common_core" {
|
if profile.Type == "common_core" {
|
||||||
|
@ -49,7 +49,7 @@ func FromDatabase(personId string) *Person {
|
||||||
commonCoreProfile = FromDatabaseProfile(&profile)
|
commonCoreProfile = FromDatabaseProfile(&profile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Person{
|
return &Person{
|
||||||
ID: person.ID,
|
ID: person.ID,
|
||||||
DisplayName: person.DisplayName,
|
DisplayName: person.DisplayName,
|
||||||
|
@ -81,7 +81,10 @@ func (p *Person) ToDatabase() *storage.DB_Person {
|
||||||
Loadout: *p.Loadout.ToDatabase(),
|
Loadout: *p.Loadout.ToDatabase(),
|
||||||
}
|
}
|
||||||
|
|
||||||
profilesToConvert := map[string]*Profile{"athena": p.AthenaProfile, "common_core": p.CommonCoreProfile}
|
profilesToConvert := map[string]*Profile{
|
||||||
|
"common_core": p.CommonCoreProfile,
|
||||||
|
"athena": p.AthenaProfile,
|
||||||
|
}
|
||||||
|
|
||||||
for profileType, profile := range profilesToConvert {
|
for profileType, profile := range profilesToConvert {
|
||||||
dbProfile := storage.DB_Profile{
|
dbProfile := storage.DB_Profile{
|
||||||
|
@ -108,12 +111,8 @@ func (p *Person) ToDatabase() *storage.DB_Person {
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
profile.Attributes.Range(func(key, value interface{}) bool {
|
profile.Attributes.RangeAttributes(func(key string, value *Attribute) bool {
|
||||||
dbProfile.Attributes = append(dbProfile.Attributes, storage.DB_PAttribute{
|
dbProfile.Attributes = append(dbProfile.Attributes, *value.ToDatabase(p.ID))
|
||||||
ProfileID: profile.ID,
|
|
||||||
Key: key.(string),
|
|
||||||
Value: value.(string),
|
|
||||||
})
|
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -121,4 +120,27 @@ func (p *Person) ToDatabase() *storage.DB_Person {
|
||||||
}
|
}
|
||||||
|
|
||||||
return &dbPerson
|
return &dbPerson
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Person) AddAttribute(value *Attribute) {
|
||||||
|
p.AthenaProfile.Attributes.AddAttribute(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Person) GetAttribute(key string) *Attribute {
|
||||||
|
attribute := p.AthenaProfile.Attributes.GetAttribute(key)
|
||||||
|
return attribute
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Person) RemoveAttribute(key string) {
|
||||||
|
p.AthenaProfile.Attributes.DeleteAttribute(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Person) Snapshot() *PersonSnapshot {
|
||||||
|
return &PersonSnapshot{
|
||||||
|
ID: p.ID,
|
||||||
|
DisplayName: p.DisplayName,
|
||||||
|
AthenaProfile: *p.AthenaProfile.Snapshot(),
|
||||||
|
CommonCoreProfile:* p.CommonCoreProfile.Snapshot(),
|
||||||
|
Loadout: *p.Loadout,
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
package person
|
package person
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"sync"
|
"fmt"
|
||||||
|
|
||||||
"github.com/ectrc/snow/storage"
|
"github.com/ectrc/snow/storage"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
@ -13,7 +13,7 @@ type Profile struct {
|
||||||
Items *ItemMutex
|
Items *ItemMutex
|
||||||
Gifts *GiftMutex
|
Gifts *GiftMutex
|
||||||
Quests *QuestMutex
|
Quests *QuestMutex
|
||||||
Attributes *sync.Map
|
Attributes *AttributeMutex
|
||||||
Type string
|
Type string
|
||||||
Changes []diff.Change
|
Changes []diff.Change
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ func NewProfile(profile string) *Profile {
|
||||||
Items: NewItemMutex(profile),
|
Items: NewItemMutex(profile),
|
||||||
Gifts: NewGiftMutex(),
|
Gifts: NewGiftMutex(),
|
||||||
Quests: NewQuestMutex(),
|
Quests: NewQuestMutex(),
|
||||||
Attributes: &sync.Map{},
|
Attributes: NewAttributeMutex(),
|
||||||
Type: profile,
|
Type: profile,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ func FromDatabaseProfile(profile *storage.DB_Profile) *Profile {
|
||||||
items := NewItemMutex(profile.Type)
|
items := NewItemMutex(profile.Type)
|
||||||
gifts := NewGiftMutex()
|
gifts := NewGiftMutex()
|
||||||
quests := NewQuestMutex()
|
quests := NewQuestMutex()
|
||||||
|
attributes := NewAttributeMutex()
|
||||||
|
|
||||||
for _, item := range profile.Items {
|
for _, item := range profile.Items {
|
||||||
items.AddItem(FromDatabaseItem(&item, &profile.Type))
|
items.AddItem(FromDatabaseItem(&item, &profile.Type))
|
||||||
|
@ -46,9 +47,14 @@ func FromDatabaseProfile(profile *storage.DB_Profile) *Profile {
|
||||||
quests.AddQuest(FromDatabaseQuest(&quest, &profile.Type))
|
quests.AddQuest(FromDatabaseQuest(&quest, &profile.Type))
|
||||||
}
|
}
|
||||||
|
|
||||||
attributes := &sync.Map{}
|
|
||||||
for _, attribute := range profile.Attributes {
|
for _, attribute := range profile.Attributes {
|
||||||
attributes.Store(attribute.Key, attribute.Value)
|
parsed := FromDatabaseAttribute(&attribute)
|
||||||
|
if parsed == nil {
|
||||||
|
fmt.Printf("error getting attribute from database")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
attributes.AddAttribute(parsed)
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Profile{
|
return &Profile{
|
||||||
|
@ -69,7 +75,7 @@ func (p *Profile) Snapshot() *ProfileSnapshot {
|
||||||
items := map[string]ItemSnapshot{}
|
items := map[string]ItemSnapshot{}
|
||||||
gifts := map[string]GiftSnapshot{}
|
gifts := map[string]GiftSnapshot{}
|
||||||
quests := map[string]Quest{}
|
quests := map[string]Quest{}
|
||||||
attributes := map[string]string{}
|
attributes := map[string]Attribute{}
|
||||||
|
|
||||||
p.Items.RangeItems(func(id string, item *Item) bool {
|
p.Items.RangeItems(func(id string, item *Item) bool {
|
||||||
items[id] = item.Snapshot()
|
items[id] = item.Snapshot()
|
||||||
|
@ -86,8 +92,8 @@ func (p *Profile) Snapshot() *ProfileSnapshot {
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
p.Attributes.Range(func(key, value interface{}) bool {
|
p.Attributes.RangeAttributes(func(key string, value *Attribute) bool {
|
||||||
attributes[key.(string)] = value.(string)
|
attributes[key] = *value
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -96,7 +102,7 @@ func (p *Profile) Snapshot() *ProfileSnapshot {
|
||||||
Items: items,
|
Items: items,
|
||||||
Gifts: gifts,
|
Gifts: gifts,
|
||||||
Quests: quests,
|
Quests: quests,
|
||||||
Attributes: attributes,
|
Attributes: attributes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,19 @@
|
||||||
package person
|
package person
|
||||||
|
|
||||||
|
type PersonSnapshot struct {
|
||||||
|
ID string
|
||||||
|
DisplayName string
|
||||||
|
AthenaProfile ProfileSnapshot
|
||||||
|
CommonCoreProfile ProfileSnapshot
|
||||||
|
Loadout Loadout
|
||||||
|
}
|
||||||
|
|
||||||
type ProfileSnapshot struct {
|
type ProfileSnapshot struct {
|
||||||
ID string
|
ID string
|
||||||
Items map[string]ItemSnapshot
|
Items map[string]ItemSnapshot
|
||||||
Gifts map[string]GiftSnapshot
|
Gifts map[string]GiftSnapshot
|
||||||
Quests map[string]Quest
|
Quests map[string]Quest
|
||||||
Attributes map[string]string
|
Attributes map[string]Attribute
|
||||||
}
|
}
|
||||||
|
|
||||||
type ItemSnapshot struct {
|
type ItemSnapshot struct {
|
||||||
|
|
|
@ -133,4 +133,37 @@ func (m *QuestMutex) Count() int {
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
return count
|
return count
|
||||||
|
}
|
||||||
|
|
||||||
|
type AttributeMutex struct {
|
||||||
|
sync.Map
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewAttributeMutex() *AttributeMutex {
|
||||||
|
return &AttributeMutex{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AttributeMutex) AddAttribute(attribute *Attribute) {
|
||||||
|
m.Store(attribute.Key, attribute)
|
||||||
|
// storage.Repo.SaveAttribute(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AttributeMutex) DeleteAttribute(key string) {
|
||||||
|
m.Delete(key)
|
||||||
|
// storage.Repo.DeleteAttribute(key)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AttributeMutex) GetAttribute(key string) *Attribute {
|
||||||
|
value, ok := m.Load(key)
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return value.(*Attribute)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AttributeMutex) RangeAttributes(f func(key string, value *Attribute) bool) {
|
||||||
|
m.Range(func(key, value interface{}) bool {
|
||||||
|
return f(key.(string), value.(*Attribute))
|
||||||
|
})
|
||||||
}
|
}
|
|
@ -35,8 +35,6 @@ func (s *PostgresStorage) GetPerson(personId string) *DB_Person {
|
||||||
Preload("Profiles.Items").
|
Preload("Profiles.Items").
|
||||||
Preload("Profiles.Gifts").
|
Preload("Profiles.Gifts").
|
||||||
Preload("Profiles.Quests").
|
Preload("Profiles.Quests").
|
||||||
Preload("Profiles.Items.Variants").
|
|
||||||
Preload("Profiles.Gifts.Loot").
|
|
||||||
Find(&dbPerson)
|
Find(&dbPerson)
|
||||||
|
|
||||||
if dbPerson.ID == "" {
|
if dbPerson.ID == "" {
|
||||||
|
@ -57,8 +55,6 @@ func (s *PostgresStorage) GetAllPersons() []*DB_Person {
|
||||||
Preload("Profiles.Items").
|
Preload("Profiles.Items").
|
||||||
Preload("Profiles.Gifts").
|
Preload("Profiles.Gifts").
|
||||||
Preload("Profiles.Quests").
|
Preload("Profiles.Quests").
|
||||||
Preload("Profiles.Items.Variants").
|
|
||||||
Preload("Profiles.Gifts.Loot").
|
|
||||||
Find(&dbPersons)
|
Find(&dbPersons)
|
||||||
|
|
||||||
return dbPersons
|
return dbPersons
|
||||||
|
|
|
@ -54,7 +54,8 @@ func (DB_Profile) TableName() string {
|
||||||
type DB_PAttribute struct {
|
type DB_PAttribute struct {
|
||||||
Key string `gorm:"primary_key"`
|
Key string `gorm:"primary_key"`
|
||||||
ProfileID string
|
ProfileID string
|
||||||
Value string
|
ValueJSON string
|
||||||
|
Type string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (DB_PAttribute) TableName() string {
|
func (DB_PAttribute) TableName() string {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user