aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.env.example5
-rw-r--r--.gitignore3
-rw-r--r--Makefile6
-rw-r--r--cmd/airlines/main.go62
-rw-r--r--go.mod1
-rw-r--r--go.sum2
-rw-r--r--parsecsv.go43
-rw-r--r--pkg/adapters/json/json.go3
-rw-r--r--pkg/db/db.go1
-rw-r--r--pkg/model/model.go7
-rw-r--r--pkg/model/user.go61
11 files changed, 151 insertions, 43 deletions
diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..d150d7e
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,5 @@
+DB_HOST = localhost
+DB_PORT = 5432
+DB_USER = postgres
+DB_PASSWORD = somepass
+DB_NAME = airlines
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a7c7630
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.idea
+.env
+.cache
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..251ccff
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,6 @@
+all: airlines
+
+
+
+airlines:
+ go run -C ./cmd/airlines . \ No newline at end of file
diff --git a/cmd/airlines/main.go b/cmd/airlines/main.go
new file mode 100644
index 0000000..6bf097a
--- /dev/null
+++ b/cmd/airlines/main.go
@@ -0,0 +1,62 @@
+package main
+
+import (
+ "fmt"
+ "os"
+ "time"
+
+ "github.com/joho/godotenv"
+ "gorm.io/driver/postgres"
+ "gorm.io/gorm"
+
+ "airlines/pkg/model"
+)
+
+func main() {
+ // run with MAKE only
+ err := godotenv.Load("../../.env")
+ if err != nil {
+ fmt.Println(err)
+ }
+
+ dsn := fmt.Sprintf("postgres://%s:%s@%s:%s/%s", os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_HOST"), os.Getenv("DB_PORT"), os.Getenv("DB_NAME"))
+ db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
+
+ if err != nil {
+ fmt.Println(err)
+ return
+ }
+ // db.Migrator().DropTable(&model.User{}, &model.Card{}, &model.Flight{}) // ;-)
+ if err := db.AutoMigrate(&model.User{}, &model.Card{}, &model.Flight{}); err != nil {
+ return
+ }
+
+ jinzhuFlights := []model.Flight{
+ {
+ Number: "SU1111",
+ From: "North pole",
+ To: "Mars",
+ Departure: time.Now(),
+ Arrival: time.Now().AddDate(0, 0, 162),
+ },
+ }
+ user := model.User{
+ Name: "Jinzhu",
+ Age: 18,
+ Birthday: time.Now(),
+ Flights: jinzhuFlights,
+ Cards: []model.Card{
+ {
+ Prefix: "AA",
+ Number: 123,
+ Bonusprogramm: "AbObA airlines SuPrEmE",
+ Flights: jinzhuFlights,
+ },
+ },
+ }
+
+ // Create a single record
+ result := db.Create(&user)
+ fmt.Println(result.Error)
+
+}
diff --git a/go.mod b/go.mod
index d7a8039..b83e912 100644
--- a/go.mod
+++ b/go.mod
@@ -9,6 +9,7 @@ require (
github.com/jackc/puddle/v2 v2.2.2 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
+ github.com/joho/godotenv v1.5.1
golang.org/x/crypto v0.31.0 // indirect
golang.org/x/sync v0.17.0 // indirect
golang.org/x/text v0.29.0 // indirect
diff --git a/go.sum b/go.sum
index b764d9d..29a4431 100644
--- a/go.sum
+++ b/go.sum
@@ -15,6 +15,8 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD
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/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
+github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
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=
diff --git a/parsecsv.go b/parsecsv.go
deleted file mode 100644
index 65a4bd2..0000000
--- a/parsecsv.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package main
-
-import (
- "fmt"
- "time"
-
- "gorm.io/driver/postgres"
- "gorm.io/gorm"
-)
-
-type User struct {
- ID uint `gorm:"primaryKey"`
- Name string
- Age int
- Birthday time.Time
-}
-
-func (User) TableName() string {
- return "users"
-}
-
-type Model struct {
-}
-
-func main() {
- dsn := ""
- db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
-
- if err != nil {
- fmt.Println(err)
- return
- }
- if err := db.AutoMigrate(&User{}); err != nil {
- return
- }
- user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
-
- // Create a single record
-
- result := db.Create(&user) // pass pointer of data to Create
- fmt.Println(result.Error)
-
-}
diff --git a/pkg/adapters/json/json.go b/pkg/adapters/json/json.go
new file mode 100644
index 0000000..c9ce212
--- /dev/null
+++ b/pkg/adapters/json/json.go
@@ -0,0 +1,3 @@
+package json
+
+
diff --git a/pkg/db/db.go b/pkg/db/db.go
new file mode 100644
index 0000000..3a49c63
--- /dev/null
+++ b/pkg/db/db.go
@@ -0,0 +1 @@
+package db
diff --git a/pkg/model/model.go b/pkg/model/model.go
new file mode 100644
index 0000000..0a7e026
--- /dev/null
+++ b/pkg/model/model.go
@@ -0,0 +1,7 @@
+package model
+
+
+
+type Adapter interface {
+ Init(string) // inits adapter with filename
+} \ No newline at end of file
diff --git a/pkg/model/user.go b/pkg/model/user.go
new file mode 100644
index 0000000..af42e3c
--- /dev/null
+++ b/pkg/model/user.go
@@ -0,0 +1,61 @@
+package model
+
+import "time"
+
+type Sex bool
+
+const (
+ SexMale Sex = false
+ SexFemale Sex = true
+)
+
+type User struct {
+ ID uint64 `gorm:"primaryKey"`
+ Name string
+ Surname string
+ Fathersname string
+
+ Age uint8
+
+ Sex Sex
+ Birthday time.Time
+
+ Cards []Card `gorm:"foreignKey:UserID"`
+
+ // just for compatibility
+ Flights []Flight `gorm:"many2many:user_flights;joinForeignKey:UserID;joinReferences:FlightID"`
+}
+
+func (User) TableName() string { return "users" }
+
+type Card struct {
+ ID uint64 `gorm:"primaryKey"`
+
+ Prefix string
+ Number uint64
+
+ Bonusprogramm string
+
+ // User has multiple cards -> each card has registered flights to it
+ Flights []Flight `gorm:"many2many:card_flights;joinForeignKey:CardID;joinReferences:FlightID"`
+
+ UserID uint64
+ User User `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
+}
+
+func (Card) TableName() string { return "cards" }
+
+type Flight struct {
+ ID uint64 `gorm:"primaryKey"`
+
+ Number string
+ From string
+ To string
+ Departure time.Time
+ Arrival time.Time
+
+ Users []User `gorm:"many2many:user_flights;joinForeignKey:FlightID;joinReferences:UserID"`
+ Cards []Card `gorm:"many2many:card_flights;joinForeignKey:FlightID;joinReferences:CardID"`
+}
+
+func (Flight) TableName() string { return "flights" }