forked from urdt/ussd
load profile data from gdbm
This commit is contained in:
parent
1c1ea74088
commit
d4c4db09f3
@ -277,24 +277,11 @@ func codeFromCtx(ctx context.Context) string {
|
||||
// SaveFirstname updates the first name in a JSON data file with the provided input.
|
||||
func (h *Handlers) SaveFirstname(cxt context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
|
||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
if len(input) > 0 {
|
||||
name := string(input)
|
||||
//accountData["FirstName"] = name
|
||||
|
||||
key := []byte(FirstName)
|
||||
value := []byte(name)
|
||||
|
||||
h.db.Store(key, value, true)
|
||||
|
||||
// err = h.accountFileHandler.WriteAccountData(accountData)
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
}
|
||||
|
||||
return res, nil
|
||||
@ -307,7 +294,6 @@ func (h *Handlers) SaveFamilyname(cxt context.Context, sym string, input []byte)
|
||||
secondname := string(input)
|
||||
key := []byte(FamilyName)
|
||||
value := []byte(secondname)
|
||||
|
||||
h.db.Store(key, value, true)
|
||||
}
|
||||
|
||||
@ -317,19 +303,12 @@ func (h *Handlers) SaveFamilyname(cxt context.Context, sym string, input []byte)
|
||||
// SaveYOB updates the Year of Birth(YOB) in a JSON data file with the provided input.
|
||||
func (h *Handlers) SaveYob(cxt context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
|
||||
yob := string(input)
|
||||
if len(yob) == 4 {
|
||||
yob := string(input)
|
||||
//accountData["YOB"] = yob
|
||||
key := []byte(YearOfBirth)
|
||||
value := []byte(yob)
|
||||
|
||||
h.db.Store(key, value, true)
|
||||
// err = h.accountFileHandler.WriteAccountData(accountData)
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
}
|
||||
|
||||
return res, nil
|
||||
@ -338,12 +317,6 @@ func (h *Handlers) SaveYob(cxt context.Context, sym string, input []byte) (resou
|
||||
// SaveLocation updates the location in a JSON data file with the provided input.
|
||||
func (h *Handlers) SaveLocation(cxt context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
|
||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
|
||||
if len(input) > 0 {
|
||||
location := string(input)
|
||||
key := []byte(Location)
|
||||
@ -360,7 +333,6 @@ func (h *Handlers) SaveGender(ctx context.Context, sym string, input []byte) (re
|
||||
res := resource.Result{}
|
||||
if len(input) > 0 {
|
||||
gender := string(input)
|
||||
|
||||
switch gender {
|
||||
case "1":
|
||||
gender = "Male"
|
||||
@ -369,16 +341,9 @@ func (h *Handlers) SaveGender(ctx context.Context, sym string, input []byte) (re
|
||||
case "3":
|
||||
gender = "Unspecified"
|
||||
}
|
||||
//accountData["Gender"] = gender
|
||||
key := []byte(Gender)
|
||||
value := []byte(gender)
|
||||
|
||||
h.db.Store(key, value, true)
|
||||
|
||||
// err = h.accountFileHandler.WriteAccountData(accountData)
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
@ -386,24 +351,11 @@ func (h *Handlers) SaveGender(ctx context.Context, sym string, input []byte) (re
|
||||
// SaveOfferings updates the offerings(goods and services provided by the user) in a JSON data file with the provided input.
|
||||
func (h *Handlers) SaveOfferings(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
|
||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
|
||||
if len(input) > 0 {
|
||||
offerings := string(input)
|
||||
//accountData["Offerings"] = offerings
|
||||
key := []byte(Offerings)
|
||||
value := []byte(offerings)
|
||||
|
||||
h.db.Store(key, value, true)
|
||||
|
||||
// err = h.accountFileHandler.WriteAccountData(accountData)
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
@ -441,18 +393,11 @@ func (h *Handlers) ResetAccountAuthorized(ctx context.Context, sym string, input
|
||||
// CheckIdentifier retrieves the PublicKey from the JSON data file.
|
||||
func (h *Handlers) CheckIdentifier(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
|
||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
publicKey, err := h.db.Fetch([]byte(PublicKeyKey))
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
res.Content = string(publicKey)
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
@ -460,21 +405,12 @@ func (h *Handlers) CheckIdentifier(ctx context.Context, sym string, input []byte
|
||||
// It sets the required flags that control the flow.
|
||||
func (h *Handlers) Authorize(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
|
||||
// Preload the required flags
|
||||
flagKeys := []string{"flag_incorrect_pin", "flag_account_authorized", "flag_allow_update"}
|
||||
flags, err := h.PreloadFlags(flagKeys)
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
// pin := string(input)
|
||||
|
||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
|
||||
storedpin, err := h.db.Fetch([]byte(AccountPin))
|
||||
if err == nil {
|
||||
if len(input) == 4 {
|
||||
@ -526,11 +462,6 @@ func (h *Handlers) CheckAccountStatus(ctx context.Context, sym string, input []b
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
trackingId, err := h.db.Fetch([]byte(TrackingIdKey))
|
||||
|
||||
if err != nil {
|
||||
@ -545,9 +476,12 @@ func (h *Handlers) CheckAccountStatus(ctx context.Context, sym string, input []b
|
||||
|
||||
}
|
||||
|
||||
//accountData["Status"] = status
|
||||
err = h.db.Store(toBytes(TrackingIdKey), toBytes(status), true)
|
||||
err = h.db.Store(toBytes(AccountStatus), toBytes(status), true)
|
||||
if err != nil {
|
||||
return res, nil
|
||||
}
|
||||
|
||||
err = h.db.Store(toBytes(TrackingIdKey), toBytes(status), true)
|
||||
if err != nil {
|
||||
return res, nil
|
||||
}
|
||||
@ -828,39 +762,6 @@ func (h *Handlers) GetRecipient(ctx context.Context, sym string, input []byte) (
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// GetProfileInfo retrieves and formats the profile information of a user from a JSON data file.
|
||||
func (h *Handlers) GetProfileInfo(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
var age string
|
||||
accountData, err := h.accountFileHandler.ReadAccountData()
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
var name string
|
||||
if accountData["FirstName"] == "Not provided" || accountData["FamilyName"] == "Not provided" {
|
||||
name = "Not provided"
|
||||
} else {
|
||||
name = accountData["FirstName"] + " " + accountData["FamilyName"]
|
||||
}
|
||||
|
||||
gender := accountData["Gender"]
|
||||
yob := accountData["YOB"]
|
||||
location := accountData["Location"]
|
||||
offerings := accountData["Offerings"]
|
||||
if yob == "Not provided" {
|
||||
age = "Not provided"
|
||||
} else {
|
||||
ageInt, err := strconv.Atoi(yob)
|
||||
if err != nil {
|
||||
return res, nil
|
||||
}
|
||||
age = strconv.Itoa(utils.CalculateAgeWithYOB(ageInt))
|
||||
}
|
||||
formattedData := fmt.Sprintf("Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\n", name, gender, age, location, offerings)
|
||||
res.Content = formattedData
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// GetSender retrieves the public key from a JSON data file.
|
||||
func (h *Handlers) GetSender(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
@ -879,13 +780,10 @@ func (h *Handlers) GetSender(ctx context.Context, sym string, input []byte) (res
|
||||
// GetAmount retrieves the amount from a JSON data file.
|
||||
func (h *Handlers) GetAmount(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
|
||||
//accountData, err := h.accountFileHandler.ReadAccountData()
|
||||
amount, err := h.db.Fetch([]byte(Amount))
|
||||
if err != nil {
|
||||
return res, err
|
||||
}
|
||||
|
||||
res.Content = string(amount)
|
||||
|
||||
return res, nil
|
||||
@ -906,10 +804,6 @@ func (h *Handlers) QuitWithBalance(ctx context.Context, sym string, input []byte
|
||||
code := codeFromCtx(ctx)
|
||||
l := gotext.NewLocale(translationDir, code)
|
||||
l.AddDomain("default")
|
||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
publicKey, err := h.db.Fetch([]byte(PublicKeyKey))
|
||||
if err != nil {
|
||||
return res, err
|
||||
@ -930,12 +824,6 @@ func (h *Handlers) InitiateTransaction(ctx context.Context, sym string, input []
|
||||
code := codeFromCtx(ctx)
|
||||
l := gotext.NewLocale(translationDir, code)
|
||||
l.AddDomain("default")
|
||||
// Preload the required flags
|
||||
// flagKeys := []string{"flag_invalid_recipient"}
|
||||
// flags, err := h.PreloadFlags(flagKeys)
|
||||
// if err != nil {
|
||||
// return res, err
|
||||
// }
|
||||
// TODO
|
||||
// Use the amount, recipient and sender to call the API and initialize the transaction
|
||||
|
||||
@ -962,3 +850,66 @@ func (h *Handlers) InitiateTransaction(ctx context.Context, sym string, input []
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// GetProfileInfo retrieves and formats the profile information of a user from a JSON data file.
|
||||
func (h *Handlers) GetProfileInfo(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||
res := resource.Result{}
|
||||
|
||||
// Define default values
|
||||
defaultValue := "Not provided"
|
||||
name := defaultValue
|
||||
familyName := defaultValue
|
||||
yob := defaultValue
|
||||
gender := defaultValue
|
||||
location := defaultValue
|
||||
offerings := defaultValue
|
||||
|
||||
// Fetch data using a map for better organization
|
||||
dataKeys := map[string]*string{
|
||||
FirstName: &name,
|
||||
FamilyName: &familyName,
|
||||
YearOfBirth: &yob,
|
||||
Location: &location,
|
||||
Gender: &gender,
|
||||
Offerings: &offerings,
|
||||
}
|
||||
|
||||
// Iterate over keys and fetch values
|
||||
//iter := h.db.Iterator()
|
||||
next := h.db.Iterator()
|
||||
//defer iter.Close() // Ensure the iterator is closed
|
||||
for key, err := next(); err == nil; key, err = next() {
|
||||
if valuePointer, ok := dataKeys[string(key)]; ok {
|
||||
value, fetchErr := h.db.Fetch(key)
|
||||
if fetchErr == nil {
|
||||
*valuePointer = string(value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Construct the full name
|
||||
if familyName != defaultValue {
|
||||
if name == defaultValue {
|
||||
name = familyName
|
||||
} else {
|
||||
name = name + " " + familyName
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate age from year of birth
|
||||
var age string
|
||||
if yob != defaultValue {
|
||||
yobInt, err := strconv.Atoi(yob)
|
||||
if err != nil {
|
||||
return res, fmt.Errorf("invalid year of birth: %v", err)
|
||||
}
|
||||
age = strconv.Itoa(utils.CalculateAgeWithYOB(yobInt))
|
||||
} else {
|
||||
age = defaultValue
|
||||
}
|
||||
|
||||
// Format the result
|
||||
formattedData := fmt.Sprintf("Name: %s\nGender: %s\nAge: %s\nLocation: %s\nYou provide: %s\n", name, gender, age, location, offerings)
|
||||
res.Content = formattedData
|
||||
return res, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user