diff --git a/cmd/root.go b/cmd/root.go index 3e4ce22..0b912ea 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,17 +1,16 @@ /* Copyright © 2025 Hazem Krimi me@hazemkrimi.tech - */ package cmd import ( + "fmt" "os" + "github.com/hazemKrimi/crimson-vault/internal/models" "github.com/spf13/cobra" ) - - // rootCmd represents the base command when called without any subcommands var rootCmd = &cobra.Command{ Use: "crimson-vault", @@ -24,7 +23,14 @@ This application is a tool to generate the needed files to quickly create a Cobra application.`, // Uncomment the following line if your bare application // has an action associated with it: - // Run: func(cmd *cobra.Command, args []string) { }, + Run: func(cmd *cobra.Command, args []string) { + wrapper := models.DBWrapper{} + wrapper.Initialize() + wrapper.MigrateClients() + wrapper.CreateClient("Hello", "World", "12345678") + client := wrapper.GetClient(1) + fmt.Println(fmt.Sprintf("Name: %s, Country: %s, Phone: %s", client.Name, client.Country, client.Phone)) + }, } // Execute adds all child commands to the root command and sets flags appropriately. diff --git a/go.mod b/go.mod index b496413..3144aad 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,12 @@ go 1.24.3 require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/mattn/go-sqlite3 v1.14.22 // indirect github.com/spf13/cobra v1.9.1 // indirect github.com/spf13/pflag v1.0.6 // indirect + golang.org/x/text v0.25.0 // indirect + gorm.io/driver/sqlite v1.5.7 // indirect + gorm.io/gorm v1.30.0 // indirect ) diff --git a/go.sum b/go.sum index ffae55e..10fda8c 100644 --- a/go.sum +++ b/go.sum @@ -1,10 +1,24 @@ github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A= +github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I= +gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4= +gorm.io/gorm v1.30.0 h1:qbT5aPv1UH8gI99OsRlvDToLxW5zR7FzS9acZDOZcgs= +gorm.io/gorm v1.30.0/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE= diff --git a/internal/models/client.go b/internal/models/client.go new file mode 100644 index 0000000..4d0b933 --- /dev/null +++ b/internal/models/client.go @@ -0,0 +1,24 @@ +package models + +import "gorm.io/gorm" + +type Client struct { + gorm.Model + Name string + Country string + Phone string +} + +func (wrapper *DBWrapper) MigrateClients() { + wrapper.db.AutoMigrate(&Client{}) +} + +func (wrapper *DBWrapper) CreateClient(name string, country string, phone string) { + wrapper.db.Create(&Client{Name: name, Country: country, Phone: phone}) +} + +func (wrapper *DBWrapper) GetClient(id int) (Client) { + var client Client + wrapper.db.First(&client, id) + return client +} diff --git a/internal/models/db.go b/internal/models/db.go new file mode 100644 index 0000000..3035112 --- /dev/null +++ b/internal/models/db.go @@ -0,0 +1,20 @@ +package models + +import ( + "log" + + "gorm.io/driver/sqlite" + "gorm.io/gorm" +) + +type DBWrapper struct { + db *gorm.DB +} + +func (wrapper *DBWrapper) Initialize() { + db, err := gorm.Open(sqlite.Open("crimson_vault.db"), &gorm.Config{}) + if err != nil { + log.Fatal(err) + } + wrapper.db = db +}