diff --git a/README.md b/README.md index 065b148..8fbad6e 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,15 @@ To know about the application in detail, you can visit the [docs](https://github To get started in flow, you need to have two applications installed on your machine. 1. [Golang](https://go.dev/dl/) -2. [Docker](https://www.docker.com/get-started/) -3. [PostgreSQL](https://www.postgresql.org/) +2. [Cobra Framework](cobra.dev/) +3. [Docker](https://www.docker.com/get-started/) +4. [PostgreSQL](https://www.postgresql.org/) +5. [Alchemy API URL](https://docs.alchemy.com/docs/alchemy-quickstart-guide) +6. Wallet Private key + +### How to get Alchemy API URL? + +Signup to Alchemy, go to it's dashboad and the app section. Create a new app. If the new app is not allowed to create, then select the existing app, go to the network tab of the app and take the Ethereum Seplia API URL. ## Installation @@ -56,7 +63,7 @@ Each subcommand has its own set of options and arguments. Here are some examples ```bash # Initialize the application -flow init -n username -g gmail-id -a app-password -o postgresql-host -p postgresql-port -u postgresql-user -w postgresql-password -d postgresql-dbname -s sslmode +flow init -n username -g gmail-id -a app-password -o postgresql-host -p 5432 -u postgresql-user -w postgresql-password -d postgresql-dbname -s sslmode -k privatekey -i alchemy-url # Create a budget flow budget create --category groceries/utilities --amount 300 diff --git a/cmd/init/main.go b/cmd/init/main.go index f978a87..4560b9f 100644 --- a/cmd/init/main.go +++ b/cmd/init/main.go @@ -40,6 +40,9 @@ func initApp(cmd *cobra.Command, args []string) { postgresDBName, _ := cmd.Flags().GetString("db-name") sslMode, _ := cmd.Flags().GetString("sslmode") + privateKey, _ := cmd.Flags().GetString("private-key") + alchemyApiURL, _ := cmd.Flags().GetString("alchemy-api-url") + authParams := &entities.AuthVariables{ Username: username, Gmail: gmail, @@ -55,12 +58,18 @@ func initApp(cmd *cobra.Command, args []string) { SSLMode: sslMode, } + blockchainParams := &entities.BlockchainVariables{ + PrivateKey: privateKey, + AlchemyApiURL: alchemyApiURL, + } + if allNonEmpty( authParams.Username, authParams.Gmail, authParams.AppPassword, dbParams.Host, dbParams.Port, dbParams.User, dbParams.Password, - dbParams.DBName, dbParams.SSLMode, + dbParams.DBName, dbParams.SSLMode, blockchainParams.PrivateKey, + blockchainParams.AlchemyApiURL, ) { - err := InitializeApplication(authParams, dbParams) + err := InitializeApplication(authParams, dbParams, blockchainParams) if err != nil { fmt.Println("Error during initialization:", err) return @@ -84,9 +93,9 @@ func takeHandler() *handler.Handler { return handle } -func InitializeApplication(authParams *entities.AuthVariables, dbParams *entities.DatabaseVariables) error { +func InitializeApplication(authParams *entities.AuthVariables, dbParams *entities.DatabaseVariables, blockchainParams *entities.BlockchainVariables) error { h := takeHandler() - err := h.Deps.Init.WriteEnvFile(authParams, dbParams) + err := h.Deps.Init.WriteEnvFile(authParams, dbParams, blockchainParams) if err != nil { return fmt.Errorf("error writing to .env file: %v", err) } @@ -110,4 +119,6 @@ func init() { InitCmd.Flags().StringP("db-user", "u", "", "Write the PostgreSQL user") InitCmd.Flags().StringP("db-name", "d", "", "Write the PostgreSQL DB name") InitCmd.Flags().StringP("sslmode", "s", "", "Write the PostgreSQL SSLMode") + InitCmd.Flags().StringP("private-key", "k", "", "Write your wallet private key to store in .env file") + InitCmd.Flags().StringP("alchemy-api-url", "i", "", "Write your alchemy api url for sepolia test network") } diff --git a/cmd/root.go b/cmd/root.go index eb0da01..dc1617f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -9,7 +9,7 @@ import ( "github.com/spf13/cobra" ) -const version = "v0.2.2" +const version = "v0.2.3" // rootCmd represents the base command when called without any subcommands var RootCmd = &cobra.Command{ diff --git a/entities/init.go b/entities/init.go index 8251bb1..256bd2f 100644 --- a/entities/init.go +++ b/entities/init.go @@ -14,3 +14,8 @@ type DatabaseVariables struct { DBName string SSLMode string } + +type BlockchainVariables struct { + PrivateKey string + AlchemyApiURL string +} diff --git a/interfaces/interfaces.go b/interfaces/interfaces.go index e4730a6..92c6758 100644 --- a/interfaces/interfaces.go +++ b/interfaces/interfaces.go @@ -8,7 +8,7 @@ import ( ) type Init interface { - WriteEnvFile(av *entities.AuthVariables, dv *entities.DatabaseVariables) error + WriteEnvFile(av *entities.AuthVariables, dv *entities.DatabaseVariables, bv *entities.BlockchainVariables) error } type Connect interface { diff --git a/usecases/app/init/init.go b/usecases/app/init/init.go index b361b02..d253c81 100644 --- a/usecases/app/init/init.go +++ b/usecases/app/init/init.go @@ -12,7 +12,7 @@ type MyInit struct { *handler.Handler } -func (MyInit) WriteEnvFile(av *entities.AuthVariables, dv *entities.DatabaseVariables) error { +func (MyInit) WriteEnvFile(av *entities.AuthVariables, dv *entities.DatabaseVariables, bv *entities.BlockchainVariables) error { f, err := os.Create(".env") if err != nil { return err @@ -33,6 +33,9 @@ func (MyInit) WriteEnvFile(av *entities.AuthVariables, dv *entities.DatabaseVari {"DB_PASSWORD", dv.Password}, {"DB_NAME", dv.DBName}, {"SSL_MODE", dv.SSLMode}, + + {"PRIVATE_KEY", bv.PrivateKey}, + {"ALCHEMY_API_URL", bv.AlchemyApiURL}, } for _, field := range fields {