implement profile data persistence

This commit is contained in:
Carlosokumu 2024-08-23 06:35:49 +03:00
parent 075355980a
commit 722bb10441
Signed by: carlos
GPG Key ID: 7BD6BC8160A5C953
18 changed files with 307 additions and 2 deletions

View File

@ -27,6 +27,7 @@ const (
USERFLAG_INVALID_RECIPIENT USERFLAG_INVALID_RECIPIENT
USERFLAG_INVALID_RECIPIENT_WITH_INVITE USERFLAG_INVALID_RECIPIENT_WITH_INVITE
USERFLAG_INCORRECTPIN USERFLAG_INCORRECTPIN
USERFLAG_UNLOCKFORUPDATE
) )
const ( const (
@ -70,6 +71,193 @@ type fsData struct {
st *state.State st *state.State
} }
func (fsd *fsData) saveFirstName(cxt context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{}
fp := fsd.path + "_data"
jsonData, err := os.ReadFile(fp)
if err != nil {
return res, err
}
var accountData map[string]string
err = json.Unmarshal(jsonData, &accountData)
if err != nil {
return res, err
}
if len(input) > 0 {
name := string(input)
accountData["FirstName"] = name
updatedJsonData, err := json.Marshal(accountData)
if err != nil {
return res, err
}
err = os.WriteFile(fp, updatedJsonData, 0644)
if err != nil {
return res, err
}
}
return res, nil
}
func (fsd *fsData) saveFamilyName(cxt context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{}
fp := fsd.path + "_data"
jsonData, err := os.ReadFile(fp)
if err != nil {
return res, err
}
var accountData map[string]string
err = json.Unmarshal(jsonData, &accountData)
if err != nil {
return res, err
}
if len(input) > 0 {
//Save name
secondname := string(input)
fmt.Println("FamilyName:", secondname)
accountData["FamilyName"] = secondname
updatedJsonData, err := json.Marshal(accountData)
if err != nil {
return res, err
}
err = os.WriteFile(fp, updatedJsonData, 0644)
if err != nil {
return res, err
}
}
return res, nil
}
func (fsd *fsData) saveYOB(cxt context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{}
fp := fsd.path + "_data"
jsonData, err := os.ReadFile(fp)
if err != nil {
return res, err
}
var accountData map[string]string
err = json.Unmarshal(jsonData, &accountData)
if err != nil {
return res, err
}
if len(input) > 0 {
yob := string(input)
fmt.Println("YOB", yob)
accountData["YOB"] = yob
updatedJsonData, err := json.Marshal(accountData)
if err != nil {
return res, err
}
err = os.WriteFile(fp, updatedJsonData, 0644)
if err != nil {
return res, err
}
}
return res, nil
}
func (fsd *fsData) saveLocation(cxt context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{}
fp := fsd.path + "_data"
jsonData, err := os.ReadFile(fp)
if err != nil {
return res, err
}
var accountData map[string]string
err = json.Unmarshal(jsonData, &accountData)
if err != nil {
return res, err
}
if len(input) > 0 {
location := string(input)
fmt.Println("Location:", location)
accountData["Location"] = location
updatedJsonData, err := json.Marshal(accountData)
if err != nil {
return res, err
}
err = os.WriteFile(fp, updatedJsonData, 0644)
if err != nil {
return res, err
}
}
return res, nil
}
func (fsd *fsData) saveGender(ctx context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{}
fp := fsd.path + "_data"
jsonData, err := os.ReadFile(fp)
if err != nil {
return res, err
}
var accountData map[string]string
err = json.Unmarshal(jsonData, &accountData)
if err != nil {
return res, err
}
if len(input) > 0 {
gender := string(input)
switch gender {
case "1" : gender = "Male"
case "2" : gender = "Female"
case "3" : gender = "Other"
}
fmt.Println("gender", gender)
accountData["Gender"] = gender
updatedJsonData, err := json.Marshal(accountData)
if err != nil {
return res, err
}
err = os.WriteFile(fp, updatedJsonData, 0644)
if err != nil {
return res, err
}
}
return res, nil
}
func (fsd *fsData) saveOfferings(ctx context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{}
fp := fsd.path + "_data"
jsonData, err := os.ReadFile(fp)
if err != nil {
return res, err
}
var accountData map[string]string
err = json.Unmarshal(jsonData, &accountData)
if err != nil {
return res, err
}
if len(input) > 0 {
offerings := string(input)
fmt.Println("Offerings:", offerings)
accountData["Offerings"] = offerings
updatedJsonData, err := json.Marshal(accountData)
if err != nil {
return res, err
}
err = os.WriteFile(fp, updatedJsonData, 0644)
if err != nil {
return res, err
}
}
return res, nil
}
func (fsd *fsData) SetLanguageSelected(ctx context.Context, sym string, input []byte) (resource.Result, error) { func (fsd *fsData) SetLanguageSelected(ctx context.Context, sym string, input []byte) (resource.Result, error) {
inputStr := string(input) inputStr := string(input)
res := resource.Result{} res := resource.Result{}
@ -97,7 +285,18 @@ func (fsd *fsData) create_account(ctx context.Context, sym string, input []byte)
} }
f.Close() f.Close()
accountResp, err := createAccount() //accountResp, err := createAccount()
accountResp := accountResponse{
Ok: true,
Result: struct {
CustodialId json.Number `json:"custodialId"`
PublicKey string `json:"publicKey"`
TrackingId string `json:"trackingId"`
}{
CustodialId: "636",
PublicKey: "0x8d86F9D4A4eae41Dc3B68034895EA97BcA90e8c1",
TrackingId: "45c67314-7995-4890-89d6-e5af987754ac",
}}
if err != nil { if err != nil {
fmt.Println("Failed to create account:", err) fmt.Println("Failed to create account:", err)
@ -124,6 +323,21 @@ func (fsd *fsData) create_account(ctx context.Context, sym string, input []byte)
return res, err return res, err
} }
func (fsd *fsData) resetUnlockForUpdate(ctx context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{}
res.FlagReset = append(res.FlagReset, USERFLAG_UNLOCKFORUPDATE)
return res, nil
}
func (fsd *fsData) resetAccountUnlocked(ctx context.Context,sym string,input []byte) (resource.Result,error){
res := resource.Result{}
st := fsd.st
isSet := st.MatchFlag(USERFLAG_ACCOUNT_UNLOCKED,true)
res.FlagReset = append(res.FlagReset, USERFLAG_ACCOUNT_UNLOCKED)
fmt.Println("ISSET:",isSet)
return res,nil
}
func (fsd *fsData) checkIdentifier(ctx context.Context, sym string, input []byte) (resource.Result, error) { func (fsd *fsData) checkIdentifier(ctx context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{} res := resource.Result{}
fp := fsd.path + "_data" fp := fsd.path + "_data"
@ -154,9 +368,11 @@ func (fsd *fsData) unLock(ctx context.Context, sym string, input []byte) (resour
return res, nil return res, nil
} }
if fsd.st.MatchFlag(USERFLAG_ACCOUNT_UNLOCKED, false) { if fsd.st.MatchFlag(USERFLAG_ACCOUNT_UNLOCKED, false) {
//res.FlagSet = append(res.FlagSet, USERFLAG_UNLOCKFORUPDATE)
res.FlagSet = append(res.FlagSet, USERFLAG_ACCOUNT_UNLOCKED) res.FlagSet = append(res.FlagSet, USERFLAG_ACCOUNT_UNLOCKED)
} else { } else {
res.FlagReset = append(res.FlagReset, USERFLAG_ACCOUNT_UNLOCKED) res.FlagReset = append(res.FlagReset, USERFLAG_ACCOUNT_UNLOCKED)
//res.FlagReset = append(res.FlagReset, USERFLAG_UNLOCKFORUPDATE)
} }
} }
return res, nil return res, nil
@ -173,6 +389,11 @@ func (fsd *fsData) ResetIncorrectPin(ctx context.Context, sym string, input []by
return res, nil return res, nil
} }
func (fsd *fsData) ShowUpdateSuccess(ctx context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{}
return res, nil
}
func (fsd *fsData) check_account_status(ctx context.Context, sym string, input []byte) (resource.Result, error) { func (fsd *fsData) check_account_status(ctx context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{} res := resource.Result{}
fp := fsd.path + "_data" fp := fsd.path + "_data"
@ -197,7 +418,7 @@ func (fsd *fsData) check_account_status(ctx context.Context, sym string, input [
accountData["Status"] = status accountData["Status"] = status
if status == "SUCCESS" { if status == "REVERTED" {
res.FlagSet = append(res.FlagSet, USERFLAG_ACCOUNT_SUCCESS) res.FlagSet = append(res.FlagSet, USERFLAG_ACCOUNT_SUCCESS)
res.FlagReset = append(res.FlagReset, USERFLAG_ACCOUNT_PENDING) res.FlagReset = append(res.FlagReset, USERFLAG_ACCOUNT_PENDING)
} else { } else {
@ -456,6 +677,35 @@ func (fsd *fsData) get_recipient(ctx context.Context, sym string, input []byte)
return res, nil return res, nil
} }
func (fsd *fsData) getProfileInfo(ctx context.Context,sym string,input []byte) (resource.Result,error){
res := resource.Result{}
fp := fsd.path + "_data"
jsonData, err := os.ReadFile(fp)
if err != nil {
return res, err
}
var accountData map[string]string
err = json.Unmarshal(jsonData, &accountData)
if err != nil {
return res, err
}
name := accountData["FirstName"]
gender := accountData["Gender"]
age := accountData["YOB"]
location := accountData["Location"]
// Format the data into a string
formattedData := fmt.Sprintf("Name: %s\nGender: %s\nAge: %s\nLocation: %s\n", name, gender, age, location)
res.Content = formattedData
return res,nil
}
func (fsd *fsData) get_sender(ctx context.Context, sym string, input []byte) (resource.Result, error) { func (fsd *fsData) get_sender(ctx context.Context, sym string, input []byte) (resource.Result, error) {
res := resource.Result{} res := resource.Result{}
fp := fsd.path + "_data" fp := fsd.path + "_data"
@ -585,7 +835,20 @@ func main() {
rfs.AddLocalFunc("get_recipient", fs.get_recipient) rfs.AddLocalFunc("get_recipient", fs.get_recipient)
rfs.AddLocalFunc("get_sender", fs.get_sender) rfs.AddLocalFunc("get_sender", fs.get_sender)
rfs.AddLocalFunc("reset_incorrect", fs.ResetIncorrectPin) rfs.AddLocalFunc("reset_incorrect", fs.ResetIncorrectPin)
rfs.AddLocalFunc("save_firstname", fs.saveFirstName)
rfs.AddLocalFunc("save_familyname", fs.saveFamilyName)
rfs.AddLocalFunc("save_gender", fs.saveGender)
rfs.AddLocalFunc("save_location", fs.saveLocation)
rfs.AddLocalFunc("save_yob", fs.saveYOB)
rfs.AddLocalFunc("save_offerings", fs.saveOfferings)
rfs.AddLocalFunc("quit_with_balance", fs.quitWithBalance) rfs.AddLocalFunc("quit_with_balance", fs.quitWithBalance)
rfs.AddLocalFunc("show_update_success", fs.ShowUpdateSuccess)
rfs.AddLocalFunc("reset_unlocked",fs.resetAccountUnlocked)
rfs.AddLocalFunc("reset_unlock_for_update", fs.resetUnlockForUpdate)
rfs.AddLocalFunc("get_profile_info",fs.getProfileInfo)
cont, err := en.Init(ctx) cont, err := en.Init(ctx)
en.SetDebugger(engine.NewSimpleDebug(nil)) en.SetDebugger(engine.NewSimpleDebug(nil))

View File

@ -1,3 +1,4 @@
LOAD reset_unlocked 0
MOUT my_balance 1 MOUT my_balance 1
MOUT community_balance 2 MOUT community_balance 2
MOUT back 0 MOUT back 0

View File

@ -1,3 +1,5 @@
LOAD reset_unlocked 0
LOAD get_profile_info 0
MOUT edit_name 1 MOUT edit_name 1
MOUT edit_gender 2 MOUT edit_gender 2
MOUT edit_yob 3 MOUT edit_yob 3

View File

@ -0,0 +1 @@
Enter family name:

View File

@ -0,0 +1,6 @@
LOAD save_firstname 0
MOUT back 0
HALT
INCMP _ 0
INCMP select_gender *

View File

@ -1,3 +1,5 @@
LOAD save_yob 0
MOUT back 0 MOUT back 0
HALT HALT
INCMP _ 0 INCMP _ 0
INCMP enter_offerings *

View File

@ -1,3 +1,4 @@
MOUT back 0 MOUT back 0
HALT HALT
INCMP _ 0 INCMP _ 0
INCMP enter_familyname *

View File

@ -1,3 +1,10 @@
LOAD save_location 0
CATCH incorrect_pin 15 1
CATCH update_success 16 1
MOUT back 0 MOUT back 0
HALT HALT
LOAD save_offerings 0
INCMP _ 0 INCMP _ 0
INCMP pin_entry *

View File

@ -1,3 +1,5 @@
LOAD save_gender 0
MOUT back 0 MOUT back 0
HALT HALT
INCMP _ 0 INCMP _ 0
INCMP enter_location *

View File

@ -1,3 +1,4 @@
LOAD reset_unlock_for_update 0
MOUT profile 1 MOUT profile 1
MOUT change_language 2 MOUT change_language 2
MOUT check_balance 3 MOUT check_balance 3

View File

@ -1,6 +1,10 @@
LOAD save_familyname 0
MOUT male 1 MOUT male 1
MOUT female 2 MOUT female 2
MOUT other_gender 3 MOUT other_gender 3
MOUT back 0 MOUT back 0
HALT HALT
INCMP _ 0 INCMP _ 0
INCMP enter_yob 1
INCMP enter_yob 2
INCMP enter_yob 3

View File

@ -0,0 +1 @@
Profile updated successfully

View File

@ -0,0 +1,3 @@
MOUT back 0
HALT
INCMP ^ 0

View File

@ -0,0 +1 @@
Akaunti imeupdatiwa

View File

@ -0,0 +1,2 @@
My profile:
{{.get_profile_info}}

View File

@ -1 +1,8 @@
LOAD get_profile_info 0
MAP get_profile_info
LOAD reset_incorrect 0
CATCH incorrect_pin 15 1
CATCH pin_entry 12 0
MOUT back 0
HALT HALT
INCMP _ 0

View File

@ -0,0 +1 @@
Wasifu wangu