snow/person/sync.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

468 lines
8.8 KiB
Go

package person
import (
"sync"
"github.com/ectrc/snow/storage"
)
type ItemMutex struct {
sync.Map
ProfileType string
ProfileID string
}
func NewItemMutex(profile *storage.DB_Profile) *ItemMutex {
return &ItemMutex{
ProfileType: profile.Type,
ProfileID: profile.ID,
}
}
func (m *ItemMutex) AddItem(item *Item) *Item {
item.ProfileType = m.ProfileType
item.ProfileID = m.ProfileID
m.Store(item.ID, item)
// storage.Repo.SaveItem(item.ToDatabase(m.ProfileID))
return item
}
func (m *ItemMutex) DeleteItem(id string) {
item := m.GetItem(id)
if item == nil {
return
}
item.Delete()
m.Delete(id)
storage.Repo.DeleteItem(id)
}
func (m *ItemMutex) GetItem(id string) *Item {
item, ok := m.Load(id)
if !ok {
return nil
}
return item.(*Item)
}
func (m *ItemMutex) GetItemByTemplateID(templateID string) *Item {
var item *Item
m.Range(func(key, value interface{}) bool {
if value.(*Item).TemplateID == templateID {
item = value.(*Item)
return false
}
return true
})
return item
}
func (m *ItemMutex) RangeItems(f func(key string, value *Item) bool) {
m.Range(func(key, value interface{}) bool {
return f(key.(string), value.(*Item))
})
}
func (m *ItemMutex) Count() int {
count := 0
m.Range(func(key, value interface{}) bool {
count++
return true
})
return count
}
type GiftMutex struct {
sync.Map
ProfileType string
ProfileID string
}
func NewGiftMutex(profile *storage.DB_Profile) *GiftMutex {
return &GiftMutex{
ProfileType: profile.Type,
ProfileID: profile.ID,
}
}
func (m *GiftMutex) AddGift(gift *Gift) *Gift {
gift.ProfileID = m.ProfileID
m.Store(gift.ID, gift)
// storage.Repo.SaveGift(gift.ToDatabase(m.ProfileID))
return gift
}
func (m *GiftMutex) DeleteGift(id string) {
m.Delete(id)
storage.Repo.DeleteGift(id)
}
func (m *GiftMutex) GetGift(id string) *Gift {
gift, ok := m.Load(id)
if !ok {
return nil
}
return gift.(*Gift)
}
func (m *GiftMutex) RangeGifts(f func(key string, value *Gift) bool) {
m.Range(func(key, value interface{}) bool {
return f(key.(string), value.(*Gift))
})
}
func (m *GiftMutex) Count() int {
count := 0
m.Range(func(key, value interface{}) bool {
count++
return true
})
return count
}
type QuestMutex struct {
sync.Map
ProfileType string
ProfileID string
}
func NewQuestMutex(profile *storage.DB_Profile) *QuestMutex {
return &QuestMutex{
ProfileType: profile.Type,
ProfileID: profile.ID,
}
}
func (m *QuestMutex) AddQuest(quest *Quest) *Quest {
quest.ProfileID = m.ProfileID
m.Store(quest.ID, quest)
// storage.Repo.SaveQuest(quest.ToDatabase(m.ProfileID))
return quest
}
func (m *QuestMutex) DeleteQuest(id string) {
m.Delete(id)
storage.Repo.DeleteQuest(id)
}
func (m *QuestMutex) GetQuest(id string) *Quest {
quest, ok := m.Load(id)
if !ok {
return nil
}
return quest.(*Quest)
}
func (m *QuestMutex) RangeQuests(f func(key string, value *Quest) bool) {
m.Range(func(key, value interface{}) bool {
return f(key.(string), value.(*Quest))
})
}
func (m *QuestMutex) Count() int {
count := 0
m.Range(func(key, value interface{}) bool {
count++
return true
})
return count
}
type AttributeMutex struct {
sync.Map
ProfileType string
ProfileID string
}
func NewAttributeMutex(profile *storage.DB_Profile) *AttributeMutex {
return &AttributeMutex{
ProfileID: profile.ID,
}
}
func (m *AttributeMutex) AddAttribute(attribute *Attribute) *Attribute {
attribute.ProfileID = m.ProfileID
m.Store(attribute.ID, attribute)
// storage.Repo.SaveAttribute(attribute.ToDatabase(m.ProfileID))
return attribute
}
func (m *AttributeMutex) DeleteAttribute(id string) {
m.Delete(id)
storage.Repo.DeleteAttribute(id)
}
func (m *AttributeMutex) GetAttribute(id string) *Attribute {
value, ok := m.Load(id)
if !ok {
return nil
}
return value.(*Attribute)
}
func (m *AttributeMutex) GetAttributeByKey(key string) *Attribute {
var found *Attribute
m.RangeAttributes(func(id string, attribute *Attribute) bool {
if attribute.Key == key {
found = attribute
return false
}
return true
})
return found
}
func (m *AttributeMutex) RangeAttributes(f func(id string, attribute *Attribute) bool) {
m.Range(func(key, value interface{}) bool {
return f(key.(string), value.(*Attribute))
})
}
func (m *AttributeMutex) Count() int {
count := 0
m.Range(func(key, value interface{}) bool {
count++
return true
})
return count
}
type LoadoutMutex struct {
sync.Map
PersonID string
ProfileID string
}
func NewLoadoutMutex(profile *storage.DB_Profile) *LoadoutMutex {
return &LoadoutMutex{
PersonID: profile.PersonID,
ProfileID: profile.ID,
}
}
func (m *LoadoutMutex) AddLoadout(loadout *Loadout) *Loadout {
loadout.PersonID = m.PersonID
loadout.ProfileID = m.ProfileID
m.Store(loadout.ID, loadout)
storage.Repo.SaveLoadout(loadout.ToDatabase(m.ProfileID))
return loadout
}
func (m *LoadoutMutex) DeleteLoadout(id string) {
loadout := m.GetLoadout(id)
if loadout == nil {
return
}
m.Delete(id)
storage.Repo.DeleteItem(id)
}
func (m *LoadoutMutex) GetLoadout(id string) *Loadout {
loadout, ok := m.Load(id)
if !ok {
return nil
}
return loadout.(*Loadout)
}
func (m *LoadoutMutex) GetLoadoutByName(name string) *Loadout {
var loadout *Loadout
m.Range(func(key, value interface{}) bool {
if value.(*Loadout).LockerName == name {
loadout = value.(*Loadout)
return false
}
return true
})
return loadout
}
func (m *LoadoutMutex) RangeLoadouts(f func(key string, value *Loadout) bool) {
m.Range(func(key, value interface{}) bool {
return f(key.(string), value.(*Loadout))
})
}
func (m *LoadoutMutex) Count() int {
count := 0
m.Range(func(key, value interface{}) bool {
count++
return true
})
return count
}
type PurchaseMutex struct {
sync.Map
PersonID string
ProfileID string
}
func NewPurchaseMutex(profile *storage.DB_Profile) *PurchaseMutex {
return &PurchaseMutex{
PersonID: profile.PersonID,
ProfileID: profile.ID,
}
}
func (m *PurchaseMutex) AddPurchase(purchase *Purchase) *Purchase {
purchase.ProfileID = m.ProfileID
purchase.PersonID = m.PersonID
m.Store(purchase.ID, purchase)
// storage.Repo.SavePurchase(purchase.ToDatabase(m.ProfileID))
// Find(m.PersonID).SetPurchaseHistoryAttribute()
return purchase
}
func (m *PurchaseMutex) GetPurchase(id string) *Purchase {
purchase, ok := m.Load(id)
if !ok {
return nil
}
return purchase.(*Purchase)
}
func (m *PurchaseMutex) RangePurchases(f func(key string, value *Purchase) bool) {
m.Range(func(key, value interface{}) bool {
return f(key.(string), value.(*Purchase))
})
}
func (m *PurchaseMutex) Count() int {
count := 0
m.Range(func(key, value interface{}) bool {
count++
return true
})
return count
}
func (m *PurchaseMutex) CountRefunded() int {
count := 0
m.RangePurchases(func(key string, value *Purchase) bool {
if value.RefundedAt.Unix() > 0 {
count++
}
return true
})
return count
}
type ReceiptMutex struct {
sync.Map
PersonID string
}
func NewReceiptMutex(personID string) *ReceiptMutex {
return &ReceiptMutex{
PersonID: personID,
}
}
func (m *ReceiptMutex) AddReceipt(receipt *Receipt) *Receipt {
receipt.PersonID = m.PersonID
m.Store(receipt.ID, receipt)
// storage.Repo.SaveReceipt(receipt.ToDatabase())
return receipt
}
func (m *ReceiptMutex) DeleteReceipt(id string) {
receipt := m.GetReceipt(id)
if receipt == nil {
return
}
m.Delete(id)
receipt.Delete()
}
func (m *ReceiptMutex) GetReceipt(id string) *Receipt {
receipt, ok := m.Load(id)
if !ok {
return nil
}
return receipt.(*Receipt)
}
func (m *ReceiptMutex) RangeReceipts(f func(key string, value *Receipt) bool) {
m.Range(func(key, value interface{}) bool {
return f(key.(string), value.(*Receipt))
})
}
func (m *ReceiptMutex) Count() int {
count := 0
m.Range(func(key, value interface{}) bool {
count++
return true
})
return count
}
type VariantTokenMutex struct {
sync.Map
ProfileID string
ProfileType string
}
func NewVariantTokenMutex(profile *storage.DB_Profile) *VariantTokenMutex {
return &VariantTokenMutex{
ProfileID: profile.ID,
ProfileType: profile.Type,
}
}
func (m *VariantTokenMutex) AddVariantToken(token *VariantToken) *VariantToken {
token.ProfileID = m.ProfileID
m.Store(token.ID, token)
// storage.Repo.SaveVariantToken(token.ToDatabase(m.ProfileID))
return token
}
func (m *VariantTokenMutex) DeleteVariantToken(id string) {
m.Delete(id)
storage.Repo.DeleteVariantToken(id)
}
func (m *VariantTokenMutex) GetVariantToken(id string) *VariantToken {
token, ok := m.Load(id)
if !ok {
return nil
}
return token.(*VariantToken)
}
func (m *VariantTokenMutex) RangeVariantTokens(f func(key string, value *VariantToken) bool) {
m.Range(func(key, value interface{}) bool {
return f(key.(string), value.(*VariantToken))
})
}
func (m *VariantTokenMutex) Count() int {
count := 0
m.Range(func(key, value interface{}) bool {
count++
return true
})
return count
}