project-tidyup - menuhandler and tests #90
							
								
								
									
										105
									
								
								handlers/application/balance.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								handlers/application/balance.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,105 @@ | |||||||
|  | package application | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"fmt" | ||||||
|  | 	"strings" | ||||||
|  | 
 | ||||||
|  | 	"git.defalsify.org/vise.git/db" | ||||||
|  | 	"git.defalsify.org/vise.git/resource" | ||||||
|  | 	"git.grassecon.net/grassrootseconomics/sarafu-vise/store" | ||||||
|  | 	storedb "git.grassecon.net/grassrootseconomics/sarafu-vise/store/db" | ||||||
|  | 	"gopkg.in/leonelquinteros/gotext.v1" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | // CheckBalance retrieves the balance of the active voucher and sets
 | ||||||
|  | // the balance as the result content.
 | ||||||
|  | func (h *MenuHandlers) CheckBalance(ctx context.Context, sym string, input []byte) (resource.Result, error) { | ||||||
|  | 	var ( | ||||||
|  | 		res     resource.Result | ||||||
|  | 		err     error | ||||||
|  | 		alias   string | ||||||
|  | 		content string | ||||||
|  | 	) | ||||||
|  | 
 | ||||||
|  | 	sessionId, ok := ctx.Value("SessionId").(string) | ||||||
|  | 	if !ok { | ||||||
|  | 		return res, fmt.Errorf("missing session") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	store := h.userdataStore | ||||||
|  | 
 | ||||||
|  | 	// get the active sym and active balance
 | ||||||
|  | 	activeSym, err := store.ReadEntry(ctx, sessionId, storedb.DATA_ACTIVE_SYM) | ||||||
|  | 	if err != nil { | ||||||
|  | 		logg.InfoCtxf(ctx, "could not find the activeSym in checkBalance:", "err", err) | ||||||
|  | 		if !db.IsNotFound(err) { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to read activeSym entry with", "key", storedb.DATA_ACTIVE_SYM, "error", err) | ||||||
|  | 			return res, err | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	activeBal, err := store.ReadEntry(ctx, sessionId, storedb.DATA_ACTIVE_BAL) | ||||||
|  | 	if err != nil { | ||||||
|  | 		if !db.IsNotFound(err) { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to read activeBal entry with", "key", storedb.DATA_ACTIVE_BAL, "error", err) | ||||||
|  | 			return res, err | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	accAlias, err := store.ReadEntry(ctx, sessionId, storedb.DATA_ACCOUNT_ALIAS) | ||||||
|  | 	if err != nil { | ||||||
|  | 		if !db.IsNotFound(err) { | ||||||
|  | 			logg.ErrorCtxf(ctx, "failed to read account alias entry with", "key", storedb.DATA_ACCOUNT_ALIAS, "error", err) | ||||||
|  | 			return res, err | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		alias = strings.Split(string(accAlias), ".")[0] | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	content, err = loadUserContent(ctx, string(activeSym), string(activeBal), alias) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return res, err | ||||||
|  | 	} | ||||||
|  | 	res.Content = content | ||||||
|  | 
 | ||||||
|  | 	return res, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // loadUserContent loads the main user content in the main menu: the alias,balance associated with active voucher
 | ||||||
|  | func loadUserContent(ctx context.Context, activeSym string, balance string, alias string) (string, error) { | ||||||
|  | 	var content string | ||||||
|  | 
 | ||||||
|  | 	code := codeFromCtx(ctx) | ||||||
|  | 	l := gotext.NewLocale(translationDir, code) | ||||||
|  | 	l.AddDomain("default") | ||||||
|  | 
 | ||||||
|  | 	// Format the balance to 2 decimal places or default to 0.00
 | ||||||
|  | 	formattedAmount, err := store.TruncateDecimalString(balance, 2) | ||||||
|  | 	if err != nil { | ||||||
|  | 		formattedAmount = "0.00" | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// format the final output
 | ||||||
|  | 	balStr := fmt.Sprintf("%s %s", formattedAmount, activeSym) | ||||||
|  | 	if alias != "" { | ||||||
|  | 		content = l.Get("%s balance: %s\n", alias, balStr) | ||||||
|  | 	} else { | ||||||
|  | 		content = l.Get("Balance: %s\n", balStr) | ||||||
|  | 	} | ||||||
|  | 	return content, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // FetchCommunityBalance retrieves and displays the balance for community accounts in user's preferred language.
 | ||||||
|  | func (h *MenuHandlers) FetchCommunityBalance(ctx context.Context, sym string, input []byte) (resource.Result, error) { | ||||||
|  | 	var res resource.Result | ||||||
|  | 	// retrieve the language code from the context
 | ||||||
|  | 	code := codeFromCtx(ctx) | ||||||
|  | 	// Initialize the localization system with the appropriate translation directory
 | ||||||
|  | 	l := gotext.NewLocale(translationDir, code) | ||||||
|  | 	l.AddDomain("default") | ||||||
|  | 	//TODO:
 | ||||||
|  | 	//Check if the address is a community account,if then,get the actual balance
 | ||||||
|  | 	res.Content = l.Get("Community Balance: 0.00") | ||||||
|  | 	return res, nil | ||||||
|  | } | ||||||
| @ -463,98 +463,6 @@ func (h *MenuHandlers) ShowBlockedAccount(ctx context.Context, sym string, input | |||||||
| 	return res, nil | 	return res, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // loadUserContent loads the main user content in the main menu: the alias,balance associated with active voucher
 |  | ||||||
| func loadUserContent(ctx context.Context, activeSym string, balance string, alias string) (string, error) { |  | ||||||
| 	var content string |  | ||||||
| 
 |  | ||||||
| 	code := codeFromCtx(ctx) |  | ||||||
| 	l := gotext.NewLocale(translationDir, code) |  | ||||||
| 	l.AddDomain("default") |  | ||||||
| 
 |  | ||||||
| 	// Format the balance to 2 decimal places or default to 0.00
 |  | ||||||
| 	formattedAmount, err := store.TruncateDecimalString(balance, 2) |  | ||||||
| 	if err != nil { |  | ||||||
| 		formattedAmount = "0.00" |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	// format the final output
 |  | ||||||
| 	balStr := fmt.Sprintf("%s %s", formattedAmount, activeSym) |  | ||||||
| 	if alias != "" { |  | ||||||
| 		content = l.Get("%s balance: %s\n", alias, balStr) |  | ||||||
| 	} else { |  | ||||||
| 		content = l.Get("Balance: %s\n", balStr) |  | ||||||
| 	} |  | ||||||
| 	return content, nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // CheckBalance retrieves the balance of the active voucher and sets
 |  | ||||||
| // the balance as the result content.
 |  | ||||||
| func (h *MenuHandlers) CheckBalance(ctx context.Context, sym string, input []byte) (resource.Result, error) { |  | ||||||
| 	var ( |  | ||||||
| 		res     resource.Result |  | ||||||
| 		err     error |  | ||||||
| 		alias   string |  | ||||||
| 		content string |  | ||||||
| 	) |  | ||||||
| 
 |  | ||||||
| 	sessionId, ok := ctx.Value("SessionId").(string) |  | ||||||
| 	if !ok { |  | ||||||
| 		return res, fmt.Errorf("missing session") |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	store := h.userdataStore |  | ||||||
| 
 |  | ||||||
| 	// get the active sym and active balance
 |  | ||||||
| 	activeSym, err := store.ReadEntry(ctx, sessionId, storedb.DATA_ACTIVE_SYM) |  | ||||||
| 	if err != nil { |  | ||||||
| 		logg.InfoCtxf(ctx, "could not find the activeSym in checkBalance:", "err", err) |  | ||||||
| 		if !db.IsNotFound(err) { |  | ||||||
| 			logg.ErrorCtxf(ctx, "failed to read activeSym entry with", "key", storedb.DATA_ACTIVE_SYM, "error", err) |  | ||||||
| 			return res, err |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	activeBal, err := store.ReadEntry(ctx, sessionId, storedb.DATA_ACTIVE_BAL) |  | ||||||
| 	if err != nil { |  | ||||||
| 		if !db.IsNotFound(err) { |  | ||||||
| 			logg.ErrorCtxf(ctx, "failed to read activeBal entry with", "key", storedb.DATA_ACTIVE_BAL, "error", err) |  | ||||||
| 			return res, err |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	accAlias, err := store.ReadEntry(ctx, sessionId, storedb.DATA_ACCOUNT_ALIAS) |  | ||||||
| 	if err != nil { |  | ||||||
| 		if !db.IsNotFound(err) { |  | ||||||
| 			logg.ErrorCtxf(ctx, "failed to read account alias entry with", "key", storedb.DATA_ACCOUNT_ALIAS, "error", err) |  | ||||||
| 			return res, err |  | ||||||
| 		} |  | ||||||
| 	} else { |  | ||||||
| 		alias = strings.Split(string(accAlias), ".")[0] |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	content, err = loadUserContent(ctx, string(activeSym), string(activeBal), alias) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return res, err |  | ||||||
| 	} |  | ||||||
| 	res.Content = content |  | ||||||
| 
 |  | ||||||
| 	return res, nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // FetchCommunityBalance retrieves and displays the balance for community accounts in user's preferred language.
 |  | ||||||
| func (h *MenuHandlers) FetchCommunityBalance(ctx context.Context, sym string, input []byte) (resource.Result, error) { |  | ||||||
| 	var res resource.Result |  | ||||||
| 	// retrieve the language code from the context
 |  | ||||||
| 	code := codeFromCtx(ctx) |  | ||||||
| 	// Initialize the localization system with the appropriate translation directory
 |  | ||||||
| 	l := gotext.NewLocale(translationDir, code) |  | ||||||
| 	l.AddDomain("default") |  | ||||||
| 	//TODO:
 |  | ||||||
| 	//Check if the address is a community account,if then,get the actual balance
 |  | ||||||
| 	res.Content = l.Get("Community Balance: 0.00") |  | ||||||
| 	return res, nil |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // persistInitialLanguageCode receives an initial language code and persists it to the store
 | // persistInitialLanguageCode receives an initial language code and persists it to the store
 | ||||||
| func (h *MenuHandlers) persistInitialLanguageCode(ctx context.Context, sessionId string, code string) error { | func (h *MenuHandlers) persistInitialLanguageCode(ctx context.Context, sessionId string, code string) error { | ||||||
| 	store := h.userdataStore | 	store := h.userdataStore | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user