From fee7e263368286e3adad08dddd0d1d9595021022 Mon Sep 17 00:00:00 2001 From: Adam French Date: Mon, 17 Nov 2025 22:26:21 +0000 Subject: [PATCH] adding gorm --- backend/go.mod | 11 ++++++++++- backend/main.go | 33 +++++++++++++++++++++++++++++++++ backend/models/post.go | 11 +++++++++++ backend/models/user.go | 10 ++++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 backend/models/post.go create mode 100644 backend/models/user.go diff --git a/backend/go.mod b/backend/go.mod index 94be3e8..f7351fb 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -1,3 +1,12 @@ -module adam-french.co.uk/simplebackend +module adam-french.co.uk/backend go 1.22 + +require ( + github.com/gin-gonic/gin v1.9.1 + github.com/joho/godotenv v1.5.1 + github.com/lib/pq v1.10.7 + github.com/sirupsen/logrus v1.9.3 + gorm.io/gorm v1.26.0 + gorm.io/driver/postgres v1.5.0 +) diff --git a/backend/main.go b/backend/main.go index 065479c..125ef73 100644 --- a/backend/main.go +++ b/backend/main.go @@ -3,9 +3,42 @@ package main import ( "fmt" "net/http" + + "log" + + "gorm.io/driver/postgres" + "gorm.io/gorm" + + "adam-french.co.uk/backend/models" ) +func connectToPostgreSQL() (*gorm.DB, error) { + dsn := "user=postgres password=password dbname=simplebackend host=localhost port=5432 sslmode=disable" + db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) + if err != nil { + return nil, err + } + + return db, nil +} + func main() { + db, err := connectToPostgreSQL() + if err != nil { + log.Fatal(err) + } + defer db.Close() + + // Perform database migration + err = db.AutoMigrate(&models.User{}) + if err != nil { + log.Fatal(err) + } + err = db.AutoMigrate(&models.Post{}) + if err != nil { + log.Fatal(err) + } + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello from Go!") }) diff --git a/backend/models/post.go b/backend/models/post.go new file mode 100644 index 0000000..4db1eca --- /dev/null +++ b/backend/models/post.go @@ -0,0 +1,11 @@ +package models + +import "gorm.io/gorm" + +type Post struct { + gorm.Model // includes ID, CreatedAt, UpdatedAt, DeletedAt + Title string `gorm:"not null"` + Content string `gorm:"type:text; not null"` + AuthorID uint // foreign key to User + Author User `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"` // optional relation +} diff --git a/backend/models/user.go b/backend/models/user.go new file mode 100644 index 0000000..52c283e --- /dev/null +++ b/backend/models/user.go @@ -0,0 +1,10 @@ +package models + +import "gorm.io/gorm" + +type User struct { + gorm.Model // includes ID, CreatedAt, UpdatedAt, DeletedAt + Name string + Email string `gorm:"uniqueIndex"` + Password string +}