diff options
| -rw-r--r-- | .env.example | 5 | ||||
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | Makefile | 6 | ||||
| -rw-r--r-- | cmd/airlines/main.go | 62 | ||||
| -rw-r--r-- | go.mod | 1 | ||||
| -rw-r--r-- | go.sum | 2 | ||||
| -rw-r--r-- | parsecsv.go | 43 | ||||
| -rw-r--r-- | pkg/adapters/json/json.go | 3 | ||||
| -rw-r--r-- | pkg/db/db.go | 1 | ||||
| -rw-r--r-- | pkg/model/model.go | 7 | ||||
| -rw-r--r-- | pkg/model/user.go | 61 |
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) + +} @@ -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 @@ -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" } |
