From 5b5a62282b7c7e1316685fcf36a08355cb940e26 Mon Sep 17 00:00:00 2001 From: adb-sh Date: Thu, 6 Mar 2025 23:28:53 +0100 Subject: [PATCH] implement db --- .gitignore | 1 + api/petstore.gen.go | 58 ++++++++++++++--------------- api/petstore.go | 90 ++++++++++++++------------------------------- api/petstore.yml | 9 +++++ db/db.go | 26 +++++++++++++ go.mod | 6 +++ go.sum | 12 ++++++ main.go | 12 +++--- 8 files changed, 116 insertions(+), 98 deletions(-) create mode 100644 .gitignore create mode 100644 db/db.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..884e3de --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +test.db \ No newline at end of file diff --git a/api/petstore.gen.go b/api/petstore.gen.go index 3144e02..6bbe345 100644 --- a/api/petstore.gen.go +++ b/api/petstore.gen.go @@ -39,7 +39,7 @@ type NewPet struct { // Pet defines model for Pet. type Pet struct { // Id Unique id of the pet - Id int64 `json:"id"` + Id int64 `gorm:"primarykey" json:"id"` // Name Name of the pet Name string `json:"name"` @@ -344,34 +344,34 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "97cAAAD//ykDnxlaEgAA", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/petstore.go b/api/petstore.go index 5e2e6f5..6ac20a2 100644 --- a/api/petstore.go +++ b/api/petstore.go @@ -4,26 +4,17 @@ import ( "encoding/json" "fmt" "net/http" - "sync" + + "gorm.io/gorm" ) type PetStore struct { - Pets map[int64]Pet - NextId int64 - Lock sync.Mutex + DB *gorm.DB } // Make sure we conform to ServerInterface - var _ ServerInterface = (*PetStore)(nil) -func NewPetStore() *PetStore { - return &PetStore{ - Pets: make(map[int64]Pet), - NextId: 1000, - } -} - // sendPetStoreError wraps sending of an error in the Error format, and // handling the failure to marshal that. func sendPetStoreError(w http.ResponseWriter, code int, message string) { @@ -37,35 +28,24 @@ func sendPetStoreError(w http.ResponseWriter, code int, message string) { // FindPets implements all the handlers in the ServerInterface func (p *PetStore) FindPets(w http.ResponseWriter, r *http.Request, params FindPetsParams) { - p.Lock.Lock() - defer p.Lock.Unlock() + var pets []Pet + query := p.DB - var result []Pet + if params.Tags != nil { + query = query.Where("tag IN ?", *params.Tags) + } - for _, pet := range p.Pets { - if params.Tags != nil { - // If we have tags, filter pets by tag - for _, t := range *params.Tags { - if pet.Tag != nil && (*pet.Tag == t) { - result = append(result, pet) - } - } - } else { - // Add all pets if we're not filtering - result = append(result, pet) - } + if params.Limit != nil { + query = query.Limit(int(*params.Limit)) + } - if params.Limit != nil { - l := int(*params.Limit) - if len(result) >= l { - // We're at the limit - break - } - } + if err := query.Find(&pets).Error; err != nil { + sendPetStoreError(w, http.StatusInternalServerError, "Database error") + return } w.WriteHeader(http.StatusOK) - _ = json.NewEncoder(w).Encode(result) + _ = json.NewEncoder(w).Encode(pets) } func (p *PetStore) AddPet(w http.ResponseWriter, r *http.Request) { @@ -76,21 +56,15 @@ func (p *PetStore) AddPet(w http.ResponseWriter, r *http.Request) { return } - // We now have a pet, let's add it to our "database". + pet := Pet{ + Name: newPet.Name, + Tag: newPet.Tag, + } - // We're always asynchronous, so lock unsafe operations below - p.Lock.Lock() - defer p.Lock.Unlock() - - // We handle pets, not NewPets, which have an additional ID field - var pet Pet - pet.Name = newPet.Name - pet.Tag = newPet.Tag - pet.Id = p.NextId - p.NextId++ - - // Insert into map - p.Pets[pet.Id] = pet + if err := p.DB.Create(&pet).Error; err != nil { + sendPetStoreError(w, http.StatusInternalServerError, "Failed to create pet") + return + } // Now, we have to return the NewPet w.WriteHeader(http.StatusCreated) @@ -98,12 +72,9 @@ func (p *PetStore) AddPet(w http.ResponseWriter, r *http.Request) { } func (p *PetStore) FindPetByID(w http.ResponseWriter, r *http.Request, id int64) { - p.Lock.Lock() - defer p.Lock.Unlock() - - pet, found := p.Pets[id] - if !found { - sendPetStoreError(w, http.StatusNotFound, fmt.Sprintf("Could not find pet with ID %d", id)) + var pet Pet + if err := p.DB.First(&pet, id).Error; err != nil { + sendPetStoreError(w, http.StatusNotFound, fmt.Sprintf("Pet with ID %d not found", id)) return } @@ -112,15 +83,10 @@ func (p *PetStore) FindPetByID(w http.ResponseWriter, r *http.Request, id int64) } func (p *PetStore) DeletePet(w http.ResponseWriter, r *http.Request, id int64) { - p.Lock.Lock() - defer p.Lock.Unlock() - - _, found := p.Pets[id] - if !found { - sendPetStoreError(w, http.StatusNotFound, fmt.Sprintf("Could not find pet with ID %d", id)) + if err := p.DB.Delete(&Pet{}, id).Error; err != nil { + sendPetStoreError(w, http.StatusNotFound, fmt.Sprintf("Pet with ID %d not found", id)) return } - delete(p.Pets, id) w.WriteHeader(http.StatusNoContent) } diff --git a/api/petstore.yml b/api/petstore.yml index 65fdb94..440acb5 100644 --- a/api/petstore.yml +++ b/api/petstore.yml @@ -138,6 +138,9 @@ components: type: integer format: int64 description: Unique id of the pet + x-go-type: int64 + x-oapi-codegen-extra-tags: + gorm: primarykey NewPet: required: @@ -146,9 +149,15 @@ components: name: type: string description: Name of the pet + # x-go-type: + # type: string + # structTags: 'json:"name"' tag: type: string description: Type of the pet + # x-go-type: + # type: "*string" + # structTags: 'json:"tag,omitempty"' Error: required: diff --git a/db/db.go b/db/db.go new file mode 100644 index 0000000..1ece8f3 --- /dev/null +++ b/db/db.go @@ -0,0 +1,26 @@ +package db + +import ( + "log" + + "example/hello/api" + + "gorm.io/driver/sqlite" + "gorm.io/gorm" +) + +// ConnectDB initializes the database connection +func ConnectDB() *gorm.DB { + db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) + if err != nil { + panic("failed to connect database") + } + + log.Println("Database connected successfully") + return db +} + +func Migrate(db *gorm.DB) { + db.AutoMigrate(&api.Pet{}) + log.Println("Database migrated successfully") +} diff --git a/go.mod b/go.mod index d93fd1f..a5c8bfa 100644 --- a/go.mod +++ b/go.mod @@ -12,12 +12,18 @@ require ( github.com/go-openapi/swag v0.23.0 // indirect github.com/google/uuid v1.5.0 // indirect github.com/gorilla/mux v1.8.1 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-sqlite3 v1.14.24 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/oapi-codegen/runtime v1.1.1 // indirect github.com/oasdiff/yaml v0.0.0-20241210131133-6b86fb107d80 // indirect github.com/oasdiff/yaml3 v0.0.0-20241210130736-a94c01f36349 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect + golang.org/x/text v0.23.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + gorm.io/driver/sqlite v1.5.7 // indirect + gorm.io/gorm v1.25.12 // indirect ) diff --git a/go.sum b/go.sum index 65b704a..8adacd4 100644 --- a/go.sum +++ b/go.sum @@ -15,11 +15,17 @@ github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +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/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= +github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/oapi-codegen/nethttp-middleware v1.0.2 h1:A5tfAcKJhWIbIPnlQH+l/DtfVE1i5TFgPlQAiW+l1vQ= @@ -36,6 +42,12 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= 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.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= +gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= diff --git a/main.go b/main.go index 52ad8b3..056aad9 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "os" "example/hello/api" + "example/hello/db" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" @@ -19,6 +20,9 @@ func main() { port := flag.String("port", "3000", "Port for test HTTP server") flag.Parse() + DB := db.ConnectDB() + db.Migrate(DB) + swagger, err := api.GetSwagger() if err != nil { fmt.Fprintf(os.Stderr, "Error loading swagger spec\n: %s", err) @@ -26,17 +30,11 @@ func main() { } swagger.Servers = nil - petStore := api.NewPetStore() - r := chi.NewRouter() - r.Use(m.OapiRequestValidator(swagger)) - r.Use(middleware.Logger) - // r.Get("/", func(w http.ResponseWriter, r *http.Request) { - // w.Write([]byte("Hello World!")) - // }) + petStore := &api.PetStore{DB: DB} api.HandlerFromMux(petStore, r) s := &http.Server{