Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/limit and order #2

Open
wants to merge 14 commits into
base: main
Choose a base branch
from
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,5 @@

# Go workspace file
go.work

.vscode
17 changes: 17 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
tutorial_1:
go run -tags=tutorial_1 .

tutorial_2:
go run -tags=tutorial_2 .

tutorial_3:
go run -tags=tutorial_3 .

tutorial_4:
go run -tags=tutorial_4 .

tutorial_5:
go run -tags=tutorial_5 .

tutorial_6:
go run -tags=tutorial_6 .
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
# badaas-orm-tutorial
Tutorial for badaas-orm
# Tutorial for badaas-orm

In this short tutorial you will learn the main functionalities of badaas-orm. For details of each step and its execution visit this page.
<!-- TODO add link to badaas-orm tutorial page -->
90 changes: 90 additions & 0 deletions conditions/city_conditions.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

82 changes: 82 additions & 0 deletions conditions/country_conditions.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions conditions/orm.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package conditions

//go:generate badaas-cli gen conditions ../models
23 changes: 23 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module github.com/ditrit/badaas-orm-tutorial

go 1.18

require (
github.com/ditrit/badaas v0.0.0-20230829112401-f9718ad4970e
go.uber.org/fx v1.20.0
gorm.io/driver/sqlite v1.5.3
gorm.io/gorm v1.25.4
)

require (
github.com/elliotchance/pie/v2 v2.7.0 // indirect
github.com/google/uuid v1.3.1 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/mattn/go-sqlite3 v1.14.17 // indirect
go.uber.org/dig v1.17.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.25.0 // indirect
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 // indirect
golang.org/x/sys v0.11.0 // indirect
)
35 changes: 35 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/ditrit/badaas v0.0.0-20230829112401-f9718ad4970e h1:5AgMxE1FK+OotFIFQNMYmwy3ZzAghrygNrF4pBdMFjc=
github.com/ditrit/badaas v0.0.0-20230829112401-f9718ad4970e/go.mod h1:sU3R6Q2Mi1f1ly0VTPzWDuade926F1SD3R2uGX9OrCY=
github.com/elliotchance/pie/v2 v2.7.0 h1:FqoIKg4uj0G/CrLGuMS9ejnFKa92lxE1dEgBD3pShXg=
github.com/elliotchance/pie/v2 v2.7.0/go.mod h1:18t0dgGFH006g4eVdDtWfgFZPQEgl10IoEO8YWEq3Og=
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/dig v1.17.0 h1:5Chju+tUvcC+N7N6EV08BJz41UZuO3BmHcN4A287ZLI=
go.uber.org/dig v1.17.0/go.mod h1:rTxpf7l5I0eBTlE6/9RL+lDybC7WFwY2QH55ZSjy1mU=
go.uber.org/fx v1.20.0 h1:ZMC/pnRvhsthOZh9MZjMq5U8Or3mA9zBSPaLnzs3ihQ=
go.uber.org/fx v1.20.0/go.mod h1:qCUj0btiR3/JnanEr1TYEePfSw6o/4qYJscgvzQ5Ub0=
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
go.uber.org/zap v1.25.0 h1:4Hvk6GtkucQ790dqmj7l1eEnRdKm3k3ZUrUMS2d5+5c=
go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk=
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ=
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gorm.io/driver/sqlite v1.5.3 h1:7/0dUgX28KAcopdfbRWWl68Rflh6osa4rDh+m51KL2g=
gorm.io/driver/sqlite v1.5.3/go.mod h1:qxAuCol+2r6PannQDpOP1FP6ag3mKi4esLnB/jHed+4=
gorm.io/gorm v1.25.4 h1:iyNd8fNAe8W9dvtlgeRI5zSVZPsq3OpcTu37cYcpCmw=
gorm.io/gorm v1.25.4/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
27 changes: 27 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package main

import (
"go.uber.org/fx"
"gorm.io/driver/sqlite"
"gorm.io/gorm"

"github.com/ditrit/badaas/orm"
"github.com/ditrit/badaas/orm/logger"
)

func main() {
fx.New(
// connect to db
fx.Provide(NewDBConnection),

// execute tutorial
fx.Invoke(tutorial),
).Run()
}

func NewDBConnection() (*gorm.DB, error) {
return orm.Open(
sqlite.Open(orm.CreateSQLiteDSN("db")),
&gorm.Config{Logger: logger.Default.ToLogMode(logger.Info)},
)
}
11 changes: 11 additions & 0 deletions models/badaas-orm.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 24 additions & 0 deletions models/models.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package models

import (
"github.com/ditrit/badaas/orm/model"
)

type Country struct {
model.UUIDModel

Name string

Capital *City // Country HasOne Capital (Country 1 -> 1 Capital)
CapitalID *model.UUID
}

type City struct {
model.UUIDModel

Name string
Population int

Country *Country
CountryID *model.UUID // City HasOne Country (Country 1 <- 1..* City)
}
Binary file added sqlite:db
Binary file not shown.
39 changes: 39 additions & 0 deletions tutorial_1.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
//go:build tutorial_1
// +build tutorial_1

package main

import (
"fmt"
"log"

"github.com/ditrit/badaas-orm-tutorial/conditions"
"github.com/ditrit/badaas-orm-tutorial/models"
"github.com/ditrit/badaas/orm"
"go.uber.org/fx"
"gorm.io/gorm"
)

// Target: get all cities whose name is 'Paris'
// SQL executed: SELECT cities.* FROM cities WHERE cities.name = "Paris" AND cities.deleted_at IS NULL
func tutorial(db *gorm.DB, shutdowner fx.Shutdowner) {
cities, err := orm.NewQuery[models.City](
db,
conditions.City.NameIs().Eq("Paris"),
).Find()

// SQL executed:
// SELECT cities.* FROM cities
// WHERE cities.name = "Paris" AND cities.deleted_at IS NULL

if err != nil {
log.Panicln(err)
}

log.Println("Cities named 'Paris' are:")
for i, city := range cities {
fmt.Printf("\t%v: %+v\n", i+1, city)
}

shutdowner.Shutdown()
}
Loading