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.
|
// 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) {
|
func (h *Handlers) SaveFirstname(cxt context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
res := resource.Result{}
|
res := resource.Result{}
|
||||||
|
|
||||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
if len(input) > 0 {
|
if len(input) > 0 {
|
||||||
name := string(input)
|
name := string(input)
|
||||||
//accountData["FirstName"] = name
|
|
||||||
|
|
||||||
key := []byte(FirstName)
|
key := []byte(FirstName)
|
||||||
value := []byte(name)
|
value := []byte(name)
|
||||||
|
|
||||||
h.db.Store(key, value, true)
|
h.db.Store(key, value, true)
|
||||||
|
|
||||||
// err = h.accountFileHandler.WriteAccountData(accountData)
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res, nil
|
return res, nil
|
||||||
@ -307,7 +294,6 @@ func (h *Handlers) SaveFamilyname(cxt context.Context, sym string, input []byte)
|
|||||||
secondname := string(input)
|
secondname := string(input)
|
||||||
key := []byte(FamilyName)
|
key := []byte(FamilyName)
|
||||||
value := []byte(secondname)
|
value := []byte(secondname)
|
||||||
|
|
||||||
h.db.Store(key, value, true)
|
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.
|
// 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) {
|
func (h *Handlers) SaveYob(cxt context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
res := resource.Result{}
|
res := resource.Result{}
|
||||||
|
|
||||||
yob := string(input)
|
yob := string(input)
|
||||||
if len(yob) == 4 {
|
if len(yob) == 4 {
|
||||||
yob := string(input)
|
yob := string(input)
|
||||||
//accountData["YOB"] = yob
|
|
||||||
key := []byte(YearOfBirth)
|
key := []byte(YearOfBirth)
|
||||||
value := []byte(yob)
|
value := []byte(yob)
|
||||||
|
|
||||||
h.db.Store(key, value, true)
|
h.db.Store(key, value, true)
|
||||||
// err = h.accountFileHandler.WriteAccountData(accountData)
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res, nil
|
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.
|
// 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) {
|
func (h *Handlers) SaveLocation(cxt context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
res := resource.Result{}
|
res := resource.Result{}
|
||||||
|
|
||||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
|
|
||||||
if len(input) > 0 {
|
if len(input) > 0 {
|
||||||
location := string(input)
|
location := string(input)
|
||||||
key := []byte(Location)
|
key := []byte(Location)
|
||||||
@ -360,7 +333,6 @@ func (h *Handlers) SaveGender(ctx context.Context, sym string, input []byte) (re
|
|||||||
res := resource.Result{}
|
res := resource.Result{}
|
||||||
if len(input) > 0 {
|
if len(input) > 0 {
|
||||||
gender := string(input)
|
gender := string(input)
|
||||||
|
|
||||||
switch gender {
|
switch gender {
|
||||||
case "1":
|
case "1":
|
||||||
gender = "Male"
|
gender = "Male"
|
||||||
@ -369,16 +341,9 @@ func (h *Handlers) SaveGender(ctx context.Context, sym string, input []byte) (re
|
|||||||
case "3":
|
case "3":
|
||||||
gender = "Unspecified"
|
gender = "Unspecified"
|
||||||
}
|
}
|
||||||
//accountData["Gender"] = gender
|
|
||||||
key := []byte(Gender)
|
key := []byte(Gender)
|
||||||
value := []byte(gender)
|
value := []byte(gender)
|
||||||
|
|
||||||
h.db.Store(key, value, true)
|
h.db.Store(key, value, true)
|
||||||
|
|
||||||
// err = h.accountFileHandler.WriteAccountData(accountData)
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
return res, nil
|
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.
|
// 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) {
|
func (h *Handlers) SaveOfferings(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
res := resource.Result{}
|
res := resource.Result{}
|
||||||
|
|
||||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
|
|
||||||
if len(input) > 0 {
|
if len(input) > 0 {
|
||||||
offerings := string(input)
|
offerings := string(input)
|
||||||
//accountData["Offerings"] = offerings
|
|
||||||
key := []byte(Offerings)
|
key := []byte(Offerings)
|
||||||
value := []byte(offerings)
|
value := []byte(offerings)
|
||||||
|
|
||||||
h.db.Store(key, value, true)
|
h.db.Store(key, value, true)
|
||||||
|
|
||||||
// err = h.accountFileHandler.WriteAccountData(accountData)
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
return res, nil
|
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.
|
// CheckIdentifier retrieves the PublicKey from the JSON data file.
|
||||||
func (h *Handlers) CheckIdentifier(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
func (h *Handlers) CheckIdentifier(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
res := resource.Result{}
|
res := resource.Result{}
|
||||||
|
|
||||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
publicKey, err := h.db.Fetch([]byte(PublicKeyKey))
|
publicKey, err := h.db.Fetch([]byte(PublicKeyKey))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
res.Content = string(publicKey)
|
res.Content = string(publicKey)
|
||||||
|
|
||||||
return res, nil
|
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.
|
// It sets the required flags that control the flow.
|
||||||
func (h *Handlers) Authorize(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
func (h *Handlers) Authorize(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
res := resource.Result{}
|
res := resource.Result{}
|
||||||
|
|
||||||
// Preload the required flags
|
// Preload the required flags
|
||||||
flagKeys := []string{"flag_incorrect_pin", "flag_account_authorized", "flag_allow_update"}
|
flagKeys := []string{"flag_incorrect_pin", "flag_account_authorized", "flag_allow_update"}
|
||||||
flags, err := h.PreloadFlags(flagKeys)
|
flags, err := h.PreloadFlags(flagKeys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// pin := string(input)
|
|
||||||
|
|
||||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
|
|
||||||
storedpin, err := h.db.Fetch([]byte(AccountPin))
|
storedpin, err := h.db.Fetch([]byte(AccountPin))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if len(input) == 4 {
|
if len(input) == 4 {
|
||||||
@ -526,11 +462,6 @@ func (h *Handlers) CheckAccountStatus(ctx context.Context, sym string, input []b
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
trackingId, err := h.db.Fetch([]byte(TrackingIdKey))
|
trackingId, err := h.db.Fetch([]byte(TrackingIdKey))
|
||||||
|
|
||||||
if err != nil {
|
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(AccountStatus), toBytes(status), true)
|
||||||
err = h.db.Store(toBytes(TrackingIdKey), toBytes(status), true)
|
if err != nil {
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
err = h.db.Store(toBytes(TrackingIdKey), toBytes(status), true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
@ -828,39 +762,6 @@ func (h *Handlers) GetRecipient(ctx context.Context, sym string, input []byte) (
|
|||||||
return res, nil
|
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.
|
// GetSender retrieves the public key from a JSON data file.
|
||||||
func (h *Handlers) GetSender(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
func (h *Handlers) GetSender(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
res := resource.Result{}
|
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.
|
// GetAmount retrieves the amount from a JSON data file.
|
||||||
func (h *Handlers) GetAmount(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
func (h *Handlers) GetAmount(ctx context.Context, sym string, input []byte) (resource.Result, error) {
|
||||||
res := resource.Result{}
|
res := resource.Result{}
|
||||||
|
|
||||||
//accountData, err := h.accountFileHandler.ReadAccountData()
|
|
||||||
amount, err := h.db.Fetch([]byte(Amount))
|
amount, err := h.db.Fetch([]byte(Amount))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
|
|
||||||
res.Content = string(amount)
|
res.Content = string(amount)
|
||||||
|
|
||||||
return res, nil
|
return res, nil
|
||||||
@ -906,10 +804,6 @@ func (h *Handlers) QuitWithBalance(ctx context.Context, sym string, input []byte
|
|||||||
code := codeFromCtx(ctx)
|
code := codeFromCtx(ctx)
|
||||||
l := gotext.NewLocale(translationDir, code)
|
l := gotext.NewLocale(translationDir, code)
|
||||||
l.AddDomain("default")
|
l.AddDomain("default")
|
||||||
// accountData, err := h.accountFileHandler.ReadAccountData()
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
publicKey, err := h.db.Fetch([]byte(PublicKeyKey))
|
publicKey, err := h.db.Fetch([]byte(PublicKeyKey))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, err
|
return res, err
|
||||||
@ -930,12 +824,6 @@ func (h *Handlers) InitiateTransaction(ctx context.Context, sym string, input []
|
|||||||
code := codeFromCtx(ctx)
|
code := codeFromCtx(ctx)
|
||||||
l := gotext.NewLocale(translationDir, code)
|
l := gotext.NewLocale(translationDir, code)
|
||||||
l.AddDomain("default")
|
l.AddDomain("default")
|
||||||
// Preload the required flags
|
|
||||||
// flagKeys := []string{"flag_invalid_recipient"}
|
|
||||||
// flags, err := h.PreloadFlags(flagKeys)
|
|
||||||
// if err != nil {
|
|
||||||
// return res, err
|
|
||||||
// }
|
|
||||||
// TODO
|
// TODO
|
||||||
// Use the amount, recipient and sender to call the API and initialize the transaction
|
// 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
|
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