From 37a2006a0b736d1c8f001f4173468680f03d64d3 Mon Sep 17 00:00:00 2001
From: Carlosokumu <carlosokumu254@gmail.com>
Date: Mon, 10 Mar 2025 16:49:53 +0300
Subject: [PATCH] feat: persist and load pool info

---
 dev/api.go | 37 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/dev/api.go b/dev/api.go
index 749c99e..62c3cf1 100644
--- a/dev/api.go
+++ b/dev/api.go
@@ -34,6 +34,8 @@ const (
 	defaultDecimals               = 6
 	zeroAddress           string  = "0x0000000000000000000000000000000000000000"
 	defaultVoucherBalance float64 = 500.00
+	cityPoolAddress       string  = "0x3b517308D858a47458aD5C8E699697C5dc91Da0F"
+	poolName              string  = "citypool"
 )
 
 type Tx struct {
@@ -92,6 +94,8 @@ type Voucher struct {
 }
 
 type Pool struct {
+	name      string
+	address   string
 	vouchers  []Voucher
 	poolLimit map[string]string
 }
@@ -124,7 +128,7 @@ func NewDevAccountService(ctx context.Context, ss storage.StorageService) *DevAc
 		txs:              make(map[string]Tx),
 		txsTrack:         make(map[string]string),
 		autoVoucherValue: make(map[string]int),
-		pool:             Pool{},
+		pool:             Pool{address: cityPoolAddress, name: poolName},
 		defaultAccount:   zeroAddress,
 		pfx:              []byte("__"),
 	}
@@ -209,6 +213,20 @@ func (das *DevAccountService) loadAlias(ctx context.Context, alias string, key [
 	return nil
 }
 
+func (das *DevAccountService) loadPoolInfo(ctx context.Context, name string, key []byte) error {
+	var pool Pool
+	poolB, err := das.db.Get(ctx, key)
+	if err != nil {
+		return err
+	}
+	err = json.Unmarshal(poolB, &pool)
+	if err != nil {
+		return fmt.Errorf("failed to unmarshall pool info: %v", err)
+	}
+	das.pool = pool
+	return nil
+}
+
 func (das *DevAccountService) loadItem(ctx context.Context, k []byte, v []byte) error {
 	var err error
 	s := string(k)
@@ -225,6 +243,8 @@ func (das *DevAccountService) loadItem(ctx context.Context, k []byte, v []byte)
 	} else if ss[0] == "alias" {
 		err = das.loadAlias(ctx, ss[1], k)
 		logg.ErrorCtxf(ctx, "loading aliases failed", "error_load_aliases", err)
+	} else if ss[0] == "pool" {
+		err = das.loadPoolInfo(ctx, ss[1], v)
 	} else {
 		logg.ErrorCtxf(ctx, "unknown double underscore key", "key", ss[0])
 	}
@@ -361,6 +381,20 @@ func (das *DevAccountService) saveAccount(ctx context.Context, acc Account) erro
 	return das.db.Put(ctx, []byte(k), v)
 }
 
+func (das *DevAccountService) savePoolInfo(ctx context.Context, pool Pool) error {
+	if das.db == nil {
+		return nil
+	}
+	k := das.prefixKeyFor("pool", pool.name)
+	v, err := json.Marshal(pool)
+	if err != nil {
+		return err
+	}
+	das.db.SetSession("")
+	das.db.SetPrefix(db.DATATYPE_USERDATA)
+	return das.db.Put(ctx, []byte(k), v)
+}
+
 func (das *DevAccountService) saveAlias(ctx context.Context, alias map[string]string) error {
 	if das.db == nil {
 		return fmt.Errorf("Db cannot be nil")
@@ -455,6 +489,7 @@ func (das *DevAccountService) PoolDeposit(ctx context.Context, amount, from, poo
 		vouchers:  append(das.pool.vouchers, voucher),
 		poolLimit: map[string]string{tokenAddress: amount},
 	}
+	das.savePoolInfo(ctx, das.pool)
 	return &models.PoolDepositResult{
 		TrackingId: uid.String(),
 	}, nil