store the pre-rendered vouchers list

This commit is contained in:
Alfred Kamanda 2024-10-07 08:59:15 +03:00
parent 4dede757d2
commit 755899be4e
Signed by: Alfred-mk
GPG Key ID: 7EA3D01708908703
2 changed files with 22 additions and 38 deletions

View File

@ -3,7 +3,6 @@ package ussd
import (
"bytes"
"context"
"encoding/json"
"fmt"
"path"
"regexp"
@ -251,20 +250,7 @@ func (h *Handlers) GetVoucherList(ctx context.Context, sym string, input []byte)
return res, err
}
// Unmarshal the stored JSON data into the correct struct
var vouchers []struct {
TokenSymbol string `json:"tokenSymbol"`
}
err = json.Unmarshal(voucherData, &vouchers)
if err != nil {
return res, fmt.Errorf("failed to unmarshal vouchers: %v", err)
}
var numberedVouchers []string
for i, voucher := range vouchers {
numberedVouchers = append(numberedVouchers, fmt.Sprintf("%d:%s", i+1, voucher.TokenSymbol))
}
res.Content = strings.Join(numberedVouchers, "\n")
res.Content = string(voucherData)
return res, nil
}
@ -1027,8 +1013,6 @@ func (h *Handlers) GetProfileInfo(ctx context.Context, sym string, input []byte)
// them to gdbm
func (h *Handlers) CheckVouchers(ctx context.Context, sym string, input []byte) (resource.Result, error) {
var res resource.Result
var err error
sessionId, ok := ctx.Value("SessionId").(string)
if !ok {
return res, fmt.Errorf("missing session")
@ -1040,20 +1024,20 @@ func (h *Handlers) CheckVouchers(ctx context.Context, sym string, input []byte)
return res, nil
}
// Fetch vouchers from the API
// Fetch vouchers from the API using the public key
vouchersResp, err := h.accountService.FetchVouchers(string(publicKey))
if err != nil {
return res, nil
}
// Convert only the list of holdings (vouchers) to JSON
voucherBytes, err := json.Marshal(vouchersResp.Result.Holdings)
if err != nil {
return res, nil
var numberedVouchers []string
for i, voucher := range vouchersResp.Result.Holdings {
numberedVouchers = append(numberedVouchers, fmt.Sprintf("%d:%s", i+1, voucher.TokenSymbol))
}
// Store the voucher symbols in the userdataStore
err = store.WriteEntry(ctx, sessionId, utils.DATA_VOUCHER_LIST, voucherBytes)
voucherList := strings.Join(numberedVouchers, "\n")
err = store.WriteEntry(ctx, sessionId, utils.DATA_VOUCHER_LIST, []byte(voucherList))
if err != nil {
return res, nil
}

View File

@ -12,32 +12,32 @@ const (
type SubPrefixDb struct {
store db.Db
pfx []byte
pfx []byte
}
func NewSubPrefixDb(store db.Db, pfx []byte) *SubPrefixDb {
return &SubPrefixDb{
store: store,
pfx: pfx,
pfx: pfx,
}
}
func(s *SubPrefixDb) toKey(k []byte) []byte {
return append(s.pfx, k...)
func (s *SubPrefixDb) toKey(k []byte) []byte {
return append(s.pfx, k...)
}
func(s *SubPrefixDb) Get(ctx context.Context, key []byte) ([]byte, error) {
s.store.SetPrefix(DATATYPE_USERSUB)
func (s *SubPrefixDb) Get(ctx context.Context, key []byte) ([]byte, error) {
s.store.SetPrefix(DATATYPE_USERSUB)
key = s.toKey(key)
v, err := s.store.Get(ctx, key)
if err != nil {
return nil, err
}
return v, nil
v, err := s.store.Get(ctx, key)
if err != nil {
return nil, err
}
return v, nil
}
func(s *SubPrefixDb) Put(ctx context.Context, key []byte, val []byte) error {
s.store.SetPrefix(DATATYPE_USERSUB)
func (s *SubPrefixDb) Put(ctx context.Context, key []byte, val []byte) error {
s.store.SetPrefix(DATATYPE_USERSUB)
key = s.toKey(key)
return s.store.Put(ctx, key, val)
return s.store.Put(ctx, key, val)
}