From 0ad28d3118ed3a43bd3e699a4d99d68347b617be Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Fri, 28 Jul 2023 14:23:16 +0200 Subject: [PATCH 01/31] add generation of docker and config files --- cmd/config/badaas.yml | 28 ++ cmd/docker/.dockerignore | 11 + cmd/docker/Makefile | 2 + cmd/docker/api/Dockerfile | 17 ++ cmd/docker/api/docker-compose.yml | 13 + cmd/docker/db/docker-compose.yml | 14 + cmd/gen.go | 104 +++++++ cmd/gen_test.go | 192 ++++++++++++ cmd/root.go | 18 ++ go.mod | 31 ++ go.sum | 491 ++++++++++++++++++++++++++++++ main.go | 7 + 12 files changed, 928 insertions(+) create mode 100644 cmd/config/badaas.yml create mode 100644 cmd/docker/.dockerignore create mode 100644 cmd/docker/Makefile create mode 100644 cmd/docker/api/Dockerfile create mode 100644 cmd/docker/api/docker-compose.yml create mode 100644 cmd/docker/db/docker-compose.yml create mode 100644 cmd/gen.go create mode 100644 cmd/gen_test.go create mode 100644 cmd/root.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/cmd/config/badaas.yml b/cmd/config/badaas.yml new file mode 100644 index 0000000..5628860 --- /dev/null +++ b/cmd/config/badaas.yml @@ -0,0 +1,28 @@ +database: + host: badaas-db + name: badaas_db + password: postgres + sslmode: disable + username: root + port: 26257 + init: + retry: 10 + retryTime: 5 +server: + host: "" + port: 8000 + timeout: 15 + pagination: + page: + max: 100 +logger: + mode: prod + request: + template: "Receive {{method}} request on {{url}}" +session: + duration: 14400 + pullInterval: 30 + rollDuration: 3600 +default: + admin: + password: admin \ No newline at end of file diff --git a/cmd/docker/.dockerignore b/cmd/docker/.dockerignore new file mode 100644 index 0000000..f7db608 --- /dev/null +++ b/cmd/docker/.dockerignore @@ -0,0 +1,11 @@ +# general +.editorconfig +.git +.gitignore +.github +*.md +LICENSE +.vscode + +# badaas +badaas/docker diff --git a/cmd/docker/Makefile b/cmd/docker/Makefile new file mode 100644 index 0000000..634c8ef --- /dev/null +++ b/cmd/docker/Makefile @@ -0,0 +1,2 @@ +badaas_run: + docker compose -f badaas/docker/db/docker-compose.yml -f badaas/docker/api/docker-compose.yml up --build -d \ No newline at end of file diff --git a/cmd/docker/api/Dockerfile b/cmd/docker/api/Dockerfile new file mode 100644 index 0000000..1ea62ae --- /dev/null +++ b/cmd/docker/api/Dockerfile @@ -0,0 +1,17 @@ +# builder image +FROM golang:1.19-alpine AS builder +RUN apk add build-base +WORKDIR /app +COPY . . +RUN CGO_ENABLED=1 go build -o badaas_service -a . + + +# final image for end users +FROM alpine:3.16.2 +RUN addgroup -S badaas \ + && adduser -S badaas -G badaas +USER badaas +COPY --from=builder /app/badaas_service . +COPY ./badaas/config/badaas.yml . +EXPOSE 8000 +ENTRYPOINT ["./badaas_service", "--config_path", "badaas.yml"] \ No newline at end of file diff --git a/cmd/docker/api/docker-compose.yml b/cmd/docker/api/docker-compose.yml new file mode 100644 index 0000000..6fc1187 --- /dev/null +++ b/cmd/docker/api/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3.5' + +services: + api: + image: badaas-api:latest + build: + context: ../../.. + dockerfile: ./badaas/docker/api/Dockerfile + container_name: "badaas-api" + ports: + - "8000:8000" + depends_on: + - db diff --git a/cmd/docker/db/docker-compose.yml b/cmd/docker/db/docker-compose.yml new file mode 100644 index 0000000..4e09731 --- /dev/null +++ b/cmd/docker/db/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3.5' + +services: + db: + image: cockroachdb/cockroach:latest + container_name: badaas-db + ports: + - "8080:8080" # Web based dashboard + command: start-single-node --insecure + volumes: + - "${PWD}/badaas/docker/db/.cockroach-data:/cockroach/cockroach-data" + environment: + - COCKROACH_USER=root + - COCKROACH_DATABASE=badaas_db diff --git a/cmd/gen.go b/cmd/gen.go new file mode 100644 index 0000000..d359f6e --- /dev/null +++ b/cmd/gen.go @@ -0,0 +1,104 @@ +package cmd + +import ( + "embed" + "fmt" + "os" + "path/filepath" + + "github.com/spf13/cobra" + + "github.com/ditrit/verdeter" +) + +// File system embed in the executable that will have the following files: +// +//go:embed docker/* +//go:embed config/* +var genEmbedFS embed.FS + +// genCommand represents the badaas-cli gen command +var genCommand = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ + Use: "gen", + Short: "Generate files and configurations necessary to use BadAss", + Long: `gen is the command you can use to generate the files and configurations necessary for your project to use BadAss in a simple way.`, + Run: generateDockerFiles, +}) + +// directory where the generated files will be saved +const destBadaasDir = "badaas" + +func init() { + rootCommand.AddSubCommand(genCommand) +} + +// copies all docker and configurations related files from the embed file system to the destination folder +func generateDockerFiles(cmd *cobra.Command, args []string) { + sourceDockerDir := "docker" + + copyDir( + filepath.Join(sourceDockerDir, "db"), + filepath.Join(destBadaasDir, "docker", "db"), + ) + + copyDir( + filepath.Join(sourceDockerDir, "api"), + filepath.Join(destBadaasDir, "docker", "api"), + ) + + copyFile( + filepath.Join(sourceDockerDir, ".dockerignore"), + ".dockerignore", + ) + + copyFile( + filepath.Join(sourceDockerDir, "Makefile"), + "Makefile", + ) + + copyDir( + "config", + filepath.Join(destBadaasDir, "config"), + ) +} + +// copies a file from the embed file system to the destination folder +func copyFile(sourcePath, destPath string) { + fileContent, err := genEmbedFS.ReadFile(sourcePath) + if err != nil { + panic(fmt.Errorf("error reading source file %s: %w", sourcePath, err)) + } + + if err := os.WriteFile(destPath, fileContent, 0o0600); err != nil { + panic(fmt.Errorf("error writing on destination file %s: %w", destPath, err)) + } +} + +// copies a directory from the embed file system to the destination folder +func copyDir(sourceDir, destDir string) { + files, err := genEmbedFS.ReadDir(sourceDir) + if err != nil { + panic(fmt.Errorf("error reading source directory %s: %w", sourceDir, err)) + } + + fileInfo, err := os.Stat(destDir) + if err != nil { + if !os.IsNotExist(err) { + panic(fmt.Errorf("error running stat on %s: %w", destDir, err)) + } + + err = os.MkdirAll(destDir, os.ModePerm) + if err != nil { + panic(fmt.Errorf("error creating directory %s: %w", destDir, err)) + } + } else if !fileInfo.IsDir() { + panic(fmt.Errorf("destination path %s is not a directory", destDir)) + } + + for _, file := range files { + copyFile( + filepath.Join(sourceDir, file.Name()), + filepath.Join(destDir, file.Name()), + ) + } +} diff --git a/cmd/gen_test.go b/cmd/gen_test.go new file mode 100644 index 0000000..87b8dc1 --- /dev/null +++ b/cmd/gen_test.go @@ -0,0 +1,192 @@ +package cmd + +import ( + "log" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGenerateDockerFilesCreateFilesWhenDestinationFolderNotExists(t *testing.T) { + generateDockerFiles(nil, nil) + checkFilesExist(t) + teardown() +} + +func TestGenerateDockerFilesOverwriteFilesWhenDestinationFolderExists(t *testing.T) { + destDir := filepath.Join("badaas", "docker", "db") + err := os.MkdirAll(destDir, os.ModePerm) + assert.Nil(t, err) + + destFile := filepath.Join(destDir, "docker-compose.yml") + err = os.WriteFile(destFile, []byte("hello"), 0o0600) + assert.Nil(t, err) + + generateDockerFiles(nil, nil) + checkFilesExist(t) + + fileContent, err := os.ReadFile(destFile) + assert.Nil(t, err) + assert.NotEqual(t, string(fileContent), "hello") + + teardown() +} + +func TestCopyDirCreatesDestinationDirIfItDoesNotExist(t *testing.T) { + copyDir( + filepath.Join("docker", "db"), + filepath.Join("badaas", "docker", "db"), + ) + checkDockerDBFilesExist(t) + teardown() +} + +func TestCopyDirCopyFilesIfTheDestinationFolderAlreadyExists(t *testing.T) { + destDir := filepath.Join("badaas", "docker", "db") + err := os.MkdirAll(destDir, os.ModePerm) + assert.Nil(t, err) + + copyDir(filepath.Join("docker", "db"), destDir) + checkDockerDBFilesExist(t) + teardown() +} + +func TestCopyDirPanicsIfStatOnDestDirIsNotPossible(t *testing.T) { + assertPanic(t, func() { + copyDir(filepath.Join("docker", "db"), "\000") + }, "error running stat") +} + +func TestCopyDirPanicsIfDestDirCreationFails(t *testing.T) { + assertPanic(t, func() { + copyDir(filepath.Join("docker", "db"), "") + }, "error creating directory") +} + +func TestCopyDirPanicsIfReadOnEmbedFileSystemIsNotPossible(t *testing.T) { + assertPanic(t, func() { + copyDir("not_exists", filepath.Join("badaas", "docker", "db")) + }, "error reading source directory") +} + +func TestCopyDirPanicsIfDestDirIsNotADirectory(t *testing.T) { + err := os.WriteFile("file.txt", []byte("hello"), 0o0600) + assert.Nil(t, err) + + assertPanic(t, func() { + copyDir(filepath.Join("docker", "db"), "file.txt") + }, "destination path file.txt is not a directory") +} + +func TestCopyFilePanicsWhenDestPathDoesNotExist(t *testing.T) { + assertPanic(t, func() { + copyFile( + filepath.Join("docker", "db", "docker-compose.yml"), + filepath.Join("badaas", "docker", "db", "docker-compose.yml"), + ) + }, "error writing on destination file") +} + +func TestCopyFileWorksWhenDestPathAlreadyExistsButNotTheFile(t *testing.T) { + destDir := filepath.Join("badaas", "docker", "db") + err := os.MkdirAll(destDir, os.ModePerm) + assert.Nil(t, err) + + copyFile( + filepath.Join("docker", "db", "docker-compose.yml"), + filepath.Join(destDir, "docker-compose.yml"), + ) + checkDockerDBFilesExist(t) + teardown() +} + +func TestCopyFileWorksWhenDestPathAndFileAlready(t *testing.T) { + destDir := filepath.Join("badaas", "docker", "db") + err := os.MkdirAll(destDir, os.ModePerm) + assert.Nil(t, err) + destFile := filepath.Join(destDir, "docker-compose.yml") + err = os.WriteFile(destFile, []byte("hello"), 0o0600) + assert.Nil(t, err) + + copyFile(filepath.Join("docker", "db", "docker-compose.yml"), destFile) + + checkDockerDBFilesExist(t) + fileContent, err := os.ReadFile(destFile) + assert.Nil(t, err) + assert.NotEqual(t, string(fileContent), "hello") + + teardown() +} + +func TestCopyFilePanicsIfReadOnEmbedFileSystemIsNotPossible(t *testing.T) { + assertPanic(t, func() { + copyFile( + filepath.Join("docker", "db", "not_exists"), + filepath.Join("badaas", "docker", "db"), + ) + }, "error reading source file") +} + +func TestCopyFilePanicsIfDestPathIsADirectory(t *testing.T) { + err := os.MkdirAll("badaas", os.ModePerm) + assert.Nil(t, err) + + assertPanic(t, func() { + copyFile(filepath.Join("docker", "db", "docker-compose.yml"), "badaas/") + }, "error writing on destination file") + + teardown() +} + +func TestCopyFilePanicsIfWriteOnDestPathIsNotPossible(t *testing.T) { + assertPanic(t, func() { + copyFile(filepath.Join("docker", "db", "docker-compose.yml"), "/badaas.txt") + }, "permission denied") +} + +func assertPanic(t *testing.T, functionShouldPanic func(), errorMessage string) { + defer func() { + if r := recover(); r == nil { + t.Errorf("The function did not panic") + } else { + err := r.(error) + assert.ErrorContains(t, err, errorMessage) + } + }() + functionShouldPanic() +} + +func checkFilesExist(t *testing.T) { + checkFileExists(t, ".dockerignore") + checkFileExists(t, "Makefile") + checkFileExists(t, filepath.Join("badaas", "config", "badaas.yml")) + checkFileExists(t, filepath.Join("badaas", "docker", "api", "docker-compose.yml")) + checkFileExists(t, filepath.Join("badaas", "docker", "api", "Dockerfile")) + checkDockerDBFilesExist(t) +} + +func checkDockerDBFilesExist(t *testing.T) { + checkFileExists(t, filepath.Join("badaas", "docker", "db", "docker-compose.yml")) +} + +func checkFileExists(t *testing.T, name string) { + if _, err := os.Stat(name); err != nil { + t.Error(err) + } +} + +func teardown() { + remove(".dockerignore") + remove("Makefile") + remove("file.txt") + remove("badaas") +} + +func remove(name string) { + err := os.RemoveAll(name) + if err != nil { + log.Fatal(err) + } +} diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..f7e472e --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,18 @@ +package cmd + +import ( + "github.com/ditrit/verdeter" +) + +// rootCommand represents the base command when called without any subcommands +var rootCommand = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ + Use: "badaas-cli", + Short: "the BadAas controller", + Long: `badaas-cli is the command line tool that makes it possible to configure and run a badaas application`, +}) + +// Execute adds all child commands to the root command and sets flags appropriately. +// This is called by main.main(). It only needs to happen once to the rootCommand. +func Execute() { + rootCommand.Execute() +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..4bc894e --- /dev/null +++ b/go.mod @@ -0,0 +1,31 @@ +module github.com/ditrit/badaas-cli + +go 1.18 + +require ( + github.com/ditrit/verdeter v0.4.0 + github.com/spf13/cobra v1.7.0 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/pelletier/go-toml/v2 v2.0.7 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/spf13/afero v1.9.5 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.15.0 // indirect + github.com/stretchr/testify v1.8.1 + github.com/subosito/gotenv v1.4.2 // indirect + golang.org/x/sys v0.7.0 // indirect + golang.org/x/text v0.9.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..99e12ce --- /dev/null +++ b/go.sum @@ -0,0 +1,491 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ditrit/verdeter v0.4.0 h1:DzEOFauuXEGNQYP6OgYtHwEyb3w9riem99u0xE/l7+o= +github.com/ditrit/verdeter v0.4.0/go.mod h1:sKpWuOvYqNabLN4aNXqeBhcWpt7nf0frwqk0B5M6ax0= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us= +github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= +github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= +github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/main.go b/main.go new file mode 100644 index 0000000..3a3c979 --- /dev/null +++ b/main.go @@ -0,0 +1,7 @@ +package main + +import "github.com/ditrit/badaas-cli/cmd" + +func main() { + cmd.Execute() +} From 217159de978b83ef298162ef6b1b5cda2c51897e Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Fri, 28 Jul 2023 14:23:33 +0200 Subject: [PATCH 02/31] update docs --- CONTRIBUTING.md | 73 +++++++++++++++++++++++++++++++++++++++++++++ README.md | 79 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..74e762f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,73 @@ +# Contribute to the development of badaas + +- [Local compilation](#local-compilation) +- [Tests](#tests) + - [Unit tests](#unit-tests) +- [Git](#git) + - [Branch naming policy](#branch-naming-policy) + - [Default branch](#default-branch) + - [How to release](#how-to-release) + +## Local compilation + +You can make modifications to the badaas-cli source code and compile it locally with: + +```bash +go build . +``` + +You can then run the badaas-cli executable directly or add a link in your $GOPATH to run it from a project: + +```bash +ln -sf badaas-cli $GOPATH/bin/badaas-cli +``` + +## Tests + +### Unit tests + +We use the standard test suite in combination with [github.com/stretchr/testify](https://github.com/stretchr/testify) to do our unit testing. + +To run them, please run: + +```sh +make test_unit +``` + +## Git + +### Branch naming policy + +`[BRANCH_TYPE]/[BRANCH_NAME]` + +- `BRANCH_TYPE` is a prefix to describe the purpose of the branch. + Accepted prefixes are: + - `feature`, used for feature development + - `bugfix`, used for bug fix + - `improvement`, used for refactor + - `library`, used for updating library + - `prerelease`, used for preparing the branch for the release + - `release`, used for releasing project + - `hotfix`, used for applying a hotfix on main + - `poc`, used for proof of concept +- `BRANCH_NAME` is managed by this regex: `[a-z0-9._-]` (`_` is used as space character). + +### Default branch + +The default branch is `main`. Direct commit on it is forbidden. The only way to update the application is through pull request. + +Release tag are only done on the `main` branch. + +### How to release + +We use [Semantic Versioning](https://semver.org/spec/v2.0.0.html) as guideline for the version management. + +Steps to release: + +- Create a new branch labeled `release/vX.Y.Z` from the latest `main`. +- Improve the version number in `changelog.md`. +- Verify the content of the `changelog.md`. +- Commit the modifications with the label `Release version X.Y.Z`. +- Create a pull request on github for this branch into `main`. +- Once the pull request validated and merged, tag the `main` branch with `vX.Y.Z`. +- After the tag is pushed, make the release on the tag in GitHub. diff --git a/README.md b/README.md index 0b83cad..f6732a1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,77 @@ -# badaas-cli -Command line tools to generate the files required to run a badaas application +# badaas-cli + +`badaas-cli` is the command line tool that makes it possible to configure and run a badaas application. + +- [Install with go install](#install-with-go-install) +- [Build from sources](#build-from-sources) +- [Commands](#commands) + - [badaas-cli gen](#badaas-cli-gen) +- [Contributing](#contributing) +- [License](#license) + +## Install with go install + +For simply installing it, use: + +```bash +go install github.com/ditrit/badaas-cli +``` + +Or you can build it from sources. + +## Build from sources + +Get the sources of the project, either by visiting the [releases](https://github.com/ditrit/badaas/releases) page and downloading an archive or clone the main branch (please be aware that is it not a stable version). + +To build the project: + +- [Install go](https://go.dev/dl/#go1.18.4) v1.18 +- Install project dependencies + + ```bash + go get + ``` + +- Run build command + + ```bash + go build . + ``` + +Well done, you have a binary `badaas-cli` at the root of the project. + +## Commands + +You can see the available commands by running: + +```bash +badaas-cli help +``` + +For more information about the functionality provided and how to use each command use: + +```bash +badaas-cli help [command] +``` + +### badaas-cli gen + +gen is the command you can use to generate the files and configurations necessary for your project to use BadAss in a simple way. + +`gen` will generate the docker and configuration files needed to run the application in the `badaas/docker` and `badaas/config` folders respectively. + +All these files can be modified in case you need different values than those provided by default. For more information about the configuration head to [configuration docs](../../configuration.md). + +A Makefile will be generated for the execution of a badaas server, with the command: + +```bash +make badaas_run +``` + +## Contributing + +See [this section](./CONTRIBUTING.md). + +## License + +badaas-cli is Licensed under the [Mozilla Public License Version 2.0](./LICENSE). From 007cfbbc5b54983ed326f041aadbf835775f636b Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Fri, 28 Jul 2023 14:27:09 +0200 Subject: [PATCH 03/31] add changelog, gitignore and makefile --- .gitignore | 24 ++++++++++++++++++++++++ Makefile | 4 ++++ changelog.md | 14 ++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 changelog.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5dd5335 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +vendor/ + +# Go workspace file +go.work + +# vscode conf +.vscode \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f45e1d4 --- /dev/null +++ b/Makefile @@ -0,0 +1,4 @@ +test_unit: + go test ./... -v + +.PHONY: test_unit \ No newline at end of file diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..5938022 --- /dev/null +++ b/changelog.md @@ -0,0 +1,14 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html) + +## [Unreleased] + +### Added + +- Add generation of docker and configuration files + +[unreleased]: https://github.com/ditrit/badaas-cli/blob/main/changelog.md#unreleased \ No newline at end of file From 4fde7c680f4ed3593c5e593198284567745ef942 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Fri, 28 Jul 2023 14:31:46 +0200 Subject: [PATCH 04/31] add lint config --- .golangci.yml | 271 ++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 3 + 2 files changed, 274 insertions(+) create mode 100644 .golangci.yml diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..d470509 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,271 @@ +# WARNING: DO NOT EDIT, THIS FILE IS PROBABLY A COPY +# +# The original version of this file is located in the https://github.com/istio/common-files repo. +# If you're looking at this file in a different repo and want to make a change, please go to the +# common-files repo, make the change there and check it in. Then come back to this repo and run +# "make update-common". + +output: + # Format: colored-line-number|line-number|json|tab|checkstyle|code-climate|junit-xml|github-actions + # + # Multiple can be specified by separating them by comma, output can be provided + # for each of them by separating format name and path by colon symbol. + # Output path can be either `stdout`, `stderr` or path to the file to write to. + # Example: "checkstyle:report.json,colored-line-number" + # + # Default: colored-line-number + format: github-actions + # Print lines of code with issue. + # Default: true + print-issued-lines: false + # Print linter name in the end of issue text. + # Default: true + print-linter-name: false + # Make issues output unique by line. + # Default: true + uniq-by-line: false + # Add a prefix to the output file references. + # Default is no prefix. + path-prefix: "" + # Sort results by: filepath, line and column. + sort-results: false + +run: + tests: false + # timeout for analysis, e.g. 30s, 5m, default is 1m + deadline: 20m + build-tags: + - integ + - integfuzz + # which dirs to skip: they won't be analyzed; + # can use regexp here: generated.*, regexp is applied on full path; + # default value is empty list, but next dirs are always skipped independently + # from this option's value: + #vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ + skip-dirs: + - genfiles$ + - vendor$ + + # which files to skip: they will be analyzed, but issues from them + # won't be reported. Default value is empty list, but there is + # no need to include all autogenerated files, we confidently recognize + # autogenerated files. If it's not please let us know. + skip-files: + - ".*\\.pb\\.go" + - ".*\\.gen\\.go" + +linters: + disable-all: true + enable: + - deadcode + - exportloopref + - gocritic + - revive + - gosimple + - govet + - ineffassign + - lll + - misspell + - staticcheck + - structcheck + - stylecheck + - typecheck + - unconvert + - unparam + - varcheck + fast: false + +linters-settings: + govet: + # report about shadowed variables + check-shadowing: false + maligned: + # print struct with more effective memory layout or not, false by default + suggest-new: true + misspell: + # Correct spellings using locale preferences for US or UK. + # Default is to use a neutral variety of English. + # Setting locale to US will correct the British spelling of 'colour' to 'color'. + locale: US + ignore-words: + - cancelled + lll: + # max line length, lines longer will be reported. Default is 120. + # '\t' is counted as 1 character by default, and can be changed with the tab-width option + line-length: 160 + # tab width in spaces. Default to 1. + tab-width: 1 + revive: + ignore-generated-header: false + severity: "warning" + confidence: 0.0 + error-code: 2 + warning-code: 1 + rules: + - name: blank-imports + - name: context-keys-type + - name: time-naming + - name: var-declaration + - name: unexported-return + - name: errorf + - name: context-as-argument + - name: dot-imports + - name: error-return + - name: error-strings + - name: error-naming + - name: increment-decrement + - name: var-naming + - name: package-comments + - name: range + - name: receiver-naming + - name: indent-error-flow + - name: superfluous-else + - name: modifies-parameter + - name: unreachable-code + - name: struct-tag + - name: constant-logical-expr + - name: bool-literal-in-expr + - name: redefines-builtin-id + - name: imports-blacklist + - name: range-val-in-closure + - name: range-val-address + - name: waitgroup-by-value + - name: atomic + - name: call-to-gc + - name: duplicated-imports + - name: string-of-int + - name: defer + arguments: [["call-chain"]] + - name: unconditional-recursion + - name: identical-branches + # the following rules can be enabled in the future + # - name: empty-lines + # - name: confusing-results + # - name: empty-block + # - name: get-return + # - name: confusing-naming + # - name: unexported-naming + - name: early-return + # - name: unused-parameter + # - name: unnecessary-stmt + # - name: deep-exit + # - name: import-shadowing + # - name: modifies-value-receiver + # - name: unused-receiver + # - name: bare-return + # - name: flag-parameter + # - name: unhandled-error + # - name: if-return + unused: + # treat code as a program (not a library) and report unused exported identifiers; default is false. + # XXX: if you enable this setting, unused will report a lot of false-positives in text editors: + # if it's called for subdir of a project it can't find funcs usages. All text editor integrations + # with golangci-lint call it on a directory with the changed file. + check-exported: false + unparam: + # call graph construction algorithm (cha, rta). In general, use cha for libraries, + # and rta for programs with main packages. Default is cha. + algo: rta + + # Inspect exported functions, default is false. Set to true if no external program/library imports your code. + # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: + # if it's called for subdir of a project it can't find external interfaces. All text editor integrations + # with golangci-lint call it on a directory with the changed file. + check-exported: false + gocritic: + enabled-checks: + - appendCombine + - argOrder + - assignOp + - badCond + - boolExprSimplify + - builtinShadow + - captLocal + - caseOrder + - codegenComment + - commentedOutCode + - commentedOutImport + - defaultCaseOrder + - deprecatedComment + - docStub + - dupArg + - dupBranchBody + - dupCase + - dupSubExpr + - elseif + - emptyFallthrough + - equalFold + - flagDeref + - flagName + - hexLiteral + - indexAlloc + - initClause + - methodExprCall + - nilValReturn + - octalLiteral + - offBy1 + - rangeExprCopy + - regexpMust + - sloppyLen + - stringXbytes + - switchTrue + - typeAssertChain + - typeSwitchVar + - typeUnparen + - underef + - unlambda + - unnecessaryBlock + - unslice + - valSwap + - weakCond + + # Unused + # - yodaStyleExpr + # - appendAssign + # - commentFormatting + # - emptyStringTest + # - exitAfterDefer + # - ifElseChain + # - hugeParam + # - importShadow + # - nestingReduce + # - paramTypeCombine + # - ptrToRefParam + # - rangeValCopy + # - singleCaseSwitch + # - sloppyReassign + # - unlabelStmt + # - unnamedResult + # - wrapperFunc + +issues: + # List of regexps of issue texts to exclude, empty list by default. + # But independently from this option we use default exclude patterns, + # it can be disabled by `exclude-use-default: false`. To list all + # excluded by default patterns execute `golangci-lint run --help` + exclude: + - composite literal uses unkeyed fields + + exclude-rules: + # Exclude some linters from running on test files. + - path: _test\.go$|^tests/|^samples/ + linters: + - errcheck + - maligned + + # TODO(https://github.com/dominikh/go-tools/issues/732) remove this once we update + - linters: + - staticcheck + text: "SA1019: package github.com/golang/protobuf" + + # Independently from option `exclude` we use default exclude patterns, + # it can be disabled by this option. To list all + # excluded by default patterns execute `golangci-lint run --help`. + # Default value for this option is true. + exclude-use-default: true + + # Maximum issues count per one linter. Set to 0 to disable. Default is 50. + max-per-linter: 0 + + # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. + max-same-issues: 0 \ No newline at end of file diff --git a/Makefile b/Makefile index f45e1d4..e65468f 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ +lint: + golangci-lint run + test_unit: go test ./... -v From e176406e67f6d6cb6719579ee9870cbed6caf77a Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Fri, 28 Jul 2023 14:33:57 +0200 Subject: [PATCH 05/31] add github ci, github templates and sonarcloud properties --- .github/ISSUE_TEMPLATE/bug_report.md | 37 +++++++++++++ .github/ISSUE_TEMPLATE/user_story.md | 39 ++++++++++++++ .github/pull_request_template.md | 1 + .github/workflows/CI.yml | 78 ++++++++++++++++++++++++++++ sonar-project.properties | 13 +++++ 5 files changed, 168 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/user_story.md create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/CI.yml create mode 100644 sonar-project.properties diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..9cc652d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,37 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: Bug +--- + +## Describe the bug + +A clear and concise description of what the bug is. + +## To Reproduce + +Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +## Expected behavior + +A clear and concise description of what you expected to happen. + +## Screenshots + +If applicable, add screenshots to help explain your problem. + +## Application + +Please complete the following information: + +- badaas version [X.X.X] or commit hash + +## Additional context + +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/user_story.md b/.github/ISSUE_TEMPLATE/user_story.md new file mode 100644 index 0000000..1112fab --- /dev/null +++ b/.github/ISSUE_TEMPLATE/user_story.md @@ -0,0 +1,39 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: User Story, To be verify +--- + +## Description + +**As a** `[roles impacted]`, + +**I want** `[clear context and goals]` + +**so that** `[result of this story]`. + +## Acceptance Criteria + + **Scenario** | `[the name for the behavior that will be described]` + ------------ | ------------------------------------------------- + **Given** | `[the beginning state of the scenario]` + **When** | `[specific action that the user makes]` + **Then** | `[the outcome of the action in “When”]` + **And** | `[used to continue any of three previous statements]` + +### Constraints + +`[Put all others constraints here, like list of acceptances values or other]` + +## Resources + +`[Put all your resources here, like mockups, diagrams or other here]` + +## Notes + +`[Some complementary notes if necessary]` + +## Links + +`[Only use by the team, to link this feature with epic, technical tasks or bugs]` diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..fbb06c0 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1 @@ +:information_source: Don't forget to modify the changelog.md before merging this branch. \ No newline at end of file diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000..0905aed --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,78 @@ +name: CI +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened] + +jobs: + branch-naming-rules: + name: Check branch name + runs-on: ubuntu-latest + steps: + - uses: deepakputhraya/action-branch-name@master + with: + regex: '^(feature|bugfix|improvement|library|prerelease|release|hotfix|poc)\/[a-z0-9_.-]+$' + allowed_prefixes: 'feature,bugfix,improvement,library,prerelease,release,hotfix,poc' + ignore: main,dev + min_length: 5 + max_length: 50 + + check-style: + name: Code style + needs: [branch-naming-rules] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: actions/setup-go@v3 + with: + go-version: '^1.18' + cache: true + - name: golangci-lint + uses: golangci/golangci-lint-action@v3 + with: + version: v1.52.2 + skip-cache: true + skip-pkg-cache: true + skip-build-cache: true + + unit-tests: + name: Unit tests + needs: [branch-naming-rules] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: actions/setup-go@v3 + with: + go-version: '^1.18' + cache: true + - name: Run unit tests + run: go test ./... -coverprofile=coverage_unit.out -v + - uses: actions/upload-artifact@v3 + with: + name: coverage_unit + path: coverage_unit.out + + sonarcloud: + name: SonarCloud + needs: [unit-tests, check-style] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Download unit tests line coverage report + uses: actions/download-artifact@v3 + with: + name: coverage_unit + path: coverage_unit.out + - name: SonarCloud Scan + uses: sonarsource/sonarcloud-github-action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..48b4f6a --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,13 @@ +sonar.projectKey=ditrit_badaas-cli +sonar.organization=ditrit +sonar.projectName=badaas-cli +sonar.host.url=https://sonarcloud.io +sonar.sources=. +# as cmd/docker/api/Dockerfile will be used by the user, +# we can't avoid doing COPY . . because we don't know the project structure. +# Anyway, this is done in the builder image, +# so it is not a safety risk even if sonar marks it as such. +sonar.exclusions=**/*_test.go,mocks/***,vendor/***,cmd/docker/api/Dockerfile +sonar.tests=. +sonar.test.inclusions=**/*_test.go +sonar.go.coverage.reportPaths=coverage_unit.out/coverage_unit.out \ No newline at end of file From 1f1fe006fe460482094be2426f6a894807b99b06 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Tue, 1 Aug 2023 11:54:10 +0200 Subject: [PATCH 06/31] move command gen to gen docker --- cmd/{ => gen}/config/badaas.yml | 0 cmd/{gen.go => gen/docker.go} | 14 +++----- cmd/{ => gen}/docker/.dockerignore | 0 cmd/{ => gen}/docker/Makefile | 0 cmd/{ => gen}/docker/api/Dockerfile | 0 cmd/{ => gen}/docker/api/docker-compose.yml | 0 cmd/{ => gen}/docker/db/docker-compose.yml | 0 cmd/{gen_test.go => gen/docker_test.go} | 37 +++++++-------------- cmd/gen/gen.go | 15 +++++++++ cmd/root.go | 17 ++++++---- cmd/utils/file.go | 24 +++++++++++++ sonar-project.properties | 2 +- 12 files changed, 68 insertions(+), 41 deletions(-) rename cmd/{ => gen}/config/badaas.yml (100%) rename cmd/{gen.go => gen/docker.go} (86%) rename cmd/{ => gen}/docker/.dockerignore (100%) rename cmd/{ => gen}/docker/Makefile (100%) rename cmd/{ => gen}/docker/api/Dockerfile (100%) rename cmd/{ => gen}/docker/api/docker-compose.yml (100%) rename cmd/{ => gen}/docker/db/docker-compose.yml (100%) rename cmd/{gen_test.go => gen/docker_test.go} (86%) create mode 100644 cmd/gen/gen.go create mode 100644 cmd/utils/file.go diff --git a/cmd/config/badaas.yml b/cmd/gen/config/badaas.yml similarity index 100% rename from cmd/config/badaas.yml rename to cmd/gen/config/badaas.yml diff --git a/cmd/gen.go b/cmd/gen/docker.go similarity index 86% rename from cmd/gen.go rename to cmd/gen/docker.go index d359f6e..313028b 100644 --- a/cmd/gen.go +++ b/cmd/gen/docker.go @@ -1,4 +1,4 @@ -package cmd +package gen import ( "embed" @@ -18,20 +18,16 @@ import ( var genEmbedFS embed.FS // genCommand represents the badaas-cli gen command -var genCommand = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ - Use: "gen", - Short: "Generate files and configurations necessary to use BadAss", - Long: `gen is the command you can use to generate the files and configurations necessary for your project to use BadAss in a simple way.`, +var genDockerCmd = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ + Use: "docker", + Short: "Generate files and configurations necessary to use badaas over docker", + Long: `gen docker is the command you can use to generate the files and configurations necessary for your project to use BadAss in a simple way.`, Run: generateDockerFiles, }) // directory where the generated files will be saved const destBadaasDir = "badaas" -func init() { - rootCommand.AddSubCommand(genCommand) -} - // copies all docker and configurations related files from the embed file system to the destination folder func generateDockerFiles(cmd *cobra.Command, args []string) { sourceDockerDir := "docker" diff --git a/cmd/docker/.dockerignore b/cmd/gen/docker/.dockerignore similarity index 100% rename from cmd/docker/.dockerignore rename to cmd/gen/docker/.dockerignore diff --git a/cmd/docker/Makefile b/cmd/gen/docker/Makefile similarity index 100% rename from cmd/docker/Makefile rename to cmd/gen/docker/Makefile diff --git a/cmd/docker/api/Dockerfile b/cmd/gen/docker/api/Dockerfile similarity index 100% rename from cmd/docker/api/Dockerfile rename to cmd/gen/docker/api/Dockerfile diff --git a/cmd/docker/api/docker-compose.yml b/cmd/gen/docker/api/docker-compose.yml similarity index 100% rename from cmd/docker/api/docker-compose.yml rename to cmd/gen/docker/api/docker-compose.yml diff --git a/cmd/docker/db/docker-compose.yml b/cmd/gen/docker/db/docker-compose.yml similarity index 100% rename from cmd/docker/db/docker-compose.yml rename to cmd/gen/docker/db/docker-compose.yml diff --git a/cmd/gen_test.go b/cmd/gen/docker_test.go similarity index 86% rename from cmd/gen_test.go rename to cmd/gen/docker_test.go index 87b8dc1..d20a7f7 100644 --- a/cmd/gen_test.go +++ b/cmd/gen/docker_test.go @@ -1,11 +1,11 @@ -package cmd +package gen import ( - "log" "os" "path/filepath" "testing" + "github.com/ditrit/badaas-cli/cmd/utils" "github.com/stretchr/testify/assert" ) @@ -159,34 +159,21 @@ func assertPanic(t *testing.T, functionShouldPanic func(), errorMessage string) } func checkFilesExist(t *testing.T) { - checkFileExists(t, ".dockerignore") - checkFileExists(t, "Makefile") - checkFileExists(t, filepath.Join("badaas", "config", "badaas.yml")) - checkFileExists(t, filepath.Join("badaas", "docker", "api", "docker-compose.yml")) - checkFileExists(t, filepath.Join("badaas", "docker", "api", "Dockerfile")) + utils.CheckFileExists(t, ".dockerignore") + utils.CheckFileExists(t, "Makefile") + utils.CheckFileExists(t, filepath.Join("badaas", "config", "badaas.yml")) + utils.CheckFileExists(t, filepath.Join("badaas", "docker", "api", "docker-compose.yml")) + utils.CheckFileExists(t, filepath.Join("badaas", "docker", "api", "Dockerfile")) checkDockerDBFilesExist(t) } func checkDockerDBFilesExist(t *testing.T) { - checkFileExists(t, filepath.Join("badaas", "docker", "db", "docker-compose.yml")) -} - -func checkFileExists(t *testing.T, name string) { - if _, err := os.Stat(name); err != nil { - t.Error(err) - } + utils.CheckFileExists(t, filepath.Join("badaas", "docker", "db", "docker-compose.yml")) } func teardown() { - remove(".dockerignore") - remove("Makefile") - remove("file.txt") - remove("badaas") -} - -func remove(name string) { - err := os.RemoveAll(name) - if err != nil { - log.Fatal(err) - } + utils.RemoveFile(".dockerignore") + utils.RemoveFile("Makefile") + utils.RemoveFile("file.txt") + utils.RemoveFile("badaas") } diff --git a/cmd/gen/gen.go b/cmd/gen/gen.go new file mode 100644 index 0000000..79f5396 --- /dev/null +++ b/cmd/gen/gen.go @@ -0,0 +1,15 @@ +package gen + +import ( + "github.com/ditrit/verdeter" +) + +var GenCmd = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ + Use: "gen", + Short: "Files and configurations generator", + Long: `gen is the command you can use to generate the files and configurations necessary for your project to use BadAss in a simple way.`, +}) + +func init() { + GenCmd.AddSubCommand(genDockerCmd) +} diff --git a/cmd/root.go b/cmd/root.go index f7e472e..1ff8446 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,18 +1,23 @@ package cmd import ( + "github.com/ditrit/badaas-cli/cmd/gen" "github.com/ditrit/verdeter" ) -// rootCommand represents the base command when called without any subcommands -var rootCommand = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ +// rootCmd represents the base command when called without any subcommands +var rootCmd = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ Use: "badaas-cli", - Short: "the BadAas controller", - Long: `badaas-cli is the command line tool that makes it possible to configure and run a badaas application`, + Short: "the badaas command line client", + Long: `badaas-cli is the command line tool that makes it possible to configure and run your badaas applications easily.`, }) // Execute adds all child commands to the root command and sets flags appropriately. -// This is called by main.main(). It only needs to happen once to the rootCommand. +// This is called by main.main(). It only needs to happen once to the rootCmd. func Execute() { - rootCommand.Execute() + rootCmd.Execute() +} + +func init() { + rootCmd.AddSubCommand(gen.GenCmd) } diff --git a/cmd/utils/file.go b/cmd/utils/file.go new file mode 100644 index 0000000..add5520 --- /dev/null +++ b/cmd/utils/file.go @@ -0,0 +1,24 @@ +package utils + +import ( + "io/fs" + "log" + "os" + "testing" +) + +func CheckFileExists(t *testing.T, name string) fs.FileInfo { + stat, err := os.Stat(name) + if err != nil { + t.Error(err) + } + + return stat +} + +func RemoveFile(name string) { + err := os.RemoveAll(name) + if err != nil { + log.Fatal(err) + } +} diff --git a/sonar-project.properties b/sonar-project.properties index 48b4f6a..b82bf90 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -7,7 +7,7 @@ sonar.sources=. # we can't avoid doing COPY . . because we don't know the project structure. # Anyway, this is done in the builder image, # so it is not a safety risk even if sonar marks it as such. -sonar.exclusions=**/*_test.go,mocks/***,vendor/***,cmd/docker/api/Dockerfile +sonar.exclusions=**/*_test.go,mocks/***,vendor/***,cmd/gen/docker/api/Dockerfile sonar.tests=. sonar.test.inclusions=**/*_test.go sonar.go.coverage.reportPaths=coverage_unit.out/coverage_unit.out \ No newline at end of file From 5b0e9742485c4d08f65c6ee5f3e8b2d0fa3d1e70 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Tue, 1 Aug 2023 12:10:03 +0200 Subject: [PATCH 07/31] add todo for the user to make secure the db --- cmd/gen/docker/db/docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/cmd/gen/docker/db/docker-compose.yml b/cmd/gen/docker/db/docker-compose.yml index 4e09731..d249a53 100644 --- a/cmd/gen/docker/db/docker-compose.yml +++ b/cmd/gen/docker/db/docker-compose.yml @@ -6,6 +6,7 @@ services: container_name: badaas-db ports: - "8080:8080" # Web based dashboard + # TODO make this container secure command: start-single-node --insecure volumes: - "${PWD}/badaas/docker/db/.cockroach-data:/cockroach/cockroach-data" From 69598fa02d3a6c1c73deeb43f6ca09af4a39d72e Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Tue, 1 Aug 2023 12:11:13 +0200 Subject: [PATCH 08/31] add conditions generation --- cmd/gen/conditions/condition.go | 283 ++++++++++++++++++++++++++++++++ cmd/gen/conditions/field.go | 119 ++++++++++++++ cmd/gen/conditions/file.go | 98 +++++++++++ cmd/gen/conditions/gormTag.go | 60 +++++++ cmd/gen/conditions/jenParam.go | 71 ++++++++ cmd/gen/conditions/main.go | 115 +++++++++++++ cmd/gen/conditions/type.go | 98 +++++++++++ cmd/gen/gen.go | 2 + cmd/log/config.go | 23 +++ cmd/root.go | 18 +- cmd/version/version.go | 3 + go.mod | 14 +- go.sum | 22 ++- 13 files changed, 918 insertions(+), 8 deletions(-) create mode 100644 cmd/gen/conditions/condition.go create mode 100644 cmd/gen/conditions/field.go create mode 100644 cmd/gen/conditions/file.go create mode 100644 cmd/gen/conditions/gormTag.go create mode 100644 cmd/gen/conditions/jenParam.go create mode 100644 cmd/gen/conditions/main.go create mode 100644 cmd/gen/conditions/type.go create mode 100644 cmd/log/config.go create mode 100644 cmd/version/version.go diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go new file mode 100644 index 0000000..5c57391 --- /dev/null +++ b/cmd/gen/conditions/condition.go @@ -0,0 +1,283 @@ +package conditions + +import ( + "go/types" + + "github.com/dave/jennifer/jen" + "github.com/ditrit/badaas-cli/cmd/log" + "github.com/ettle/strcase" +) + +const ( + // badaas/orm/condition.go + badaasORMCondition = "Condition" + badaasORMWhereCondition = "WhereCondition" + badaasORMJoinCondition = "JoinCondition" +) + +type Condition struct { + codes []jen.Code + param *JenParam + destPkg string +} + +func NewCondition(destPkg string, objectType Type, field Field) *Condition { + condition := &Condition{ + param: NewJenParam(), + destPkg: destPkg, + } + condition.generate(objectType, field) + return condition +} + +// Generate the condition between the object and the field +func (condition *Condition) generate(objectType Type, field Field) { + switch fieldType := field.Type.Type.(type) { + case *types.Basic: + // the field is a basic type (string, int, etc) + // adapt param to that type and generate a WhereCondition + condition.param.ToBasicKind(fieldType) + condition.generateWhere( + objectType, + field, + ) + case *types.Named: + // the field is a named type (user defined structs) + condition.generateForNamedType( + objectType, + field, + ) + case *types.Pointer: + // the field is a pointer + condition.generate( + objectType, + field.ChangeType(fieldType.Elem()), + ) + case *types.Slice: + // the field is a slice + // adapt param to slice and + // generate code for the type of the elements of the slice + condition.param.ToSlice() + condition.generateForSlice( + objectType, + field.ChangeType(fieldType.Elem()), + ) + default: + log.Logger.Debugf("struct field type not handled: %T", fieldType) + } +} + +// Generate condition between the object and the field when the field is a slice +func (condition *Condition) generateForSlice(objectType Type, field Field) { + switch elemType := field.Type.Type.(type) { + case *types.Basic: + // slice of basic types ([]string, []int, etc.) + // the only one supported directly by gorm is []byte + // but the others can be used after configuration in some dbs + condition.generate( + objectType, + field, + ) + case *types.Named: + // slice of named types (user defined types) + _, err := field.Type.BadaasModelStruct() + if err == nil { + // slice of Badaas models -> hasMany relation + condition.generateInverseJoin( + objectType, + field, + ) + } + case *types.Pointer: + // slice of pointers, generate code for a slice of the pointed type + condition.generateForSlice( + objectType, + field.ChangeType(elemType.Elem()), + ) + default: + log.Logger.Debugf("struct field list elem type not handled: %T", elemType) + } +} + +// Generate condition between object and field when the field is a named type (user defined struct) +func (condition *Condition) generateForNamedType(objectType Type, field Field) { + _, err := field.Type.BadaasModelStruct() + + if err == nil { + // field is a Badaas Model + hasFK, _ := objectType.HasFK(field) + if hasFK { + // belongsTo relation + condition.generateJoinWithFK( + objectType, + field, + ) + } else { + // hasOne relation + condition.generateJoinWithoutFK( + objectType, + field, + ) + + condition.generateInverseJoin( + objectType, + field, + ) + } + } else { + // field is not a Badaas Model + if field.Type.IsGormCustomType() || field.TypeString() == "time.Time" { + // field is a Gorm Custom type (implements Scanner and Valuer interfaces) + // or a named type supported by gorm (time.Time, gorm.DeletedAt) + condition.param.ToCustomType(condition.destPkg, field.Type) + condition.generateWhere( + objectType, + field, + ) + } else { + log.Logger.Debugf("struct field type not handled: %s", field.TypeString()) + } + } +} + +// Generate a WhereCondition between object and field +func (condition *Condition) generateWhere(objectType Type, field Field) { + whereCondition := jen.Qual( + badaasORMPath, badaasORMWhereCondition, + ).Types( + jen.Qual( + getRelativePackagePath(condition.destPkg, objectType), + objectType.Name(), + ), + ) + + conditionName := getConditionName(objectType, field) + log.Logger.Debugf("Generated %q", conditionName) + + params := jen.Dict{ + jen.Id("Value"): jen.Id("v"), + } + columnName := field.getColumnName() + if columnName != "" { + params[jen.Id("Column")] = jen.Lit(columnName) + } else { + params[jen.Id("Field")] = jen.Lit(field.Name) + } + + columnPrefix := field.ColumnPrefix + if columnPrefix != "" { + params[jen.Id("ColumnPrefix")] = jen.Lit(columnPrefix) + } + + condition.codes = append( + condition.codes, + jen.Func().Id( + conditionName, + ).Params( + condition.param.Statement(), + ).Add( + whereCondition.Clone(), + ).Block( + jen.Return( + whereCondition.Clone().Values(params), + ), + ), + ) +} + +// Generate a inverse JoinCondition, so from the field's object to the object +func (condition *Condition) generateInverseJoin(objectType Type, field Field) { + condition.generateJoinWithFK( + field.Type, + Field{ + Name: objectType.Name(), + Type: objectType, + Tags: field.Tags, + }, + ) +} + +// Generate a JoinCondition between the object and field's object +// when object has a foreign key to the field's object +func (condition *Condition) generateJoinWithFK(objectType Type, field Field) { + condition.generateJoin( + objectType, + field, + field.getFKAttribute(), + field.getFKReferencesAttribute(), + ) +} + +// Generate a JoinCondition between the object and field's object +// when object has not a foreign key to the field's object +// (so the field's object has it) +func (condition *Condition) generateJoinWithoutFK(objectType Type, field Field) { + condition.generateJoin( + objectType, + field, + field.getFKReferencesAttribute(), + field.getRelatedTypeFKAttribute(objectType.Name()), + ) +} + +// Generate a JoinCondition +func (condition *Condition) generateJoin(objectType Type, field Field, t1Field, t2Field string) { + t1 := jen.Qual( + getRelativePackagePath(condition.destPkg, objectType), + objectType.Name(), + ) + + t2 := jen.Qual( + getRelativePackagePath(condition.destPkg, field.Type), + field.TypeName(), + ) + + conditionName := getConditionName(objectType, field) + log.Logger.Debugf("Generated %q", conditionName) + + ormT1Condition := jen.Qual( + badaasORMPath, badaasORMCondition, + ).Types(t1) + ormT2Condition := jen.Qual( + badaasORMPath, badaasORMCondition, + ).Types(t2) + ormJoinCondition := jen.Qual( + badaasORMPath, badaasORMJoinCondition, + ).Types( + t1, t2, + ) + + condition.codes = append( + condition.codes, + jen.Func().Id( + conditionName, + ).Params( + jen.Id("conditions").Op("...").Add(ormT2Condition), + ).Add( + ormT1Condition, + ).Block( + jen.Return( + ormJoinCondition.Values(jen.Dict{ + jen.Id("T1Field"): jen.Lit(t1Field), + jen.Id("T2Field"): jen.Lit(t2Field), + jen.Id("Conditions"): jen.Id("conditions"), + }), + ), + ), + ) +} + +// Generate condition names +func getConditionName(typeV Type, field Field) string { + return typeV.Name() + strcase.ToPascal(field.ColumnPrefix) + strcase.ToPascal(field.Name) +} + +// Avoid importing the same package as the destination one +func getRelativePackagePath(destPkg string, typeV Type) string { + srcPkg := typeV.Pkg() + if srcPkg == nil || srcPkg.Name() == destPkg { + return "" + } + + return srcPkg.Path() +} diff --git a/cmd/gen/conditions/field.go b/cmd/gen/conditions/field.go new file mode 100644 index 0000000..42537a2 --- /dev/null +++ b/cmd/gen/conditions/field.go @@ -0,0 +1,119 @@ +package conditions + +import ( + "errors" + "go/types" +) + +type Field struct { + Name string + Type Type + Embedded bool + Tags GormTags + ColumnPrefix string +} + +// Get the name of the column where the data for a field will be saved +func (field Field) getColumnName() string { + columnTag, isPresent := field.Tags[columnTagName] + if isPresent { + // field has a gorm column tag, so the name of the column will be that tag + return columnTag + } + + return "" +} + +// Get name of the attribute of the object that is a foreign key to the field's object +func (field Field) getFKAttribute() string { + foreignKeyTag, isPresent := field.Tags[foreignKeyTagName] + if isPresent { + // field has a foreign key tag, so the name will be that tag + return foreignKeyTag + } + + // gorm default + return field.Name + "ID" +} + +// Get name of the attribute of the field's object that is references by the foreign key +func (field Field) getFKReferencesAttribute() string { + referencesTag, isPresent := field.Tags[referencesTagName] + if isPresent { + // field has a references tag, so the name will be that tag + return referencesTag + } + + // gorm default + return "ID" +} + +// Get name of the attribute of field's object that is a foreign key to the object +func (field Field) getRelatedTypeFKAttribute(structName string) string { + foreignKeyTag, isPresent := field.Tags[foreignKeyTagName] + if isPresent { + // field has a foreign key tag, so the name will that tag + return foreignKeyTag + } + + // gorm default + return structName + "ID" +} + +// Get field's type full string (pkg + name) +func (field Field) TypeString() string { + return field.Type.String() +} + +// Get field's type name +func (field Field) TypeName() string { + return field.Type.Name() +} + +// Create a new field with the same name and tags but a different type +func (field Field) ChangeType(newType types.Type) Field { + return Field{ + Name: field.Name, + Type: Type{newType}, + Tags: field.Tags, + } +} + +// Get fields of a Badaas model +// Returns error is objectType is not a Badaas model +func getFields(objectType Type, prefix string) ([]Field, error) { + // The underlying type has to be a struct and a Badaas Model + // (ignore const, var, func, etc.) + structType, err := objectType.BadaasModelStruct() + if err != nil { + return nil, err + } + + return getStructFields(structType, prefix) +} + +// Get fields of a struct +// Returns errors if the struct has not fields +func getStructFields(structType *types.Struct, prefix string) ([]Field, error) { + numFields := structType.NumFields() + if numFields == 0 { + return nil, errors.New("struct has 0 fields") + } + + fields := []Field{} + + // Iterate over struct fields + for i := 0; i < numFields; i++ { + fieldObject := structType.Field(i) + gormTags := getGormTags(structType.Tag(i)) + fields = append(fields, Field{ + Name: fieldObject.Name(), + Type: Type{fieldObject.Type()}, + Embedded: fieldObject.Embedded() || gormTags.hasEmbedded(), + Tags: gormTags, + ColumnPrefix: prefix, + }) + } + + return fields, nil +} diff --git a/cmd/gen/conditions/file.go b/cmd/gen/conditions/file.go new file mode 100644 index 0000000..24c2e98 --- /dev/null +++ b/cmd/gen/conditions/file.go @@ -0,0 +1,98 @@ +package conditions + +import ( + "errors" + "go/types" + + "github.com/dave/jennifer/jen" + "github.com/ditrit/badaas-cli/cmd/log" + "github.com/ditrit/badaas-cli/cmd/version" +) + +const badaasORMPath = "github.com/ditrit/badaas/orm" + +type File struct { + destPkg string + jenFile *jen.File + name string +} + +func NewConditionsFile(destPkg string, name string) *File { + // Start a new file in destination package + f := jen.NewFile(destPkg) + + // Add a package comment, so IDEs detect files as generated + f.PackageComment("Code generated by badaas-cli v" + version.Version + ", DO NOT EDIT.") + + return &File{ + destPkg: destPkg, + name: name, + jenFile: f, + } +} + +// Add conditions for an object in the file +func (file File) AddConditionsFor(object types.Object) error { + fields, err := getFields(Type{object.Type()}, "") + if err != nil { + return err + } + + log.Logger.Infof("Generating conditions for type %q in %s", object.Name(), file.name) + + file.addConditionsForEachField(object, fields) + return nil +} + +// Add one condition for each field of the object +func (file File) addConditionsForEachField(object types.Object, fields []Field) { + conditions := file.generateConditionsForEachField(object, fields) + + for _, condition := range conditions { + for _, code := range condition.codes { + file.jenFile.Add(code) + } + } +} + +// Write generated file +func (file File) Save() error { + return file.jenFile.Save(file.name) +} + +// Generate the conditions for each of the object's fields +func (file File) generateConditionsForEachField(object types.Object, fields []Field) []*Condition { + conditions := []*Condition{} + for _, field := range fields { + log.Logger.Debugf("Generating condition for field %q", field.Name) + if field.Embedded { + conditions = append(conditions, file.generateEmbeddedConditions( + object, + field, + )...) + } else { + conditions = append(conditions, NewCondition( + file.destPkg, Type{object.Type()}, field, + )) + } + } + + return conditions +} + +// Generate conditions for a embedded field +// it will generate a condition for each of the field of the embedded field's type +func (file File) generateEmbeddedConditions(object types.Object, field Field) []*Condition { + embeddedStructType, ok := field.Type.Underlying().(*types.Struct) + if !ok { + panic(errors.New("unreachable! embedded objects are always structs")) + } + + fields, err := getStructFields(embeddedStructType, field.Tags.getEmbeddedPrefix()) + if err != nil { + // embedded field's type has not fields + return []*Condition{} + } + + return file.generateConditionsForEachField(object, fields) +} diff --git a/cmd/gen/conditions/gormTag.go b/cmd/gen/conditions/gormTag.go new file mode 100644 index 0000000..6df96aa --- /dev/null +++ b/cmd/gen/conditions/gormTag.go @@ -0,0 +1,60 @@ +package conditions + +import ( + "strings" + + "github.com/fatih/structtag" +) + +type GormTag string + +const ( + embeddedTagName GormTag = "embedded" + embeddedPrefixTagName GormTag = "embeddedPrefix" + columnTagName GormTag = "column" + foreignKeyTagName GormTag = "foreignKey" + referencesTagName GormTag = "references" +) + +type GormTags map[GormTag]string + +func (tags GormTags) getEmbeddedPrefix() string { + embeddedPrefix, isPresent := tags[embeddedPrefixTagName] + if !isPresent { + return "" + } + + return embeddedPrefix +} + +func (tags GormTags) hasEmbedded() bool { + _, isPresent := tags[embeddedTagName] + return isPresent +} + +func getGormTags(tag string) GormTags { + tagMap := GormTags{} + + allTags, err := structtag.Parse(tag) + if err != nil { + return tagMap + } + + gormTag, err := allTags.Get("gorm") + if err != nil { + return tagMap + } + + gormTags := strings.Split(gormTag.Name, ";") + for _, tag := range gormTags { + splitted := strings.Split(tag, ":") + tagName := GormTag(splitted[0]) + if len(splitted) == 1 { + tagMap[tagName] = "" + } else { + tagMap[tagName] = splitted[1] + } + } + + return tagMap +} diff --git a/cmd/gen/conditions/jenParam.go b/cmd/gen/conditions/jenParam.go new file mode 100644 index 0000000..890a0ce --- /dev/null +++ b/cmd/gen/conditions/jenParam.go @@ -0,0 +1,71 @@ +package conditions + +import ( + "go/types" + + "github.com/dave/jennifer/jen" +) + +type JenParam struct { + statement *jen.Statement +} + +func NewJenParam() *JenParam { + return &JenParam{ + statement: jen.Id("v"), + } +} + +func (param JenParam) Statement() *jen.Statement { + return param.statement +} + +func (param JenParam) ToBasicKind(basicType *types.Basic) { + switch basicType.Kind() { + case types.Bool: + param.statement.Bool() + case types.Int: + param.statement.Int() + case types.Int8: + param.statement.Int8() + case types.Int16: + param.statement.Int16() + case types.Int32: + param.statement.Int32() + case types.Int64: + param.statement.Int64() + case types.Uint: + param.statement.Uint() + case types.Uint8: + param.statement.Uint8() + case types.Uint16: + param.statement.Uint16() + case types.Uint32: + param.statement.Uint32() + case types.Uint64: + param.statement.Uint64() + case types.Uintptr: + param.statement.Uintptr() + case types.Float32: + param.statement.Float32() + case types.Float64: + param.statement.Float64() + case types.Complex64: + param.statement.Complex64() + case types.Complex128: + param.statement.Complex128() + case types.String: + param.statement.String() + } +} + +func (param JenParam) ToSlice() { + param.statement.Index() +} + +func (param JenParam) ToCustomType(destPkg string, typeV Type) { + param.statement.Qual( + getRelativePackagePath(destPkg, typeV), + typeV.Name(), + ) +} diff --git a/cmd/gen/conditions/main.go b/cmd/gen/conditions/main.go new file mode 100644 index 0000000..35e7bd7 --- /dev/null +++ b/cmd/gen/conditions/main.go @@ -0,0 +1,115 @@ +package conditions + +import ( + "errors" + "fmt" + "go/types" + "os" + + "github.com/ettle/strcase" + "github.com/spf13/cobra" + "github.com/spf13/viper" + + "github.com/ditrit/badaas-cli/cmd/log" + "github.com/ditrit/verdeter" + + "golang.org/x/tools/go/packages" +) + +var GenConditionsCmd = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ + Use: "conditions", + Short: "Generate conditions to query your objects using badaas-orm", + Long: `gen is the command you can use to generate the files and configurations necessary for your project to use BadAss in a simple way.`, + Run: generateConditions, + Args: cobra.MinimumNArgs(1), +}) + +const DestPackageKey = "dest_package" + +func init() { + err := GenConditionsCmd.LKey( + DestPackageKey, verdeter.IsStr, "d", + "Destination package (not used if ran with go generate)", + ) + if err != nil { + panic(err) + } +} + +// GenConditionsCmd Run func +func generateConditions(_ *cobra.Command, args []string) { + log.SetLevel() + // Inspect package and use type checker to infer imported types + pkgs := loadPackages(args) + + // Get the package of the file with go:generate comment or in command params + destPkg := os.Getenv("GOPACKAGE") + if destPkg == "" { + destPkg = viper.GetString(DestPackageKey) + if destPkg == "" { + panic(errors.New("config --dest_package or use go generate")) + } + } + + // Generate conditions for each package + for _, pkg := range pkgs { + generateConditionsForPkg(destPkg, pkg) + } +} + +// Generates a file with conditions for each Badaas model in the package +func generateConditionsForPkg(destPkg string, pkg *packages.Package) { + log.Logger.Infof("Generating conditions for types in package %q", pkg.Types.Name()) + + for _, name := range pkg.Types.Scope().Names() { + object := getObject(pkg, name) + if object != nil { + file := NewConditionsFile( + destPkg, + strcase.ToSnake(object.Name())+"_conditions.go", + ) + + err := file.AddConditionsFor(object) + if err != nil { + // object is not a Badaas model, do not generate conditions + continue + } + + err = file.Save() + if err != nil { + panic(err) + } + } + } +} + +// Load package information from paths +func loadPackages(paths []string) []*packages.Package { + cfg := &packages.Config{Mode: packages.NeedTypes} + pkgs, err := packages.Load(cfg, paths...) + if err != nil { + panic(fmt.Errorf("loading packages for inspection: %w", err)) + } + + // print compilation errors of source packages + packages.PrintErrors(pkgs) + + return pkgs +} + +// Get object by name in the package +func getObject(pkg *packages.Package, name string) types.Object { + obj := pkg.Types.Scope().Lookup(name) + if obj == nil { + panic(fmt.Errorf("%s not found in declared types of %s", + name, pkg)) + } + + // Generate only if it is a declared type + object, ok := obj.(*types.TypeName) + if !ok { + return nil + } + + return object +} diff --git a/cmd/gen/conditions/type.go b/cmd/gen/conditions/type.go new file mode 100644 index 0000000..8718476 --- /dev/null +++ b/cmd/gen/conditions/type.go @@ -0,0 +1,98 @@ +package conditions + +import ( + "fmt" + "go/types" + "regexp" + "strings" + + "github.com/elliotchance/pie/v2" +) + +// badaas/orm/baseModels.go +var badaasORMBaseModels = []string{"github.com/ditrit/badaas/orm.UUIDModel", "github.com/ditrit/badaas/orm.UIntModel", "gorm.io/gorm.Model"} + +type Type struct { + types.Type +} + +// Get the name of the type depending of the internal type +func (t Type) Name() string { + switch typeTyped := t.Type.(type) { + case *types.Named: + return typeTyped.Obj().Name() + default: + return pie.Last(strings.Split(t.String(), ".")) + } +} + +// Get the package of the type depending of the internal type +func (t Type) Pkg() *types.Package { + switch typeTyped := t.Type.(type) { + case *types.Named: + return typeTyped.Obj().Pkg() + default: + return nil + } +} + +// Get the struct under type if it is a Badaas model +// Returns error if the type is not a Badaas model +func (t Type) BadaasModelStruct() (*types.Struct, error) { + structType, ok := t.Underlying().(*types.Struct) + if !ok || !isBadaasModel(structType) { + return nil, fmt.Errorf("type %s is not a Badaas Model", t.String()) + } + + return structType, nil +} + +// Returns true if the type is a Badaas model +func isBadaasModel(structType *types.Struct) bool { + for i := 0; i < structType.NumFields(); i++ { + field := structType.Field(i) + + if field.Embedded() && pie.Contains(badaasORMBaseModels, field.Type().String()) { + return true + } + } + + return false +} + +// Returns true is the type has a foreign key to the field's object +// (another field that references that object) +func (t Type) HasFK(field Field) (bool, error) { + objectFields, err := getFields(t, "") + if err != nil { + return false, err + } + return pie.Any(objectFields, func(otherField Field) bool { + return otherField.Name == field.getFKAttribute() + }), nil +} + +var scanMethod = regexp.MustCompile(`func \(\*.*\)\.Scan\([a-zA-Z0-9_-]* interface\{\}\) error$`) +var valueMethod = regexp.MustCompile(`func \(.*\)\.Value\(\) \(database/sql/driver\.Value\, error\)$`) + +// Returns true if the type is a Gorm Custom type (https://gorm.io/docs/data_types.html) +func (t Type) IsGormCustomType() bool { + typeNamed, isNamedType := t.Type.(*types.Named) + if !isNamedType { + return false + } + + hasScanMethod := false + hasValueMethod := false + for i := 0; i < typeNamed.NumMethods(); i++ { + methodSignature := typeNamed.Method(i).String() + + if !hasScanMethod && scanMethod.MatchString(methodSignature) { + hasScanMethod = true + } else if !hasValueMethod && valueMethod.MatchString(methodSignature) { + hasValueMethod = true + } + } + + return hasScanMethod && hasValueMethod +} diff --git a/cmd/gen/gen.go b/cmd/gen/gen.go index 79f5396..4e97bad 100644 --- a/cmd/gen/gen.go +++ b/cmd/gen/gen.go @@ -1,6 +1,7 @@ package gen import ( + "github.com/ditrit/badaas-cli/cmd/gen/conditions" "github.com/ditrit/verdeter" ) @@ -12,4 +13,5 @@ var GenCmd = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ func init() { GenCmd.AddSubCommand(genDockerCmd) + GenCmd.AddSubCommand(conditions.GenConditionsCmd) } diff --git a/cmd/log/config.go b/cmd/log/config.go new file mode 100644 index 0000000..e56bfcd --- /dev/null +++ b/cmd/log/config.go @@ -0,0 +1,23 @@ +package log + +import ( + "github.com/ditrit/badaas-cli/cmd/version" + log "github.com/sirupsen/logrus" + "github.com/spf13/viper" +) + +var Logger = log.WithField("version", version.Version) + +const VerboseKey = "verbose" + +func init() { + log.SetFormatter(&log.TextFormatter{}) + log.SetLevel(log.InfoLevel) +} + +func SetLevel() { + verbose := viper.GetBool(VerboseKey) + if verbose { + log.SetLevel(log.DebugLevel) + } +} diff --git a/cmd/root.go b/cmd/root.go index 1ff8446..39dbdc3 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -2,14 +2,17 @@ package cmd import ( "github.com/ditrit/badaas-cli/cmd/gen" + "github.com/ditrit/badaas-cli/cmd/log" + "github.com/ditrit/badaas-cli/cmd/version" "github.com/ditrit/verdeter" ) // rootCmd represents the base command when called without any subcommands var rootCmd = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ - Use: "badaas-cli", - Short: "the badaas command line client", - Long: `badaas-cli is the command line tool that makes it possible to configure and run your badaas applications easily.`, + Use: "badaas-cli", + Short: "the badaas command line client", + Long: `badaas-cli is the command line tool that makes it possible to configure and run your badaas applications easily.`, + Version: version.Version, }) // Execute adds all child commands to the root command and sets flags appropriately. @@ -20,4 +23,13 @@ func Execute() { func init() { rootCmd.AddSubCommand(gen.GenCmd) + + err := rootCmd.GKey( + log.VerboseKey, verdeter.IsBool, "v", + "Verbose logging", + ) + if err != nil { + panic(err) + } + rootCmd.SetDefault(log.VerboseKey, false) } diff --git a/cmd/version/version.go b/cmd/version/version.go new file mode 100644 index 0000000..415100d --- /dev/null +++ b/cmd/version/version.go @@ -0,0 +1,3 @@ +package version + +var Version = "0.0.0" diff --git a/go.mod b/go.mod index 4bc894e..a2d9fdd 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,16 @@ module github.com/ditrit/badaas-cli go 1.18 require ( + github.com/dave/jennifer v1.6.1 github.com/ditrit/verdeter v0.4.0 + github.com/elliotchance/pie/v2 v2.7.0 + github.com/ettle/strcase v0.1.1 + github.com/fatih/structtag v1.2.0 + github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.7.0 + github.com/spf13/viper v1.15.0 + github.com/stretchr/testify v1.8.1 + golang.org/x/tools v0.11.1 ) require ( @@ -21,10 +29,10 @@ require ( github.com/spf13/cast v1.5.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.15.0 // indirect - github.com/stretchr/testify v1.8.1 github.com/subosito/gotenv v1.4.2 // indirect - golang.org/x/sys v0.7.0 // indirect + golang.org/x/exp v0.0.0-20220321173239-a90fa8a75705 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/sys v0.10.0 // indirect golang.org/x/text v0.9.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 99e12ce..105afd4 100644 --- a/go.sum +++ b/go.sum @@ -47,17 +47,25 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/dave/jennifer v1.6.1 h1:T4T/67t6RAA5AIV6+NP8Uk/BIsXgDoqEowgycdQQLuk= +github.com/dave/jennifer v1.6.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3RmGZc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/ditrit/verdeter v0.4.0 h1:DzEOFauuXEGNQYP6OgYtHwEyb3w9riem99u0xE/l7+o= github.com/ditrit/verdeter v0.4.0/go.mod h1:sKpWuOvYqNabLN4aNXqeBhcWpt7nf0frwqk0B5M6ax0= +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/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= @@ -152,6 +160,8 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1: github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= @@ -204,6 +214,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20220321173239-a90fa8a75705 h1:ba9YlqfDGTTQ5aZ2fwOoQ1hf32QySyQkR6ODGDzHlnE= +golang.org/x/exp v0.0.0-20220321173239-a90fa8a75705/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -227,6 +239,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -278,6 +292,7 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -313,9 +328,10 @@ golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -377,6 +393,8 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.11.1 h1:ojD5zOW8+7dOGzdnNgersm8aPfcDjhMp12UfG93NIMc= +golang.org/x/tools v0.11.1/go.mod h1:anzJrxPjNtfgiYQYirP2CPGzGLxrH2u2QBhn6Bf3qY8= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 6538a9bc37c1ea215e5cd8aba221f567038d2f5c Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Tue, 1 Aug 2023 12:21:57 +0200 Subject: [PATCH 09/31] add conditions tests --- .gitignore | 8 +- cmd/gen/conditions/main_test.go | 193 ++++++++++++++++++ .../tests/basicpointers/basicpointers.go | 26 +++ .../tests/basicslices/basicslices.go | 26 +++ .../basicslicespointer/basicslicespointer.go | 26 +++ .../conditions/tests/basictypes/basictypes.go | 26 +++ .../conditions/tests/belongsto/belongsto.go | 14 ++ .../columndefinition/columndefinition.go | 9 + .../conditions/tests/customtype/customtype.go | 42 ++++ .../conditions/tests/goembedded/goembedded.go | 13 ++ .../tests/gormembedded/gormembedded.go | 13 ++ cmd/gen/conditions/tests/hasmany/hasmany.go | 15 ++ cmd/gen/conditions/tests/hasone/hasone.go | 15 ++ .../multiplepackage/package1/package1.go | 12 ++ .../multiplepackage/package2/package2.go | 9 + .../overrideforeignkey/overrideforeignkey.go | 15 ++ .../overrideforeignkeyinverse.go | 13 ++ .../overridereferences/overridereferences.go | 17 ++ .../overridereferencesinverse.go | 14 ++ .../conditions/tests/results/basicpointers.go | 142 +++++++++++++ .../conditions/tests/results/basicslices.go | 142 +++++++++++++ .../tests/results/basicslicespointer.go | 142 +++++++++++++ .../conditions/tests/results/basictypes.go | 142 +++++++++++++ .../tests/results/belongsto_owned.go | 47 +++++ .../tests/results/belongsto_owner.go | 34 +++ .../tests/results/columndefinition.go | 40 ++++ .../conditions/tests/results/customtype.go | 40 ++++ .../conditions/tests/results/goembedded.go | 40 ++++ .../conditions/tests/results/gormembedded.go | 41 ++++ .../tests/results/hasmany_company.go | 41 ++++ .../tests/results/hasmany_seller.go | 40 ++++ .../conditions/tests/results/hasone_city.go | 40 ++++ .../tests/results/hasone_country.go | 48 +++++ .../tests/results/multiplepackage_package1.go | 49 +++++ .../tests/results/overrideforeignkey.go | 47 +++++ .../results/overrideforeignkeyinverse.go | 48 +++++ .../tests/results/overridereferences.go | 47 +++++ .../results/overridereferencesinverse.go | 54 +++++ .../tests/results/selfreferential.go | 47 +++++ cmd/gen/conditions/tests/results/uintmodel.go | 34 +++ cmd/gen/conditions/tests/results/uuidmodel.go | 34 +++ .../tests/selfreferential/selfreferential.go | 10 + .../conditions/tests/uintmodel/uintmodel.go | 7 + .../conditions/tests/uuidmodel/uuidmodel.go | 7 + go.mod | 26 ++- go.sum | 62 ++++-- sonar-project.properties | 2 +- 47 files changed, 1941 insertions(+), 18 deletions(-) create mode 100644 cmd/gen/conditions/main_test.go create mode 100644 cmd/gen/conditions/tests/basicpointers/basicpointers.go create mode 100644 cmd/gen/conditions/tests/basicslices/basicslices.go create mode 100644 cmd/gen/conditions/tests/basicslicespointer/basicslicespointer.go create mode 100644 cmd/gen/conditions/tests/basictypes/basictypes.go create mode 100644 cmd/gen/conditions/tests/belongsto/belongsto.go create mode 100644 cmd/gen/conditions/tests/columndefinition/columndefinition.go create mode 100644 cmd/gen/conditions/tests/customtype/customtype.go create mode 100644 cmd/gen/conditions/tests/goembedded/goembedded.go create mode 100644 cmd/gen/conditions/tests/gormembedded/gormembedded.go create mode 100644 cmd/gen/conditions/tests/hasmany/hasmany.go create mode 100644 cmd/gen/conditions/tests/hasone/hasone.go create mode 100644 cmd/gen/conditions/tests/multiplepackage/package1/package1.go create mode 100644 cmd/gen/conditions/tests/multiplepackage/package2/package2.go create mode 100644 cmd/gen/conditions/tests/overrideforeignkey/overrideforeignkey.go create mode 100644 cmd/gen/conditions/tests/overrideforeignkeyinverse/overrideforeignkeyinverse.go create mode 100644 cmd/gen/conditions/tests/overridereferences/overridereferences.go create mode 100644 cmd/gen/conditions/tests/overridereferencesinverse/overridereferencesinverse.go create mode 100644 cmd/gen/conditions/tests/results/basicpointers.go create mode 100644 cmd/gen/conditions/tests/results/basicslices.go create mode 100644 cmd/gen/conditions/tests/results/basicslicespointer.go create mode 100644 cmd/gen/conditions/tests/results/basictypes.go create mode 100644 cmd/gen/conditions/tests/results/belongsto_owned.go create mode 100644 cmd/gen/conditions/tests/results/belongsto_owner.go create mode 100644 cmd/gen/conditions/tests/results/columndefinition.go create mode 100644 cmd/gen/conditions/tests/results/customtype.go create mode 100644 cmd/gen/conditions/tests/results/goembedded.go create mode 100644 cmd/gen/conditions/tests/results/gormembedded.go create mode 100644 cmd/gen/conditions/tests/results/hasmany_company.go create mode 100644 cmd/gen/conditions/tests/results/hasmany_seller.go create mode 100644 cmd/gen/conditions/tests/results/hasone_city.go create mode 100644 cmd/gen/conditions/tests/results/hasone_country.go create mode 100644 cmd/gen/conditions/tests/results/multiplepackage_package1.go create mode 100644 cmd/gen/conditions/tests/results/overrideforeignkey.go create mode 100644 cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go create mode 100644 cmd/gen/conditions/tests/results/overridereferences.go create mode 100644 cmd/gen/conditions/tests/results/overridereferencesinverse.go create mode 100644 cmd/gen/conditions/tests/results/selfreferential.go create mode 100644 cmd/gen/conditions/tests/results/uintmodel.go create mode 100644 cmd/gen/conditions/tests/results/uuidmodel.go create mode 100644 cmd/gen/conditions/tests/selfreferential/selfreferential.go create mode 100644 cmd/gen/conditions/tests/uintmodel/uintmodel.go create mode 100644 cmd/gen/conditions/tests/uuidmodel/uuidmodel.go diff --git a/.gitignore b/.gitignore index 5dd5335..4b927af 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,10 @@ vendor/ go.work # vscode conf -.vscode \ No newline at end of file +.vscode + +# binary output +badaas-cli + +# test results +cmd/gen/conditions/*_conditions.go \ No newline at end of file diff --git a/cmd/gen/conditions/main_test.go b/cmd/gen/conditions/main_test.go new file mode 100644 index 0000000..b3f9823 --- /dev/null +++ b/cmd/gen/conditions/main_test.go @@ -0,0 +1,193 @@ +package conditions + +import ( + "bytes" + "io" + "os" + "testing" + + "github.com/spf13/viper" + "gotest.tools/assert" + + "github.com/ditrit/badaas-cli/cmd/utils" +) + +const chunkSize = 100000 + +func TestUIntModel(t *testing.T) { + doTest(t, "./tests/uintmodel", []Comparison{ + {Have: "uint_model_conditions.go", Expected: "./tests/results/uintmodel.go"}, + }) +} + +func TestUUIDModel(t *testing.T) { + doTest(t, "./tests/uuidmodel", []Comparison{ + {Have: "uuid_model_conditions.go", Expected: "./tests/results/uuidmodel.go"}, + }) +} + +func TestBasicTypes(t *testing.T) { + doTest(t, "./tests/basictypes", []Comparison{ + {Have: "basic_types_conditions.go", Expected: "./tests/results/basictypes.go"}, + }) +} + +func TestBasicPointers(t *testing.T) { + doTest(t, "./tests/basicpointers", []Comparison{ + {Have: "basic_pointers_conditions.go", Expected: "./tests/results/basicpointers.go"}, + }) +} + +func TestBasicSlices(t *testing.T) { + doTest(t, "./tests/basicslices", []Comparison{ + {Have: "basic_slices_conditions.go", Expected: "./tests/results/basicslices.go"}, + }) +} + +func TestBasicSlicesPointer(t *testing.T) { + doTest(t, "./tests/basicslicespointer", []Comparison{ + {Have: "basic_slices_pointer_conditions.go", Expected: "./tests/results/basicslicespointer.go"}, + }) +} + +func TestGoEmbedded(t *testing.T) { + doTest(t, "./tests/goembedded", []Comparison{ + {Have: "go_embedded_conditions.go", Expected: "./tests/results/goembedded.go"}, + }) +} + +func TestGormEmbedded(t *testing.T) { + doTest(t, "./tests/gormembedded", []Comparison{ + {Have: "gorm_embedded_conditions.go", Expected: "./tests/results/gormembedded.go"}, + }) +} + +func TestCustomType(t *testing.T) { + doTest(t, "./tests/customtype", []Comparison{ + {Have: "custom_type_conditions.go", Expected: "./tests/results/customtype.go"}, + }) +} + +func TestBelongsTo(t *testing.T) { + doTest(t, "./tests/belongsto", []Comparison{ + {Have: "owner_conditions.go", Expected: "./tests/results/belongsto_owner.go"}, + {Have: "owned_conditions.go", Expected: "./tests/results/belongsto_owned.go"}, + }) +} + +func TestHasOne(t *testing.T) { + doTest(t, "./tests/hasone", []Comparison{ + {Have: "country_conditions.go", Expected: "./tests/results/hasone_country.go"}, + {Have: "city_conditions.go", Expected: "./tests/results/hasone_city.go"}, + }) +} + +func TestHasMany(t *testing.T) { + doTest(t, "./tests/hasmany", []Comparison{ + {Have: "company_conditions.go", Expected: "./tests/results/hasmany_company.go"}, + {Have: "seller_conditions.go", Expected: "./tests/results/hasmany_seller.go"}, + }) +} + +func TestSelfReferential(t *testing.T) { + doTest(t, "./tests/selfreferential", []Comparison{ + {Have: "employee_conditions.go", Expected: "./tests/results/selfreferential.go"}, + }) +} + +func TestMultiplePackage(t *testing.T) { + doTest(t, "./tests/multiplepackage/package1", []Comparison{ + {Have: "package1_conditions.go", Expected: "./tests/results/multiplepackage_package1.go"}, + }) +} + +func TestColumnDefinition(t *testing.T) { + doTest(t, "./tests/columndefinition", []Comparison{ + {Have: "column_definition_conditions.go", Expected: "./tests/results/columndefinition.go"}, + }) +} + +func TestOverrideForeignKey(t *testing.T) { + doTest(t, "./tests/overrideforeignkey", []Comparison{ + {Have: "bicycle_conditions.go", Expected: "./tests/results/overrideforeignkey.go"}, + }) + utils.RemoveFile("person_conditions.go") +} + +func TestOverrideReferences(t *testing.T) { + doTest(t, "./tests/overridereferences", []Comparison{ + {Have: "phone_conditions.go", Expected: "./tests/results/overridereferences.go"}, + }) + utils.RemoveFile("brand_conditions.go") +} + +func TestOverrideForeignKeyInverse(t *testing.T) { + doTest(t, "./tests/overrideforeignkeyinverse", []Comparison{ + {Have: "user_conditions.go", Expected: "./tests/results/overrideforeignkeyinverse.go"}, + }) + utils.RemoveFile("credit_card_conditions.go") +} + +func TestOverrideReferencesInverse(t *testing.T) { + doTest(t, "./tests/overridereferencesinverse", []Comparison{ + {Have: "computer_conditions.go", Expected: "./tests/results/overridereferencesinverse.go"}, + }) + utils.RemoveFile("processor_conditions.go") +} + +type Comparison struct { + Have string + Expected string +} + +func doTest(t *testing.T, sourcePkg string, comparisons []Comparison) { + viper.Set(DestPackageKey, "conditions") + generateConditions(nil, []string{sourcePkg}) + for _, comparison := range comparisons { + checkFilesEqual(t, comparison.Have, comparison.Expected) + } +} + +func checkFilesEqual(t *testing.T, file1, file2 string) { + stat1 := utils.CheckFileExists(t, file1) + stat2 := utils.CheckFileExists(t, file2) + + // do inputs at least have the same size? + assert.Equal(t, stat1.Size(), stat2.Size(), "File lens are not equal") + + // long way: compare contents + f1, err := os.Open(file1) + if err != nil { + t.Error(err) + } + defer f1.Close() + + f2, err := os.Open(file2) + if err != nil { + t.Error(err) + } + defer f2.Close() + + b1 := make([]byte, chunkSize) + b2 := make([]byte, chunkSize) + for { + n1, err1 := io.ReadFull(f1, b1) + n2, err2 := io.ReadFull(f2, b2) + + assert.Assert(t, bytes.Equal(b1[:n1], b2[:n2])) + + if (err1 == io.EOF && err2 == io.EOF) || (err1 == io.ErrUnexpectedEOF && err2 == io.ErrUnexpectedEOF) { + break + } + + // some other error, like a dropped network connection or a bad transfer + if err1 != nil { + t.Error(err1) + } + if err2 != nil { + t.Error(err2) + } + } + + utils.RemoveFile(file1) +} diff --git a/cmd/gen/conditions/tests/basicpointers/basicpointers.go b/cmd/gen/conditions/tests/basicpointers/basicpointers.go new file mode 100644 index 0000000..bebe0e9 --- /dev/null +++ b/cmd/gen/conditions/tests/basicpointers/basicpointers.go @@ -0,0 +1,26 @@ +package basicpointers + +import "github.com/ditrit/badaas/orm" + +type BasicPointers struct { + orm.UUIDModel + + Bool *bool + Int *int + Int8 *int8 + Int16 *int16 + Int32 *int32 + Int64 *int64 + UInt *uint + UInt8 *uint8 + UInt16 *uint16 + UInt32 *uint32 + UInt64 *uint64 + UIntptr *uintptr + Float32 *float32 + Float64 *float64 + Complex64 *complex64 + Complex128 *complex128 + String *string + Byte *byte +} diff --git a/cmd/gen/conditions/tests/basicslices/basicslices.go b/cmd/gen/conditions/tests/basicslices/basicslices.go new file mode 100644 index 0000000..eead356 --- /dev/null +++ b/cmd/gen/conditions/tests/basicslices/basicslices.go @@ -0,0 +1,26 @@ +package basicslices + +import "github.com/ditrit/badaas/orm" + +type BasicSlices struct { + orm.UUIDModel + + Bool []bool + Int []int + Int8 []int8 + Int16 []int16 + Int32 []int32 + Int64 []int64 + UInt []uint + UInt8 []uint8 + UInt16 []uint16 + UInt32 []uint32 + UInt64 []uint64 + UIntptr []uintptr + Float32 []float32 + Float64 []float64 + Complex64 []complex64 + Complex128 []complex128 + String []string + Byte []byte +} diff --git a/cmd/gen/conditions/tests/basicslicespointer/basicslicespointer.go b/cmd/gen/conditions/tests/basicslicespointer/basicslicespointer.go new file mode 100644 index 0000000..c0f1da1 --- /dev/null +++ b/cmd/gen/conditions/tests/basicslicespointer/basicslicespointer.go @@ -0,0 +1,26 @@ +package basicslicespointer + +import "github.com/ditrit/badaas/orm" + +type BasicSlicesPointer struct { + orm.UUIDModel + + Bool []*bool + Int []*int + Int8 []*int8 + Int16 []*int16 + Int32 []*int32 + Int64 []*int64 + UInt []*uint + UInt8 []*uint8 + UInt16 []*uint16 + UInt32 []*uint32 + UInt64 []*uint64 + UIntptr []*uintptr + Float32 []*float32 + Float64 []*float64 + Complex64 []*complex64 + Complex128 []*complex128 + String []*string + Byte []*byte +} diff --git a/cmd/gen/conditions/tests/basictypes/basictypes.go b/cmd/gen/conditions/tests/basictypes/basictypes.go new file mode 100644 index 0000000..d5170e3 --- /dev/null +++ b/cmd/gen/conditions/tests/basictypes/basictypes.go @@ -0,0 +1,26 @@ +package basictypes + +import "github.com/ditrit/badaas/orm" + +type BasicTypes struct { + orm.UUIDModel + + Bool bool + Int int + Int8 int8 + Int16 int16 + Int32 int32 + Int64 int64 + UInt uint + UInt8 uint8 + UInt16 uint16 + UInt32 uint32 + UInt64 uint64 + UIntptr uintptr + Float32 float32 + Float64 float64 + Complex64 complex64 + Complex128 complex128 + String string + Byte byte +} diff --git a/cmd/gen/conditions/tests/belongsto/belongsto.go b/cmd/gen/conditions/tests/belongsto/belongsto.go new file mode 100644 index 0000000..aa3f100 --- /dev/null +++ b/cmd/gen/conditions/tests/belongsto/belongsto.go @@ -0,0 +1,14 @@ +package belongsto + +import "github.com/ditrit/badaas/orm" + +type Owner struct { + orm.UUIDModel +} +type Owned struct { + orm.UUIDModel + + // Owned belongsTo Owner (Owned 0..* -> 1 Owner) + Owner Owner + OwnerID orm.UUID +} diff --git a/cmd/gen/conditions/tests/columndefinition/columndefinition.go b/cmd/gen/conditions/tests/columndefinition/columndefinition.go new file mode 100644 index 0000000..775395d --- /dev/null +++ b/cmd/gen/conditions/tests/columndefinition/columndefinition.go @@ -0,0 +1,9 @@ +package columndefinition + +import "github.com/ditrit/badaas/orm" + +type ColumnDefinition struct { + orm.UUIDModel + + String string `gorm:"column:string_something_else"` +} diff --git a/cmd/gen/conditions/tests/customtype/customtype.go b/cmd/gen/conditions/tests/customtype/customtype.go new file mode 100644 index 0000000..2a208d4 --- /dev/null +++ b/cmd/gen/conditions/tests/customtype/customtype.go @@ -0,0 +1,42 @@ +package customtype + +import ( + "database/sql/driver" + "fmt" + "strings" + + "github.com/ditrit/badaas/orm" +) + +type MultiString []string + +func (s *MultiString) Scan(src interface{}) error { + switch typedSrc := src.(type) { + case string: + *s = strings.Split(typedSrc, ",") + return nil + case []byte: + str := string(typedSrc) + *s = strings.Split(str, ",") + return nil + default: + return fmt.Errorf("failed to scan multistring field - source is not a string, is %T", src) + } +} + +func (s MultiString) Value() (driver.Value, error) { + if len(s) == 0 { + return nil, nil + } + return strings.Join(s, ","), nil +} + +func (MultiString) GormDataType() string { + return "text" +} + +type CustomType struct { + orm.UUIDModel + + Custom MultiString +} diff --git a/cmd/gen/conditions/tests/goembedded/goembedded.go b/cmd/gen/conditions/tests/goembedded/goembedded.go new file mode 100644 index 0000000..ff7c0e1 --- /dev/null +++ b/cmd/gen/conditions/tests/goembedded/goembedded.go @@ -0,0 +1,13 @@ +package goembedded + +import "github.com/ditrit/badaas/orm" + +type ToBeEmbedded struct { + EmbeddedInt int +} + +type GoEmbedded struct { + orm.UIntModel + + ToBeEmbedded +} diff --git a/cmd/gen/conditions/tests/gormembedded/gormembedded.go b/cmd/gen/conditions/tests/gormembedded/gormembedded.go new file mode 100644 index 0000000..6b7c219 --- /dev/null +++ b/cmd/gen/conditions/tests/gormembedded/gormembedded.go @@ -0,0 +1,13 @@ +package gormembedded + +import "github.com/ditrit/badaas/orm" + +type ToBeGormEmbedded struct { + Int int +} + +type GormEmbedded struct { + orm.UIntModel + + GormEmbedded ToBeGormEmbedded `gorm:"embedded;embeddedPrefix:gorm_embedded_"` +} diff --git a/cmd/gen/conditions/tests/hasmany/hasmany.go b/cmd/gen/conditions/tests/hasmany/hasmany.go new file mode 100644 index 0000000..0eafe59 --- /dev/null +++ b/cmd/gen/conditions/tests/hasmany/hasmany.go @@ -0,0 +1,15 @@ +package hasone + +import "github.com/ditrit/badaas/orm" + +type Company struct { + orm.UUIDModel + + Sellers []Seller // Company HasMany Sellers (Company 0..1 -> 0..* Seller) +} + +type Seller struct { + orm.UUIDModel + + CompanyID *orm.UUID // Company HasMany Sellers (Company 0..1 -> 0..* Seller) +} diff --git a/cmd/gen/conditions/tests/hasone/hasone.go b/cmd/gen/conditions/tests/hasone/hasone.go new file mode 100644 index 0000000..cc29a90 --- /dev/null +++ b/cmd/gen/conditions/tests/hasone/hasone.go @@ -0,0 +1,15 @@ +package hasone + +import "github.com/ditrit/badaas/orm" + +type Country struct { + orm.UUIDModel + + Capital City // Country HasOne City (Country 1 -> 1 City) +} + +type City struct { + orm.UUIDModel + + CountryID orm.UUID // Country HasOne City (Country 1 -> 1 City) +} diff --git a/cmd/gen/conditions/tests/multiplepackage/package1/package1.go b/cmd/gen/conditions/tests/multiplepackage/package1/package1.go new file mode 100644 index 0000000..fbe09c3 --- /dev/null +++ b/cmd/gen/conditions/tests/multiplepackage/package1/package1.go @@ -0,0 +1,12 @@ +package package1 + +import ( + "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/multiplepackage/package2" + "github.com/ditrit/badaas/orm" +) + +type Package1 struct { + orm.UUIDModel + + Package2 package2.Package2 // Package1 HasOne Package2 (Package1 1 -> 1 Package2) +} diff --git a/cmd/gen/conditions/tests/multiplepackage/package2/package2.go b/cmd/gen/conditions/tests/multiplepackage/package2/package2.go new file mode 100644 index 0000000..26ffe55 --- /dev/null +++ b/cmd/gen/conditions/tests/multiplepackage/package2/package2.go @@ -0,0 +1,9 @@ +package package2 + +import "github.com/ditrit/badaas/orm" + +type Package2 struct { + orm.UUIDModel + + Package1ID orm.UUID // Package1 HasOne Package2 (Package1 1 -> 1 Package2) +} diff --git a/cmd/gen/conditions/tests/overrideforeignkey/overrideforeignkey.go b/cmd/gen/conditions/tests/overrideforeignkey/overrideforeignkey.go new file mode 100644 index 0000000..f699577 --- /dev/null +++ b/cmd/gen/conditions/tests/overrideforeignkey/overrideforeignkey.go @@ -0,0 +1,15 @@ +package overrideforeignkey + +import "github.com/ditrit/badaas/orm" + +type Person struct { + orm.UUIDModel +} + +type Bicycle struct { + orm.UUIDModel + + // Bicycle BelongsTo Person (Bicycle 0..* -> 1 Person) + Owner Person `gorm:"foreignKey:OwnerSomethingID"` + OwnerSomethingID string +} diff --git a/cmd/gen/conditions/tests/overrideforeignkeyinverse/overrideforeignkeyinverse.go b/cmd/gen/conditions/tests/overrideforeignkeyinverse/overrideforeignkeyinverse.go new file mode 100644 index 0000000..b2d0974 --- /dev/null +++ b/cmd/gen/conditions/tests/overrideforeignkeyinverse/overrideforeignkeyinverse.go @@ -0,0 +1,13 @@ +package overrideforeignkeyinverse + +import "github.com/ditrit/badaas/orm" + +type User struct { + orm.UUIDModel + CreditCard CreditCard `gorm:"foreignKey:UserReference"` +} + +type CreditCard struct { + orm.UUIDModel + UserReference orm.UUID +} diff --git a/cmd/gen/conditions/tests/overridereferences/overridereferences.go b/cmd/gen/conditions/tests/overridereferences/overridereferences.go new file mode 100644 index 0000000..08d49a2 --- /dev/null +++ b/cmd/gen/conditions/tests/overridereferences/overridereferences.go @@ -0,0 +1,17 @@ +package overridereferences + +import "github.com/ditrit/badaas/orm" + +type Brand struct { + orm.UUIDModel + + Name string `gorm:"unique;type:VARCHAR(255)"` +} + +type Phone struct { + orm.UUIDModel + + // Bicycle BelongsTo Person (Bicycle 0..* -> 1 Person) + Brand Brand `gorm:"references:Name;foreignKey:BrandName"` + BrandName string +} diff --git a/cmd/gen/conditions/tests/overridereferencesinverse/overridereferencesinverse.go b/cmd/gen/conditions/tests/overridereferencesinverse/overridereferencesinverse.go new file mode 100644 index 0000000..08bc3b2 --- /dev/null +++ b/cmd/gen/conditions/tests/overridereferencesinverse/overridereferencesinverse.go @@ -0,0 +1,14 @@ +package overridereferencesinverse + +import "github.com/ditrit/badaas/orm" + +type Computer struct { + orm.UUIDModel + Name string + Processor Processor `gorm:"foreignKey:ComputerName;references:Name"` +} + +type Processor struct { + orm.UUIDModel + ComputerName string +} diff --git a/cmd/gen/conditions/tests/results/basicpointers.go b/cmd/gen/conditions/tests/results/basicpointers.go new file mode 100644 index 0000000..0aaa477 --- /dev/null +++ b/cmd/gen/conditions/tests/results/basicpointers.go @@ -0,0 +1,142 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + basicpointers "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basicpointers" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func BasicPointersId(v orm.UUID) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "ID", + Value: v, + } +} +func BasicPointersCreatedAt(v time.Time) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "CreatedAt", + Value: v, + } +} +func BasicPointersUpdatedAt(v time.Time) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "UpdatedAt", + Value: v, + } +} +func BasicPointersDeletedAt(v gorm.DeletedAt) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "DeletedAt", + Value: v, + } +} +func BasicPointersBool(v bool) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Bool", + Value: v, + } +} +func BasicPointersInt(v int) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Int", + Value: v, + } +} +func BasicPointersInt8(v int8) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Int8", + Value: v, + } +} +func BasicPointersInt16(v int16) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Int16", + Value: v, + } +} +func BasicPointersInt32(v int32) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Int32", + Value: v, + } +} +func BasicPointersInt64(v int64) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Int64", + Value: v, + } +} +func BasicPointersUInt(v uint) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "UInt", + Value: v, + } +} +func BasicPointersUInt8(v uint8) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "UInt8", + Value: v, + } +} +func BasicPointersUInt16(v uint16) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "UInt16", + Value: v, + } +} +func BasicPointersUInt32(v uint32) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "UInt32", + Value: v, + } +} +func BasicPointersUInt64(v uint64) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "UInt64", + Value: v, + } +} +func BasicPointersUIntptr(v uintptr) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "UIntptr", + Value: v, + } +} +func BasicPointersFloat32(v float32) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Float32", + Value: v, + } +} +func BasicPointersFloat64(v float64) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Float64", + Value: v, + } +} +func BasicPointersComplex64(v complex64) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Complex64", + Value: v, + } +} +func BasicPointersComplex128(v complex128) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Complex128", + Value: v, + } +} +func BasicPointersString(v string) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "String", + Value: v, + } +} +func BasicPointersByte(v uint8) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.WhereCondition[basicpointers.BasicPointers]{ + Field: "Byte", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/basicslices.go b/cmd/gen/conditions/tests/results/basicslices.go new file mode 100644 index 0000000..2db14c1 --- /dev/null +++ b/cmd/gen/conditions/tests/results/basicslices.go @@ -0,0 +1,142 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + basicslices "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basicslices" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func BasicSlicesId(v orm.UUID) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "ID", + Value: v, + } +} +func BasicSlicesCreatedAt(v time.Time) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "CreatedAt", + Value: v, + } +} +func BasicSlicesUpdatedAt(v time.Time) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "UpdatedAt", + Value: v, + } +} +func BasicSlicesDeletedAt(v gorm.DeletedAt) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "DeletedAt", + Value: v, + } +} +func BasicSlicesBool(v []bool) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Bool", + Value: v, + } +} +func BasicSlicesInt(v []int) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Int", + Value: v, + } +} +func BasicSlicesInt8(v []int8) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Int8", + Value: v, + } +} +func BasicSlicesInt16(v []int16) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Int16", + Value: v, + } +} +func BasicSlicesInt32(v []int32) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Int32", + Value: v, + } +} +func BasicSlicesInt64(v []int64) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Int64", + Value: v, + } +} +func BasicSlicesUInt(v []uint) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "UInt", + Value: v, + } +} +func BasicSlicesUInt8(v []uint8) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "UInt8", + Value: v, + } +} +func BasicSlicesUInt16(v []uint16) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "UInt16", + Value: v, + } +} +func BasicSlicesUInt32(v []uint32) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "UInt32", + Value: v, + } +} +func BasicSlicesUInt64(v []uint64) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "UInt64", + Value: v, + } +} +func BasicSlicesUIntptr(v []uintptr) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "UIntptr", + Value: v, + } +} +func BasicSlicesFloat32(v []float32) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Float32", + Value: v, + } +} +func BasicSlicesFloat64(v []float64) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Float64", + Value: v, + } +} +func BasicSlicesComplex64(v []complex64) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Complex64", + Value: v, + } +} +func BasicSlicesComplex128(v []complex128) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Complex128", + Value: v, + } +} +func BasicSlicesString(v []string) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "String", + Value: v, + } +} +func BasicSlicesByte(v []uint8) orm.WhereCondition[basicslices.BasicSlices] { + return orm.WhereCondition[basicslices.BasicSlices]{ + Field: "Byte", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/basicslicespointer.go b/cmd/gen/conditions/tests/results/basicslicespointer.go new file mode 100644 index 0000000..71e772f --- /dev/null +++ b/cmd/gen/conditions/tests/results/basicslicespointer.go @@ -0,0 +1,142 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + basicslicespointer "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basicslicespointer" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func BasicSlicesPointerId(v orm.UUID) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "ID", + Value: v, + } +} +func BasicSlicesPointerCreatedAt(v time.Time) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "CreatedAt", + Value: v, + } +} +func BasicSlicesPointerUpdatedAt(v time.Time) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "UpdatedAt", + Value: v, + } +} +func BasicSlicesPointerDeletedAt(v gorm.DeletedAt) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "DeletedAt", + Value: v, + } +} +func BasicSlicesPointerBool(v []bool) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Bool", + Value: v, + } +} +func BasicSlicesPointerInt(v []int) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Int", + Value: v, + } +} +func BasicSlicesPointerInt8(v []int8) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Int8", + Value: v, + } +} +func BasicSlicesPointerInt16(v []int16) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Int16", + Value: v, + } +} +func BasicSlicesPointerInt32(v []int32) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Int32", + Value: v, + } +} +func BasicSlicesPointerInt64(v []int64) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Int64", + Value: v, + } +} +func BasicSlicesPointerUInt(v []uint) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "UInt", + Value: v, + } +} +func BasicSlicesPointerUInt8(v []uint8) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "UInt8", + Value: v, + } +} +func BasicSlicesPointerUInt16(v []uint16) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "UInt16", + Value: v, + } +} +func BasicSlicesPointerUInt32(v []uint32) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "UInt32", + Value: v, + } +} +func BasicSlicesPointerUInt64(v []uint64) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "UInt64", + Value: v, + } +} +func BasicSlicesPointerUIntptr(v []uintptr) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "UIntptr", + Value: v, + } +} +func BasicSlicesPointerFloat32(v []float32) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Float32", + Value: v, + } +} +func BasicSlicesPointerFloat64(v []float64) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Float64", + Value: v, + } +} +func BasicSlicesPointerComplex64(v []complex64) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Complex64", + Value: v, + } +} +func BasicSlicesPointerComplex128(v []complex128) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Complex128", + Value: v, + } +} +func BasicSlicesPointerString(v []string) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "String", + Value: v, + } +} +func BasicSlicesPointerByte(v []uint8) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ + Field: "Byte", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/basictypes.go b/cmd/gen/conditions/tests/results/basictypes.go new file mode 100644 index 0000000..877943d --- /dev/null +++ b/cmd/gen/conditions/tests/results/basictypes.go @@ -0,0 +1,142 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + basictypes "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basictypes" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func BasicTypesId(v orm.UUID) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "ID", + Value: v, + } +} +func BasicTypesCreatedAt(v time.Time) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "CreatedAt", + Value: v, + } +} +func BasicTypesUpdatedAt(v time.Time) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "UpdatedAt", + Value: v, + } +} +func BasicTypesDeletedAt(v gorm.DeletedAt) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "DeletedAt", + Value: v, + } +} +func BasicTypesBool(v bool) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Bool", + Value: v, + } +} +func BasicTypesInt(v int) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Int", + Value: v, + } +} +func BasicTypesInt8(v int8) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Int8", + Value: v, + } +} +func BasicTypesInt16(v int16) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Int16", + Value: v, + } +} +func BasicTypesInt32(v int32) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Int32", + Value: v, + } +} +func BasicTypesInt64(v int64) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Int64", + Value: v, + } +} +func BasicTypesUInt(v uint) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "UInt", + Value: v, + } +} +func BasicTypesUInt8(v uint8) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "UInt8", + Value: v, + } +} +func BasicTypesUInt16(v uint16) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "UInt16", + Value: v, + } +} +func BasicTypesUInt32(v uint32) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "UInt32", + Value: v, + } +} +func BasicTypesUInt64(v uint64) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "UInt64", + Value: v, + } +} +func BasicTypesUIntptr(v uintptr) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "UIntptr", + Value: v, + } +} +func BasicTypesFloat32(v float32) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Float32", + Value: v, + } +} +func BasicTypesFloat64(v float64) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Float64", + Value: v, + } +} +func BasicTypesComplex64(v complex64) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Complex64", + Value: v, + } +} +func BasicTypesComplex128(v complex128) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Complex128", + Value: v, + } +} +func BasicTypesString(v string) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "String", + Value: v, + } +} +func BasicTypesByte(v uint8) orm.WhereCondition[basictypes.BasicTypes] { + return orm.WhereCondition[basictypes.BasicTypes]{ + Field: "Byte", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/belongsto_owned.go b/cmd/gen/conditions/tests/results/belongsto_owned.go new file mode 100644 index 0000000..9b22347 --- /dev/null +++ b/cmd/gen/conditions/tests/results/belongsto_owned.go @@ -0,0 +1,47 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + belongsto "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/belongsto" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func OwnedId(v orm.UUID) orm.WhereCondition[belongsto.Owned] { + return orm.WhereCondition[belongsto.Owned]{ + Field: "ID", + Value: v, + } +} +func OwnedCreatedAt(v time.Time) orm.WhereCondition[belongsto.Owned] { + return orm.WhereCondition[belongsto.Owned]{ + Field: "CreatedAt", + Value: v, + } +} +func OwnedUpdatedAt(v time.Time) orm.WhereCondition[belongsto.Owned] { + return orm.WhereCondition[belongsto.Owned]{ + Field: "UpdatedAt", + Value: v, + } +} +func OwnedDeletedAt(v gorm.DeletedAt) orm.WhereCondition[belongsto.Owned] { + return orm.WhereCondition[belongsto.Owned]{ + Field: "DeletedAt", + Value: v, + } +} +func OwnedOwner(conditions ...orm.Condition[belongsto.Owner]) orm.Condition[belongsto.Owned] { + return orm.JoinCondition[belongsto.Owned, belongsto.Owner]{ + Conditions: conditions, + T1Field: "OwnerID", + T2Field: "ID", + } +} +func OwnedOwnerId(v orm.UUID) orm.WhereCondition[belongsto.Owned] { + return orm.WhereCondition[belongsto.Owned]{ + Field: "OwnerID", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/belongsto_owner.go b/cmd/gen/conditions/tests/results/belongsto_owner.go new file mode 100644 index 0000000..b712824 --- /dev/null +++ b/cmd/gen/conditions/tests/results/belongsto_owner.go @@ -0,0 +1,34 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + belongsto "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/belongsto" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func OwnerId(v orm.UUID) orm.WhereCondition[belongsto.Owner] { + return orm.WhereCondition[belongsto.Owner]{ + Field: "ID", + Value: v, + } +} +func OwnerCreatedAt(v time.Time) orm.WhereCondition[belongsto.Owner] { + return orm.WhereCondition[belongsto.Owner]{ + Field: "CreatedAt", + Value: v, + } +} +func OwnerUpdatedAt(v time.Time) orm.WhereCondition[belongsto.Owner] { + return orm.WhereCondition[belongsto.Owner]{ + Field: "UpdatedAt", + Value: v, + } +} +func OwnerDeletedAt(v gorm.DeletedAt) orm.WhereCondition[belongsto.Owner] { + return orm.WhereCondition[belongsto.Owner]{ + Field: "DeletedAt", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/columndefinition.go b/cmd/gen/conditions/tests/results/columndefinition.go new file mode 100644 index 0000000..899d821 --- /dev/null +++ b/cmd/gen/conditions/tests/results/columndefinition.go @@ -0,0 +1,40 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + columndefinition "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/columndefinition" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func ColumnDefinitionId(v orm.UUID) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.WhereCondition[columndefinition.ColumnDefinition]{ + Field: "ID", + Value: v, + } +} +func ColumnDefinitionCreatedAt(v time.Time) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.WhereCondition[columndefinition.ColumnDefinition]{ + Field: "CreatedAt", + Value: v, + } +} +func ColumnDefinitionUpdatedAt(v time.Time) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.WhereCondition[columndefinition.ColumnDefinition]{ + Field: "UpdatedAt", + Value: v, + } +} +func ColumnDefinitionDeletedAt(v gorm.DeletedAt) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.WhereCondition[columndefinition.ColumnDefinition]{ + Field: "DeletedAt", + Value: v, + } +} +func ColumnDefinitionString(v string) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.WhereCondition[columndefinition.ColumnDefinition]{ + Column: "string_something_else", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/customtype.go b/cmd/gen/conditions/tests/results/customtype.go new file mode 100644 index 0000000..6eec5fd --- /dev/null +++ b/cmd/gen/conditions/tests/results/customtype.go @@ -0,0 +1,40 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + customtype "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/customtype" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func CustomTypeId(v orm.UUID) orm.WhereCondition[customtype.CustomType] { + return orm.WhereCondition[customtype.CustomType]{ + Field: "ID", + Value: v, + } +} +func CustomTypeCreatedAt(v time.Time) orm.WhereCondition[customtype.CustomType] { + return orm.WhereCondition[customtype.CustomType]{ + Field: "CreatedAt", + Value: v, + } +} +func CustomTypeUpdatedAt(v time.Time) orm.WhereCondition[customtype.CustomType] { + return orm.WhereCondition[customtype.CustomType]{ + Field: "UpdatedAt", + Value: v, + } +} +func CustomTypeDeletedAt(v gorm.DeletedAt) orm.WhereCondition[customtype.CustomType] { + return orm.WhereCondition[customtype.CustomType]{ + Field: "DeletedAt", + Value: v, + } +} +func CustomTypeCustom(v customtype.MultiString) orm.WhereCondition[customtype.CustomType] { + return orm.WhereCondition[customtype.CustomType]{ + Field: "Custom", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/goembedded.go b/cmd/gen/conditions/tests/results/goembedded.go new file mode 100644 index 0000000..1f2cf3e --- /dev/null +++ b/cmd/gen/conditions/tests/results/goembedded.go @@ -0,0 +1,40 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + goembedded "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/goembedded" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func GoEmbeddedId(v uint) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.WhereCondition[goembedded.GoEmbedded]{ + Field: "ID", + Value: v, + } +} +func GoEmbeddedCreatedAt(v time.Time) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.WhereCondition[goembedded.GoEmbedded]{ + Field: "CreatedAt", + Value: v, + } +} +func GoEmbeddedUpdatedAt(v time.Time) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.WhereCondition[goembedded.GoEmbedded]{ + Field: "UpdatedAt", + Value: v, + } +} +func GoEmbeddedDeletedAt(v gorm.DeletedAt) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.WhereCondition[goembedded.GoEmbedded]{ + Field: "DeletedAt", + Value: v, + } +} +func GoEmbeddedEmbeddedInt(v int) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.WhereCondition[goembedded.GoEmbedded]{ + Field: "EmbeddedInt", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/gormembedded.go b/cmd/gen/conditions/tests/results/gormembedded.go new file mode 100644 index 0000000..510e654 --- /dev/null +++ b/cmd/gen/conditions/tests/results/gormembedded.go @@ -0,0 +1,41 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + gormembedded "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/gormembedded" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func GormEmbeddedId(v uint) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.WhereCondition[gormembedded.GormEmbedded]{ + Field: "ID", + Value: v, + } +} +func GormEmbeddedCreatedAt(v time.Time) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.WhereCondition[gormembedded.GormEmbedded]{ + Field: "CreatedAt", + Value: v, + } +} +func GormEmbeddedUpdatedAt(v time.Time) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.WhereCondition[gormembedded.GormEmbedded]{ + Field: "UpdatedAt", + Value: v, + } +} +func GormEmbeddedDeletedAt(v gorm.DeletedAt) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.WhereCondition[gormembedded.GormEmbedded]{ + Field: "DeletedAt", + Value: v, + } +} +func GormEmbeddedGormEmbeddedInt(v int) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.WhereCondition[gormembedded.GormEmbedded]{ + ColumnPrefix: "gorm_embedded_", + Field: "Int", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/hasmany_company.go b/cmd/gen/conditions/tests/results/hasmany_company.go new file mode 100644 index 0000000..7bdda4b --- /dev/null +++ b/cmd/gen/conditions/tests/results/hasmany_company.go @@ -0,0 +1,41 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + hasmany "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasmany" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func CompanyId(v orm.UUID) orm.WhereCondition[hasmany.Company] { + return orm.WhereCondition[hasmany.Company]{ + Field: "ID", + Value: v, + } +} +func CompanyCreatedAt(v time.Time) orm.WhereCondition[hasmany.Company] { + return orm.WhereCondition[hasmany.Company]{ + Field: "CreatedAt", + Value: v, + } +} +func CompanyUpdatedAt(v time.Time) orm.WhereCondition[hasmany.Company] { + return orm.WhereCondition[hasmany.Company]{ + Field: "UpdatedAt", + Value: v, + } +} +func CompanyDeletedAt(v gorm.DeletedAt) orm.WhereCondition[hasmany.Company] { + return orm.WhereCondition[hasmany.Company]{ + Field: "DeletedAt", + Value: v, + } +} +func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.Condition[hasmany.Seller] { + return orm.JoinCondition[hasmany.Seller, hasmany.Company]{ + Conditions: conditions, + T1Field: "CompanyID", + T2Field: "ID", + } +} diff --git a/cmd/gen/conditions/tests/results/hasmany_seller.go b/cmd/gen/conditions/tests/results/hasmany_seller.go new file mode 100644 index 0000000..6d1cfb8 --- /dev/null +++ b/cmd/gen/conditions/tests/results/hasmany_seller.go @@ -0,0 +1,40 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + hasmany "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasmany" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func SellerId(v orm.UUID) orm.WhereCondition[hasmany.Seller] { + return orm.WhereCondition[hasmany.Seller]{ + Field: "ID", + Value: v, + } +} +func SellerCreatedAt(v time.Time) orm.WhereCondition[hasmany.Seller] { + return orm.WhereCondition[hasmany.Seller]{ + Field: "CreatedAt", + Value: v, + } +} +func SellerUpdatedAt(v time.Time) orm.WhereCondition[hasmany.Seller] { + return orm.WhereCondition[hasmany.Seller]{ + Field: "UpdatedAt", + Value: v, + } +} +func SellerDeletedAt(v gorm.DeletedAt) orm.WhereCondition[hasmany.Seller] { + return orm.WhereCondition[hasmany.Seller]{ + Field: "DeletedAt", + Value: v, + } +} +func SellerCompanyId(v orm.UUID) orm.WhereCondition[hasmany.Seller] { + return orm.WhereCondition[hasmany.Seller]{ + Field: "CompanyID", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/hasone_city.go b/cmd/gen/conditions/tests/results/hasone_city.go new file mode 100644 index 0000000..5594228 --- /dev/null +++ b/cmd/gen/conditions/tests/results/hasone_city.go @@ -0,0 +1,40 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + hasone "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasone" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func CityId(v orm.UUID) orm.WhereCondition[hasone.City] { + return orm.WhereCondition[hasone.City]{ + Field: "ID", + Value: v, + } +} +func CityCreatedAt(v time.Time) orm.WhereCondition[hasone.City] { + return orm.WhereCondition[hasone.City]{ + Field: "CreatedAt", + Value: v, + } +} +func CityUpdatedAt(v time.Time) orm.WhereCondition[hasone.City] { + return orm.WhereCondition[hasone.City]{ + Field: "UpdatedAt", + Value: v, + } +} +func CityDeletedAt(v gorm.DeletedAt) orm.WhereCondition[hasone.City] { + return orm.WhereCondition[hasone.City]{ + Field: "DeletedAt", + Value: v, + } +} +func CityCountryId(v orm.UUID) orm.WhereCondition[hasone.City] { + return orm.WhereCondition[hasone.City]{ + Field: "CountryID", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/hasone_country.go b/cmd/gen/conditions/tests/results/hasone_country.go new file mode 100644 index 0000000..7001bdb --- /dev/null +++ b/cmd/gen/conditions/tests/results/hasone_country.go @@ -0,0 +1,48 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + hasone "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasone" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func CountryId(v orm.UUID) orm.WhereCondition[hasone.Country] { + return orm.WhereCondition[hasone.Country]{ + Field: "ID", + Value: v, + } +} +func CountryCreatedAt(v time.Time) orm.WhereCondition[hasone.Country] { + return orm.WhereCondition[hasone.Country]{ + Field: "CreatedAt", + Value: v, + } +} +func CountryUpdatedAt(v time.Time) orm.WhereCondition[hasone.Country] { + return orm.WhereCondition[hasone.Country]{ + Field: "UpdatedAt", + Value: v, + } +} +func CountryDeletedAt(v gorm.DeletedAt) orm.WhereCondition[hasone.Country] { + return orm.WhereCondition[hasone.Country]{ + Field: "DeletedAt", + Value: v, + } +} +func CountryCapital(conditions ...orm.Condition[hasone.City]) orm.Condition[hasone.Country] { + return orm.JoinCondition[hasone.Country, hasone.City]{ + Conditions: conditions, + T1Field: "ID", + T2Field: "CountryID", + } +} +func CityCountry(conditions ...orm.Condition[hasone.Country]) orm.Condition[hasone.City] { + return orm.JoinCondition[hasone.City, hasone.Country]{ + Conditions: conditions, + T1Field: "CountryID", + T2Field: "ID", + } +} diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package1.go b/cmd/gen/conditions/tests/results/multiplepackage_package1.go new file mode 100644 index 0000000..90e793b --- /dev/null +++ b/cmd/gen/conditions/tests/results/multiplepackage_package1.go @@ -0,0 +1,49 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + package1 "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/multiplepackage/package1" + package2 "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/multiplepackage/package2" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func Package1Id(v orm.UUID) orm.WhereCondition[package1.Package1] { + return orm.WhereCondition[package1.Package1]{ + Field: "ID", + Value: v, + } +} +func Package1CreatedAt(v time.Time) orm.WhereCondition[package1.Package1] { + return orm.WhereCondition[package1.Package1]{ + Field: "CreatedAt", + Value: v, + } +} +func Package1UpdatedAt(v time.Time) orm.WhereCondition[package1.Package1] { + return orm.WhereCondition[package1.Package1]{ + Field: "UpdatedAt", + Value: v, + } +} +func Package1DeletedAt(v gorm.DeletedAt) orm.WhereCondition[package1.Package1] { + return orm.WhereCondition[package1.Package1]{ + Field: "DeletedAt", + Value: v, + } +} +func Package1Package2(conditions ...orm.Condition[package2.Package2]) orm.Condition[package1.Package1] { + return orm.JoinCondition[package1.Package1, package2.Package2]{ + Conditions: conditions, + T1Field: "ID", + T2Field: "Package1ID", + } +} +func Package2Package1(conditions ...orm.Condition[package1.Package1]) orm.Condition[package2.Package2] { + return orm.JoinCondition[package2.Package2, package1.Package1]{ + Conditions: conditions, + T1Field: "Package1ID", + T2Field: "ID", + } +} diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey.go b/cmd/gen/conditions/tests/results/overrideforeignkey.go new file mode 100644 index 0000000..ab713c0 --- /dev/null +++ b/cmd/gen/conditions/tests/results/overrideforeignkey.go @@ -0,0 +1,47 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + overrideforeignkey "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overrideforeignkey" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func BicycleId(v orm.UUID) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.WhereCondition[overrideforeignkey.Bicycle]{ + Field: "ID", + Value: v, + } +} +func BicycleCreatedAt(v time.Time) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.WhereCondition[overrideforeignkey.Bicycle]{ + Field: "CreatedAt", + Value: v, + } +} +func BicycleUpdatedAt(v time.Time) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.WhereCondition[overrideforeignkey.Bicycle]{ + Field: "UpdatedAt", + Value: v, + } +} +func BicycleDeletedAt(v gorm.DeletedAt) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.WhereCondition[overrideforeignkey.Bicycle]{ + Field: "DeletedAt", + Value: v, + } +} +func BicycleOwner(conditions ...orm.Condition[overrideforeignkey.Person]) orm.Condition[overrideforeignkey.Bicycle] { + return orm.JoinCondition[overrideforeignkey.Bicycle, overrideforeignkey.Person]{ + Conditions: conditions, + T1Field: "OwnerSomethingID", + T2Field: "ID", + } +} +func BicycleOwnerSomethingId(v string) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.WhereCondition[overrideforeignkey.Bicycle]{ + Field: "OwnerSomethingID", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go new file mode 100644 index 0000000..7181c81 --- /dev/null +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go @@ -0,0 +1,48 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + overrideforeignkeyinverse "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overrideforeignkeyinverse" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func UserId(v orm.UUID) orm.WhereCondition[overrideforeignkeyinverse.User] { + return orm.WhereCondition[overrideforeignkeyinverse.User]{ + Field: "ID", + Value: v, + } +} +func UserCreatedAt(v time.Time) orm.WhereCondition[overrideforeignkeyinverse.User] { + return orm.WhereCondition[overrideforeignkeyinverse.User]{ + Field: "CreatedAt", + Value: v, + } +} +func UserUpdatedAt(v time.Time) orm.WhereCondition[overrideforeignkeyinverse.User] { + return orm.WhereCondition[overrideforeignkeyinverse.User]{ + Field: "UpdatedAt", + Value: v, + } +} +func UserDeletedAt(v gorm.DeletedAt) orm.WhereCondition[overrideforeignkeyinverse.User] { + return orm.WhereCondition[overrideforeignkeyinverse.User]{ + Field: "DeletedAt", + Value: v, + } +} +func UserCreditCard(conditions ...orm.Condition[overrideforeignkeyinverse.CreditCard]) orm.Condition[overrideforeignkeyinverse.User] { + return orm.JoinCondition[overrideforeignkeyinverse.User, overrideforeignkeyinverse.CreditCard]{ + Conditions: conditions, + T1Field: "ID", + T2Field: "UserReference", + } +} +func CreditCardUser(conditions ...orm.Condition[overrideforeignkeyinverse.User]) orm.Condition[overrideforeignkeyinverse.CreditCard] { + return orm.JoinCondition[overrideforeignkeyinverse.CreditCard, overrideforeignkeyinverse.User]{ + Conditions: conditions, + T1Field: "UserReference", + T2Field: "ID", + } +} diff --git a/cmd/gen/conditions/tests/results/overridereferences.go b/cmd/gen/conditions/tests/results/overridereferences.go new file mode 100644 index 0000000..f0ec909 --- /dev/null +++ b/cmd/gen/conditions/tests/results/overridereferences.go @@ -0,0 +1,47 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + overridereferences "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overridereferences" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func PhoneId(v orm.UUID) orm.WhereCondition[overridereferences.Phone] { + return orm.WhereCondition[overridereferences.Phone]{ + Field: "ID", + Value: v, + } +} +func PhoneCreatedAt(v time.Time) orm.WhereCondition[overridereferences.Phone] { + return orm.WhereCondition[overridereferences.Phone]{ + Field: "CreatedAt", + Value: v, + } +} +func PhoneUpdatedAt(v time.Time) orm.WhereCondition[overridereferences.Phone] { + return orm.WhereCondition[overridereferences.Phone]{ + Field: "UpdatedAt", + Value: v, + } +} +func PhoneDeletedAt(v gorm.DeletedAt) orm.WhereCondition[overridereferences.Phone] { + return orm.WhereCondition[overridereferences.Phone]{ + Field: "DeletedAt", + Value: v, + } +} +func PhoneBrand(conditions ...orm.Condition[overridereferences.Brand]) orm.Condition[overridereferences.Phone] { + return orm.JoinCondition[overridereferences.Phone, overridereferences.Brand]{ + Conditions: conditions, + T1Field: "BrandName", + T2Field: "Name", + } +} +func PhoneBrandName(v string) orm.WhereCondition[overridereferences.Phone] { + return orm.WhereCondition[overridereferences.Phone]{ + Field: "BrandName", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse.go b/cmd/gen/conditions/tests/results/overridereferencesinverse.go new file mode 100644 index 0000000..f0433cb --- /dev/null +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse.go @@ -0,0 +1,54 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + overridereferencesinverse "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overridereferencesinverse" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func ComputerId(v orm.UUID) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.WhereCondition[overridereferencesinverse.Computer]{ + Field: "ID", + Value: v, + } +} +func ComputerCreatedAt(v time.Time) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.WhereCondition[overridereferencesinverse.Computer]{ + Field: "CreatedAt", + Value: v, + } +} +func ComputerUpdatedAt(v time.Time) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.WhereCondition[overridereferencesinverse.Computer]{ + Field: "UpdatedAt", + Value: v, + } +} +func ComputerDeletedAt(v gorm.DeletedAt) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.WhereCondition[overridereferencesinverse.Computer]{ + Field: "DeletedAt", + Value: v, + } +} +func ComputerName(v string) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.WhereCondition[overridereferencesinverse.Computer]{ + Field: "Name", + Value: v, + } +} +func ComputerProcessor(conditions ...orm.Condition[overridereferencesinverse.Processor]) orm.Condition[overridereferencesinverse.Computer] { + return orm.JoinCondition[overridereferencesinverse.Computer, overridereferencesinverse.Processor]{ + Conditions: conditions, + T1Field: "Name", + T2Field: "ComputerName", + } +} +func ProcessorComputer(conditions ...orm.Condition[overridereferencesinverse.Computer]) orm.Condition[overridereferencesinverse.Processor] { + return orm.JoinCondition[overridereferencesinverse.Processor, overridereferencesinverse.Computer]{ + Conditions: conditions, + T1Field: "ComputerName", + T2Field: "Name", + } +} diff --git a/cmd/gen/conditions/tests/results/selfreferential.go b/cmd/gen/conditions/tests/results/selfreferential.go new file mode 100644 index 0000000..78f79f3 --- /dev/null +++ b/cmd/gen/conditions/tests/results/selfreferential.go @@ -0,0 +1,47 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + selfreferential "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/selfreferential" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func EmployeeId(v orm.UUID) orm.WhereCondition[selfreferential.Employee] { + return orm.WhereCondition[selfreferential.Employee]{ + Field: "ID", + Value: v, + } +} +func EmployeeCreatedAt(v time.Time) orm.WhereCondition[selfreferential.Employee] { + return orm.WhereCondition[selfreferential.Employee]{ + Field: "CreatedAt", + Value: v, + } +} +func EmployeeUpdatedAt(v time.Time) orm.WhereCondition[selfreferential.Employee] { + return orm.WhereCondition[selfreferential.Employee]{ + Field: "UpdatedAt", + Value: v, + } +} +func EmployeeDeletedAt(v gorm.DeletedAt) orm.WhereCondition[selfreferential.Employee] { + return orm.WhereCondition[selfreferential.Employee]{ + Field: "DeletedAt", + Value: v, + } +} +func EmployeeBoss(conditions ...orm.Condition[selfreferential.Employee]) orm.Condition[selfreferential.Employee] { + return orm.JoinCondition[selfreferential.Employee, selfreferential.Employee]{ + Conditions: conditions, + T1Field: "BossID", + T2Field: "ID", + } +} +func EmployeeBossId(v orm.UUID) orm.WhereCondition[selfreferential.Employee] { + return orm.WhereCondition[selfreferential.Employee]{ + Field: "BossID", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/uintmodel.go b/cmd/gen/conditions/tests/results/uintmodel.go new file mode 100644 index 0000000..ae351ac --- /dev/null +++ b/cmd/gen/conditions/tests/results/uintmodel.go @@ -0,0 +1,34 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + uintmodel "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/uintmodel" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func UintModelId(v uint) orm.WhereCondition[uintmodel.UintModel] { + return orm.WhereCondition[uintmodel.UintModel]{ + Field: "ID", + Value: v, + } +} +func UintModelCreatedAt(v time.Time) orm.WhereCondition[uintmodel.UintModel] { + return orm.WhereCondition[uintmodel.UintModel]{ + Field: "CreatedAt", + Value: v, + } +} +func UintModelUpdatedAt(v time.Time) orm.WhereCondition[uintmodel.UintModel] { + return orm.WhereCondition[uintmodel.UintModel]{ + Field: "UpdatedAt", + Value: v, + } +} +func UintModelDeletedAt(v gorm.DeletedAt) orm.WhereCondition[uintmodel.UintModel] { + return orm.WhereCondition[uintmodel.UintModel]{ + Field: "DeletedAt", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/results/uuidmodel.go b/cmd/gen/conditions/tests/results/uuidmodel.go new file mode 100644 index 0000000..82cbaba --- /dev/null +++ b/cmd/gen/conditions/tests/results/uuidmodel.go @@ -0,0 +1,34 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + uuidmodel "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/uuidmodel" + orm "github.com/ditrit/badaas/orm" + gorm "gorm.io/gorm" + "time" +) + +func UUIDModelId(v orm.UUID) orm.WhereCondition[uuidmodel.UUIDModel] { + return orm.WhereCondition[uuidmodel.UUIDModel]{ + Field: "ID", + Value: v, + } +} +func UUIDModelCreatedAt(v time.Time) orm.WhereCondition[uuidmodel.UUIDModel] { + return orm.WhereCondition[uuidmodel.UUIDModel]{ + Field: "CreatedAt", + Value: v, + } +} +func UUIDModelUpdatedAt(v time.Time) orm.WhereCondition[uuidmodel.UUIDModel] { + return orm.WhereCondition[uuidmodel.UUIDModel]{ + Field: "UpdatedAt", + Value: v, + } +} +func UUIDModelDeletedAt(v gorm.DeletedAt) orm.WhereCondition[uuidmodel.UUIDModel] { + return orm.WhereCondition[uuidmodel.UUIDModel]{ + Field: "DeletedAt", + Value: v, + } +} diff --git a/cmd/gen/conditions/tests/selfreferential/selfreferential.go b/cmd/gen/conditions/tests/selfreferential/selfreferential.go new file mode 100644 index 0000000..3223518 --- /dev/null +++ b/cmd/gen/conditions/tests/selfreferential/selfreferential.go @@ -0,0 +1,10 @@ +package selfreferential + +import "github.com/ditrit/badaas/orm" + +type Employee struct { + orm.UUIDModel + + Boss *Employee `gorm:"constraint:OnDelete:SET NULL;"` // Self-Referential Has One (Employee 0..* -> 0..1 Employee) + BossID *orm.UUID +} diff --git a/cmd/gen/conditions/tests/uintmodel/uintmodel.go b/cmd/gen/conditions/tests/uintmodel/uintmodel.go new file mode 100644 index 0000000..39046fc --- /dev/null +++ b/cmd/gen/conditions/tests/uintmodel/uintmodel.go @@ -0,0 +1,7 @@ +package uintmodel + +import "github.com/ditrit/badaas/orm" + +type UintModel struct { + orm.UIntModel +} diff --git a/cmd/gen/conditions/tests/uuidmodel/uuidmodel.go b/cmd/gen/conditions/tests/uuidmodel/uuidmodel.go new file mode 100644 index 0000000..4df2fdc --- /dev/null +++ b/cmd/gen/conditions/tests/uuidmodel/uuidmodel.go @@ -0,0 +1,7 @@ +package uuidmodel + +import "github.com/ditrit/badaas/orm" + +type UUIDModel struct { + orm.UUIDModel +} diff --git a/go.mod b/go.mod index a2d9fdd..4dfffda 100644 --- a/go.mod +++ b/go.mod @@ -4,36 +4,54 @@ go 1.18 require ( github.com/dave/jennifer v1.6.1 + github.com/ditrit/badaas v0.0.0-20230801092312-f93496a71501 github.com/ditrit/verdeter v0.4.0 github.com/elliotchance/pie/v2 v2.7.0 github.com/ettle/strcase v0.1.1 github.com/fatih/structtag v1.2.0 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.7.0 - github.com/spf13/viper v1.15.0 - github.com/stretchr/testify v1.8.1 + github.com/spf13/viper v1.16.0 + github.com/stretchr/testify v1.8.4 golang.org/x/tools v0.11.1 + gorm.io/gorm v1.25.1 + gotest.tools v2.2.0+incompatible ) require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/uuid v1.3.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/pgx/v5 v5.3.1 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/pelletier/go-toml/v2 v2.0.7 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/spf13/afero v1.9.5 // indirect - github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cast v1.5.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.4.2 // indirect + go.uber.org/atomic v1.11.0 // indirect + go.uber.org/dig v1.17.0 // indirect + go.uber.org/fx v1.19.3 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.24.0 // indirect + golang.org/x/crypto v0.9.0 // indirect golang.org/x/exp v0.0.0-20220321173239-a90fa8a75705 // indirect golang.org/x/mod v0.12.0 // indirect golang.org/x/sys v0.10.0 // indirect golang.org/x/text v0.9.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + gorm.io/driver/postgres v1.5.2 // indirect ) diff --git a/go.sum b/go.sum index 105afd4..c4bf298 100644 --- a/go.sum +++ b/go.sum @@ -38,6 +38,7 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -52,6 +53,8 @@ github.com/dave/jennifer v1.6.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ditrit/badaas v0.0.0-20230801092312-f93496a71501 h1:pnPSbgcYboxR8SLQg49yZuxRIL6Fs3+YAGfMnMEuqV4= +github.com/ditrit/badaas v0.0.0-20230801092312-f93496a71501/go.mod h1:FS3I+obfV7FiYp3tUbZObckOclqmEPtGwTXsGOk8WJs= github.com/ditrit/verdeter v0.4.0 h1:DzEOFauuXEGNQYP6OgYtHwEyb3w9riem99u0xE/l7+o= github.com/ditrit/verdeter v0.4.0/go.mod h1:sKpWuOvYqNabLN4aNXqeBhcWpt7nf0frwqk0B5M6ax0= github.com/elliotchance/pie/v2 v2.7.0 h1:FqoIKg4uj0G/CrLGuMS9ejnFKa92lxE1dEgBD3pShXg= @@ -66,7 +69,7 @@ github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -109,6 +112,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -124,6 +128,8 @@ github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= @@ -135,12 +141,22 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.3.1 h1:Fcr8QJ1ZeLi5zsPZqQeUZhNhxfkkKBOgJuYkJHoBOtU= +github.com/jackc/pgx/v5 v5.3.1/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHozM/8= +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/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -150,41 +166,44 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/pelletier/go-toml/v2 v2.0.7 h1:muncTPStnKRos5dpVKULv2FVd4bMOhNePj9CjgDb8Us= -github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.15.0 h1:js3yy885G8xwJa6iOISGFwd+qlUo5AvyXb7CiihdtiU= -github.com/spf13/viper v1.15.0/go.mod h1:fFcTBJxvhhzSJiZy8n+PeW6t8l+KeT/uTARa0jHOQLA= +github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= +github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -197,6 +216,17 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +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.19.3 h1:YqMRE4+2IepTYCMOvXqQpRa+QAVdiSTnsHU4XNWBceA= +go.uber.org/fx v1.19.3/go.mod h1:w2HrQg26ql9fLK7hlBiZ6JsRUKV+Lj/atT1KCjT8YhM= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +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.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -204,6 +234,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -488,8 +520,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -497,6 +529,12 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 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/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0= +gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8= +gorm.io/gorm v1.25.1 h1:nsSALe5Pr+cM3V1qwwQ7rOkw+6UeLrX5O4v3llhHa64= +gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/sonar-project.properties b/sonar-project.properties index b82bf90..fa62460 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -9,5 +9,5 @@ sonar.sources=. # so it is not a safety risk even if sonar marks it as such. sonar.exclusions=**/*_test.go,mocks/***,vendor/***,cmd/gen/docker/api/Dockerfile sonar.tests=. -sonar.test.inclusions=**/*_test.go +sonar.test.inclusions=**/*_test.go,cmd/gen/conditions/tests/*** sonar.go.coverage.reportPaths=coverage_unit.out/coverage_unit.out \ No newline at end of file From 379f045c208a806f1dea2d11cd5523d5312a182a Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Tue, 1 Aug 2023 12:22:16 +0200 Subject: [PATCH 10/31] update docs --- README.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f6732a1..e933bcb 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,8 @@ - [Install with go install](#install-with-go-install) - [Build from sources](#build-from-sources) - [Commands](#commands) - - [badaas-cli gen](#badaas-cli-gen) + - [badaas-cli gen docker](#badaas-cli-gen-docker) + - [badaas-cli gen conditions](#badaas-cli-gen-conditions) - [Contributing](#contributing) - [License](#license) @@ -54,13 +55,13 @@ For more information about the functionality provided and how to use each comman badaas-cli help [command] ``` -### badaas-cli gen +### badaas-cli gen docker -gen is the command you can use to generate the files and configurations necessary for your project to use BadAss in a simple way. +gen docker is the command you can use to generate the files and configurations necessary for your project to use badaas in a simple way. -`gen` will generate the docker and configuration files needed to run the application in the `badaas/docker` and `badaas/config` folders respectively. +`gen docker` will generate the docker and configuration files needed to run the application in the `badaas/docker` and `badaas/config` folders respectively. -All these files can be modified in case you need different values than those provided by default. For more information about the configuration head to [configuration docs](../../configuration.md). +All these files can be modified in case you need different values than those provided by default. For more information about the configuration head to [configuration docs](github.com/ditrit/badaas/configuration.md). A Makefile will be generated for the execution of a badaas server, with the command: @@ -68,6 +69,12 @@ A Makefile will be generated for the execution of a badaas server, with the comm make badaas_run ``` +### badaas-cli gen conditions + +gen conditions is the command you can use to generate conditions to query your objects using badaas-orm. For each BaDaaS Model found in the input packages a file containing all possible Conditions on that object will be generated, allowing you to use badaas-orm. + +Its use is recommended through `go generate`. To see an example of how to do it click [here](https://github.com/ditrit/badaa-orm-example/blob/main/standalone/conditions/orm.go). + ## Contributing See [this section](./CONTRIBUTING.md). From 92c4c5edc683a4b6366d43ea0f1064b4d101428c Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Tue, 1 Aug 2023 12:22:27 +0200 Subject: [PATCH 11/31] update changelog --- changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.md b/changelog.md index 5938022..53a520c 100644 --- a/changelog.md +++ b/changelog.md @@ -10,5 +10,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Add generation of docker and configuration files +- Add gen conditions to generate the conditions for the badaas' compilable query system. [unreleased]: https://github.com/ditrit/badaas-cli/blob/main/changelog.md#unreleased \ No newline at end of file From 40fadc95270ecae869094e4220372c3034814745 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Wed, 2 Aug 2023 13:46:13 +0200 Subject: [PATCH 12/31] refactor: get type to avoid type.type --- cmd/gen/conditions/condition.go | 4 ++-- cmd/gen/conditions/field.go | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index 5c57391..0d0c3b3 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -32,7 +32,7 @@ func NewCondition(destPkg string, objectType Type, field Field) *Condition { // Generate the condition between the object and the field func (condition *Condition) generate(objectType Type, field Field) { - switch fieldType := field.Type.Type.(type) { + switch fieldType := field.GetType().(type) { case *types.Basic: // the field is a basic type (string, int, etc) // adapt param to that type and generate a WhereCondition @@ -69,7 +69,7 @@ func (condition *Condition) generate(objectType Type, field Field) { // Generate condition between the object and the field when the field is a slice func (condition *Condition) generateForSlice(objectType Type, field Field) { - switch elemType := field.Type.Type.(type) { + switch elemType := field.GetType().(type) { case *types.Basic: // slice of basic types ([]string, []int, etc.) // the only one supported directly by gorm is []byte diff --git a/cmd/gen/conditions/field.go b/cmd/gen/conditions/field.go index 42537a2..b43069f 100644 --- a/cmd/gen/conditions/field.go +++ b/cmd/gen/conditions/field.go @@ -60,6 +60,10 @@ func (field Field) getRelatedTypeFKAttribute(structName string) string { return structName + "ID" } +func (field Field) GetType() types.Type { + return field.Type.Type +} + // Get field's type full string (pkg + name) func (field Field) TypeString() string { return field.Type.String() From 921c8c51fdb0565c03995680c24933a212b3970f Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Wed, 2 Aug 2023 13:54:12 +0200 Subject: [PATCH 13/31] add support for operators in conditions --- cmd/gen/conditions/condition.go | 82 ++++---- cmd/gen/conditions/jenParam.go | 59 +++--- .../conditions/tests/results/basicpointers.go | 176 +++++++++--------- .../conditions/tests/results/basicslices.go | 176 +++++++++--------- .../tests/results/basicslicespointer.go | 176 +++++++++--------- .../conditions/tests/results/basictypes.go | 176 +++++++++--------- .../tests/results/belongsto_owned.go | 40 ++-- .../tests/results/belongsto_owner.go | 32 ++-- .../tests/results/columndefinition.go | 40 ++-- .../conditions/tests/results/customtype.go | 40 ++-- .../conditions/tests/results/goembedded.go | 40 ++-- .../conditions/tests/results/gormembedded.go | 38 ++-- .../tests/results/hasmany_company.go | 32 ++-- .../tests/results/hasmany_seller.go | 40 ++-- .../conditions/tests/results/hasone_city.go | 40 ++-- .../tests/results/hasone_country.go | 32 ++-- .../tests/results/multiplepackage_package1.go | 32 ++-- .../tests/results/overrideforeignkey.go | 40 ++-- .../results/overrideforeignkeyinverse.go | 32 ++-- .../tests/results/overridereferences.go | 40 ++-- .../results/overridereferencesinverse.go | 40 ++-- .../tests/results/selfreferential.go | 40 ++-- cmd/gen/conditions/tests/results/uintmodel.go | 32 ++-- cmd/gen/conditions/tests/results/uuidmodel.go | 32 ++-- go.mod | 2 +- go.sum | 4 +- 26 files changed, 773 insertions(+), 740 deletions(-) diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index 0d0c3b3..b901411 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -4,15 +4,19 @@ import ( "go/types" "github.com/dave/jennifer/jen" - "github.com/ditrit/badaas-cli/cmd/log" "github.com/ettle/strcase" + + "github.com/ditrit/badaas-cli/cmd/log" ) const ( // badaas/orm/condition.go badaasORMCondition = "Condition" + badaasORMFieldCondition = "FieldCondition" badaasORMWhereCondition = "WhereCondition" badaasORMJoinCondition = "JoinCondition" + // badaas/orm/operator.go + badaasORMOperator = "Operator" ) type Condition struct { @@ -104,26 +108,7 @@ func (condition *Condition) generateForNamedType(objectType Type, field Field) { _, err := field.Type.BadaasModelStruct() if err == nil { - // field is a Badaas Model - hasFK, _ := objectType.HasFK(field) - if hasFK { - // belongsTo relation - condition.generateJoinWithFK( - objectType, - field, - ) - } else { - // hasOne relation - condition.generateJoinWithoutFK( - objectType, - field, - ) - - condition.generateInverseJoin( - objectType, - field, - ) - } + condition.generateForBadaasModel(objectType, field) } else { // field is not a Badaas Model if field.Type.IsGormCustomType() || field.TypeString() == "time.Time" { @@ -140,33 +125,66 @@ func (condition *Condition) generateForNamedType(objectType Type, field Field) { } } +// Generate condition between object and field when the field is a Badaas Model +func (condition *Condition) generateForBadaasModel(objectType Type, field Field) { + hasFK, _ := objectType.HasFK(field) + if hasFK { + // belongsTo relation + condition.generateJoinWithFK( + objectType, + field, + ) + } else { + // hasOne relation + condition.generateJoinWithoutFK( + objectType, + field, + ) + + condition.generateInverseJoin( + objectType, + field, + ) + } +} + // Generate a WhereCondition between object and field func (condition *Condition) generateWhere(objectType Type, field Field) { + objectTypeQual := jen.Qual( + getRelativePackagePath(condition.destPkg, objectType), + objectType.Name(), + ) + + fieldCondition := jen.Qual( + badaasORMPath, badaasORMFieldCondition, + ).Types( + objectTypeQual, + condition.param.GenericType(), + ) + whereCondition := jen.Qual( badaasORMPath, badaasORMWhereCondition, ).Types( - jen.Qual( - getRelativePackagePath(condition.destPkg, objectType), - objectType.Name(), - ), + objectTypeQual, ) conditionName := getConditionName(objectType, field) log.Logger.Debugf("Generated %q", conditionName) - params := jen.Dict{ - jen.Id("Value"): jen.Id("v"), + conditionValues := jen.Dict{ + jen.Id("Operator"): jen.Id("operator"), } columnName := field.getColumnName() + if columnName != "" { - params[jen.Id("Column")] = jen.Lit(columnName) + conditionValues[jen.Id("Column")] = jen.Lit(columnName) } else { - params[jen.Id("Field")] = jen.Lit(field.Name) + conditionValues[jen.Id("Field")] = jen.Lit(field.Name) } columnPrefix := field.ColumnPrefix if columnPrefix != "" { - params[jen.Id("ColumnPrefix")] = jen.Lit(columnPrefix) + conditionValues[jen.Id("ColumnPrefix")] = jen.Lit(columnPrefix) } condition.codes = append( @@ -176,10 +194,10 @@ func (condition *Condition) generateWhere(objectType Type, field Field) { ).Params( condition.param.Statement(), ).Add( - whereCondition.Clone(), + whereCondition, ).Block( jen.Return( - whereCondition.Clone().Values(params), + fieldCondition.Clone().Values(conditionValues), ), ), ) diff --git a/cmd/gen/conditions/jenParam.go b/cmd/gen/conditions/jenParam.go index 890a0ce..486a866 100644 --- a/cmd/gen/conditions/jenParam.go +++ b/cmd/gen/conditions/jenParam.go @@ -1,70 +1,85 @@ package conditions import ( + "errors" "go/types" "github.com/dave/jennifer/jen" ) type JenParam struct { - statement *jen.Statement + statement *jen.Statement + internalType *jen.Statement } func NewJenParam() *JenParam { return &JenParam{ - statement: jen.Id("v"), + statement: jen.Id("operator").Qual( + badaasORMPath, badaasORMOperator, + ), + internalType: &jen.Statement{}, } } func (param JenParam) Statement() *jen.Statement { - return param.statement + return param.statement.Types(param.internalType) +} + +func (param JenParam) GenericType() *jen.Statement { + return param.internalType } func (param JenParam) ToBasicKind(basicType *types.Basic) { switch basicType.Kind() { case types.Bool: - param.statement.Bool() + param.internalType.Bool() case types.Int: - param.statement.Int() + param.internalType.Int() case types.Int8: - param.statement.Int8() + param.internalType.Int8() case types.Int16: - param.statement.Int16() + param.internalType.Int16() case types.Int32: - param.statement.Int32() + param.internalType.Int32() case types.Int64: - param.statement.Int64() + param.internalType.Int64() case types.Uint: - param.statement.Uint() + param.internalType.Uint() case types.Uint8: - param.statement.Uint8() + param.internalType.Uint8() case types.Uint16: - param.statement.Uint16() + param.internalType.Uint16() case types.Uint32: - param.statement.Uint32() + param.internalType.Uint32() case types.Uint64: - param.statement.Uint64() + param.internalType.Uint64() case types.Uintptr: - param.statement.Uintptr() + param.internalType.Uintptr() case types.Float32: - param.statement.Float32() + param.internalType.Float32() case types.Float64: - param.statement.Float64() + param.internalType.Float64() case types.Complex64: - param.statement.Complex64() + param.internalType.Complex64() case types.Complex128: - param.statement.Complex128() + param.internalType.Complex128() case types.String: - param.statement.String() + param.internalType.String() + case types.Invalid, types.UnsafePointer, + types.UntypedBool, types.UntypedInt, + types.UntypedRune, types.UntypedFloat, + types.UntypedComplex, types.UntypedString, + types.UntypedNil: + panic(errors.New("unreachable! untyped types can't be inside a struct")) } } func (param JenParam) ToSlice() { - param.statement.Index() + param.internalType.Index() } func (param JenParam) ToCustomType(destPkg string, typeV Type) { - param.statement.Qual( + param.internalType.Qual( getRelativePackagePath(destPkg, typeV), typeV.Name(), ) diff --git a/cmd/gen/conditions/tests/results/basicpointers.go b/cmd/gen/conditions/tests/results/basicpointers.go index 0aaa477..9ae6ee4 100644 --- a/cmd/gen/conditions/tests/results/basicpointers.go +++ b/cmd/gen/conditions/tests/results/basicpointers.go @@ -8,135 +8,135 @@ import ( "time" ) -func BasicPointersId(v orm.UUID) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "ID", - Value: v, +func BasicPointersId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func BasicPointersCreatedAt(v time.Time) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "CreatedAt", - Value: v, +func BasicPointersCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func BasicPointersUpdatedAt(v time.Time) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "UpdatedAt", - Value: v, +func BasicPointersUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func BasicPointersDeletedAt(v gorm.DeletedAt) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "DeletedAt", - Value: v, +func BasicPointersDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func BasicPointersBool(v bool) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Bool", - Value: v, +func BasicPointersBool(operator orm.Operator[bool]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, bool]{ + Field: "Bool", + Operator: operator, } } -func BasicPointersInt(v int) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Int", - Value: v, +func BasicPointersInt(operator orm.Operator[int]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, int]{ + Field: "Int", + Operator: operator, } } -func BasicPointersInt8(v int8) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Int8", - Value: v, +func BasicPointersInt8(operator orm.Operator[int8]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, int8]{ + Field: "Int8", + Operator: operator, } } -func BasicPointersInt16(v int16) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Int16", - Value: v, +func BasicPointersInt16(operator orm.Operator[int16]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, int16]{ + Field: "Int16", + Operator: operator, } } -func BasicPointersInt32(v int32) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Int32", - Value: v, +func BasicPointersInt32(operator orm.Operator[int32]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, int32]{ + Field: "Int32", + Operator: operator, } } -func BasicPointersInt64(v int64) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Int64", - Value: v, +func BasicPointersInt64(operator orm.Operator[int64]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, int64]{ + Field: "Int64", + Operator: operator, } } -func BasicPointersUInt(v uint) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "UInt", - Value: v, +func BasicPointersUInt(operator orm.Operator[uint]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, uint]{ + Field: "UInt", + Operator: operator, } } -func BasicPointersUInt8(v uint8) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "UInt8", - Value: v, +func BasicPointersUInt8(operator orm.Operator[uint8]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, uint8]{ + Field: "UInt8", + Operator: operator, } } -func BasicPointersUInt16(v uint16) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "UInt16", - Value: v, +func BasicPointersUInt16(operator orm.Operator[uint16]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, uint16]{ + Field: "UInt16", + Operator: operator, } } -func BasicPointersUInt32(v uint32) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "UInt32", - Value: v, +func BasicPointersUInt32(operator orm.Operator[uint32]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, uint32]{ + Field: "UInt32", + Operator: operator, } } -func BasicPointersUInt64(v uint64) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "UInt64", - Value: v, +func BasicPointersUInt64(operator orm.Operator[uint64]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, uint64]{ + Field: "UInt64", + Operator: operator, } } -func BasicPointersUIntptr(v uintptr) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "UIntptr", - Value: v, +func BasicPointersUIntptr(operator orm.Operator[uintptr]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, uintptr]{ + Field: "UIntptr", + Operator: operator, } } -func BasicPointersFloat32(v float32) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Float32", - Value: v, +func BasicPointersFloat32(operator orm.Operator[float32]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, float32]{ + Field: "Float32", + Operator: operator, } } -func BasicPointersFloat64(v float64) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Float64", - Value: v, +func BasicPointersFloat64(operator orm.Operator[float64]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, float64]{ + Field: "Float64", + Operator: operator, } } -func BasicPointersComplex64(v complex64) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Complex64", - Value: v, +func BasicPointersComplex64(operator orm.Operator[complex64]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, complex64]{ + Field: "Complex64", + Operator: operator, } } -func BasicPointersComplex128(v complex128) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Complex128", - Value: v, +func BasicPointersComplex128(operator orm.Operator[complex128]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, complex128]{ + Field: "Complex128", + Operator: operator, } } -func BasicPointersString(v string) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "String", - Value: v, +func BasicPointersString(operator orm.Operator[string]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, string]{ + Field: "String", + Operator: operator, } } -func BasicPointersByte(v uint8) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.WhereCondition[basicpointers.BasicPointers]{ - Field: "Byte", - Value: v, +func BasicPointersByte(operator orm.Operator[uint8]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, uint8]{ + Field: "Byte", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/basicslices.go b/cmd/gen/conditions/tests/results/basicslices.go index 2db14c1..863d0ec 100644 --- a/cmd/gen/conditions/tests/results/basicslices.go +++ b/cmd/gen/conditions/tests/results/basicslices.go @@ -8,135 +8,135 @@ import ( "time" ) -func BasicSlicesId(v orm.UUID) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "ID", - Value: v, +func BasicSlicesId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func BasicSlicesCreatedAt(v time.Time) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "CreatedAt", - Value: v, +func BasicSlicesCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func BasicSlicesUpdatedAt(v time.Time) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "UpdatedAt", - Value: v, +func BasicSlicesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func BasicSlicesDeletedAt(v gorm.DeletedAt) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "DeletedAt", - Value: v, +func BasicSlicesDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func BasicSlicesBool(v []bool) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Bool", - Value: v, +func BasicSlicesBool(operator orm.Operator[[]bool]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []bool]{ + Field: "Bool", + Operator: operator, } } -func BasicSlicesInt(v []int) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Int", - Value: v, +func BasicSlicesInt(operator orm.Operator[[]int]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []int]{ + Field: "Int", + Operator: operator, } } -func BasicSlicesInt8(v []int8) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Int8", - Value: v, +func BasicSlicesInt8(operator orm.Operator[[]int8]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []int8]{ + Field: "Int8", + Operator: operator, } } -func BasicSlicesInt16(v []int16) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Int16", - Value: v, +func BasicSlicesInt16(operator orm.Operator[[]int16]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []int16]{ + Field: "Int16", + Operator: operator, } } -func BasicSlicesInt32(v []int32) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Int32", - Value: v, +func BasicSlicesInt32(operator orm.Operator[[]int32]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []int32]{ + Field: "Int32", + Operator: operator, } } -func BasicSlicesInt64(v []int64) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Int64", - Value: v, +func BasicSlicesInt64(operator orm.Operator[[]int64]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []int64]{ + Field: "Int64", + Operator: operator, } } -func BasicSlicesUInt(v []uint) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "UInt", - Value: v, +func BasicSlicesUInt(operator orm.Operator[[]uint]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []uint]{ + Field: "UInt", + Operator: operator, } } -func BasicSlicesUInt8(v []uint8) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "UInt8", - Value: v, +func BasicSlicesUInt8(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []uint8]{ + Field: "UInt8", + Operator: operator, } } -func BasicSlicesUInt16(v []uint16) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "UInt16", - Value: v, +func BasicSlicesUInt16(operator orm.Operator[[]uint16]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []uint16]{ + Field: "UInt16", + Operator: operator, } } -func BasicSlicesUInt32(v []uint32) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "UInt32", - Value: v, +func BasicSlicesUInt32(operator orm.Operator[[]uint32]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []uint32]{ + Field: "UInt32", + Operator: operator, } } -func BasicSlicesUInt64(v []uint64) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "UInt64", - Value: v, +func BasicSlicesUInt64(operator orm.Operator[[]uint64]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []uint64]{ + Field: "UInt64", + Operator: operator, } } -func BasicSlicesUIntptr(v []uintptr) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "UIntptr", - Value: v, +func BasicSlicesUIntptr(operator orm.Operator[[]uintptr]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []uintptr]{ + Field: "UIntptr", + Operator: operator, } } -func BasicSlicesFloat32(v []float32) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Float32", - Value: v, +func BasicSlicesFloat32(operator orm.Operator[[]float32]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []float32]{ + Field: "Float32", + Operator: operator, } } -func BasicSlicesFloat64(v []float64) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Float64", - Value: v, +func BasicSlicesFloat64(operator orm.Operator[[]float64]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []float64]{ + Field: "Float64", + Operator: operator, } } -func BasicSlicesComplex64(v []complex64) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Complex64", - Value: v, +func BasicSlicesComplex64(operator orm.Operator[[]complex64]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []complex64]{ + Field: "Complex64", + Operator: operator, } } -func BasicSlicesComplex128(v []complex128) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Complex128", - Value: v, +func BasicSlicesComplex128(operator orm.Operator[[]complex128]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []complex128]{ + Field: "Complex128", + Operator: operator, } } -func BasicSlicesString(v []string) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "String", - Value: v, +func BasicSlicesString(operator orm.Operator[[]string]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []string]{ + Field: "String", + Operator: operator, } } -func BasicSlicesByte(v []uint8) orm.WhereCondition[basicslices.BasicSlices] { - return orm.WhereCondition[basicslices.BasicSlices]{ - Field: "Byte", - Value: v, +func BasicSlicesByte(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, []uint8]{ + Field: "Byte", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/basicslicespointer.go b/cmd/gen/conditions/tests/results/basicslicespointer.go index 71e772f..2eabe29 100644 --- a/cmd/gen/conditions/tests/results/basicslicespointer.go +++ b/cmd/gen/conditions/tests/results/basicslicespointer.go @@ -8,135 +8,135 @@ import ( "time" ) -func BasicSlicesPointerId(v orm.UUID) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "ID", - Value: v, +func BasicSlicesPointerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func BasicSlicesPointerCreatedAt(v time.Time) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "CreatedAt", - Value: v, +func BasicSlicesPointerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func BasicSlicesPointerUpdatedAt(v time.Time) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "UpdatedAt", - Value: v, +func BasicSlicesPointerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func BasicSlicesPointerDeletedAt(v gorm.DeletedAt) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "DeletedAt", - Value: v, +func BasicSlicesPointerDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func BasicSlicesPointerBool(v []bool) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Bool", - Value: v, +func BasicSlicesPointerBool(operator orm.Operator[[]bool]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []bool]{ + Field: "Bool", + Operator: operator, } } -func BasicSlicesPointerInt(v []int) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Int", - Value: v, +func BasicSlicesPointerInt(operator orm.Operator[[]int]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int]{ + Field: "Int", + Operator: operator, } } -func BasicSlicesPointerInt8(v []int8) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Int8", - Value: v, +func BasicSlicesPointerInt8(operator orm.Operator[[]int8]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int8]{ + Field: "Int8", + Operator: operator, } } -func BasicSlicesPointerInt16(v []int16) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Int16", - Value: v, +func BasicSlicesPointerInt16(operator orm.Operator[[]int16]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int16]{ + Field: "Int16", + Operator: operator, } } -func BasicSlicesPointerInt32(v []int32) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Int32", - Value: v, +func BasicSlicesPointerInt32(operator orm.Operator[[]int32]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int32]{ + Field: "Int32", + Operator: operator, } } -func BasicSlicesPointerInt64(v []int64) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Int64", - Value: v, +func BasicSlicesPointerInt64(operator orm.Operator[[]int64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int64]{ + Field: "Int64", + Operator: operator, } } -func BasicSlicesPointerUInt(v []uint) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "UInt", - Value: v, +func BasicSlicesPointerUInt(operator orm.Operator[[]uint]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint]{ + Field: "UInt", + Operator: operator, } } -func BasicSlicesPointerUInt8(v []uint8) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "UInt8", - Value: v, +func BasicSlicesPointerUInt8(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint8]{ + Field: "UInt8", + Operator: operator, } } -func BasicSlicesPointerUInt16(v []uint16) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "UInt16", - Value: v, +func BasicSlicesPointerUInt16(operator orm.Operator[[]uint16]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint16]{ + Field: "UInt16", + Operator: operator, } } -func BasicSlicesPointerUInt32(v []uint32) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "UInt32", - Value: v, +func BasicSlicesPointerUInt32(operator orm.Operator[[]uint32]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint32]{ + Field: "UInt32", + Operator: operator, } } -func BasicSlicesPointerUInt64(v []uint64) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "UInt64", - Value: v, +func BasicSlicesPointerUInt64(operator orm.Operator[[]uint64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint64]{ + Field: "UInt64", + Operator: operator, } } -func BasicSlicesPointerUIntptr(v []uintptr) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "UIntptr", - Value: v, +func BasicSlicesPointerUIntptr(operator orm.Operator[[]uintptr]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uintptr]{ + Field: "UIntptr", + Operator: operator, } } -func BasicSlicesPointerFloat32(v []float32) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Float32", - Value: v, +func BasicSlicesPointerFloat32(operator orm.Operator[[]float32]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []float32]{ + Field: "Float32", + Operator: operator, } } -func BasicSlicesPointerFloat64(v []float64) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Float64", - Value: v, +func BasicSlicesPointerFloat64(operator orm.Operator[[]float64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []float64]{ + Field: "Float64", + Operator: operator, } } -func BasicSlicesPointerComplex64(v []complex64) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Complex64", - Value: v, +func BasicSlicesPointerComplex64(operator orm.Operator[[]complex64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []complex64]{ + Field: "Complex64", + Operator: operator, } } -func BasicSlicesPointerComplex128(v []complex128) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Complex128", - Value: v, +func BasicSlicesPointerComplex128(operator orm.Operator[[]complex128]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []complex128]{ + Field: "Complex128", + Operator: operator, } } -func BasicSlicesPointerString(v []string) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "String", - Value: v, +func BasicSlicesPointerString(operator orm.Operator[[]string]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []string]{ + Field: "String", + Operator: operator, } } -func BasicSlicesPointerByte(v []uint8) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.WhereCondition[basicslicespointer.BasicSlicesPointer]{ - Field: "Byte", - Value: v, +func BasicSlicesPointerByte(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint8]{ + Field: "Byte", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/basictypes.go b/cmd/gen/conditions/tests/results/basictypes.go index 877943d..9182e1c 100644 --- a/cmd/gen/conditions/tests/results/basictypes.go +++ b/cmd/gen/conditions/tests/results/basictypes.go @@ -8,135 +8,135 @@ import ( "time" ) -func BasicTypesId(v orm.UUID) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "ID", - Value: v, +func BasicTypesId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func BasicTypesCreatedAt(v time.Time) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "CreatedAt", - Value: v, +func BasicTypesCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func BasicTypesUpdatedAt(v time.Time) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "UpdatedAt", - Value: v, +func BasicTypesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func BasicTypesDeletedAt(v gorm.DeletedAt) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "DeletedAt", - Value: v, +func BasicTypesDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func BasicTypesBool(v bool) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Bool", - Value: v, +func BasicTypesBool(operator orm.Operator[bool]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, bool]{ + Field: "Bool", + Operator: operator, } } -func BasicTypesInt(v int) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Int", - Value: v, +func BasicTypesInt(operator orm.Operator[int]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, int]{ + Field: "Int", + Operator: operator, } } -func BasicTypesInt8(v int8) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Int8", - Value: v, +func BasicTypesInt8(operator orm.Operator[int8]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, int8]{ + Field: "Int8", + Operator: operator, } } -func BasicTypesInt16(v int16) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Int16", - Value: v, +func BasicTypesInt16(operator orm.Operator[int16]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, int16]{ + Field: "Int16", + Operator: operator, } } -func BasicTypesInt32(v int32) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Int32", - Value: v, +func BasicTypesInt32(operator orm.Operator[int32]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, int32]{ + Field: "Int32", + Operator: operator, } } -func BasicTypesInt64(v int64) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Int64", - Value: v, +func BasicTypesInt64(operator orm.Operator[int64]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, int64]{ + Field: "Int64", + Operator: operator, } } -func BasicTypesUInt(v uint) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "UInt", - Value: v, +func BasicTypesUInt(operator orm.Operator[uint]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, uint]{ + Field: "UInt", + Operator: operator, } } -func BasicTypesUInt8(v uint8) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "UInt8", - Value: v, +func BasicTypesUInt8(operator orm.Operator[uint8]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, uint8]{ + Field: "UInt8", + Operator: operator, } } -func BasicTypesUInt16(v uint16) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "UInt16", - Value: v, +func BasicTypesUInt16(operator orm.Operator[uint16]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, uint16]{ + Field: "UInt16", + Operator: operator, } } -func BasicTypesUInt32(v uint32) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "UInt32", - Value: v, +func BasicTypesUInt32(operator orm.Operator[uint32]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, uint32]{ + Field: "UInt32", + Operator: operator, } } -func BasicTypesUInt64(v uint64) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "UInt64", - Value: v, +func BasicTypesUInt64(operator orm.Operator[uint64]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, uint64]{ + Field: "UInt64", + Operator: operator, } } -func BasicTypesUIntptr(v uintptr) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "UIntptr", - Value: v, +func BasicTypesUIntptr(operator orm.Operator[uintptr]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, uintptr]{ + Field: "UIntptr", + Operator: operator, } } -func BasicTypesFloat32(v float32) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Float32", - Value: v, +func BasicTypesFloat32(operator orm.Operator[float32]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, float32]{ + Field: "Float32", + Operator: operator, } } -func BasicTypesFloat64(v float64) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Float64", - Value: v, +func BasicTypesFloat64(operator orm.Operator[float64]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, float64]{ + Field: "Float64", + Operator: operator, } } -func BasicTypesComplex64(v complex64) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Complex64", - Value: v, +func BasicTypesComplex64(operator orm.Operator[complex64]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, complex64]{ + Field: "Complex64", + Operator: operator, } } -func BasicTypesComplex128(v complex128) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Complex128", - Value: v, +func BasicTypesComplex128(operator orm.Operator[complex128]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, complex128]{ + Field: "Complex128", + Operator: operator, } } -func BasicTypesString(v string) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "String", - Value: v, +func BasicTypesString(operator orm.Operator[string]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, string]{ + Field: "String", + Operator: operator, } } -func BasicTypesByte(v uint8) orm.WhereCondition[basictypes.BasicTypes] { - return orm.WhereCondition[basictypes.BasicTypes]{ - Field: "Byte", - Value: v, +func BasicTypesByte(operator orm.Operator[uint8]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, uint8]{ + Field: "Byte", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/belongsto_owned.go b/cmd/gen/conditions/tests/results/belongsto_owned.go index 9b22347..a1fdecb 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owned.go +++ b/cmd/gen/conditions/tests/results/belongsto_owned.go @@ -8,28 +8,28 @@ import ( "time" ) -func OwnedId(v orm.UUID) orm.WhereCondition[belongsto.Owned] { - return orm.WhereCondition[belongsto.Owned]{ - Field: "ID", - Value: v, +func OwnedId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owned] { + return orm.FieldCondition[belongsto.Owned, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func OwnedCreatedAt(v time.Time) orm.WhereCondition[belongsto.Owned] { - return orm.WhereCondition[belongsto.Owned]{ - Field: "CreatedAt", - Value: v, +func OwnedCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owned] { + return orm.FieldCondition[belongsto.Owned, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func OwnedUpdatedAt(v time.Time) orm.WhereCondition[belongsto.Owned] { - return orm.WhereCondition[belongsto.Owned]{ - Field: "UpdatedAt", - Value: v, +func OwnedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owned] { + return orm.FieldCondition[belongsto.Owned, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func OwnedDeletedAt(v gorm.DeletedAt) orm.WhereCondition[belongsto.Owned] { - return orm.WhereCondition[belongsto.Owned]{ - Field: "DeletedAt", - Value: v, +func OwnedDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[belongsto.Owned] { + return orm.FieldCondition[belongsto.Owned, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } func OwnedOwner(conditions ...orm.Condition[belongsto.Owner]) orm.Condition[belongsto.Owned] { @@ -39,9 +39,9 @@ func OwnedOwner(conditions ...orm.Condition[belongsto.Owner]) orm.Condition[belo T2Field: "ID", } } -func OwnedOwnerId(v orm.UUID) orm.WhereCondition[belongsto.Owned] { - return orm.WhereCondition[belongsto.Owned]{ - Field: "OwnerID", - Value: v, +func OwnedOwnerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owned] { + return orm.FieldCondition[belongsto.Owned, orm.UUID]{ + Field: "OwnerID", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/belongsto_owner.go b/cmd/gen/conditions/tests/results/belongsto_owner.go index b712824..c43e798 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owner.go +++ b/cmd/gen/conditions/tests/results/belongsto_owner.go @@ -8,27 +8,27 @@ import ( "time" ) -func OwnerId(v orm.UUID) orm.WhereCondition[belongsto.Owner] { - return orm.WhereCondition[belongsto.Owner]{ - Field: "ID", - Value: v, +func OwnerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owner] { + return orm.FieldCondition[belongsto.Owner, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func OwnerCreatedAt(v time.Time) orm.WhereCondition[belongsto.Owner] { - return orm.WhereCondition[belongsto.Owner]{ - Field: "CreatedAt", - Value: v, +func OwnerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owner] { + return orm.FieldCondition[belongsto.Owner, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func OwnerUpdatedAt(v time.Time) orm.WhereCondition[belongsto.Owner] { - return orm.WhereCondition[belongsto.Owner]{ - Field: "UpdatedAt", - Value: v, +func OwnerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owner] { + return orm.FieldCondition[belongsto.Owner, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func OwnerDeletedAt(v gorm.DeletedAt) orm.WhereCondition[belongsto.Owner] { - return orm.WhereCondition[belongsto.Owner]{ - Field: "DeletedAt", - Value: v, +func OwnerDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[belongsto.Owner] { + return orm.FieldCondition[belongsto.Owner, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/columndefinition.go b/cmd/gen/conditions/tests/results/columndefinition.go index 899d821..a547977 100644 --- a/cmd/gen/conditions/tests/results/columndefinition.go +++ b/cmd/gen/conditions/tests/results/columndefinition.go @@ -8,33 +8,33 @@ import ( "time" ) -func ColumnDefinitionId(v orm.UUID) orm.WhereCondition[columndefinition.ColumnDefinition] { - return orm.WhereCondition[columndefinition.ColumnDefinition]{ - Field: "ID", - Value: v, +func ColumnDefinitionId(operator orm.Operator[orm.UUID]) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.FieldCondition[columndefinition.ColumnDefinition, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func ColumnDefinitionCreatedAt(v time.Time) orm.WhereCondition[columndefinition.ColumnDefinition] { - return orm.WhereCondition[columndefinition.ColumnDefinition]{ - Field: "CreatedAt", - Value: v, +func ColumnDefinitionCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.FieldCondition[columndefinition.ColumnDefinition, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func ColumnDefinitionUpdatedAt(v time.Time) orm.WhereCondition[columndefinition.ColumnDefinition] { - return orm.WhereCondition[columndefinition.ColumnDefinition]{ - Field: "UpdatedAt", - Value: v, +func ColumnDefinitionUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.FieldCondition[columndefinition.ColumnDefinition, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func ColumnDefinitionDeletedAt(v gorm.DeletedAt) orm.WhereCondition[columndefinition.ColumnDefinition] { - return orm.WhereCondition[columndefinition.ColumnDefinition]{ - Field: "DeletedAt", - Value: v, +func ColumnDefinitionDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.FieldCondition[columndefinition.ColumnDefinition, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func ColumnDefinitionString(v string) orm.WhereCondition[columndefinition.ColumnDefinition] { - return orm.WhereCondition[columndefinition.ColumnDefinition]{ - Column: "string_something_else", - Value: v, +func ColumnDefinitionString(operator orm.Operator[string]) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.FieldCondition[columndefinition.ColumnDefinition, string]{ + Column: "string_something_else", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/customtype.go b/cmd/gen/conditions/tests/results/customtype.go index 6eec5fd..d0bde63 100644 --- a/cmd/gen/conditions/tests/results/customtype.go +++ b/cmd/gen/conditions/tests/results/customtype.go @@ -8,33 +8,33 @@ import ( "time" ) -func CustomTypeId(v orm.UUID) orm.WhereCondition[customtype.CustomType] { - return orm.WhereCondition[customtype.CustomType]{ - Field: "ID", - Value: v, +func CustomTypeId(operator orm.Operator[orm.UUID]) orm.WhereCondition[customtype.CustomType] { + return orm.FieldCondition[customtype.CustomType, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func CustomTypeCreatedAt(v time.Time) orm.WhereCondition[customtype.CustomType] { - return orm.WhereCondition[customtype.CustomType]{ - Field: "CreatedAt", - Value: v, +func CustomTypeCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[customtype.CustomType] { + return orm.FieldCondition[customtype.CustomType, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func CustomTypeUpdatedAt(v time.Time) orm.WhereCondition[customtype.CustomType] { - return orm.WhereCondition[customtype.CustomType]{ - Field: "UpdatedAt", - Value: v, +func CustomTypeUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[customtype.CustomType] { + return orm.FieldCondition[customtype.CustomType, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func CustomTypeDeletedAt(v gorm.DeletedAt) orm.WhereCondition[customtype.CustomType] { - return orm.WhereCondition[customtype.CustomType]{ - Field: "DeletedAt", - Value: v, +func CustomTypeDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[customtype.CustomType] { + return orm.FieldCondition[customtype.CustomType, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func CustomTypeCustom(v customtype.MultiString) orm.WhereCondition[customtype.CustomType] { - return orm.WhereCondition[customtype.CustomType]{ - Field: "Custom", - Value: v, +func CustomTypeCustom(operator orm.Operator[customtype.MultiString]) orm.WhereCondition[customtype.CustomType] { + return orm.FieldCondition[customtype.CustomType, customtype.MultiString]{ + Field: "Custom", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/goembedded.go b/cmd/gen/conditions/tests/results/goembedded.go index 1f2cf3e..219259b 100644 --- a/cmd/gen/conditions/tests/results/goembedded.go +++ b/cmd/gen/conditions/tests/results/goembedded.go @@ -8,33 +8,33 @@ import ( "time" ) -func GoEmbeddedId(v uint) orm.WhereCondition[goembedded.GoEmbedded] { - return orm.WhereCondition[goembedded.GoEmbedded]{ - Field: "ID", - Value: v, +func GoEmbeddedId(operator orm.Operator[uint]) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.FieldCondition[goembedded.GoEmbedded, uint]{ + Field: "ID", + Operator: operator, } } -func GoEmbeddedCreatedAt(v time.Time) orm.WhereCondition[goembedded.GoEmbedded] { - return orm.WhereCondition[goembedded.GoEmbedded]{ - Field: "CreatedAt", - Value: v, +func GoEmbeddedCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.FieldCondition[goembedded.GoEmbedded, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func GoEmbeddedUpdatedAt(v time.Time) orm.WhereCondition[goembedded.GoEmbedded] { - return orm.WhereCondition[goembedded.GoEmbedded]{ - Field: "UpdatedAt", - Value: v, +func GoEmbeddedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.FieldCondition[goembedded.GoEmbedded, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func GoEmbeddedDeletedAt(v gorm.DeletedAt) orm.WhereCondition[goembedded.GoEmbedded] { - return orm.WhereCondition[goembedded.GoEmbedded]{ - Field: "DeletedAt", - Value: v, +func GoEmbeddedDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.FieldCondition[goembedded.GoEmbedded, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func GoEmbeddedEmbeddedInt(v int) orm.WhereCondition[goembedded.GoEmbedded] { - return orm.WhereCondition[goembedded.GoEmbedded]{ - Field: "EmbeddedInt", - Value: v, +func GoEmbeddedEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.FieldCondition[goembedded.GoEmbedded, int]{ + Field: "EmbeddedInt", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/gormembedded.go b/cmd/gen/conditions/tests/results/gormembedded.go index 510e654..349f1dd 100644 --- a/cmd/gen/conditions/tests/results/gormembedded.go +++ b/cmd/gen/conditions/tests/results/gormembedded.go @@ -8,34 +8,34 @@ import ( "time" ) -func GormEmbeddedId(v uint) orm.WhereCondition[gormembedded.GormEmbedded] { - return orm.WhereCondition[gormembedded.GormEmbedded]{ - Field: "ID", - Value: v, +func GormEmbeddedId(operator orm.Operator[uint]) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.FieldCondition[gormembedded.GormEmbedded, uint]{ + Field: "ID", + Operator: operator, } } -func GormEmbeddedCreatedAt(v time.Time) orm.WhereCondition[gormembedded.GormEmbedded] { - return orm.WhereCondition[gormembedded.GormEmbedded]{ - Field: "CreatedAt", - Value: v, +func GormEmbeddedCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.FieldCondition[gormembedded.GormEmbedded, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func GormEmbeddedUpdatedAt(v time.Time) orm.WhereCondition[gormembedded.GormEmbedded] { - return orm.WhereCondition[gormembedded.GormEmbedded]{ - Field: "UpdatedAt", - Value: v, +func GormEmbeddedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.FieldCondition[gormembedded.GormEmbedded, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func GormEmbeddedDeletedAt(v gorm.DeletedAt) orm.WhereCondition[gormembedded.GormEmbedded] { - return orm.WhereCondition[gormembedded.GormEmbedded]{ - Field: "DeletedAt", - Value: v, +func GormEmbeddedDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.FieldCondition[gormembedded.GormEmbedded, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func GormEmbeddedGormEmbeddedInt(v int) orm.WhereCondition[gormembedded.GormEmbedded] { - return orm.WhereCondition[gormembedded.GormEmbedded]{ +func GormEmbeddedGormEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.FieldCondition[gormembedded.GormEmbedded, int]{ ColumnPrefix: "gorm_embedded_", Field: "Int", - Value: v, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/hasmany_company.go b/cmd/gen/conditions/tests/results/hasmany_company.go index 7bdda4b..63ccfbf 100644 --- a/cmd/gen/conditions/tests/results/hasmany_company.go +++ b/cmd/gen/conditions/tests/results/hasmany_company.go @@ -8,28 +8,28 @@ import ( "time" ) -func CompanyId(v orm.UUID) orm.WhereCondition[hasmany.Company] { - return orm.WhereCondition[hasmany.Company]{ - Field: "ID", - Value: v, +func CompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Company] { + return orm.FieldCondition[hasmany.Company, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func CompanyCreatedAt(v time.Time) orm.WhereCondition[hasmany.Company] { - return orm.WhereCondition[hasmany.Company]{ - Field: "CreatedAt", - Value: v, +func CompanyCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Company] { + return orm.FieldCondition[hasmany.Company, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func CompanyUpdatedAt(v time.Time) orm.WhereCondition[hasmany.Company] { - return orm.WhereCondition[hasmany.Company]{ - Field: "UpdatedAt", - Value: v, +func CompanyUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Company] { + return orm.FieldCondition[hasmany.Company, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func CompanyDeletedAt(v gorm.DeletedAt) orm.WhereCondition[hasmany.Company] { - return orm.WhereCondition[hasmany.Company]{ - Field: "DeletedAt", - Value: v, +func CompanyDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[hasmany.Company] { + return orm.FieldCondition[hasmany.Company, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.Condition[hasmany.Seller] { diff --git a/cmd/gen/conditions/tests/results/hasmany_seller.go b/cmd/gen/conditions/tests/results/hasmany_seller.go index 6d1cfb8..2cf1db3 100644 --- a/cmd/gen/conditions/tests/results/hasmany_seller.go +++ b/cmd/gen/conditions/tests/results/hasmany_seller.go @@ -8,33 +8,33 @@ import ( "time" ) -func SellerId(v orm.UUID) orm.WhereCondition[hasmany.Seller] { - return orm.WhereCondition[hasmany.Seller]{ - Field: "ID", - Value: v, +func SellerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Seller] { + return orm.FieldCondition[hasmany.Seller, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func SellerCreatedAt(v time.Time) orm.WhereCondition[hasmany.Seller] { - return orm.WhereCondition[hasmany.Seller]{ - Field: "CreatedAt", - Value: v, +func SellerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Seller] { + return orm.FieldCondition[hasmany.Seller, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func SellerUpdatedAt(v time.Time) orm.WhereCondition[hasmany.Seller] { - return orm.WhereCondition[hasmany.Seller]{ - Field: "UpdatedAt", - Value: v, +func SellerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Seller] { + return orm.FieldCondition[hasmany.Seller, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func SellerDeletedAt(v gorm.DeletedAt) orm.WhereCondition[hasmany.Seller] { - return orm.WhereCondition[hasmany.Seller]{ - Field: "DeletedAt", - Value: v, +func SellerDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[hasmany.Seller] { + return orm.FieldCondition[hasmany.Seller, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func SellerCompanyId(v orm.UUID) orm.WhereCondition[hasmany.Seller] { - return orm.WhereCondition[hasmany.Seller]{ - Field: "CompanyID", - Value: v, +func SellerCompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Seller] { + return orm.FieldCondition[hasmany.Seller, orm.UUID]{ + Field: "CompanyID", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/hasone_city.go b/cmd/gen/conditions/tests/results/hasone_city.go index 5594228..b496511 100644 --- a/cmd/gen/conditions/tests/results/hasone_city.go +++ b/cmd/gen/conditions/tests/results/hasone_city.go @@ -8,33 +8,33 @@ import ( "time" ) -func CityId(v orm.UUID) orm.WhereCondition[hasone.City] { - return orm.WhereCondition[hasone.City]{ - Field: "ID", - Value: v, +func CityId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.City] { + return orm.FieldCondition[hasone.City, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func CityCreatedAt(v time.Time) orm.WhereCondition[hasone.City] { - return orm.WhereCondition[hasone.City]{ - Field: "CreatedAt", - Value: v, +func CityCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.City] { + return orm.FieldCondition[hasone.City, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func CityUpdatedAt(v time.Time) orm.WhereCondition[hasone.City] { - return orm.WhereCondition[hasone.City]{ - Field: "UpdatedAt", - Value: v, +func CityUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.City] { + return orm.FieldCondition[hasone.City, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func CityDeletedAt(v gorm.DeletedAt) orm.WhereCondition[hasone.City] { - return orm.WhereCondition[hasone.City]{ - Field: "DeletedAt", - Value: v, +func CityDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[hasone.City] { + return orm.FieldCondition[hasone.City, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func CityCountryId(v orm.UUID) orm.WhereCondition[hasone.City] { - return orm.WhereCondition[hasone.City]{ - Field: "CountryID", - Value: v, +func CityCountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.City] { + return orm.FieldCondition[hasone.City, orm.UUID]{ + Field: "CountryID", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/hasone_country.go b/cmd/gen/conditions/tests/results/hasone_country.go index 7001bdb..7fcc3fb 100644 --- a/cmd/gen/conditions/tests/results/hasone_country.go +++ b/cmd/gen/conditions/tests/results/hasone_country.go @@ -8,28 +8,28 @@ import ( "time" ) -func CountryId(v orm.UUID) orm.WhereCondition[hasone.Country] { - return orm.WhereCondition[hasone.Country]{ - Field: "ID", - Value: v, +func CountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.Country] { + return orm.FieldCondition[hasone.Country, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func CountryCreatedAt(v time.Time) orm.WhereCondition[hasone.Country] { - return orm.WhereCondition[hasone.Country]{ - Field: "CreatedAt", - Value: v, +func CountryCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.Country] { + return orm.FieldCondition[hasone.Country, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func CountryUpdatedAt(v time.Time) orm.WhereCondition[hasone.Country] { - return orm.WhereCondition[hasone.Country]{ - Field: "UpdatedAt", - Value: v, +func CountryUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.Country] { + return orm.FieldCondition[hasone.Country, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func CountryDeletedAt(v gorm.DeletedAt) orm.WhereCondition[hasone.Country] { - return orm.WhereCondition[hasone.Country]{ - Field: "DeletedAt", - Value: v, +func CountryDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[hasone.Country] { + return orm.FieldCondition[hasone.Country, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } func CountryCapital(conditions ...orm.Condition[hasone.City]) orm.Condition[hasone.Country] { diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package1.go b/cmd/gen/conditions/tests/results/multiplepackage_package1.go index 90e793b..e4eb294 100644 --- a/cmd/gen/conditions/tests/results/multiplepackage_package1.go +++ b/cmd/gen/conditions/tests/results/multiplepackage_package1.go @@ -9,28 +9,28 @@ import ( "time" ) -func Package1Id(v orm.UUID) orm.WhereCondition[package1.Package1] { - return orm.WhereCondition[package1.Package1]{ - Field: "ID", - Value: v, +func Package1Id(operator orm.Operator[orm.UUID]) orm.WhereCondition[package1.Package1] { + return orm.FieldCondition[package1.Package1, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func Package1CreatedAt(v time.Time) orm.WhereCondition[package1.Package1] { - return orm.WhereCondition[package1.Package1]{ - Field: "CreatedAt", - Value: v, +func Package1CreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package1.Package1] { + return orm.FieldCondition[package1.Package1, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func Package1UpdatedAt(v time.Time) orm.WhereCondition[package1.Package1] { - return orm.WhereCondition[package1.Package1]{ - Field: "UpdatedAt", - Value: v, +func Package1UpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package1.Package1] { + return orm.FieldCondition[package1.Package1, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func Package1DeletedAt(v gorm.DeletedAt) orm.WhereCondition[package1.Package1] { - return orm.WhereCondition[package1.Package1]{ - Field: "DeletedAt", - Value: v, +func Package1DeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[package1.Package1] { + return orm.FieldCondition[package1.Package1, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } func Package1Package2(conditions ...orm.Condition[package2.Package2]) orm.Condition[package1.Package1] { diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey.go b/cmd/gen/conditions/tests/results/overrideforeignkey.go index ab713c0..005069a 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkey.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkey.go @@ -8,28 +8,28 @@ import ( "time" ) -func BicycleId(v orm.UUID) orm.WhereCondition[overrideforeignkey.Bicycle] { - return orm.WhereCondition[overrideforeignkey.Bicycle]{ - Field: "ID", - Value: v, +func BicycleId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.FieldCondition[overrideforeignkey.Bicycle, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func BicycleCreatedAt(v time.Time) orm.WhereCondition[overrideforeignkey.Bicycle] { - return orm.WhereCondition[overrideforeignkey.Bicycle]{ - Field: "CreatedAt", - Value: v, +func BicycleCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.FieldCondition[overrideforeignkey.Bicycle, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func BicycleUpdatedAt(v time.Time) orm.WhereCondition[overrideforeignkey.Bicycle] { - return orm.WhereCondition[overrideforeignkey.Bicycle]{ - Field: "UpdatedAt", - Value: v, +func BicycleUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.FieldCondition[overrideforeignkey.Bicycle, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func BicycleDeletedAt(v gorm.DeletedAt) orm.WhereCondition[overrideforeignkey.Bicycle] { - return orm.WhereCondition[overrideforeignkey.Bicycle]{ - Field: "DeletedAt", - Value: v, +func BicycleDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.FieldCondition[overrideforeignkey.Bicycle, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } func BicycleOwner(conditions ...orm.Condition[overrideforeignkey.Person]) orm.Condition[overrideforeignkey.Bicycle] { @@ -39,9 +39,9 @@ func BicycleOwner(conditions ...orm.Condition[overrideforeignkey.Person]) orm.Co T2Field: "ID", } } -func BicycleOwnerSomethingId(v string) orm.WhereCondition[overrideforeignkey.Bicycle] { - return orm.WhereCondition[overrideforeignkey.Bicycle]{ - Field: "OwnerSomethingID", - Value: v, +func BicycleOwnerSomethingId(operator orm.Operator[string]) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.FieldCondition[overrideforeignkey.Bicycle, string]{ + Field: "OwnerSomethingID", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go index 7181c81..4f98d70 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go @@ -8,28 +8,28 @@ import ( "time" ) -func UserId(v orm.UUID) orm.WhereCondition[overrideforeignkeyinverse.User] { - return orm.WhereCondition[overrideforeignkeyinverse.User]{ - Field: "ID", - Value: v, +func UserId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkeyinverse.User] { + return orm.FieldCondition[overrideforeignkeyinverse.User, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func UserCreatedAt(v time.Time) orm.WhereCondition[overrideforeignkeyinverse.User] { - return orm.WhereCondition[overrideforeignkeyinverse.User]{ - Field: "CreatedAt", - Value: v, +func UserCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.User] { + return orm.FieldCondition[overrideforeignkeyinverse.User, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func UserUpdatedAt(v time.Time) orm.WhereCondition[overrideforeignkeyinverse.User] { - return orm.WhereCondition[overrideforeignkeyinverse.User]{ - Field: "UpdatedAt", - Value: v, +func UserUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.User] { + return orm.FieldCondition[overrideforeignkeyinverse.User, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func UserDeletedAt(v gorm.DeletedAt) orm.WhereCondition[overrideforeignkeyinverse.User] { - return orm.WhereCondition[overrideforeignkeyinverse.User]{ - Field: "DeletedAt", - Value: v, +func UserDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[overrideforeignkeyinverse.User] { + return orm.FieldCondition[overrideforeignkeyinverse.User, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } func UserCreditCard(conditions ...orm.Condition[overrideforeignkeyinverse.CreditCard]) orm.Condition[overrideforeignkeyinverse.User] { diff --git a/cmd/gen/conditions/tests/results/overridereferences.go b/cmd/gen/conditions/tests/results/overridereferences.go index f0ec909..8ee4092 100644 --- a/cmd/gen/conditions/tests/results/overridereferences.go +++ b/cmd/gen/conditions/tests/results/overridereferences.go @@ -8,28 +8,28 @@ import ( "time" ) -func PhoneId(v orm.UUID) orm.WhereCondition[overridereferences.Phone] { - return orm.WhereCondition[overridereferences.Phone]{ - Field: "ID", - Value: v, +func PhoneId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferences.Phone] { + return orm.FieldCondition[overridereferences.Phone, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func PhoneCreatedAt(v time.Time) orm.WhereCondition[overridereferences.Phone] { - return orm.WhereCondition[overridereferences.Phone]{ - Field: "CreatedAt", - Value: v, +func PhoneCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Phone] { + return orm.FieldCondition[overridereferences.Phone, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func PhoneUpdatedAt(v time.Time) orm.WhereCondition[overridereferences.Phone] { - return orm.WhereCondition[overridereferences.Phone]{ - Field: "UpdatedAt", - Value: v, +func PhoneUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Phone] { + return orm.FieldCondition[overridereferences.Phone, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func PhoneDeletedAt(v gorm.DeletedAt) orm.WhereCondition[overridereferences.Phone] { - return orm.WhereCondition[overridereferences.Phone]{ - Field: "DeletedAt", - Value: v, +func PhoneDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[overridereferences.Phone] { + return orm.FieldCondition[overridereferences.Phone, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } func PhoneBrand(conditions ...orm.Condition[overridereferences.Brand]) orm.Condition[overridereferences.Phone] { @@ -39,9 +39,9 @@ func PhoneBrand(conditions ...orm.Condition[overridereferences.Brand]) orm.Condi T2Field: "Name", } } -func PhoneBrandName(v string) orm.WhereCondition[overridereferences.Phone] { - return orm.WhereCondition[overridereferences.Phone]{ - Field: "BrandName", - Value: v, +func PhoneBrandName(operator orm.Operator[string]) orm.WhereCondition[overridereferences.Phone] { + return orm.FieldCondition[overridereferences.Phone, string]{ + Field: "BrandName", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse.go b/cmd/gen/conditions/tests/results/overridereferencesinverse.go index f0433cb..412d804 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse.go @@ -8,34 +8,34 @@ import ( "time" ) -func ComputerId(v orm.UUID) orm.WhereCondition[overridereferencesinverse.Computer] { - return orm.WhereCondition[overridereferencesinverse.Computer]{ - Field: "ID", - Value: v, +func ComputerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.FieldCondition[overridereferencesinverse.Computer, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func ComputerCreatedAt(v time.Time) orm.WhereCondition[overridereferencesinverse.Computer] { - return orm.WhereCondition[overridereferencesinverse.Computer]{ - Field: "CreatedAt", - Value: v, +func ComputerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.FieldCondition[overridereferencesinverse.Computer, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func ComputerUpdatedAt(v time.Time) orm.WhereCondition[overridereferencesinverse.Computer] { - return orm.WhereCondition[overridereferencesinverse.Computer]{ - Field: "UpdatedAt", - Value: v, +func ComputerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.FieldCondition[overridereferencesinverse.Computer, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func ComputerDeletedAt(v gorm.DeletedAt) orm.WhereCondition[overridereferencesinverse.Computer] { - return orm.WhereCondition[overridereferencesinverse.Computer]{ - Field: "DeletedAt", - Value: v, +func ComputerDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.FieldCondition[overridereferencesinverse.Computer, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } -func ComputerName(v string) orm.WhereCondition[overridereferencesinverse.Computer] { - return orm.WhereCondition[overridereferencesinverse.Computer]{ - Field: "Name", - Value: v, +func ComputerName(operator orm.Operator[string]) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.FieldCondition[overridereferencesinverse.Computer, string]{ + Field: "Name", + Operator: operator, } } func ComputerProcessor(conditions ...orm.Condition[overridereferencesinverse.Processor]) orm.Condition[overridereferencesinverse.Computer] { diff --git a/cmd/gen/conditions/tests/results/selfreferential.go b/cmd/gen/conditions/tests/results/selfreferential.go index 78f79f3..d1ffb53 100644 --- a/cmd/gen/conditions/tests/results/selfreferential.go +++ b/cmd/gen/conditions/tests/results/selfreferential.go @@ -8,28 +8,28 @@ import ( "time" ) -func EmployeeId(v orm.UUID) orm.WhereCondition[selfreferential.Employee] { - return orm.WhereCondition[selfreferential.Employee]{ - Field: "ID", - Value: v, +func EmployeeId(operator orm.Operator[orm.UUID]) orm.WhereCondition[selfreferential.Employee] { + return orm.FieldCondition[selfreferential.Employee, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func EmployeeCreatedAt(v time.Time) orm.WhereCondition[selfreferential.Employee] { - return orm.WhereCondition[selfreferential.Employee]{ - Field: "CreatedAt", - Value: v, +func EmployeeCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[selfreferential.Employee] { + return orm.FieldCondition[selfreferential.Employee, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func EmployeeUpdatedAt(v time.Time) orm.WhereCondition[selfreferential.Employee] { - return orm.WhereCondition[selfreferential.Employee]{ - Field: "UpdatedAt", - Value: v, +func EmployeeUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[selfreferential.Employee] { + return orm.FieldCondition[selfreferential.Employee, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func EmployeeDeletedAt(v gorm.DeletedAt) orm.WhereCondition[selfreferential.Employee] { - return orm.WhereCondition[selfreferential.Employee]{ - Field: "DeletedAt", - Value: v, +func EmployeeDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[selfreferential.Employee] { + return orm.FieldCondition[selfreferential.Employee, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } func EmployeeBoss(conditions ...orm.Condition[selfreferential.Employee]) orm.Condition[selfreferential.Employee] { @@ -39,9 +39,9 @@ func EmployeeBoss(conditions ...orm.Condition[selfreferential.Employee]) orm.Con T2Field: "ID", } } -func EmployeeBossId(v orm.UUID) orm.WhereCondition[selfreferential.Employee] { - return orm.WhereCondition[selfreferential.Employee]{ - Field: "BossID", - Value: v, +func EmployeeBossId(operator orm.Operator[orm.UUID]) orm.WhereCondition[selfreferential.Employee] { + return orm.FieldCondition[selfreferential.Employee, orm.UUID]{ + Field: "BossID", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/uintmodel.go b/cmd/gen/conditions/tests/results/uintmodel.go index ae351ac..ea6fba5 100644 --- a/cmd/gen/conditions/tests/results/uintmodel.go +++ b/cmd/gen/conditions/tests/results/uintmodel.go @@ -8,27 +8,27 @@ import ( "time" ) -func UintModelId(v uint) orm.WhereCondition[uintmodel.UintModel] { - return orm.WhereCondition[uintmodel.UintModel]{ - Field: "ID", - Value: v, +func UintModelId(operator orm.Operator[uint]) orm.WhereCondition[uintmodel.UintModel] { + return orm.FieldCondition[uintmodel.UintModel, uint]{ + Field: "ID", + Operator: operator, } } -func UintModelCreatedAt(v time.Time) orm.WhereCondition[uintmodel.UintModel] { - return orm.WhereCondition[uintmodel.UintModel]{ - Field: "CreatedAt", - Value: v, +func UintModelCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uintmodel.UintModel] { + return orm.FieldCondition[uintmodel.UintModel, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func UintModelUpdatedAt(v time.Time) orm.WhereCondition[uintmodel.UintModel] { - return orm.WhereCondition[uintmodel.UintModel]{ - Field: "UpdatedAt", - Value: v, +func UintModelUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uintmodel.UintModel] { + return orm.FieldCondition[uintmodel.UintModel, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func UintModelDeletedAt(v gorm.DeletedAt) orm.WhereCondition[uintmodel.UintModel] { - return orm.WhereCondition[uintmodel.UintModel]{ - Field: "DeletedAt", - Value: v, +func UintModelDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[uintmodel.UintModel] { + return orm.FieldCondition[uintmodel.UintModel, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/uuidmodel.go b/cmd/gen/conditions/tests/results/uuidmodel.go index 82cbaba..299ab3b 100644 --- a/cmd/gen/conditions/tests/results/uuidmodel.go +++ b/cmd/gen/conditions/tests/results/uuidmodel.go @@ -8,27 +8,27 @@ import ( "time" ) -func UUIDModelId(v orm.UUID) orm.WhereCondition[uuidmodel.UUIDModel] { - return orm.WhereCondition[uuidmodel.UUIDModel]{ - Field: "ID", - Value: v, +func UUIDModelId(operator orm.Operator[orm.UUID]) orm.WhereCondition[uuidmodel.UUIDModel] { + return orm.FieldCondition[uuidmodel.UUIDModel, orm.UUID]{ + Field: "ID", + Operator: operator, } } -func UUIDModelCreatedAt(v time.Time) orm.WhereCondition[uuidmodel.UUIDModel] { - return orm.WhereCondition[uuidmodel.UUIDModel]{ - Field: "CreatedAt", - Value: v, +func UUIDModelCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uuidmodel.UUIDModel] { + return orm.FieldCondition[uuidmodel.UUIDModel, time.Time]{ + Field: "CreatedAt", + Operator: operator, } } -func UUIDModelUpdatedAt(v time.Time) orm.WhereCondition[uuidmodel.UUIDModel] { - return orm.WhereCondition[uuidmodel.UUIDModel]{ - Field: "UpdatedAt", - Value: v, +func UUIDModelUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uuidmodel.UUIDModel] { + return orm.FieldCondition[uuidmodel.UUIDModel, time.Time]{ + Field: "UpdatedAt", + Operator: operator, } } -func UUIDModelDeletedAt(v gorm.DeletedAt) orm.WhereCondition[uuidmodel.UUIDModel] { - return orm.WhereCondition[uuidmodel.UUIDModel]{ - Field: "DeletedAt", - Value: v, +func UUIDModelDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[uuidmodel.UUIDModel] { + return orm.FieldCondition[uuidmodel.UUIDModel, gorm.DeletedAt]{ + Field: "DeletedAt", + Operator: operator, } } diff --git a/go.mod b/go.mod index 4dfffda..d3d1b1f 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/dave/jennifer v1.6.1 - github.com/ditrit/badaas v0.0.0-20230801092312-f93496a71501 + github.com/ditrit/badaas v0.0.0-20230802090641-cb55dbcce177 github.com/ditrit/verdeter v0.4.0 github.com/elliotchance/pie/v2 v2.7.0 github.com/ettle/strcase v0.1.1 diff --git a/go.sum b/go.sum index c4bf298..aec99dd 100644 --- a/go.sum +++ b/go.sum @@ -53,8 +53,8 @@ github.com/dave/jennifer v1.6.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/ditrit/badaas v0.0.0-20230801092312-f93496a71501 h1:pnPSbgcYboxR8SLQg49yZuxRIL6Fs3+YAGfMnMEuqV4= -github.com/ditrit/badaas v0.0.0-20230801092312-f93496a71501/go.mod h1:FS3I+obfV7FiYp3tUbZObckOclqmEPtGwTXsGOk8WJs= +github.com/ditrit/badaas v0.0.0-20230802090641-cb55dbcce177 h1:0PIcEg9WlEq8t8TNPTF7GFWU8ZRt77t8JK1Ecm95lfc= +github.com/ditrit/badaas v0.0.0-20230802090641-cb55dbcce177/go.mod h1:FS3I+obfV7FiYp3tUbZObckOclqmEPtGwTXsGOk8WJs= github.com/ditrit/verdeter v0.4.0 h1:DzEOFauuXEGNQYP6OgYtHwEyb3w9riem99u0xE/l7+o= github.com/ditrit/verdeter v0.4.0/go.mod h1:sKpWuOvYqNabLN4aNXqeBhcWpt7nf0frwqk0B5M6ax0= github.com/elliotchance/pie/v2 v2.7.0 h1:FqoIKg4uj0G/CrLGuMS9ejnFKa92lxE1dEgBD3pShXg= From f13b79b1498abe8e8fc5c06342bd00589724572c Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Wed, 2 Aug 2023 12:02:54 +0200 Subject: [PATCH 14/31] support sql nullable types --- cmd/gen/conditions/condition.go | 29 ++++--- cmd/gen/conditions/jenParam.go | 24 ++++++ cmd/gen/conditions/main_test.go | 6 ++ .../tests/nullabletypes/nullabletypes.go | 20 +++++ .../conditions/tests/results/basicpointers.go | 5 +- .../conditions/tests/results/basicslices.go | 5 +- .../tests/results/basicslicespointer.go | 5 +- .../conditions/tests/results/basictypes.go | 5 +- .../tests/results/belongsto_owned.go | 5 +- .../tests/results/belongsto_owner.go | 5 +- .../tests/results/columndefinition.go | 5 +- .../conditions/tests/results/customtype.go | 5 +- .../conditions/tests/results/goembedded.go | 5 +- .../conditions/tests/results/gormembedded.go | 5 +- .../tests/results/hasmany_company.go | 5 +- .../tests/results/hasmany_seller.go | 5 +- .../conditions/tests/results/hasone_city.go | 5 +- .../tests/results/hasone_country.go | 5 +- .../tests/results/multiplepackage_package1.go | 5 +- .../conditions/tests/results/nullabletypes.go | 81 +++++++++++++++++++ .../tests/results/overrideforeignkey.go | 5 +- .../results/overrideforeignkeyinverse.go | 5 +- .../tests/results/overridereferences.go | 5 +- .../results/overridereferencesinverse.go | 5 +- .../tests/results/selfreferential.go | 5 +- cmd/gen/conditions/tests/results/uintmodel.go | 5 +- cmd/gen/conditions/tests/results/uuidmodel.go | 5 +- cmd/gen/conditions/type.go | 32 +++++++- 28 files changed, 220 insertions(+), 82 deletions(-) create mode 100644 cmd/gen/conditions/tests/nullabletypes/nullabletypes.go create mode 100644 cmd/gen/conditions/tests/results/nullabletypes.go diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index b901411..29b0c9e 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -108,20 +108,25 @@ func (condition *Condition) generateForNamedType(objectType Type, field Field) { _, err := field.Type.BadaasModelStruct() if err == nil { + // field is a badaas model condition.generateForBadaasModel(objectType, field) + } else if field.Type.IsSQLNullableType() { + // field is a sql nullable type (sql.NullBool, sql.NullInt, etc.) + condition.param.SQLToBasicType(field.Type) + condition.generateWhere( + objectType, + field, + ) + } else if field.Type.IsGormCustomType() || field.TypeString() == "time.Time" { + // field is a Gorm Custom type (implements Scanner and Valuer interfaces) + // or a named type supported by gorm (time.Time) + condition.param.ToCustomType(condition.destPkg, field.Type) + condition.generateWhere( + objectType, + field, + ) } else { - // field is not a Badaas Model - if field.Type.IsGormCustomType() || field.TypeString() == "time.Time" { - // field is a Gorm Custom type (implements Scanner and Valuer interfaces) - // or a named type supported by gorm (time.Time, gorm.DeletedAt) - condition.param.ToCustomType(condition.destPkg, field.Type) - condition.generateWhere( - objectType, - field, - ) - } else { - log.Logger.Debugf("struct field type not handled: %s", field.TypeString()) - } + log.Logger.Debugf("struct field type not handled: %s", field.TypeString()) } } diff --git a/cmd/gen/conditions/jenParam.go b/cmd/gen/conditions/jenParam.go index 486a866..4657c00 100644 --- a/cmd/gen/conditions/jenParam.go +++ b/cmd/gen/conditions/jenParam.go @@ -84,3 +84,27 @@ func (param JenParam) ToCustomType(destPkg string, typeV Type) { typeV.Name(), ) } + +func (param JenParam) SQLToBasicType(typeV Type) { + switch typeV.String() { + case nullString: + param.internalType.String() + case nullInt64: + param.internalType.Int64() + case nullInt32: + param.internalType.Int32() + case nullInt16: + param.internalType.Int16() + case nullByte: + param.internalType.Int8() + case nullFloat64: + param.internalType.Float64() + case nullBool: + param.internalType.Bool() + case nullTime, deletedAt: + param.internalType.Qual( + "time", + "Time", + ) + } +} diff --git a/cmd/gen/conditions/main_test.go b/cmd/gen/conditions/main_test.go index b3f9823..c223aba 100644 --- a/cmd/gen/conditions/main_test.go +++ b/cmd/gen/conditions/main_test.go @@ -68,6 +68,12 @@ func TestCustomType(t *testing.T) { }) } +func TestNullableTypes(t *testing.T) { + doTest(t, "./tests/nullabletypes", []Comparison{ + {Have: "nullable_types_conditions.go", Expected: "./tests/results/nullabletypes.go"}, + }) +} + func TestBelongsTo(t *testing.T) { doTest(t, "./tests/belongsto", []Comparison{ {Have: "owner_conditions.go", Expected: "./tests/results/belongsto_owner.go"}, diff --git a/cmd/gen/conditions/tests/nullabletypes/nullabletypes.go b/cmd/gen/conditions/tests/nullabletypes/nullabletypes.go new file mode 100644 index 0000000..5c26271 --- /dev/null +++ b/cmd/gen/conditions/tests/nullabletypes/nullabletypes.go @@ -0,0 +1,20 @@ +package nullabletypes + +import ( + "database/sql" + + "github.com/ditrit/badaas/orm" +) + +type NullableTypes struct { + orm.UUIDModel + + String sql.NullString + Int64 sql.NullInt64 + Int32 sql.NullInt32 + Int16 sql.NullInt16 + Byte sql.NullByte + Float64 sql.NullFloat64 + Bool sql.NullBool + Time sql.NullTime +} diff --git a/cmd/gen/conditions/tests/results/basicpointers.go b/cmd/gen/conditions/tests/results/basicpointers.go index 9ae6ee4..fc1dc3d 100644 --- a/cmd/gen/conditions/tests/results/basicpointers.go +++ b/cmd/gen/conditions/tests/results/basicpointers.go @@ -4,7 +4,6 @@ package conditions import ( basicpointers "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basicpointers" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func BasicPointersUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition Operator: operator, } } -func BasicPointersDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[basicpointers.BasicPointers] { - return orm.FieldCondition[basicpointers.BasicPointers, gorm.DeletedAt]{ +func BasicPointersDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicpointers.BasicPointers] { + return orm.FieldCondition[basicpointers.BasicPointers, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/basicslices.go b/cmd/gen/conditions/tests/results/basicslices.go index 863d0ec..a6e56c3 100644 --- a/cmd/gen/conditions/tests/results/basicslices.go +++ b/cmd/gen/conditions/tests/results/basicslices.go @@ -4,7 +4,6 @@ package conditions import ( basicslices "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basicslices" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func BasicSlicesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[b Operator: operator, } } -func BasicSlicesDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[basicslices.BasicSlices] { - return orm.FieldCondition[basicslices.BasicSlices, gorm.DeletedAt]{ +func BasicSlicesDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslices.BasicSlices] { + return orm.FieldCondition[basicslices.BasicSlices, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/basicslicespointer.go b/cmd/gen/conditions/tests/results/basicslicespointer.go index 2eabe29..90b84f5 100644 --- a/cmd/gen/conditions/tests/results/basicslicespointer.go +++ b/cmd/gen/conditions/tests/results/basicslicespointer.go @@ -4,7 +4,6 @@ package conditions import ( basicslicespointer "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basicslicespointer" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func BasicSlicesPointerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCond Operator: operator, } } -func BasicSlicesPointerDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { - return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, gorm.DeletedAt]{ +func BasicSlicesPointerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { + return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/basictypes.go b/cmd/gen/conditions/tests/results/basictypes.go index 9182e1c..beee4cf 100644 --- a/cmd/gen/conditions/tests/results/basictypes.go +++ b/cmd/gen/conditions/tests/results/basictypes.go @@ -4,7 +4,6 @@ package conditions import ( basictypes "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basictypes" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func BasicTypesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[ba Operator: operator, } } -func BasicTypesDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[basictypes.BasicTypes] { - return orm.FieldCondition[basictypes.BasicTypes, gorm.DeletedAt]{ +func BasicTypesDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basictypes.BasicTypes] { + return orm.FieldCondition[basictypes.BasicTypes, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/belongsto_owned.go b/cmd/gen/conditions/tests/results/belongsto_owned.go index a1fdecb..dca65d7 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owned.go +++ b/cmd/gen/conditions/tests/results/belongsto_owned.go @@ -4,7 +4,6 @@ package conditions import ( belongsto "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/belongsto" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func OwnedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongs Operator: operator, } } -func OwnedDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[belongsto.Owned] { - return orm.FieldCondition[belongsto.Owned, gorm.DeletedAt]{ +func OwnedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owned] { + return orm.FieldCondition[belongsto.Owned, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/belongsto_owner.go b/cmd/gen/conditions/tests/results/belongsto_owner.go index c43e798..9fb6104 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owner.go +++ b/cmd/gen/conditions/tests/results/belongsto_owner.go @@ -4,7 +4,6 @@ package conditions import ( belongsto "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/belongsto" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func OwnerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongs Operator: operator, } } -func OwnerDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[belongsto.Owner] { - return orm.FieldCondition[belongsto.Owner, gorm.DeletedAt]{ +func OwnerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owner] { + return orm.FieldCondition[belongsto.Owner, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/columndefinition.go b/cmd/gen/conditions/tests/results/columndefinition.go index a547977..0f21596 100644 --- a/cmd/gen/conditions/tests/results/columndefinition.go +++ b/cmd/gen/conditions/tests/results/columndefinition.go @@ -4,7 +4,6 @@ package conditions import ( columndefinition "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/columndefinition" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func ColumnDefinitionUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondit Operator: operator, } } -func ColumnDefinitionDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[columndefinition.ColumnDefinition] { - return orm.FieldCondition[columndefinition.ColumnDefinition, gorm.DeletedAt]{ +func ColumnDefinitionDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[columndefinition.ColumnDefinition] { + return orm.FieldCondition[columndefinition.ColumnDefinition, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/customtype.go b/cmd/gen/conditions/tests/results/customtype.go index d0bde63..ba55b61 100644 --- a/cmd/gen/conditions/tests/results/customtype.go +++ b/cmd/gen/conditions/tests/results/customtype.go @@ -4,7 +4,6 @@ package conditions import ( customtype "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/customtype" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func CustomTypeUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[cu Operator: operator, } } -func CustomTypeDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[customtype.CustomType] { - return orm.FieldCondition[customtype.CustomType, gorm.DeletedAt]{ +func CustomTypeDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[customtype.CustomType] { + return orm.FieldCondition[customtype.CustomType, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/goembedded.go b/cmd/gen/conditions/tests/results/goembedded.go index 219259b..7a7754a 100644 --- a/cmd/gen/conditions/tests/results/goembedded.go +++ b/cmd/gen/conditions/tests/results/goembedded.go @@ -4,7 +4,6 @@ package conditions import ( goembedded "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/goembedded" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func GoEmbeddedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[go Operator: operator, } } -func GoEmbeddedDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[goembedded.GoEmbedded] { - return orm.FieldCondition[goembedded.GoEmbedded, gorm.DeletedAt]{ +func GoEmbeddedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.FieldCondition[goembedded.GoEmbedded, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/gormembedded.go b/cmd/gen/conditions/tests/results/gormembedded.go index 349f1dd..2959092 100644 --- a/cmd/gen/conditions/tests/results/gormembedded.go +++ b/cmd/gen/conditions/tests/results/gormembedded.go @@ -4,7 +4,6 @@ package conditions import ( gormembedded "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/gormembedded" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func GormEmbeddedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[ Operator: operator, } } -func GormEmbeddedDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[gormembedded.GormEmbedded] { - return orm.FieldCondition[gormembedded.GormEmbedded, gorm.DeletedAt]{ +func GormEmbeddedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.FieldCondition[gormembedded.GormEmbedded, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/hasmany_company.go b/cmd/gen/conditions/tests/results/hasmany_company.go index 63ccfbf..1662523 100644 --- a/cmd/gen/conditions/tests/results/hasmany_company.go +++ b/cmd/gen/conditions/tests/results/hasmany_company.go @@ -4,7 +4,6 @@ package conditions import ( hasmany "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasmany" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func CompanyUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasma Operator: operator, } } -func CompanyDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[hasmany.Company] { - return orm.FieldCondition[hasmany.Company, gorm.DeletedAt]{ +func CompanyDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Company] { + return orm.FieldCondition[hasmany.Company, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/hasmany_seller.go b/cmd/gen/conditions/tests/results/hasmany_seller.go index 2cf1db3..2649ccc 100644 --- a/cmd/gen/conditions/tests/results/hasmany_seller.go +++ b/cmd/gen/conditions/tests/results/hasmany_seller.go @@ -4,7 +4,6 @@ package conditions import ( hasmany "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasmany" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func SellerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasman Operator: operator, } } -func SellerDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[hasmany.Seller] { - return orm.FieldCondition[hasmany.Seller, gorm.DeletedAt]{ +func SellerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Seller] { + return orm.FieldCondition[hasmany.Seller, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/hasone_city.go b/cmd/gen/conditions/tests/results/hasone_city.go index b496511..94be918 100644 --- a/cmd/gen/conditions/tests/results/hasone_city.go +++ b/cmd/gen/conditions/tests/results/hasone_city.go @@ -4,7 +4,6 @@ package conditions import ( hasone "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasone" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func CityUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.C Operator: operator, } } -func CityDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[hasone.City] { - return orm.FieldCondition[hasone.City, gorm.DeletedAt]{ +func CityDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.City] { + return orm.FieldCondition[hasone.City, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/hasone_country.go b/cmd/gen/conditions/tests/results/hasone_country.go index 7fcc3fb..1bf27ca 100644 --- a/cmd/gen/conditions/tests/results/hasone_country.go +++ b/cmd/gen/conditions/tests/results/hasone_country.go @@ -4,7 +4,6 @@ package conditions import ( hasone "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasone" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func CountryUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hason Operator: operator, } } -func CountryDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[hasone.Country] { - return orm.FieldCondition[hasone.Country, gorm.DeletedAt]{ +func CountryDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.Country] { + return orm.FieldCondition[hasone.Country, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package1.go b/cmd/gen/conditions/tests/results/multiplepackage_package1.go index e4eb294..08a4efa 100644 --- a/cmd/gen/conditions/tests/results/multiplepackage_package1.go +++ b/cmd/gen/conditions/tests/results/multiplepackage_package1.go @@ -5,7 +5,6 @@ import ( package1 "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/multiplepackage/package1" package2 "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/multiplepackage/package2" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -27,8 +26,8 @@ func Package1UpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[pack Operator: operator, } } -func Package1DeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[package1.Package1] { - return orm.FieldCondition[package1.Package1, gorm.DeletedAt]{ +func Package1DeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package1.Package1] { + return orm.FieldCondition[package1.Package1, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/nullabletypes.go b/cmd/gen/conditions/tests/results/nullabletypes.go new file mode 100644 index 0000000..43f7f13 --- /dev/null +++ b/cmd/gen/conditions/tests/results/nullabletypes.go @@ -0,0 +1,81 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + nullabletypes "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/nullabletypes" + orm "github.com/ditrit/badaas/orm" + "time" +) + +func NullableTypesId(operator orm.Operator[orm.UUID]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, orm.UUID]{ + Field: "ID", + Operator: operator, + } +} +func NullableTypesCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ + Field: "CreatedAt", + Operator: operator, + } +} +func NullableTypesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ + Field: "UpdatedAt", + Operator: operator, + } +} +func NullableTypesDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ + Field: "DeletedAt", + Operator: operator, + } +} +func NullableTypesString(operator orm.Operator[string]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, string]{ + Field: "String", + Operator: operator, + } +} +func NullableTypesInt64(operator orm.Operator[int64]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, int64]{ + Field: "Int64", + Operator: operator, + } +} +func NullableTypesInt32(operator orm.Operator[int32]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, int32]{ + Field: "Int32", + Operator: operator, + } +} +func NullableTypesInt16(operator orm.Operator[int16]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, int16]{ + Field: "Int16", + Operator: operator, + } +} +func NullableTypesByte(operator orm.Operator[int8]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, int8]{ + Field: "Byte", + Operator: operator, + } +} +func NullableTypesFloat64(operator orm.Operator[float64]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, float64]{ + Field: "Float64", + Operator: operator, + } +} +func NullableTypesBool(operator orm.Operator[bool]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, bool]{ + Field: "Bool", + Operator: operator, + } +} +func NullableTypesTime(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { + return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ + Field: "Time", + Operator: operator, + } +} diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey.go b/cmd/gen/conditions/tests/results/overrideforeignkey.go index 005069a..a0188fe 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkey.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkey.go @@ -4,7 +4,6 @@ package conditions import ( overrideforeignkey "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overrideforeignkey" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func BicycleUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overr Operator: operator, } } -func BicycleDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[overrideforeignkey.Bicycle] { - return orm.FieldCondition[overrideforeignkey.Bicycle, gorm.DeletedAt]{ +func BicycleDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Bicycle] { + return orm.FieldCondition[overrideforeignkey.Bicycle, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go index 4f98d70..434ba42 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go @@ -4,7 +4,6 @@ package conditions import ( overrideforeignkeyinverse "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overrideforeignkeyinverse" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func UserUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[override Operator: operator, } } -func UserDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[overrideforeignkeyinverse.User] { - return orm.FieldCondition[overrideforeignkeyinverse.User, gorm.DeletedAt]{ +func UserDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.User] { + return orm.FieldCondition[overrideforeignkeyinverse.User, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/overridereferences.go b/cmd/gen/conditions/tests/results/overridereferences.go index 8ee4092..7e81b2d 100644 --- a/cmd/gen/conditions/tests/results/overridereferences.go +++ b/cmd/gen/conditions/tests/results/overridereferences.go @@ -4,7 +4,6 @@ package conditions import ( overridereferences "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overridereferences" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func PhoneUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrid Operator: operator, } } -func PhoneDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[overridereferences.Phone] { - return orm.FieldCondition[overridereferences.Phone, gorm.DeletedAt]{ +func PhoneDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Phone] { + return orm.FieldCondition[overridereferences.Phone, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse.go b/cmd/gen/conditions/tests/results/overridereferencesinverse.go index 412d804..7bfa455 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse.go @@ -4,7 +4,6 @@ package conditions import ( overridereferencesinverse "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overridereferencesinverse" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func ComputerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[over Operator: operator, } } -func ComputerDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[overridereferencesinverse.Computer] { - return orm.FieldCondition[overridereferencesinverse.Computer, gorm.DeletedAt]{ +func ComputerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Computer] { + return orm.FieldCondition[overridereferencesinverse.Computer, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/selfreferential.go b/cmd/gen/conditions/tests/results/selfreferential.go index d1ffb53..66c6028 100644 --- a/cmd/gen/conditions/tests/results/selfreferential.go +++ b/cmd/gen/conditions/tests/results/selfreferential.go @@ -4,7 +4,6 @@ package conditions import ( selfreferential "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/selfreferential" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func EmployeeUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[self Operator: operator, } } -func EmployeeDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[selfreferential.Employee] { - return orm.FieldCondition[selfreferential.Employee, gorm.DeletedAt]{ +func EmployeeDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[selfreferential.Employee] { + return orm.FieldCondition[selfreferential.Employee, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/uintmodel.go b/cmd/gen/conditions/tests/results/uintmodel.go index ea6fba5..181de46 100644 --- a/cmd/gen/conditions/tests/results/uintmodel.go +++ b/cmd/gen/conditions/tests/results/uintmodel.go @@ -4,7 +4,6 @@ package conditions import ( uintmodel "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/uintmodel" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func UintModelUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uin Operator: operator, } } -func UintModelDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[uintmodel.UintModel] { - return orm.FieldCondition[uintmodel.UintModel, gorm.DeletedAt]{ +func UintModelDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uintmodel.UintModel] { + return orm.FieldCondition[uintmodel.UintModel, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/uuidmodel.go b/cmd/gen/conditions/tests/results/uuidmodel.go index 299ab3b..0753173 100644 --- a/cmd/gen/conditions/tests/results/uuidmodel.go +++ b/cmd/gen/conditions/tests/results/uuidmodel.go @@ -4,7 +4,6 @@ package conditions import ( uuidmodel "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/uuidmodel" orm "github.com/ditrit/badaas/orm" - gorm "gorm.io/gorm" "time" ) @@ -26,8 +25,8 @@ func UUIDModelUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uui Operator: operator, } } -func UUIDModelDeletedAt(operator orm.Operator[gorm.DeletedAt]) orm.WhereCondition[uuidmodel.UUIDModel] { - return orm.FieldCondition[uuidmodel.UUIDModel, gorm.DeletedAt]{ +func UUIDModelDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uuidmodel.UUIDModel] { + return orm.FieldCondition[uuidmodel.UUIDModel, time.Time]{ Field: "DeletedAt", Operator: operator, } diff --git a/cmd/gen/conditions/type.go b/cmd/gen/conditions/type.go index 8718476..22a576c 100644 --- a/cmd/gen/conditions/type.go +++ b/cmd/gen/conditions/type.go @@ -9,8 +9,25 @@ import ( "github.com/elliotchance/pie/v2" ) -// badaas/orm/baseModels.go -var badaasORMBaseModels = []string{"github.com/ditrit/badaas/orm.UUIDModel", "github.com/ditrit/badaas/orm.UIntModel", "gorm.io/gorm.Model"} +var ( + // badaas/orm/baseModels.go + badaasORMBaseModels = []string{"github.com/ditrit/badaas/orm.UUIDModel", "github.com/ditrit/badaas/orm.UIntModel", "gorm.io/gorm.Model"} + + // database/sql + nullString = "database/sql.NullString" + nullInt64 = "database/sql.NullInt64" + nullInt32 = "database/sql.NullInt32" + nullInt16 = "database/sql.NullInt16" + nullFloat64 = "database/sql.NullFloat64" + nullByte = "database/sql.NullByte" + nullBool = "database/sql.NullBool" + nullTime = "database/sql.NullTime" + deletedAt = "gorm.io/gorm.DeletedAt" + sqlNullableTypes = []string{ + nullString, nullInt64, nullInt32, nullInt16, nullFloat64, + nullByte, nullBool, nullTime, deletedAt, + } +) type Type struct { types.Type @@ -72,8 +89,10 @@ func (t Type) HasFK(field Field) (bool, error) { }), nil } -var scanMethod = regexp.MustCompile(`func \(\*.*\)\.Scan\([a-zA-Z0-9_-]* interface\{\}\) error$`) -var valueMethod = regexp.MustCompile(`func \(.*\)\.Value\(\) \(database/sql/driver\.Value\, error\)$`) +var ( + scanMethod = regexp.MustCompile(`func \(\*.*\)\.Scan\([a-zA-Z0-9_-]* (interface\{\}|any)\) error$`) + valueMethod = regexp.MustCompile(`func \(.*\)\.Value\(\) \(database/sql/driver\.Value\, error\)$`) +) // Returns true if the type is a Gorm Custom type (https://gorm.io/docs/data_types.html) func (t Type) IsGormCustomType() bool { @@ -96,3 +115,8 @@ func (t Type) IsGormCustomType() bool { return hasScanMethod && hasValueMethod } + +// Returns true if the type is a sql nullable type (sql.NullBool, sql.NullInt, etc.) +func (t Type) IsSQLNullableType() bool { + return pie.Contains(sqlNullableTypes, t.String()) +} From 81e9e4df950da606789f1a955ebb2814b69f5277 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Wed, 2 Aug 2023 12:11:31 +0200 Subject: [PATCH 15/31] update changelog --- changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.md b/changelog.md index 53a520c..966ada5 100644 --- a/changelog.md +++ b/changelog.md @@ -11,5 +11,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add generation of docker and configuration files - Add gen conditions to generate the conditions for the badaas' compilable query system. +- Add support for operators in condition generation. [unreleased]: https://github.com/ditrit/badaas-cli/blob/main/changelog.md#unreleased \ No newline at end of file From 1c58562748f3453ec16d920b3fc15aa693df0173 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 12:01:52 +0200 Subject: [PATCH 16/31] replace inverse join generation by inverse reference in models --- cmd/gen/conditions/condition.go | 27 ------------- cmd/gen/conditions/main_test.go | 8 ++-- cmd/gen/conditions/tests/hasmany/hasmany.go | 3 +- cmd/gen/conditions/tests/hasone/hasone.go | 1 + .../tests/results/hasmany_company.go | 7 ---- .../tests/results/hasmany_seller.go | 7 ++++ .../conditions/tests/results/hasone_city.go | 7 ++++ .../tests/results/hasone_country.go | 7 ---- .../tests/results/multiplepackage_package1.go | 7 ---- .../overrideforeignkeyinverse_credit_card.go | 39 +++++++++++++++++++ ...e.go => overrideforeignkeyinverse_user.go} | 7 ---- ... => overridereferencesinverse_computer.go} | 7 ---- .../overridereferencesinverse_processor.go | 39 +++++++++++++++++++ 13 files changed, 99 insertions(+), 67 deletions(-) create mode 100644 cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go rename cmd/gen/conditions/tests/results/{overrideforeignkeyinverse.go => overrideforeignkeyinverse_user.go} (82%) rename cmd/gen/conditions/tests/results/{overridereferencesinverse.go => overridereferencesinverse_computer.go} (84%) create mode 100644 cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index 29b0c9e..2cc4de8 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -82,16 +82,6 @@ func (condition *Condition) generateForSlice(objectType Type, field Field) { objectType, field, ) - case *types.Named: - // slice of named types (user defined types) - _, err := field.Type.BadaasModelStruct() - if err == nil { - // slice of Badaas models -> hasMany relation - condition.generateInverseJoin( - objectType, - field, - ) - } case *types.Pointer: // slice of pointers, generate code for a slice of the pointed type condition.generateForSlice( @@ -145,11 +135,6 @@ func (condition *Condition) generateForBadaasModel(objectType Type, field Field) objectType, field, ) - - condition.generateInverseJoin( - objectType, - field, - ) } } @@ -208,18 +193,6 @@ func (condition *Condition) generateWhere(objectType Type, field Field) { ) } -// Generate a inverse JoinCondition, so from the field's object to the object -func (condition *Condition) generateInverseJoin(objectType Type, field Field) { - condition.generateJoinWithFK( - field.Type, - Field{ - Name: objectType.Name(), - Type: objectType, - Tags: field.Tags, - }, - ) -} - // Generate a JoinCondition between the object and field's object // when object has a foreign key to the field's object func (condition *Condition) generateJoinWithFK(objectType Type, field Field) { diff --git a/cmd/gen/conditions/main_test.go b/cmd/gen/conditions/main_test.go index c223aba..8d18b83 100644 --- a/cmd/gen/conditions/main_test.go +++ b/cmd/gen/conditions/main_test.go @@ -129,16 +129,16 @@ func TestOverrideReferences(t *testing.T) { func TestOverrideForeignKeyInverse(t *testing.T) { doTest(t, "./tests/overrideforeignkeyinverse", []Comparison{ - {Have: "user_conditions.go", Expected: "./tests/results/overrideforeignkeyinverse.go"}, + {Have: "user_conditions.go", Expected: "./tests/results/overrideforeignkeyinverse_user.go"}, + {Have: "credit_card_conditions.go", Expected: "./tests/results/overrideforeignkeyinverse_credit_card.go"}, }) - utils.RemoveFile("credit_card_conditions.go") } func TestOverrideReferencesInverse(t *testing.T) { doTest(t, "./tests/overridereferencesinverse", []Comparison{ - {Have: "computer_conditions.go", Expected: "./tests/results/overridereferencesinverse.go"}, + {Have: "computer_conditions.go", Expected: "./tests/results/overridereferencesinverse_computer.go"}, + {Have: "processor_conditions.go", Expected: "./tests/results/overridereferencesinverse_processor.go"}, }) - utils.RemoveFile("processor_conditions.go") } type Comparison struct { diff --git a/cmd/gen/conditions/tests/hasmany/hasmany.go b/cmd/gen/conditions/tests/hasmany/hasmany.go index 0eafe59..9d82e8b 100644 --- a/cmd/gen/conditions/tests/hasmany/hasmany.go +++ b/cmd/gen/conditions/tests/hasmany/hasmany.go @@ -1,4 +1,4 @@ -package hasone +package hasmany import "github.com/ditrit/badaas/orm" @@ -11,5 +11,6 @@ type Company struct { type Seller struct { orm.UUIDModel + Company *Company CompanyID *orm.UUID // Company HasMany Sellers (Company 0..1 -> 0..* Seller) } diff --git a/cmd/gen/conditions/tests/hasone/hasone.go b/cmd/gen/conditions/tests/hasone/hasone.go index cc29a90..c38b067 100644 --- a/cmd/gen/conditions/tests/hasone/hasone.go +++ b/cmd/gen/conditions/tests/hasone/hasone.go @@ -11,5 +11,6 @@ type Country struct { type City struct { orm.UUIDModel + Country *Country CountryID orm.UUID // Country HasOne City (Country 1 -> 1 City) } diff --git a/cmd/gen/conditions/tests/results/hasmany_company.go b/cmd/gen/conditions/tests/results/hasmany_company.go index 1662523..cd4c005 100644 --- a/cmd/gen/conditions/tests/results/hasmany_company.go +++ b/cmd/gen/conditions/tests/results/hasmany_company.go @@ -31,10 +31,3 @@ func CompanyDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasma Operator: operator, } } -func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.Condition[hasmany.Seller] { - return orm.JoinCondition[hasmany.Seller, hasmany.Company]{ - Conditions: conditions, - T1Field: "CompanyID", - T2Field: "ID", - } -} diff --git a/cmd/gen/conditions/tests/results/hasmany_seller.go b/cmd/gen/conditions/tests/results/hasmany_seller.go index 2649ccc..cfeacf4 100644 --- a/cmd/gen/conditions/tests/results/hasmany_seller.go +++ b/cmd/gen/conditions/tests/results/hasmany_seller.go @@ -31,6 +31,13 @@ func SellerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasman Operator: operator, } } +func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.Condition[hasmany.Seller] { + return orm.JoinCondition[hasmany.Seller, hasmany.Company]{ + Conditions: conditions, + T1Field: "CompanyID", + T2Field: "ID", + } +} func SellerCompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, orm.UUID]{ Field: "CompanyID", diff --git a/cmd/gen/conditions/tests/results/hasone_city.go b/cmd/gen/conditions/tests/results/hasone_city.go index 94be918..56bd659 100644 --- a/cmd/gen/conditions/tests/results/hasone_city.go +++ b/cmd/gen/conditions/tests/results/hasone_city.go @@ -31,6 +31,13 @@ func CityDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.C Operator: operator, } } +func CityCountry(conditions ...orm.Condition[hasone.Country]) orm.Condition[hasone.City] { + return orm.JoinCondition[hasone.City, hasone.Country]{ + Conditions: conditions, + T1Field: "CountryID", + T2Field: "ID", + } +} func CityCountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, orm.UUID]{ Field: "CountryID", diff --git a/cmd/gen/conditions/tests/results/hasone_country.go b/cmd/gen/conditions/tests/results/hasone_country.go index 1bf27ca..d984f78 100644 --- a/cmd/gen/conditions/tests/results/hasone_country.go +++ b/cmd/gen/conditions/tests/results/hasone_country.go @@ -38,10 +38,3 @@ func CountryCapital(conditions ...orm.Condition[hasone.City]) orm.Condition[haso T2Field: "CountryID", } } -func CityCountry(conditions ...orm.Condition[hasone.Country]) orm.Condition[hasone.City] { - return orm.JoinCondition[hasone.City, hasone.Country]{ - Conditions: conditions, - T1Field: "CountryID", - T2Field: "ID", - } -} diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package1.go b/cmd/gen/conditions/tests/results/multiplepackage_package1.go index 08a4efa..d88a914 100644 --- a/cmd/gen/conditions/tests/results/multiplepackage_package1.go +++ b/cmd/gen/conditions/tests/results/multiplepackage_package1.go @@ -39,10 +39,3 @@ func Package1Package2(conditions ...orm.Condition[package2.Package2]) orm.Condit T2Field: "Package1ID", } } -func Package2Package1(conditions ...orm.Condition[package1.Package1]) orm.Condition[package2.Package2] { - return orm.JoinCondition[package2.Package2, package1.Package1]{ - Conditions: conditions, - T1Field: "Package1ID", - T2Field: "ID", - } -} diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go new file mode 100644 index 0000000..8b8a997 --- /dev/null +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go @@ -0,0 +1,39 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + overrideforeignkeyinverse "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overrideforeignkeyinverse" + orm "github.com/ditrit/badaas/orm" + "time" +) + +func CreditCardId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { + return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, orm.UUID]{ + Field: "ID", + Operator: operator, + } +} +func CreditCardCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { + return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, time.Time]{ + Field: "CreatedAt", + Operator: operator, + } +} +func CreditCardUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { + return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, time.Time]{ + Field: "UpdatedAt", + Operator: operator, + } +} +func CreditCardDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { + return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, time.Time]{ + Field: "DeletedAt", + Operator: operator, + } +} +func CreditCardUserReference(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { + return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, orm.UUID]{ + Field: "UserReference", + Operator: operator, + } +} diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go similarity index 82% rename from cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go rename to cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go index 434ba42..8126c8c 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go @@ -38,10 +38,3 @@ func UserCreditCard(conditions ...orm.Condition[overrideforeignkeyinverse.Credit T2Field: "UserReference", } } -func CreditCardUser(conditions ...orm.Condition[overrideforeignkeyinverse.User]) orm.Condition[overrideforeignkeyinverse.CreditCard] { - return orm.JoinCondition[overrideforeignkeyinverse.CreditCard, overrideforeignkeyinverse.User]{ - Conditions: conditions, - T1Field: "UserReference", - T2Field: "ID", - } -} diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go similarity index 84% rename from cmd/gen/conditions/tests/results/overridereferencesinverse.go rename to cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go index 7bfa455..66da8e9 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go @@ -44,10 +44,3 @@ func ComputerProcessor(conditions ...orm.Condition[overridereferencesinverse.Pro T2Field: "ComputerName", } } -func ProcessorComputer(conditions ...orm.Condition[overridereferencesinverse.Computer]) orm.Condition[overridereferencesinverse.Processor] { - return orm.JoinCondition[overridereferencesinverse.Processor, overridereferencesinverse.Computer]{ - Conditions: conditions, - T1Field: "ComputerName", - T2Field: "Name", - } -} diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go new file mode 100644 index 0000000..d1bdc5b --- /dev/null +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go @@ -0,0 +1,39 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + overridereferencesinverse "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overridereferencesinverse" + orm "github.com/ditrit/badaas/orm" + "time" +) + +func ProcessorId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferencesinverse.Processor] { + return orm.FieldCondition[overridereferencesinverse.Processor, orm.UUID]{ + Field: "ID", + Operator: operator, + } +} +func ProcessorCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Processor] { + return orm.FieldCondition[overridereferencesinverse.Processor, time.Time]{ + Field: "CreatedAt", + Operator: operator, + } +} +func ProcessorUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Processor] { + return orm.FieldCondition[overridereferencesinverse.Processor, time.Time]{ + Field: "UpdatedAt", + Operator: operator, + } +} +func ProcessorDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Processor] { + return orm.FieldCondition[overridereferencesinverse.Processor, time.Time]{ + Field: "DeletedAt", + Operator: operator, + } +} +func ProcessorComputerName(operator orm.Operator[string]) orm.WhereCondition[overridereferencesinverse.Processor] { + return orm.FieldCondition[overridereferencesinverse.Processor, string]{ + Field: "ComputerName", + Operator: operator, + } +} From b1282ffd10b128be4da1875106bb6bd6f58d6379 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 12:12:47 +0200 Subject: [PATCH 17/31] refactor: add code generator --- cmd/gen/conditions/codeGenerator.go | 6 ++ cmd/gen/conditions/conditionsGenerator.go | 64 ++++++++++++++++++ cmd/gen/conditions/embeddedField.go | 23 +++++++ cmd/gen/conditions/file.go | 79 ++++------------------- cmd/gen/conditions/main.go | 42 ++++++------ 5 files changed, 131 insertions(+), 83 deletions(-) create mode 100644 cmd/gen/conditions/codeGenerator.go create mode 100644 cmd/gen/conditions/conditionsGenerator.go create mode 100644 cmd/gen/conditions/embeddedField.go diff --git a/cmd/gen/conditions/codeGenerator.go b/cmd/gen/conditions/codeGenerator.go new file mode 100644 index 0000000..7671dc3 --- /dev/null +++ b/cmd/gen/conditions/codeGenerator.go @@ -0,0 +1,6 @@ +package conditions + +type CodeGenerator[T any] interface { + Into(file *File) error + ForEachField(file *File, fields []Field) []T +} diff --git a/cmd/gen/conditions/conditionsGenerator.go b/cmd/gen/conditions/conditionsGenerator.go new file mode 100644 index 0000000..6c218eb --- /dev/null +++ b/cmd/gen/conditions/conditionsGenerator.go @@ -0,0 +1,64 @@ +package conditions + +import ( + "go/types" + + "github.com/ditrit/badaas-cli/cmd/log" +) + +type ConditionsGenerator struct { + object types.Object + objectType Type +} + +func NewConditionsGenerator(object types.Object) *ConditionsGenerator { + return &ConditionsGenerator{ + object: object, + objectType: Type{object.Type()}, + } +} + +// Add conditions for an object in the file +func (cg ConditionsGenerator) Into(file *File) error { + fields, err := getFields(cg.objectType, "") + if err != nil { + return err + } + + log.Logger.Infof("Generating conditions for type %q in %s", cg.object.Name(), file.name) + + // Add one condition for each field of the object + conditions := cg.ForEachField(file, fields) + + for _, condition := range conditions { + file.Add(condition.codes...) + } + + return nil +} + +// Generate the conditions for each of the object's fields +func (cg ConditionsGenerator) ForEachField(file *File, fields []Field) []Condition { + conditions := []Condition{} + + for _, field := range fields { + log.Logger.Debugf("Generating condition for field %q", field.Name) + + if field.Embedded { + conditions = append( + conditions, + generateForEmbeddedField[Condition]( + file, + field, + cg, + )..., + ) + } else { + conditions = append(conditions, *NewCondition( + file.destPkg, cg.objectType, field, + )) + } + } + + return conditions +} diff --git a/cmd/gen/conditions/embeddedField.go b/cmd/gen/conditions/embeddedField.go new file mode 100644 index 0000000..509504a --- /dev/null +++ b/cmd/gen/conditions/embeddedField.go @@ -0,0 +1,23 @@ +package conditions + +import ( + "errors" + "go/types" +) + +// Generate conditions for a embedded field using the "generator" +// it will generate a condition for each of the field of the embedded field's type +func generateForEmbeddedField[T any](file *File, field Field, generator CodeGenerator[T]) []T { + embeddedStructType, ok := field.Type.Underlying().(*types.Struct) + if !ok { + panic(errors.New("unreachable! embedded objects are always structs")) + } + + fields, err := getStructFields(embeddedStructType, field.Tags.getEmbeddedPrefix()) + if err != nil { + // embedded field's type has not fields + return []T{} + } + + return generator.ForEachField(file, fields) +} diff --git a/cmd/gen/conditions/file.go b/cmd/gen/conditions/file.go index 24c2e98..2e461db 100644 --- a/cmd/gen/conditions/file.go +++ b/cmd/gen/conditions/file.go @@ -1,23 +1,19 @@ package conditions import ( - "errors" - "go/types" - "github.com/dave/jennifer/jen" - "github.com/ditrit/badaas-cli/cmd/log" + "github.com/ditrit/badaas-cli/cmd/version" ) -const badaasORMPath = "github.com/ditrit/badaas/orm" - type File struct { - destPkg string - jenFile *jen.File - name string + destPkg string + jenFile *jen.File + name string + codesAdded bool } -func NewConditionsFile(destPkg string, name string) *File { +func NewFile(destPkg, name string) *File { // Start a new file in destination package f := jen.NewFile(destPkg) @@ -31,68 +27,21 @@ func NewConditionsFile(destPkg string, name string) *File { } } -// Add conditions for an object in the file -func (file File) AddConditionsFor(object types.Object) error { - fields, err := getFields(Type{object.Type()}, "") - if err != nil { - return err +func (file *File) Add(codes ...jen.Code) { + if len(codes) > 0 { + file.codesAdded = true } - log.Logger.Infof("Generating conditions for type %q in %s", object.Name(), file.name) - - file.addConditionsForEachField(object, fields) - return nil -} - -// Add one condition for each field of the object -func (file File) addConditionsForEachField(object types.Object, fields []Field) { - conditions := file.generateConditionsForEachField(object, fields) - - for _, condition := range conditions { - for _, code := range condition.codes { - file.jenFile.Add(code) - } + for _, code := range codes { + file.jenFile.Add(code) } } // Write generated file func (file File) Save() error { - return file.jenFile.Save(file.name) -} - -// Generate the conditions for each of the object's fields -func (file File) generateConditionsForEachField(object types.Object, fields []Field) []*Condition { - conditions := []*Condition{} - for _, field := range fields { - log.Logger.Debugf("Generating condition for field %q", field.Name) - if field.Embedded { - conditions = append(conditions, file.generateEmbeddedConditions( - object, - field, - )...) - } else { - conditions = append(conditions, NewCondition( - file.destPkg, Type{object.Type()}, field, - )) - } - } - - return conditions -} - -// Generate conditions for a embedded field -// it will generate a condition for each of the field of the embedded field's type -func (file File) generateEmbeddedConditions(object types.Object, field Field) []*Condition { - embeddedStructType, ok := field.Type.Underlying().(*types.Struct) - if !ok { - panic(errors.New("unreachable! embedded objects are always structs")) - } - - fields, err := getStructFields(embeddedStructType, field.Tags.getEmbeddedPrefix()) - if err != nil { - // embedded field's type has not fields - return []*Condition{} + if file.codesAdded { + return file.jenFile.Save(file.name) } - return file.generateConditionsForEachField(object, fields) + return nil } diff --git a/cmd/gen/conditions/main.go b/cmd/gen/conditions/main.go index 35e7bd7..d90084c 100644 --- a/cmd/gen/conditions/main.go +++ b/cmd/gen/conditions/main.go @@ -9,11 +9,10 @@ import ( "github.com/ettle/strcase" "github.com/spf13/cobra" "github.com/spf13/viper" + "golang.org/x/tools/go/packages" "github.com/ditrit/badaas-cli/cmd/log" "github.com/ditrit/verdeter" - - "golang.org/x/tools/go/packages" ) var GenConditionsCmd = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ @@ -24,7 +23,10 @@ var GenConditionsCmd = verdeter.BuildVerdeterCommand(verdeter.VerdeterConfig{ Args: cobra.MinimumNArgs(1), }) -const DestPackageKey = "dest_package" +const ( + DestPackageKey = "dest_package" + badaasORMPath = "github.com/ditrit/badaas/orm" +) func init() { err := GenConditionsCmd.LKey( @@ -64,25 +66,29 @@ func generateConditionsForPkg(destPkg string, pkg *packages.Package) { for _, name := range pkg.Types.Scope().Names() { object := getObject(pkg, name) if object != nil { - file := NewConditionsFile( - destPkg, - strcase.ToSnake(object.Name())+"_conditions.go", - ) - - err := file.AddConditionsFor(object) - if err != nil { - // object is not a Badaas model, do not generate conditions - continue - } - - err = file.Save() - if err != nil { - panic(err) - } + generateConditionsForObject(destPkg, object) } } } +func generateConditionsForObject(destPkg string, object types.Object) { + file := NewFile( + destPkg, + strcase.ToSnake(object.Name())+"_conditions.go", + ) + + err := NewConditionsGenerator(object).Into(file) + if err != nil { + // object is not a Badaas model, do not generate conditions + return + } + + err = file.Save() + if err != nil { + panic(err) + } +} + // Load package information from paths func loadPackages(paths []string) []*packages.Package { cfg := &packages.Config{Mode: packages.NeedTypes} From 7453ec8344393f0018256c31fbc8691cba99b5d6 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 14:39:22 +0200 Subject: [PATCH 18/31] add relation field to join conditions --- cmd/gen/conditions/condition.go | 7 ++++--- cmd/gen/conditions/tests/results/belongsto_owned.go | 7 ++++--- cmd/gen/conditions/tests/results/hasmany_seller.go | 7 ++++--- cmd/gen/conditions/tests/results/hasone_city.go | 7 ++++--- cmd/gen/conditions/tests/results/hasone_country.go | 7 ++++--- .../conditions/tests/results/multiplepackage_package1.go | 7 ++++--- cmd/gen/conditions/tests/results/overrideforeignkey.go | 7 ++++--- .../tests/results/overrideforeignkeyinverse_user.go | 7 ++++--- cmd/gen/conditions/tests/results/overridereferences.go | 7 ++++--- .../tests/results/overridereferencesinverse_computer.go | 7 ++++--- cmd/gen/conditions/tests/results/selfreferential.go | 7 ++++--- 11 files changed, 44 insertions(+), 33 deletions(-) diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index 2cc4de8..85cc9fb 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -254,9 +254,10 @@ func (condition *Condition) generateJoin(objectType Type, field Field, t1Field, ).Block( jen.Return( ormJoinCondition.Values(jen.Dict{ - jen.Id("T1Field"): jen.Lit(t1Field), - jen.Id("T2Field"): jen.Lit(t2Field), - jen.Id("Conditions"): jen.Id("conditions"), + jen.Id("T1Field"): jen.Lit(t1Field), + jen.Id("T2Field"): jen.Lit(t2Field), + jen.Id("RelationField"): jen.Lit(field.Name), + jen.Id("Conditions"): jen.Id("conditions"), }), ), ), diff --git a/cmd/gen/conditions/tests/results/belongsto_owned.go b/cmd/gen/conditions/tests/results/belongsto_owned.go index dca65d7..e65a01f 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owned.go +++ b/cmd/gen/conditions/tests/results/belongsto_owned.go @@ -33,9 +33,10 @@ func OwnedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongs } func OwnedOwner(conditions ...orm.Condition[belongsto.Owner]) orm.Condition[belongsto.Owned] { return orm.JoinCondition[belongsto.Owned, belongsto.Owner]{ - Conditions: conditions, - T1Field: "OwnerID", - T2Field: "ID", + Conditions: conditions, + RelationField: "Owner", + T1Field: "OwnerID", + T2Field: "ID", } } func OwnedOwnerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owned] { diff --git a/cmd/gen/conditions/tests/results/hasmany_seller.go b/cmd/gen/conditions/tests/results/hasmany_seller.go index cfeacf4..f2f05f3 100644 --- a/cmd/gen/conditions/tests/results/hasmany_seller.go +++ b/cmd/gen/conditions/tests/results/hasmany_seller.go @@ -33,9 +33,10 @@ func SellerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasman } func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.Condition[hasmany.Seller] { return orm.JoinCondition[hasmany.Seller, hasmany.Company]{ - Conditions: conditions, - T1Field: "CompanyID", - T2Field: "ID", + Conditions: conditions, + RelationField: "Company", + T1Field: "CompanyID", + T2Field: "ID", } } func SellerCompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Seller] { diff --git a/cmd/gen/conditions/tests/results/hasone_city.go b/cmd/gen/conditions/tests/results/hasone_city.go index 56bd659..37bc252 100644 --- a/cmd/gen/conditions/tests/results/hasone_city.go +++ b/cmd/gen/conditions/tests/results/hasone_city.go @@ -33,9 +33,10 @@ func CityDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.C } func CityCountry(conditions ...orm.Condition[hasone.Country]) orm.Condition[hasone.City] { return orm.JoinCondition[hasone.City, hasone.Country]{ - Conditions: conditions, - T1Field: "CountryID", - T2Field: "ID", + Conditions: conditions, + RelationField: "Country", + T1Field: "CountryID", + T2Field: "ID", } } func CityCountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.City] { diff --git a/cmd/gen/conditions/tests/results/hasone_country.go b/cmd/gen/conditions/tests/results/hasone_country.go index d984f78..e0c12b3 100644 --- a/cmd/gen/conditions/tests/results/hasone_country.go +++ b/cmd/gen/conditions/tests/results/hasone_country.go @@ -33,8 +33,9 @@ func CountryDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hason } func CountryCapital(conditions ...orm.Condition[hasone.City]) orm.Condition[hasone.Country] { return orm.JoinCondition[hasone.Country, hasone.City]{ - Conditions: conditions, - T1Field: "ID", - T2Field: "CountryID", + Conditions: conditions, + RelationField: "Capital", + T1Field: "ID", + T2Field: "CountryID", } } diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package1.go b/cmd/gen/conditions/tests/results/multiplepackage_package1.go index d88a914..e49b983 100644 --- a/cmd/gen/conditions/tests/results/multiplepackage_package1.go +++ b/cmd/gen/conditions/tests/results/multiplepackage_package1.go @@ -34,8 +34,9 @@ func Package1DeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[pack } func Package1Package2(conditions ...orm.Condition[package2.Package2]) orm.Condition[package1.Package1] { return orm.JoinCondition[package1.Package1, package2.Package2]{ - Conditions: conditions, - T1Field: "ID", - T2Field: "Package1ID", + Conditions: conditions, + RelationField: "Package2", + T1Field: "ID", + T2Field: "Package1ID", } } diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey.go b/cmd/gen/conditions/tests/results/overrideforeignkey.go index a0188fe..ac05cbc 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkey.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkey.go @@ -33,9 +33,10 @@ func BicycleDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overr } func BicycleOwner(conditions ...orm.Condition[overrideforeignkey.Person]) orm.Condition[overrideforeignkey.Bicycle] { return orm.JoinCondition[overrideforeignkey.Bicycle, overrideforeignkey.Person]{ - Conditions: conditions, - T1Field: "OwnerSomethingID", - T2Field: "ID", + Conditions: conditions, + RelationField: "Owner", + T1Field: "OwnerSomethingID", + T2Field: "ID", } } func BicycleOwnerSomethingId(operator orm.Operator[string]) orm.WhereCondition[overrideforeignkey.Bicycle] { diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go index 8126c8c..cb51c84 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go @@ -33,8 +33,9 @@ func UserDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[override } func UserCreditCard(conditions ...orm.Condition[overrideforeignkeyinverse.CreditCard]) orm.Condition[overrideforeignkeyinverse.User] { return orm.JoinCondition[overrideforeignkeyinverse.User, overrideforeignkeyinverse.CreditCard]{ - Conditions: conditions, - T1Field: "ID", - T2Field: "UserReference", + Conditions: conditions, + RelationField: "CreditCard", + T1Field: "ID", + T2Field: "UserReference", } } diff --git a/cmd/gen/conditions/tests/results/overridereferences.go b/cmd/gen/conditions/tests/results/overridereferences.go index 7e81b2d..57703d4 100644 --- a/cmd/gen/conditions/tests/results/overridereferences.go +++ b/cmd/gen/conditions/tests/results/overridereferences.go @@ -33,9 +33,10 @@ func PhoneDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrid } func PhoneBrand(conditions ...orm.Condition[overridereferences.Brand]) orm.Condition[overridereferences.Phone] { return orm.JoinCondition[overridereferences.Phone, overridereferences.Brand]{ - Conditions: conditions, - T1Field: "BrandName", - T2Field: "Name", + Conditions: conditions, + RelationField: "Brand", + T1Field: "BrandName", + T2Field: "Name", } } func PhoneBrandName(operator orm.Operator[string]) orm.WhereCondition[overridereferences.Phone] { diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go index 66da8e9..4842c3a 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go @@ -39,8 +39,9 @@ func ComputerName(operator orm.Operator[string]) orm.WhereCondition[overriderefe } func ComputerProcessor(conditions ...orm.Condition[overridereferencesinverse.Processor]) orm.Condition[overridereferencesinverse.Computer] { return orm.JoinCondition[overridereferencesinverse.Computer, overridereferencesinverse.Processor]{ - Conditions: conditions, - T1Field: "Name", - T2Field: "ComputerName", + Conditions: conditions, + RelationField: "Processor", + T1Field: "Name", + T2Field: "ComputerName", } } diff --git a/cmd/gen/conditions/tests/results/selfreferential.go b/cmd/gen/conditions/tests/results/selfreferential.go index 66c6028..6e899e4 100644 --- a/cmd/gen/conditions/tests/results/selfreferential.go +++ b/cmd/gen/conditions/tests/results/selfreferential.go @@ -33,9 +33,10 @@ func EmployeeDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[self } func EmployeeBoss(conditions ...orm.Condition[selfreferential.Employee]) orm.Condition[selfreferential.Employee] { return orm.JoinCondition[selfreferential.Employee, selfreferential.Employee]{ - Conditions: conditions, - T1Field: "BossID", - T2Field: "ID", + Conditions: conditions, + RelationField: "Boss", + T1Field: "BossID", + T2Field: "ID", } } func EmployeeBossId(operator orm.Operator[orm.UUID]) orm.WhereCondition[selfreferential.Employee] { From 645c08b5fe44021a78d0ff9a9019f1934aeeae48 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 14:03:44 +0200 Subject: [PATCH 19/31] fix embedded conditions name to avoid repetition --- cmd/gen/conditions/condition.go | 5 ++++- cmd/gen/conditions/conditionsGenerator.go | 2 +- cmd/gen/conditions/embeddedField.go | 13 ++++++++++++- cmd/gen/conditions/field.go | 16 ++++++++-------- .../conditions/tests/goembedded/goembedded.go | 3 ++- .../tests/gormembedded/gormembedded.go | 4 +++- cmd/gen/conditions/tests/results/goembedded.go | 10 ++++++++-- cmd/gen/conditions/tests/results/gormembedded.go | 12 ++++++++++++ cmd/gen/conditions/type.go | 13 ++++++++++--- 9 files changed, 60 insertions(+), 18 deletions(-) diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index 85cc9fb..4428a81 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -17,6 +17,9 @@ const ( badaasORMJoinCondition = "JoinCondition" // badaas/orm/operator.go badaasORMOperator = "Operator" + // badaas/orm/baseModels.go + uuidModel = "UUIDModel" + uIntModel = "UIntModel" ) type Condition struct { @@ -266,7 +269,7 @@ func (condition *Condition) generateJoin(objectType Type, field Field, t1Field, // Generate condition names func getConditionName(typeV Type, field Field) string { - return typeV.Name() + strcase.ToPascal(field.ColumnPrefix) + strcase.ToPascal(field.Name) + return typeV.Name() + strcase.ToPascal(field.NamePrefix) + strcase.ToPascal(field.Name) } // Avoid importing the same package as the destination one diff --git a/cmd/gen/conditions/conditionsGenerator.go b/cmd/gen/conditions/conditionsGenerator.go index 6c218eb..b17a089 100644 --- a/cmd/gen/conditions/conditionsGenerator.go +++ b/cmd/gen/conditions/conditionsGenerator.go @@ -20,7 +20,7 @@ func NewConditionsGenerator(object types.Object) *ConditionsGenerator { // Add conditions for an object in the file func (cg ConditionsGenerator) Into(file *File) error { - fields, err := getFields(cg.objectType, "") + fields, err := getFields(cg.objectType) if err != nil { return err } diff --git a/cmd/gen/conditions/embeddedField.go b/cmd/gen/conditions/embeddedField.go index 509504a..fa507b7 100644 --- a/cmd/gen/conditions/embeddedField.go +++ b/cmd/gen/conditions/embeddedField.go @@ -3,6 +3,8 @@ package conditions import ( "errors" "go/types" + + "github.com/elliotchance/pie/v2" ) // Generate conditions for a embedded field using the "generator" @@ -13,11 +15,20 @@ func generateForEmbeddedField[T any](file *File, field Field, generator CodeGene panic(errors.New("unreachable! embedded objects are always structs")) } - fields, err := getStructFields(embeddedStructType, field.Tags.getEmbeddedPrefix()) + fields, err := getStructFields(embeddedStructType) if err != nil { // embedded field's type has not fields return []T{} } + if !isBaseModel(field.TypeString()) { + fields = pie.Map(fields, func(embeddedField Field) Field { + embeddedField.ColumnPrefix = field.Tags.getEmbeddedPrefix() + embeddedField.NamePrefix = field.Name + + return embeddedField + }) + } + return generator.ForEachField(file, fields) } diff --git a/cmd/gen/conditions/field.go b/cmd/gen/conditions/field.go index b43069f..56c0430 100644 --- a/cmd/gen/conditions/field.go +++ b/cmd/gen/conditions/field.go @@ -7,6 +7,7 @@ import ( type Field struct { Name string + NamePrefix string Type Type Embedded bool Tags GormTags @@ -85,7 +86,7 @@ func (field Field) ChangeType(newType types.Type) Field { // Get fields of a Badaas model // Returns error is objectType is not a Badaas model -func getFields(objectType Type, prefix string) ([]Field, error) { +func getFields(objectType Type) ([]Field, error) { // The underlying type has to be a struct and a Badaas Model // (ignore const, var, func, etc.) structType, err := objectType.BadaasModelStruct() @@ -93,12 +94,12 @@ func getFields(objectType Type, prefix string) ([]Field, error) { return nil, err } - return getStructFields(structType, prefix) + return getStructFields(structType) } // Get fields of a struct // Returns errors if the struct has not fields -func getStructFields(structType *types.Struct, prefix string) ([]Field, error) { +func getStructFields(structType *types.Struct) ([]Field, error) { numFields := structType.NumFields() if numFields == 0 { return nil, errors.New("struct has 0 fields") @@ -111,11 +112,10 @@ func getStructFields(structType *types.Struct, prefix string) ([]Field, error) { fieldObject := structType.Field(i) gormTags := getGormTags(structType.Tag(i)) fields = append(fields, Field{ - Name: fieldObject.Name(), - Type: Type{fieldObject.Type()}, - Embedded: fieldObject.Embedded() || gormTags.hasEmbedded(), - Tags: gormTags, - ColumnPrefix: prefix, + Name: fieldObject.Name(), + Type: Type{fieldObject.Type()}, + Embedded: fieldObject.Embedded() || gormTags.hasEmbedded(), + Tags: gormTags, }) } diff --git a/cmd/gen/conditions/tests/goembedded/goembedded.go b/cmd/gen/conditions/tests/goembedded/goembedded.go index ff7c0e1..220add0 100644 --- a/cmd/gen/conditions/tests/goembedded/goembedded.go +++ b/cmd/gen/conditions/tests/goembedded/goembedded.go @@ -3,11 +3,12 @@ package goembedded import "github.com/ditrit/badaas/orm" type ToBeEmbedded struct { - EmbeddedInt int + Int int } type GoEmbedded struct { orm.UIntModel + Int int ToBeEmbedded } diff --git a/cmd/gen/conditions/tests/gormembedded/gormembedded.go b/cmd/gen/conditions/tests/gormembedded/gormembedded.go index 6b7c219..d991826 100644 --- a/cmd/gen/conditions/tests/gormembedded/gormembedded.go +++ b/cmd/gen/conditions/tests/gormembedded/gormembedded.go @@ -9,5 +9,7 @@ type ToBeGormEmbedded struct { type GormEmbedded struct { orm.UIntModel - GormEmbedded ToBeGormEmbedded `gorm:"embedded;embeddedPrefix:gorm_embedded_"` + Int int + GormEmbedded ToBeGormEmbedded `gorm:"embedded;embeddedPrefix:gorm_embedded_"` + GormEmbeddedNoPrefix ToBeGormEmbedded `gorm:"embedded"` } diff --git a/cmd/gen/conditions/tests/results/goembedded.go b/cmd/gen/conditions/tests/results/goembedded.go index 7a7754a..a1ec950 100644 --- a/cmd/gen/conditions/tests/results/goembedded.go +++ b/cmd/gen/conditions/tests/results/goembedded.go @@ -31,9 +31,15 @@ func GoEmbeddedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[go Operator: operator, } } -func GoEmbeddedEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[goembedded.GoEmbedded] { +func GoEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, int]{ - Field: "EmbeddedInt", + Field: "Int", + Operator: operator, + } +} +func GoEmbeddedToBeEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.FieldCondition[goembedded.GoEmbedded, int]{ + Field: "Int", Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/gormembedded.go b/cmd/gen/conditions/tests/results/gormembedded.go index 2959092..56fd1e3 100644 --- a/cmd/gen/conditions/tests/results/gormembedded.go +++ b/cmd/gen/conditions/tests/results/gormembedded.go @@ -31,6 +31,12 @@ func GormEmbeddedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[ Operator: operator, } } +func GormEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.FieldCondition[gormembedded.GormEmbedded, int]{ + Field: "Int", + Operator: operator, + } +} func GormEmbeddedGormEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, int]{ ColumnPrefix: "gorm_embedded_", @@ -38,3 +44,9 @@ func GormEmbeddedGormEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[ Operator: operator, } } +func GormEmbeddedGormEmbeddedNoPrefixInt(operator orm.Operator[int]) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.FieldCondition[gormembedded.GormEmbedded, int]{ + Field: "Int", + Operator: operator, + } +} diff --git a/cmd/gen/conditions/type.go b/cmd/gen/conditions/type.go index 22a576c..74aa6e0 100644 --- a/cmd/gen/conditions/type.go +++ b/cmd/gen/conditions/type.go @@ -11,7 +11,10 @@ import ( var ( // badaas/orm/baseModels.go - badaasORMBaseModels = []string{"github.com/ditrit/badaas/orm.UUIDModel", "github.com/ditrit/badaas/orm.UIntModel", "gorm.io/gorm.Model"} + badaasORMBaseModels = []string{ + badaasORMPath + "." + uuidModel, + badaasORMPath + "." + uIntModel, + } // database/sql nullString = "database/sql.NullString" @@ -69,7 +72,7 @@ func isBadaasModel(structType *types.Struct) bool { for i := 0; i < structType.NumFields(); i++ { field := structType.Field(i) - if field.Embedded() && pie.Contains(badaasORMBaseModels, field.Type().String()) { + if field.Embedded() && isBaseModel(field.Type().String()) { return true } } @@ -77,10 +80,14 @@ func isBadaasModel(structType *types.Struct) bool { return false } +func isBaseModel(fieldName string) bool { + return pie.Contains(badaasORMBaseModels, fieldName) +} + // Returns true is the type has a foreign key to the field's object // (another field that references that object) func (t Type) HasFK(field Field) (bool, error) { - objectFields, err := getFields(t, "") + objectFields, err := getFields(t) if err != nil { return false, err } From c990684c915659d8070d9f90604952b05adbb78c Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 14:14:30 +0200 Subject: [PATCH 20/31] conditions now use field identifier --- cmd/gen/conditions/condition.go | 74 ++++++--- .../conditions/tests/results/basicpointers.go | 142 ++++++++++++------ .../conditions/tests/results/basicslices.go | 142 ++++++++++++------ .../tests/results/basicslicespointer.go | 142 ++++++++++++------ .../conditions/tests/results/basictypes.go | 142 ++++++++++++------ .../tests/results/belongsto_owned.go | 23 +-- .../tests/results/belongsto_owner.go | 16 +- .../tests/results/columndefinition.go | 23 +-- .../conditions/tests/results/customtype.go | 23 +-- .../conditions/tests/results/goembedded.go | 30 ++-- .../conditions/tests/results/gormembedded.go | 41 +++-- .../tests/results/hasmany_company.go | 16 +- .../tests/results/hasmany_seller.go | 23 +-- .../conditions/tests/results/hasone_city.go | 23 +-- .../tests/results/hasone_country.go | 16 +- .../tests/results/multiplepackage_package1.go | 16 +- .../conditions/tests/results/nullabletypes.go | 72 ++++++--- .../tests/results/overrideforeignkey.go | 23 +-- .../overrideforeignkeyinverse_credit_card.go | 23 +-- .../results/overrideforeignkeyinverse_user.go | 16 +- .../tests/results/overridereferences.go | 23 +-- .../overridereferencesinverse_computer.go | 23 +-- .../overridereferencesinverse_processor.go | 23 +-- .../tests/results/selfreferential.go | 23 +-- cmd/gen/conditions/tests/results/uintmodel.go | 16 +- cmd/gen/conditions/tests/results/uuidmodel.go | 16 +- go.mod | 2 +- 27 files changed, 741 insertions(+), 411 deletions(-) diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index 4428a81..8a6cccf 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -11,10 +11,15 @@ import ( const ( // badaas/orm/condition.go - badaasORMCondition = "Condition" - badaasORMFieldCondition = "FieldCondition" - badaasORMWhereCondition = "WhereCondition" - badaasORMJoinCondition = "JoinCondition" + badaasORMCondition = "Condition" + badaasORMFieldCondition = "FieldCondition" + badaasORMWhereCondition = "WhereCondition" + badaasORMJoinCondition = "JoinCondition" + badaasORMFieldIdentifier = "FieldIdentifier" + IDFieldID = "IDFieldID" + CreatedAtFieldID = "CreatedAtFieldID" + UpdatedAtFieldID = "UpdatedAtFieldID" + DeletedAtFieldID = "DeletedAtFieldID" // badaas/orm/operator.go badaasORMOperator = "Operator" // badaas/orm/baseModels.go @@ -22,6 +27,13 @@ const ( uIntModel = "UIntModel" ) +var constantFieldIdentifiers = map[string]*jen.Statement{ + "ID": jen.Qual(badaasORMPath, IDFieldID), + "CreatedAt": jen.Qual(badaasORMPath, CreatedAtFieldID), + "UpdatedAt": jen.Qual(badaasORMPath, UpdatedAtFieldID), + "DeletedAt": jen.Qual(badaasORMPath, DeletedAtFieldID), +} + type Condition struct { codes []jen.Code param *JenParam @@ -164,20 +176,12 @@ func (condition *Condition) generateWhere(objectType Type, field Field) { conditionName := getConditionName(objectType, field) log.Logger.Debugf("Generated %q", conditionName) - conditionValues := jen.Dict{ - jen.Id("Operator"): jen.Id("operator"), - } - columnName := field.getColumnName() + var fieldIdentifier *jen.Statement - if columnName != "" { - conditionValues[jen.Id("Column")] = jen.Lit(columnName) + if constantFieldIdentifier, ok := constantFieldIdentifiers[field.Name]; ok { + fieldIdentifier = constantFieldIdentifier } else { - conditionValues[jen.Id("Field")] = jen.Lit(field.Name) - } - - columnPrefix := field.ColumnPrefix - if columnPrefix != "" { - conditionValues[jen.Id("ColumnPrefix")] = jen.Lit(columnPrefix) + fieldIdentifier = condition.createFieldIdentifier(field, conditionName) } condition.codes = append( @@ -190,12 +194,48 @@ func (condition *Condition) generateWhere(objectType Type, field Field) { whereCondition, ).Block( jen.Return( - fieldCondition.Clone().Values(conditionValues), + fieldCondition.Clone().Values(jen.Dict{ + jen.Id("Operator"): jen.Id("operator"), + jen.Id("FieldIdentifier"): fieldIdentifier, + }), ), ), ) } +// create a variable containing the definition of the field identifier +// to use it in the where condition and in the preload condition +func (condition *Condition) createFieldIdentifier(field Field, conditionName string) *jen.Statement { + fieldIdentifierValues := jen.Dict{} + columnName := field.getColumnName() + + if columnName != "" { + fieldIdentifierValues[jen.Id("Column")] = jen.Lit(columnName) + } else { + fieldIdentifierValues[jen.Id("Field")] = jen.Lit(field.Name) + } + + columnPrefix := field.ColumnPrefix + if columnPrefix != "" { + fieldIdentifierValues[jen.Id("ColumnPrefix")] = jen.Lit(columnPrefix) + } + + fieldIdentifierVar := jen.Qual( + badaasORMPath, badaasORMFieldIdentifier, + ).Values(fieldIdentifierValues) + + fieldIdentifierName := strcase.ToCamel(conditionName) + "FieldID" + + condition.codes = append( + condition.codes, + jen.Var().Id( + fieldIdentifierName, + ).Op("=").Add(fieldIdentifierVar), + ) + + return jen.Qual("", fieldIdentifierName) +} + // Generate a JoinCondition between the object and field's object // when object has a foreign key to the field's object func (condition *Condition) generateJoinWithFK(objectType Type, field Field) { diff --git a/cmd/gen/conditions/tests/results/basicpointers.go b/cmd/gen/conditions/tests/results/basicpointers.go index fc1dc3d..1df0910 100644 --- a/cmd/gen/conditions/tests/results/basicpointers.go +++ b/cmd/gen/conditions/tests/results/basicpointers.go @@ -9,133 +9,187 @@ import ( func BasicPointersId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func BasicPointersCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func BasicPointersUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func BasicPointersDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var basicPointersBoolFieldID = orm.FieldIdentifier{Field: "Bool"} + func BasicPointersBool(operator orm.Operator[bool]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, bool]{ - Field: "Bool", - Operator: operator, + FieldIdentifier: basicPointersBoolFieldID, + Operator: operator, } } + +var basicPointersIntFieldID = orm.FieldIdentifier{Field: "Int"} + func BasicPointersInt(operator orm.Operator[int]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, int]{ - Field: "Int", - Operator: operator, + FieldIdentifier: basicPointersIntFieldID, + Operator: operator, } } + +var basicPointersInt8FieldID = orm.FieldIdentifier{Field: "Int8"} + func BasicPointersInt8(operator orm.Operator[int8]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, int8]{ - Field: "Int8", - Operator: operator, + FieldIdentifier: basicPointersInt8FieldID, + Operator: operator, } } + +var basicPointersInt16FieldID = orm.FieldIdentifier{Field: "Int16"} + func BasicPointersInt16(operator orm.Operator[int16]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, int16]{ - Field: "Int16", - Operator: operator, + FieldIdentifier: basicPointersInt16FieldID, + Operator: operator, } } + +var basicPointersInt32FieldID = orm.FieldIdentifier{Field: "Int32"} + func BasicPointersInt32(operator orm.Operator[int32]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, int32]{ - Field: "Int32", - Operator: operator, + FieldIdentifier: basicPointersInt32FieldID, + Operator: operator, } } + +var basicPointersInt64FieldID = orm.FieldIdentifier{Field: "Int64"} + func BasicPointersInt64(operator orm.Operator[int64]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, int64]{ - Field: "Int64", - Operator: operator, + FieldIdentifier: basicPointersInt64FieldID, + Operator: operator, } } + +var basicPointersUIntFieldID = orm.FieldIdentifier{Field: "UInt"} + func BasicPointersUInt(operator orm.Operator[uint]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint]{ - Field: "UInt", - Operator: operator, + FieldIdentifier: basicPointersUIntFieldID, + Operator: operator, } } + +var basicPointersUInt8FieldID = orm.FieldIdentifier{Field: "UInt8"} + func BasicPointersUInt8(operator orm.Operator[uint8]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint8]{ - Field: "UInt8", - Operator: operator, + FieldIdentifier: basicPointersUInt8FieldID, + Operator: operator, } } + +var basicPointersUInt16FieldID = orm.FieldIdentifier{Field: "UInt16"} + func BasicPointersUInt16(operator orm.Operator[uint16]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint16]{ - Field: "UInt16", - Operator: operator, + FieldIdentifier: basicPointersUInt16FieldID, + Operator: operator, } } + +var basicPointersUInt32FieldID = orm.FieldIdentifier{Field: "UInt32"} + func BasicPointersUInt32(operator orm.Operator[uint32]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint32]{ - Field: "UInt32", - Operator: operator, + FieldIdentifier: basicPointersUInt32FieldID, + Operator: operator, } } + +var basicPointersUInt64FieldID = orm.FieldIdentifier{Field: "UInt64"} + func BasicPointersUInt64(operator orm.Operator[uint64]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint64]{ - Field: "UInt64", - Operator: operator, + FieldIdentifier: basicPointersUInt64FieldID, + Operator: operator, } } + +var basicPointersUIntptrFieldID = orm.FieldIdentifier{Field: "UIntptr"} + func BasicPointersUIntptr(operator orm.Operator[uintptr]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uintptr]{ - Field: "UIntptr", - Operator: operator, + FieldIdentifier: basicPointersUIntptrFieldID, + Operator: operator, } } + +var basicPointersFloat32FieldID = orm.FieldIdentifier{Field: "Float32"} + func BasicPointersFloat32(operator orm.Operator[float32]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, float32]{ - Field: "Float32", - Operator: operator, + FieldIdentifier: basicPointersFloat32FieldID, + Operator: operator, } } + +var basicPointersFloat64FieldID = orm.FieldIdentifier{Field: "Float64"} + func BasicPointersFloat64(operator orm.Operator[float64]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, float64]{ - Field: "Float64", - Operator: operator, + FieldIdentifier: basicPointersFloat64FieldID, + Operator: operator, } } + +var basicPointersComplex64FieldID = orm.FieldIdentifier{Field: "Complex64"} + func BasicPointersComplex64(operator orm.Operator[complex64]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, complex64]{ - Field: "Complex64", - Operator: operator, + FieldIdentifier: basicPointersComplex64FieldID, + Operator: operator, } } + +var basicPointersComplex128FieldID = orm.FieldIdentifier{Field: "Complex128"} + func BasicPointersComplex128(operator orm.Operator[complex128]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, complex128]{ - Field: "Complex128", - Operator: operator, + FieldIdentifier: basicPointersComplex128FieldID, + Operator: operator, } } + +var basicPointersStringFieldID = orm.FieldIdentifier{Field: "String"} + func BasicPointersString(operator orm.Operator[string]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, string]{ - Field: "String", - Operator: operator, + FieldIdentifier: basicPointersStringFieldID, + Operator: operator, } } + +var basicPointersByteFieldID = orm.FieldIdentifier{Field: "Byte"} + func BasicPointersByte(operator orm.Operator[uint8]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint8]{ - Field: "Byte", - Operator: operator, + FieldIdentifier: basicPointersByteFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/basicslices.go b/cmd/gen/conditions/tests/results/basicslices.go index a6e56c3..5eecb29 100644 --- a/cmd/gen/conditions/tests/results/basicslices.go +++ b/cmd/gen/conditions/tests/results/basicslices.go @@ -9,133 +9,187 @@ import ( func BasicSlicesId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func BasicSlicesCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func BasicSlicesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func BasicSlicesDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var basicSlicesBoolFieldID = orm.FieldIdentifier{Field: "Bool"} + func BasicSlicesBool(operator orm.Operator[[]bool]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []bool]{ - Field: "Bool", - Operator: operator, + FieldIdentifier: basicSlicesBoolFieldID, + Operator: operator, } } + +var basicSlicesIntFieldID = orm.FieldIdentifier{Field: "Int"} + func BasicSlicesInt(operator orm.Operator[[]int]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []int]{ - Field: "Int", - Operator: operator, + FieldIdentifier: basicSlicesIntFieldID, + Operator: operator, } } + +var basicSlicesInt8FieldID = orm.FieldIdentifier{Field: "Int8"} + func BasicSlicesInt8(operator orm.Operator[[]int8]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []int8]{ - Field: "Int8", - Operator: operator, + FieldIdentifier: basicSlicesInt8FieldID, + Operator: operator, } } + +var basicSlicesInt16FieldID = orm.FieldIdentifier{Field: "Int16"} + func BasicSlicesInt16(operator orm.Operator[[]int16]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []int16]{ - Field: "Int16", - Operator: operator, + FieldIdentifier: basicSlicesInt16FieldID, + Operator: operator, } } + +var basicSlicesInt32FieldID = orm.FieldIdentifier{Field: "Int32"} + func BasicSlicesInt32(operator orm.Operator[[]int32]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []int32]{ - Field: "Int32", - Operator: operator, + FieldIdentifier: basicSlicesInt32FieldID, + Operator: operator, } } + +var basicSlicesInt64FieldID = orm.FieldIdentifier{Field: "Int64"} + func BasicSlicesInt64(operator orm.Operator[[]int64]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []int64]{ - Field: "Int64", - Operator: operator, + FieldIdentifier: basicSlicesInt64FieldID, + Operator: operator, } } + +var basicSlicesUIntFieldID = orm.FieldIdentifier{Field: "UInt"} + func BasicSlicesUInt(operator orm.Operator[[]uint]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint]{ - Field: "UInt", - Operator: operator, + FieldIdentifier: basicSlicesUIntFieldID, + Operator: operator, } } + +var basicSlicesUInt8FieldID = orm.FieldIdentifier{Field: "UInt8"} + func BasicSlicesUInt8(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint8]{ - Field: "UInt8", - Operator: operator, + FieldIdentifier: basicSlicesUInt8FieldID, + Operator: operator, } } + +var basicSlicesUInt16FieldID = orm.FieldIdentifier{Field: "UInt16"} + func BasicSlicesUInt16(operator orm.Operator[[]uint16]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint16]{ - Field: "UInt16", - Operator: operator, + FieldIdentifier: basicSlicesUInt16FieldID, + Operator: operator, } } + +var basicSlicesUInt32FieldID = orm.FieldIdentifier{Field: "UInt32"} + func BasicSlicesUInt32(operator orm.Operator[[]uint32]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint32]{ - Field: "UInt32", - Operator: operator, + FieldIdentifier: basicSlicesUInt32FieldID, + Operator: operator, } } + +var basicSlicesUInt64FieldID = orm.FieldIdentifier{Field: "UInt64"} + func BasicSlicesUInt64(operator orm.Operator[[]uint64]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint64]{ - Field: "UInt64", - Operator: operator, + FieldIdentifier: basicSlicesUInt64FieldID, + Operator: operator, } } + +var basicSlicesUIntptrFieldID = orm.FieldIdentifier{Field: "UIntptr"} + func BasicSlicesUIntptr(operator orm.Operator[[]uintptr]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uintptr]{ - Field: "UIntptr", - Operator: operator, + FieldIdentifier: basicSlicesUIntptrFieldID, + Operator: operator, } } + +var basicSlicesFloat32FieldID = orm.FieldIdentifier{Field: "Float32"} + func BasicSlicesFloat32(operator orm.Operator[[]float32]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []float32]{ - Field: "Float32", - Operator: operator, + FieldIdentifier: basicSlicesFloat32FieldID, + Operator: operator, } } + +var basicSlicesFloat64FieldID = orm.FieldIdentifier{Field: "Float64"} + func BasicSlicesFloat64(operator orm.Operator[[]float64]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []float64]{ - Field: "Float64", - Operator: operator, + FieldIdentifier: basicSlicesFloat64FieldID, + Operator: operator, } } + +var basicSlicesComplex64FieldID = orm.FieldIdentifier{Field: "Complex64"} + func BasicSlicesComplex64(operator orm.Operator[[]complex64]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []complex64]{ - Field: "Complex64", - Operator: operator, + FieldIdentifier: basicSlicesComplex64FieldID, + Operator: operator, } } + +var basicSlicesComplex128FieldID = orm.FieldIdentifier{Field: "Complex128"} + func BasicSlicesComplex128(operator orm.Operator[[]complex128]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []complex128]{ - Field: "Complex128", - Operator: operator, + FieldIdentifier: basicSlicesComplex128FieldID, + Operator: operator, } } + +var basicSlicesStringFieldID = orm.FieldIdentifier{Field: "String"} + func BasicSlicesString(operator orm.Operator[[]string]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []string]{ - Field: "String", - Operator: operator, + FieldIdentifier: basicSlicesStringFieldID, + Operator: operator, } } + +var basicSlicesByteFieldID = orm.FieldIdentifier{Field: "Byte"} + func BasicSlicesByte(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint8]{ - Field: "Byte", - Operator: operator, + FieldIdentifier: basicSlicesByteFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/basicslicespointer.go b/cmd/gen/conditions/tests/results/basicslicespointer.go index 90b84f5..561f088 100644 --- a/cmd/gen/conditions/tests/results/basicslicespointer.go +++ b/cmd/gen/conditions/tests/results/basicslicespointer.go @@ -9,133 +9,187 @@ import ( func BasicSlicesPointerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func BasicSlicesPointerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func BasicSlicesPointerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func BasicSlicesPointerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var basicSlicesPointerBoolFieldID = orm.FieldIdentifier{Field: "Bool"} + func BasicSlicesPointerBool(operator orm.Operator[[]bool]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []bool]{ - Field: "Bool", - Operator: operator, + FieldIdentifier: basicSlicesPointerBoolFieldID, + Operator: operator, } } + +var basicSlicesPointerIntFieldID = orm.FieldIdentifier{Field: "Int"} + func BasicSlicesPointerInt(operator orm.Operator[[]int]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int]{ - Field: "Int", - Operator: operator, + FieldIdentifier: basicSlicesPointerIntFieldID, + Operator: operator, } } + +var basicSlicesPointerInt8FieldID = orm.FieldIdentifier{Field: "Int8"} + func BasicSlicesPointerInt8(operator orm.Operator[[]int8]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int8]{ - Field: "Int8", - Operator: operator, + FieldIdentifier: basicSlicesPointerInt8FieldID, + Operator: operator, } } + +var basicSlicesPointerInt16FieldID = orm.FieldIdentifier{Field: "Int16"} + func BasicSlicesPointerInt16(operator orm.Operator[[]int16]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int16]{ - Field: "Int16", - Operator: operator, + FieldIdentifier: basicSlicesPointerInt16FieldID, + Operator: operator, } } + +var basicSlicesPointerInt32FieldID = orm.FieldIdentifier{Field: "Int32"} + func BasicSlicesPointerInt32(operator orm.Operator[[]int32]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int32]{ - Field: "Int32", - Operator: operator, + FieldIdentifier: basicSlicesPointerInt32FieldID, + Operator: operator, } } + +var basicSlicesPointerInt64FieldID = orm.FieldIdentifier{Field: "Int64"} + func BasicSlicesPointerInt64(operator orm.Operator[[]int64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int64]{ - Field: "Int64", - Operator: operator, + FieldIdentifier: basicSlicesPointerInt64FieldID, + Operator: operator, } } + +var basicSlicesPointerUIntFieldID = orm.FieldIdentifier{Field: "UInt"} + func BasicSlicesPointerUInt(operator orm.Operator[[]uint]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint]{ - Field: "UInt", - Operator: operator, + FieldIdentifier: basicSlicesPointerUIntFieldID, + Operator: operator, } } + +var basicSlicesPointerUInt8FieldID = orm.FieldIdentifier{Field: "UInt8"} + func BasicSlicesPointerUInt8(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint8]{ - Field: "UInt8", - Operator: operator, + FieldIdentifier: basicSlicesPointerUInt8FieldID, + Operator: operator, } } + +var basicSlicesPointerUInt16FieldID = orm.FieldIdentifier{Field: "UInt16"} + func BasicSlicesPointerUInt16(operator orm.Operator[[]uint16]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint16]{ - Field: "UInt16", - Operator: operator, + FieldIdentifier: basicSlicesPointerUInt16FieldID, + Operator: operator, } } + +var basicSlicesPointerUInt32FieldID = orm.FieldIdentifier{Field: "UInt32"} + func BasicSlicesPointerUInt32(operator orm.Operator[[]uint32]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint32]{ - Field: "UInt32", - Operator: operator, + FieldIdentifier: basicSlicesPointerUInt32FieldID, + Operator: operator, } } + +var basicSlicesPointerUInt64FieldID = orm.FieldIdentifier{Field: "UInt64"} + func BasicSlicesPointerUInt64(operator orm.Operator[[]uint64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint64]{ - Field: "UInt64", - Operator: operator, + FieldIdentifier: basicSlicesPointerUInt64FieldID, + Operator: operator, } } + +var basicSlicesPointerUIntptrFieldID = orm.FieldIdentifier{Field: "UIntptr"} + func BasicSlicesPointerUIntptr(operator orm.Operator[[]uintptr]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uintptr]{ - Field: "UIntptr", - Operator: operator, + FieldIdentifier: basicSlicesPointerUIntptrFieldID, + Operator: operator, } } + +var basicSlicesPointerFloat32FieldID = orm.FieldIdentifier{Field: "Float32"} + func BasicSlicesPointerFloat32(operator orm.Operator[[]float32]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []float32]{ - Field: "Float32", - Operator: operator, + FieldIdentifier: basicSlicesPointerFloat32FieldID, + Operator: operator, } } + +var basicSlicesPointerFloat64FieldID = orm.FieldIdentifier{Field: "Float64"} + func BasicSlicesPointerFloat64(operator orm.Operator[[]float64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []float64]{ - Field: "Float64", - Operator: operator, + FieldIdentifier: basicSlicesPointerFloat64FieldID, + Operator: operator, } } + +var basicSlicesPointerComplex64FieldID = orm.FieldIdentifier{Field: "Complex64"} + func BasicSlicesPointerComplex64(operator orm.Operator[[]complex64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []complex64]{ - Field: "Complex64", - Operator: operator, + FieldIdentifier: basicSlicesPointerComplex64FieldID, + Operator: operator, } } + +var basicSlicesPointerComplex128FieldID = orm.FieldIdentifier{Field: "Complex128"} + func BasicSlicesPointerComplex128(operator orm.Operator[[]complex128]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []complex128]{ - Field: "Complex128", - Operator: operator, + FieldIdentifier: basicSlicesPointerComplex128FieldID, + Operator: operator, } } + +var basicSlicesPointerStringFieldID = orm.FieldIdentifier{Field: "String"} + func BasicSlicesPointerString(operator orm.Operator[[]string]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []string]{ - Field: "String", - Operator: operator, + FieldIdentifier: basicSlicesPointerStringFieldID, + Operator: operator, } } + +var basicSlicesPointerByteFieldID = orm.FieldIdentifier{Field: "Byte"} + func BasicSlicesPointerByte(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint8]{ - Field: "Byte", - Operator: operator, + FieldIdentifier: basicSlicesPointerByteFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/basictypes.go b/cmd/gen/conditions/tests/results/basictypes.go index beee4cf..555f5c1 100644 --- a/cmd/gen/conditions/tests/results/basictypes.go +++ b/cmd/gen/conditions/tests/results/basictypes.go @@ -9,133 +9,187 @@ import ( func BasicTypesId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func BasicTypesCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func BasicTypesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func BasicTypesDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var basicTypesBoolFieldID = orm.FieldIdentifier{Field: "Bool"} + func BasicTypesBool(operator orm.Operator[bool]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, bool]{ - Field: "Bool", - Operator: operator, + FieldIdentifier: basicTypesBoolFieldID, + Operator: operator, } } + +var basicTypesIntFieldID = orm.FieldIdentifier{Field: "Int"} + func BasicTypesInt(operator orm.Operator[int]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, int]{ - Field: "Int", - Operator: operator, + FieldIdentifier: basicTypesIntFieldID, + Operator: operator, } } + +var basicTypesInt8FieldID = orm.FieldIdentifier{Field: "Int8"} + func BasicTypesInt8(operator orm.Operator[int8]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, int8]{ - Field: "Int8", - Operator: operator, + FieldIdentifier: basicTypesInt8FieldID, + Operator: operator, } } + +var basicTypesInt16FieldID = orm.FieldIdentifier{Field: "Int16"} + func BasicTypesInt16(operator orm.Operator[int16]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, int16]{ - Field: "Int16", - Operator: operator, + FieldIdentifier: basicTypesInt16FieldID, + Operator: operator, } } + +var basicTypesInt32FieldID = orm.FieldIdentifier{Field: "Int32"} + func BasicTypesInt32(operator orm.Operator[int32]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, int32]{ - Field: "Int32", - Operator: operator, + FieldIdentifier: basicTypesInt32FieldID, + Operator: operator, } } + +var basicTypesInt64FieldID = orm.FieldIdentifier{Field: "Int64"} + func BasicTypesInt64(operator orm.Operator[int64]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, int64]{ - Field: "Int64", - Operator: operator, + FieldIdentifier: basicTypesInt64FieldID, + Operator: operator, } } + +var basicTypesUIntFieldID = orm.FieldIdentifier{Field: "UInt"} + func BasicTypesUInt(operator orm.Operator[uint]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint]{ - Field: "UInt", - Operator: operator, + FieldIdentifier: basicTypesUIntFieldID, + Operator: operator, } } + +var basicTypesUInt8FieldID = orm.FieldIdentifier{Field: "UInt8"} + func BasicTypesUInt8(operator orm.Operator[uint8]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint8]{ - Field: "UInt8", - Operator: operator, + FieldIdentifier: basicTypesUInt8FieldID, + Operator: operator, } } + +var basicTypesUInt16FieldID = orm.FieldIdentifier{Field: "UInt16"} + func BasicTypesUInt16(operator orm.Operator[uint16]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint16]{ - Field: "UInt16", - Operator: operator, + FieldIdentifier: basicTypesUInt16FieldID, + Operator: operator, } } + +var basicTypesUInt32FieldID = orm.FieldIdentifier{Field: "UInt32"} + func BasicTypesUInt32(operator orm.Operator[uint32]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint32]{ - Field: "UInt32", - Operator: operator, + FieldIdentifier: basicTypesUInt32FieldID, + Operator: operator, } } + +var basicTypesUInt64FieldID = orm.FieldIdentifier{Field: "UInt64"} + func BasicTypesUInt64(operator orm.Operator[uint64]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint64]{ - Field: "UInt64", - Operator: operator, + FieldIdentifier: basicTypesUInt64FieldID, + Operator: operator, } } + +var basicTypesUIntptrFieldID = orm.FieldIdentifier{Field: "UIntptr"} + func BasicTypesUIntptr(operator orm.Operator[uintptr]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uintptr]{ - Field: "UIntptr", - Operator: operator, + FieldIdentifier: basicTypesUIntptrFieldID, + Operator: operator, } } + +var basicTypesFloat32FieldID = orm.FieldIdentifier{Field: "Float32"} + func BasicTypesFloat32(operator orm.Operator[float32]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, float32]{ - Field: "Float32", - Operator: operator, + FieldIdentifier: basicTypesFloat32FieldID, + Operator: operator, } } + +var basicTypesFloat64FieldID = orm.FieldIdentifier{Field: "Float64"} + func BasicTypesFloat64(operator orm.Operator[float64]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, float64]{ - Field: "Float64", - Operator: operator, + FieldIdentifier: basicTypesFloat64FieldID, + Operator: operator, } } + +var basicTypesComplex64FieldID = orm.FieldIdentifier{Field: "Complex64"} + func BasicTypesComplex64(operator orm.Operator[complex64]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, complex64]{ - Field: "Complex64", - Operator: operator, + FieldIdentifier: basicTypesComplex64FieldID, + Operator: operator, } } + +var basicTypesComplex128FieldID = orm.FieldIdentifier{Field: "Complex128"} + func BasicTypesComplex128(operator orm.Operator[complex128]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, complex128]{ - Field: "Complex128", - Operator: operator, + FieldIdentifier: basicTypesComplex128FieldID, + Operator: operator, } } + +var basicTypesStringFieldID = orm.FieldIdentifier{Field: "String"} + func BasicTypesString(operator orm.Operator[string]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, string]{ - Field: "String", - Operator: operator, + FieldIdentifier: basicTypesStringFieldID, + Operator: operator, } } + +var basicTypesByteFieldID = orm.FieldIdentifier{Field: "Byte"} + func BasicTypesByte(operator orm.Operator[uint8]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint8]{ - Field: "Byte", - Operator: operator, + FieldIdentifier: basicTypesByteFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/belongsto_owned.go b/cmd/gen/conditions/tests/results/belongsto_owned.go index e65a01f..faa3c40 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owned.go +++ b/cmd/gen/conditions/tests/results/belongsto_owned.go @@ -9,26 +9,26 @@ import ( func OwnedId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owned] { return orm.FieldCondition[belongsto.Owned, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func OwnedCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owned] { return orm.FieldCondition[belongsto.Owned, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func OwnedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owned] { return orm.FieldCondition[belongsto.Owned, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func OwnedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owned] { return orm.FieldCondition[belongsto.Owned, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } func OwnedOwner(conditions ...orm.Condition[belongsto.Owner]) orm.Condition[belongsto.Owned] { @@ -39,9 +39,12 @@ func OwnedOwner(conditions ...orm.Condition[belongsto.Owner]) orm.Condition[belo T2Field: "ID", } } + +var ownedOwnerIdFieldID = orm.FieldIdentifier{Field: "OwnerID"} + func OwnedOwnerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owned] { return orm.FieldCondition[belongsto.Owned, orm.UUID]{ - Field: "OwnerID", - Operator: operator, + FieldIdentifier: ownedOwnerIdFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/belongsto_owner.go b/cmd/gen/conditions/tests/results/belongsto_owner.go index 9fb6104..7caf93a 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owner.go +++ b/cmd/gen/conditions/tests/results/belongsto_owner.go @@ -9,25 +9,25 @@ import ( func OwnerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owner] { return orm.FieldCondition[belongsto.Owner, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func OwnerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owner] { return orm.FieldCondition[belongsto.Owner, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func OwnerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owner] { return orm.FieldCondition[belongsto.Owner, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func OwnerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owner] { return orm.FieldCondition[belongsto.Owner, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/columndefinition.go b/cmd/gen/conditions/tests/results/columndefinition.go index 0f21596..f27271d 100644 --- a/cmd/gen/conditions/tests/results/columndefinition.go +++ b/cmd/gen/conditions/tests/results/columndefinition.go @@ -9,31 +9,34 @@ import ( func ColumnDefinitionId(operator orm.Operator[orm.UUID]) orm.WhereCondition[columndefinition.ColumnDefinition] { return orm.FieldCondition[columndefinition.ColumnDefinition, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func ColumnDefinitionCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[columndefinition.ColumnDefinition] { return orm.FieldCondition[columndefinition.ColumnDefinition, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func ColumnDefinitionUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[columndefinition.ColumnDefinition] { return orm.FieldCondition[columndefinition.ColumnDefinition, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func ColumnDefinitionDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[columndefinition.ColumnDefinition] { return orm.FieldCondition[columndefinition.ColumnDefinition, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var columnDefinitionStringFieldID = orm.FieldIdentifier{Column: "string_something_else"} + func ColumnDefinitionString(operator orm.Operator[string]) orm.WhereCondition[columndefinition.ColumnDefinition] { return orm.FieldCondition[columndefinition.ColumnDefinition, string]{ - Column: "string_something_else", - Operator: operator, + FieldIdentifier: columnDefinitionStringFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/customtype.go b/cmd/gen/conditions/tests/results/customtype.go index ba55b61..daff176 100644 --- a/cmd/gen/conditions/tests/results/customtype.go +++ b/cmd/gen/conditions/tests/results/customtype.go @@ -9,31 +9,34 @@ import ( func CustomTypeId(operator orm.Operator[orm.UUID]) orm.WhereCondition[customtype.CustomType] { return orm.FieldCondition[customtype.CustomType, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func CustomTypeCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[customtype.CustomType] { return orm.FieldCondition[customtype.CustomType, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func CustomTypeUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[customtype.CustomType] { return orm.FieldCondition[customtype.CustomType, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func CustomTypeDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[customtype.CustomType] { return orm.FieldCondition[customtype.CustomType, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var customTypeCustomFieldID = orm.FieldIdentifier{Field: "Custom"} + func CustomTypeCustom(operator orm.Operator[customtype.MultiString]) orm.WhereCondition[customtype.CustomType] { return orm.FieldCondition[customtype.CustomType, customtype.MultiString]{ - Field: "Custom", - Operator: operator, + FieldIdentifier: customTypeCustomFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/goembedded.go b/cmd/gen/conditions/tests/results/goembedded.go index a1ec950..7fc0bd4 100644 --- a/cmd/gen/conditions/tests/results/goembedded.go +++ b/cmd/gen/conditions/tests/results/goembedded.go @@ -9,37 +9,43 @@ import ( func GoEmbeddedId(operator orm.Operator[uint]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, uint]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func GoEmbeddedCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func GoEmbeddedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func GoEmbeddedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var goEmbeddedIntFieldID = orm.FieldIdentifier{Field: "Int"} + func GoEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, int]{ - Field: "Int", - Operator: operator, + FieldIdentifier: goEmbeddedIntFieldID, + Operator: operator, } } + +var goEmbeddedToBeEmbeddedIntFieldID = orm.FieldIdentifier{Field: "Int"} + func GoEmbeddedToBeEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, int]{ - Field: "Int", - Operator: operator, + FieldIdentifier: goEmbeddedToBeEmbeddedIntFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/gormembedded.go b/cmd/gen/conditions/tests/results/gormembedded.go index 56fd1e3..aa63d80 100644 --- a/cmd/gen/conditions/tests/results/gormembedded.go +++ b/cmd/gen/conditions/tests/results/gormembedded.go @@ -9,44 +9,55 @@ import ( func GormEmbeddedId(operator orm.Operator[uint]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, uint]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func GormEmbeddedCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func GormEmbeddedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func GormEmbeddedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var gormEmbeddedIntFieldID = orm.FieldIdentifier{Field: "Int"} + func GormEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, int]{ - Field: "Int", - Operator: operator, + FieldIdentifier: gormEmbeddedIntFieldID, + Operator: operator, } } + +var gormEmbeddedGormEmbeddedIntFieldID = orm.FieldIdentifier{ + ColumnPrefix: "gorm_embedded_", + Field: "Int", +} + func GormEmbeddedGormEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, int]{ - ColumnPrefix: "gorm_embedded_", - Field: "Int", - Operator: operator, + FieldIdentifier: gormEmbeddedGormEmbeddedIntFieldID, + Operator: operator, } } + +var gormEmbeddedGormEmbeddedNoPrefixIntFieldID = orm.FieldIdentifier{Field: "Int"} + func GormEmbeddedGormEmbeddedNoPrefixInt(operator orm.Operator[int]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, int]{ - Field: "Int", - Operator: operator, + FieldIdentifier: gormEmbeddedGormEmbeddedNoPrefixIntFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/hasmany_company.go b/cmd/gen/conditions/tests/results/hasmany_company.go index cd4c005..75fb49d 100644 --- a/cmd/gen/conditions/tests/results/hasmany_company.go +++ b/cmd/gen/conditions/tests/results/hasmany_company.go @@ -9,25 +9,25 @@ import ( func CompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Company] { return orm.FieldCondition[hasmany.Company, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func CompanyCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Company] { return orm.FieldCondition[hasmany.Company, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func CompanyUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Company] { return orm.FieldCondition[hasmany.Company, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func CompanyDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Company] { return orm.FieldCondition[hasmany.Company, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/hasmany_seller.go b/cmd/gen/conditions/tests/results/hasmany_seller.go index f2f05f3..5922b72 100644 --- a/cmd/gen/conditions/tests/results/hasmany_seller.go +++ b/cmd/gen/conditions/tests/results/hasmany_seller.go @@ -9,26 +9,26 @@ import ( func SellerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func SellerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func SellerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func SellerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.Condition[hasmany.Seller] { @@ -39,9 +39,12 @@ func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.Condition[h T2Field: "ID", } } + +var sellerCompanyIdFieldID = orm.FieldIdentifier{Field: "CompanyID"} + func SellerCompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, orm.UUID]{ - Field: "CompanyID", - Operator: operator, + FieldIdentifier: sellerCompanyIdFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/hasone_city.go b/cmd/gen/conditions/tests/results/hasone_city.go index 37bc252..9d7f4d6 100644 --- a/cmd/gen/conditions/tests/results/hasone_city.go +++ b/cmd/gen/conditions/tests/results/hasone_city.go @@ -9,26 +9,26 @@ import ( func CityId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func CityCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func CityUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func CityDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } func CityCountry(conditions ...orm.Condition[hasone.Country]) orm.Condition[hasone.City] { @@ -39,9 +39,12 @@ func CityCountry(conditions ...orm.Condition[hasone.Country]) orm.Condition[haso T2Field: "ID", } } + +var cityCountryIdFieldID = orm.FieldIdentifier{Field: "CountryID"} + func CityCountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, orm.UUID]{ - Field: "CountryID", - Operator: operator, + FieldIdentifier: cityCountryIdFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/hasone_country.go b/cmd/gen/conditions/tests/results/hasone_country.go index e0c12b3..c2e0728 100644 --- a/cmd/gen/conditions/tests/results/hasone_country.go +++ b/cmd/gen/conditions/tests/results/hasone_country.go @@ -9,26 +9,26 @@ import ( func CountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.Country] { return orm.FieldCondition[hasone.Country, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func CountryCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.Country] { return orm.FieldCondition[hasone.Country, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func CountryUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.Country] { return orm.FieldCondition[hasone.Country, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func CountryDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.Country] { return orm.FieldCondition[hasone.Country, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } func CountryCapital(conditions ...orm.Condition[hasone.City]) orm.Condition[hasone.Country] { diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package1.go b/cmd/gen/conditions/tests/results/multiplepackage_package1.go index e49b983..c8914ff 100644 --- a/cmd/gen/conditions/tests/results/multiplepackage_package1.go +++ b/cmd/gen/conditions/tests/results/multiplepackage_package1.go @@ -10,26 +10,26 @@ import ( func Package1Id(operator orm.Operator[orm.UUID]) orm.WhereCondition[package1.Package1] { return orm.FieldCondition[package1.Package1, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func Package1CreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package1.Package1] { return orm.FieldCondition[package1.Package1, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func Package1UpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package1.Package1] { return orm.FieldCondition[package1.Package1, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func Package1DeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package1.Package1] { return orm.FieldCondition[package1.Package1, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } func Package1Package2(conditions ...orm.Condition[package2.Package2]) orm.Condition[package1.Package1] { diff --git a/cmd/gen/conditions/tests/results/nullabletypes.go b/cmd/gen/conditions/tests/results/nullabletypes.go index 43f7f13..cf84e9d 100644 --- a/cmd/gen/conditions/tests/results/nullabletypes.go +++ b/cmd/gen/conditions/tests/results/nullabletypes.go @@ -9,73 +9,97 @@ import ( func NullableTypesId(operator orm.Operator[orm.UUID]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func NullableTypesCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func NullableTypesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func NullableTypesDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var nullableTypesStringFieldID = orm.FieldIdentifier{Field: "String"} + func NullableTypesString(operator orm.Operator[string]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, string]{ - Field: "String", - Operator: operator, + FieldIdentifier: nullableTypesStringFieldID, + Operator: operator, } } + +var nullableTypesInt64FieldID = orm.FieldIdentifier{Field: "Int64"} + func NullableTypesInt64(operator orm.Operator[int64]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, int64]{ - Field: "Int64", - Operator: operator, + FieldIdentifier: nullableTypesInt64FieldID, + Operator: operator, } } + +var nullableTypesInt32FieldID = orm.FieldIdentifier{Field: "Int32"} + func NullableTypesInt32(operator orm.Operator[int32]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, int32]{ - Field: "Int32", - Operator: operator, + FieldIdentifier: nullableTypesInt32FieldID, + Operator: operator, } } + +var nullableTypesInt16FieldID = orm.FieldIdentifier{Field: "Int16"} + func NullableTypesInt16(operator orm.Operator[int16]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, int16]{ - Field: "Int16", - Operator: operator, + FieldIdentifier: nullableTypesInt16FieldID, + Operator: operator, } } + +var nullableTypesByteFieldID = orm.FieldIdentifier{Field: "Byte"} + func NullableTypesByte(operator orm.Operator[int8]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, int8]{ - Field: "Byte", - Operator: operator, + FieldIdentifier: nullableTypesByteFieldID, + Operator: operator, } } + +var nullableTypesFloat64FieldID = orm.FieldIdentifier{Field: "Float64"} + func NullableTypesFloat64(operator orm.Operator[float64]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, float64]{ - Field: "Float64", - Operator: operator, + FieldIdentifier: nullableTypesFloat64FieldID, + Operator: operator, } } + +var nullableTypesBoolFieldID = orm.FieldIdentifier{Field: "Bool"} + func NullableTypesBool(operator orm.Operator[bool]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, bool]{ - Field: "Bool", - Operator: operator, + FieldIdentifier: nullableTypesBoolFieldID, + Operator: operator, } } + +var nullableTypesTimeFieldID = orm.FieldIdentifier{Field: "Time"} + func NullableTypesTime(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ - Field: "Time", - Operator: operator, + FieldIdentifier: nullableTypesTimeFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey.go b/cmd/gen/conditions/tests/results/overrideforeignkey.go index ac05cbc..262a29e 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkey.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkey.go @@ -9,26 +9,26 @@ import ( func BicycleId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkey.Bicycle] { return orm.FieldCondition[overrideforeignkey.Bicycle, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func BicycleCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Bicycle] { return orm.FieldCondition[overrideforeignkey.Bicycle, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func BicycleUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Bicycle] { return orm.FieldCondition[overrideforeignkey.Bicycle, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func BicycleDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Bicycle] { return orm.FieldCondition[overrideforeignkey.Bicycle, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } func BicycleOwner(conditions ...orm.Condition[overrideforeignkey.Person]) orm.Condition[overrideforeignkey.Bicycle] { @@ -39,9 +39,12 @@ func BicycleOwner(conditions ...orm.Condition[overrideforeignkey.Person]) orm.Co T2Field: "ID", } } + +var bicycleOwnerSomethingIdFieldID = orm.FieldIdentifier{Field: "OwnerSomethingID"} + func BicycleOwnerSomethingId(operator orm.Operator[string]) orm.WhereCondition[overrideforeignkey.Bicycle] { return orm.FieldCondition[overrideforeignkey.Bicycle, string]{ - Field: "OwnerSomethingID", - Operator: operator, + FieldIdentifier: bicycleOwnerSomethingIdFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go index 8b8a997..7eaa079 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go @@ -9,31 +9,34 @@ import ( func CreditCardId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func CreditCardCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func CreditCardUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func CreditCardDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var creditCardUserReferenceFieldID = orm.FieldIdentifier{Field: "UserReference"} + func CreditCardUserReference(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, orm.UUID]{ - Field: "UserReference", - Operator: operator, + FieldIdentifier: creditCardUserReferenceFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go index cb51c84..72fe55a 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go @@ -9,26 +9,26 @@ import ( func UserId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkeyinverse.User] { return orm.FieldCondition[overrideforeignkeyinverse.User, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func UserCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.User] { return orm.FieldCondition[overrideforeignkeyinverse.User, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func UserUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.User] { return orm.FieldCondition[overrideforeignkeyinverse.User, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func UserDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.User] { return orm.FieldCondition[overrideforeignkeyinverse.User, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } func UserCreditCard(conditions ...orm.Condition[overrideforeignkeyinverse.CreditCard]) orm.Condition[overrideforeignkeyinverse.User] { diff --git a/cmd/gen/conditions/tests/results/overridereferences.go b/cmd/gen/conditions/tests/results/overridereferences.go index 57703d4..af7af02 100644 --- a/cmd/gen/conditions/tests/results/overridereferences.go +++ b/cmd/gen/conditions/tests/results/overridereferences.go @@ -9,26 +9,26 @@ import ( func PhoneId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferences.Phone] { return orm.FieldCondition[overridereferences.Phone, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func PhoneCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Phone] { return orm.FieldCondition[overridereferences.Phone, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func PhoneUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Phone] { return orm.FieldCondition[overridereferences.Phone, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func PhoneDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Phone] { return orm.FieldCondition[overridereferences.Phone, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } func PhoneBrand(conditions ...orm.Condition[overridereferences.Brand]) orm.Condition[overridereferences.Phone] { @@ -39,9 +39,12 @@ func PhoneBrand(conditions ...orm.Condition[overridereferences.Brand]) orm.Condi T2Field: "Name", } } + +var phoneBrandNameFieldID = orm.FieldIdentifier{Field: "BrandName"} + func PhoneBrandName(operator orm.Operator[string]) orm.WhereCondition[overridereferences.Phone] { return orm.FieldCondition[overridereferences.Phone, string]{ - Field: "BrandName", - Operator: operator, + FieldIdentifier: phoneBrandNameFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go index 4842c3a..37f58b3 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go @@ -9,32 +9,35 @@ import ( func ComputerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferencesinverse.Computer] { return orm.FieldCondition[overridereferencesinverse.Computer, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func ComputerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Computer] { return orm.FieldCondition[overridereferencesinverse.Computer, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func ComputerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Computer] { return orm.FieldCondition[overridereferencesinverse.Computer, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func ComputerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Computer] { return orm.FieldCondition[overridereferencesinverse.Computer, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var computerNameFieldID = orm.FieldIdentifier{Field: "Name"} + func ComputerName(operator orm.Operator[string]) orm.WhereCondition[overridereferencesinverse.Computer] { return orm.FieldCondition[overridereferencesinverse.Computer, string]{ - Field: "Name", - Operator: operator, + FieldIdentifier: computerNameFieldID, + Operator: operator, } } func ComputerProcessor(conditions ...orm.Condition[overridereferencesinverse.Processor]) orm.Condition[overridereferencesinverse.Computer] { diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go index d1bdc5b..ac2fabb 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go @@ -9,31 +9,34 @@ import ( func ProcessorId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferencesinverse.Processor] { return orm.FieldCondition[overridereferencesinverse.Processor, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func ProcessorCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Processor] { return orm.FieldCondition[overridereferencesinverse.Processor, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func ProcessorUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Processor] { return orm.FieldCondition[overridereferencesinverse.Processor, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func ProcessorDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Processor] { return orm.FieldCondition[overridereferencesinverse.Processor, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } + +var processorComputerNameFieldID = orm.FieldIdentifier{Field: "ComputerName"} + func ProcessorComputerName(operator orm.Operator[string]) orm.WhereCondition[overridereferencesinverse.Processor] { return orm.FieldCondition[overridereferencesinverse.Processor, string]{ - Field: "ComputerName", - Operator: operator, + FieldIdentifier: processorComputerNameFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/selfreferential.go b/cmd/gen/conditions/tests/results/selfreferential.go index 6e899e4..239439f 100644 --- a/cmd/gen/conditions/tests/results/selfreferential.go +++ b/cmd/gen/conditions/tests/results/selfreferential.go @@ -9,26 +9,26 @@ import ( func EmployeeId(operator orm.Operator[orm.UUID]) orm.WhereCondition[selfreferential.Employee] { return orm.FieldCondition[selfreferential.Employee, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func EmployeeCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[selfreferential.Employee] { return orm.FieldCondition[selfreferential.Employee, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func EmployeeUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[selfreferential.Employee] { return orm.FieldCondition[selfreferential.Employee, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func EmployeeDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[selfreferential.Employee] { return orm.FieldCondition[selfreferential.Employee, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } func EmployeeBoss(conditions ...orm.Condition[selfreferential.Employee]) orm.Condition[selfreferential.Employee] { @@ -39,9 +39,12 @@ func EmployeeBoss(conditions ...orm.Condition[selfreferential.Employee]) orm.Con T2Field: "ID", } } + +var employeeBossIdFieldID = orm.FieldIdentifier{Field: "BossID"} + func EmployeeBossId(operator orm.Operator[orm.UUID]) orm.WhereCondition[selfreferential.Employee] { return orm.FieldCondition[selfreferential.Employee, orm.UUID]{ - Field: "BossID", - Operator: operator, + FieldIdentifier: employeeBossIdFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/uintmodel.go b/cmd/gen/conditions/tests/results/uintmodel.go index 181de46..fd4bb58 100644 --- a/cmd/gen/conditions/tests/results/uintmodel.go +++ b/cmd/gen/conditions/tests/results/uintmodel.go @@ -9,25 +9,25 @@ import ( func UintModelId(operator orm.Operator[uint]) orm.WhereCondition[uintmodel.UintModel] { return orm.FieldCondition[uintmodel.UintModel, uint]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func UintModelCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uintmodel.UintModel] { return orm.FieldCondition[uintmodel.UintModel, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func UintModelUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uintmodel.UintModel] { return orm.FieldCondition[uintmodel.UintModel, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func UintModelDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uintmodel.UintModel] { return orm.FieldCondition[uintmodel.UintModel, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } diff --git a/cmd/gen/conditions/tests/results/uuidmodel.go b/cmd/gen/conditions/tests/results/uuidmodel.go index 0753173..dc6fc15 100644 --- a/cmd/gen/conditions/tests/results/uuidmodel.go +++ b/cmd/gen/conditions/tests/results/uuidmodel.go @@ -9,25 +9,25 @@ import ( func UUIDModelId(operator orm.Operator[orm.UUID]) orm.WhereCondition[uuidmodel.UUIDModel] { return orm.FieldCondition[uuidmodel.UUIDModel, orm.UUID]{ - Field: "ID", - Operator: operator, + FieldIdentifier: orm.IDFieldID, + Operator: operator, } } func UUIDModelCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uuidmodel.UUIDModel] { return orm.FieldCondition[uuidmodel.UUIDModel, time.Time]{ - Field: "CreatedAt", - Operator: operator, + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, } } func UUIDModelUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uuidmodel.UUIDModel] { return orm.FieldCondition[uuidmodel.UUIDModel, time.Time]{ - Field: "UpdatedAt", - Operator: operator, + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, } } func UUIDModelDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uuidmodel.UUIDModel] { return orm.FieldCondition[uuidmodel.UUIDModel, time.Time]{ - Field: "DeletedAt", - Operator: operator, + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, } } diff --git a/go.mod b/go.mod index d3d1b1f..12aaecc 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/dave/jennifer v1.6.1 - github.com/ditrit/badaas v0.0.0-20230802090641-cb55dbcce177 + github.com/ditrit/badaas v0.0.0-20230803081820-22f16f685d3e github.com/ditrit/verdeter v0.4.0 github.com/elliotchance/pie/v2 v2.7.0 github.com/ettle/strcase v0.1.1 From de7a1916b66f59a4dd1502559b0a5842f4d58d17 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 15:20:20 +0200 Subject: [PATCH 21/31] generation of preload attributes --- cmd/gen/conditions/condition.go | 9 +++-- cmd/gen/conditions/conditionsGenerator.go | 33 +++++++++++++++++++ .../conditions/tests/results/basicpointers.go | 2 ++ .../conditions/tests/results/basicslices.go | 2 ++ .../tests/results/basicslicespointer.go | 2 ++ .../conditions/tests/results/basictypes.go | 2 ++ .../tests/results/belongsto_owned.go | 2 ++ .../tests/results/belongsto_owner.go | 2 ++ .../tests/results/columndefinition.go | 2 ++ .../conditions/tests/results/customtype.go | 2 ++ .../conditions/tests/results/goembedded.go | 2 ++ .../conditions/tests/results/gormembedded.go | 2 ++ .../tests/results/hasmany_company.go | 2 ++ .../tests/results/hasmany_seller.go | 2 ++ .../conditions/tests/results/hasone_city.go | 2 ++ .../tests/results/hasone_country.go | 2 ++ .../tests/results/multiplepackage_package1.go | 2 ++ .../conditions/tests/results/nullabletypes.go | 2 ++ .../tests/results/overrideforeignkey.go | 2 ++ .../overrideforeignkeyinverse_credit_card.go | 2 ++ .../results/overrideforeignkeyinverse_user.go | 2 ++ .../tests/results/overridereferences.go | 2 ++ .../overridereferencesinverse_computer.go | 2 ++ .../overridereferencesinverse_processor.go | 2 ++ .../tests/results/selfreferential.go | 2 ++ cmd/gen/conditions/tests/results/uintmodel.go | 2 ++ cmd/gen/conditions/tests/results/uuidmodel.go | 2 ++ 27 files changed, 89 insertions(+), 3 deletions(-) diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index 8a6cccf..3c01e93 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -35,9 +35,10 @@ var constantFieldIdentifiers = map[string]*jen.Statement{ } type Condition struct { - codes []jen.Code - param *JenParam - destPkg string + codes []jen.Code + param *JenParam + destPkg string + fieldIdentifier string } func NewCondition(destPkg string, objectType Type, field Field) *Condition { @@ -233,6 +234,8 @@ func (condition *Condition) createFieldIdentifier(field Field, conditionName str ).Op("=").Add(fieldIdentifierVar), ) + condition.fieldIdentifier = fieldIdentifierName + return jen.Qual("", fieldIdentifierName) } diff --git a/cmd/gen/conditions/conditionsGenerator.go b/cmd/gen/conditions/conditionsGenerator.go index b17a089..7b64a49 100644 --- a/cmd/gen/conditions/conditionsGenerator.go +++ b/cmd/gen/conditions/conditionsGenerator.go @@ -3,9 +3,13 @@ package conditions import ( "go/types" + "github.com/dave/jennifer/jen" + "github.com/ditrit/badaas-cli/cmd/log" ) +const badaasORMNewPreloadCondition = "NewPreloadCondition" + type ConditionsGenerator struct { object types.Object objectType Type @@ -30,13 +34,42 @@ func (cg ConditionsGenerator) Into(file *File) error { // Add one condition for each field of the object conditions := cg.ForEachField(file, fields) + objectName := cg.object.Name() + objectQual := jen.Qual( + getRelativePackagePath(file.destPkg, cg.objectType), + cg.objectType.Name(), + ) + + preloadAttributesCondition := jen.Var().Id( + getPreloadAttributesName(objectName), + ).Op("=").Add(jen.Qual( + badaasORMPath, badaasORMNewPreloadCondition, + )).Types( + objectQual, + ) + fieldIdentifiers := []jen.Code{} + for _, condition := range conditions { file.Add(condition.codes...) + + // add all field names to the list of fields of the preload condition + if condition.fieldIdentifier != "" { + fieldIdentifiers = append( + fieldIdentifiers, + jen.Qual("", condition.fieldIdentifier), + ) + } } + file.Add(preloadAttributesCondition.Call(fieldIdentifiers...)) + return nil } +func getPreloadAttributesName(objectName string) string { + return objectName + "PreloadAttributes" +} + // Generate the conditions for each of the object's fields func (cg ConditionsGenerator) ForEachField(file *File, fields []Field) []Condition { conditions := []Condition{} diff --git a/cmd/gen/conditions/tests/results/basicpointers.go b/cmd/gen/conditions/tests/results/basicpointers.go index 1df0910..8cb853a 100644 --- a/cmd/gen/conditions/tests/results/basicpointers.go +++ b/cmd/gen/conditions/tests/results/basicpointers.go @@ -193,3 +193,5 @@ func BasicPointersByte(operator orm.Operator[uint8]) orm.WhereCondition[basicpoi Operator: operator, } } + +var BasicPointersPreloadAttributes = orm.NewPreloadCondition[basicpointers.BasicPointers](basicPointersBoolFieldID, basicPointersIntFieldID, basicPointersInt8FieldID, basicPointersInt16FieldID, basicPointersInt32FieldID, basicPointersInt64FieldID, basicPointersUIntFieldID, basicPointersUInt8FieldID, basicPointersUInt16FieldID, basicPointersUInt32FieldID, basicPointersUInt64FieldID, basicPointersUIntptrFieldID, basicPointersFloat32FieldID, basicPointersFloat64FieldID, basicPointersComplex64FieldID, basicPointersComplex128FieldID, basicPointersStringFieldID, basicPointersByteFieldID) diff --git a/cmd/gen/conditions/tests/results/basicslices.go b/cmd/gen/conditions/tests/results/basicslices.go index 5eecb29..5d68b83 100644 --- a/cmd/gen/conditions/tests/results/basicslices.go +++ b/cmd/gen/conditions/tests/results/basicslices.go @@ -193,3 +193,5 @@ func BasicSlicesByte(operator orm.Operator[[]uint8]) orm.WhereCondition[basicsli Operator: operator, } } + +var BasicSlicesPreloadAttributes = orm.NewPreloadCondition[basicslices.BasicSlices](basicSlicesBoolFieldID, basicSlicesIntFieldID, basicSlicesInt8FieldID, basicSlicesInt16FieldID, basicSlicesInt32FieldID, basicSlicesInt64FieldID, basicSlicesUIntFieldID, basicSlicesUInt8FieldID, basicSlicesUInt16FieldID, basicSlicesUInt32FieldID, basicSlicesUInt64FieldID, basicSlicesUIntptrFieldID, basicSlicesFloat32FieldID, basicSlicesFloat64FieldID, basicSlicesComplex64FieldID, basicSlicesComplex128FieldID, basicSlicesStringFieldID, basicSlicesByteFieldID) diff --git a/cmd/gen/conditions/tests/results/basicslicespointer.go b/cmd/gen/conditions/tests/results/basicslicespointer.go index 561f088..a0c346b 100644 --- a/cmd/gen/conditions/tests/results/basicslicespointer.go +++ b/cmd/gen/conditions/tests/results/basicslicespointer.go @@ -193,3 +193,5 @@ func BasicSlicesPointerByte(operator orm.Operator[[]uint8]) orm.WhereCondition[b Operator: operator, } } + +var BasicSlicesPointerPreloadAttributes = orm.NewPreloadCondition[basicslicespointer.BasicSlicesPointer](basicSlicesPointerBoolFieldID, basicSlicesPointerIntFieldID, basicSlicesPointerInt8FieldID, basicSlicesPointerInt16FieldID, basicSlicesPointerInt32FieldID, basicSlicesPointerInt64FieldID, basicSlicesPointerUIntFieldID, basicSlicesPointerUInt8FieldID, basicSlicesPointerUInt16FieldID, basicSlicesPointerUInt32FieldID, basicSlicesPointerUInt64FieldID, basicSlicesPointerUIntptrFieldID, basicSlicesPointerFloat32FieldID, basicSlicesPointerFloat64FieldID, basicSlicesPointerComplex64FieldID, basicSlicesPointerComplex128FieldID, basicSlicesPointerStringFieldID, basicSlicesPointerByteFieldID) diff --git a/cmd/gen/conditions/tests/results/basictypes.go b/cmd/gen/conditions/tests/results/basictypes.go index 555f5c1..05b02aa 100644 --- a/cmd/gen/conditions/tests/results/basictypes.go +++ b/cmd/gen/conditions/tests/results/basictypes.go @@ -193,3 +193,5 @@ func BasicTypesByte(operator orm.Operator[uint8]) orm.WhereCondition[basictypes. Operator: operator, } } + +var BasicTypesPreloadAttributes = orm.NewPreloadCondition[basictypes.BasicTypes](basicTypesBoolFieldID, basicTypesIntFieldID, basicTypesInt8FieldID, basicTypesInt16FieldID, basicTypesInt32FieldID, basicTypesInt64FieldID, basicTypesUIntFieldID, basicTypesUInt8FieldID, basicTypesUInt16FieldID, basicTypesUInt32FieldID, basicTypesUInt64FieldID, basicTypesUIntptrFieldID, basicTypesFloat32FieldID, basicTypesFloat64FieldID, basicTypesComplex64FieldID, basicTypesComplex128FieldID, basicTypesStringFieldID, basicTypesByteFieldID) diff --git a/cmd/gen/conditions/tests/results/belongsto_owned.go b/cmd/gen/conditions/tests/results/belongsto_owned.go index faa3c40..05dd4d8 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owned.go +++ b/cmd/gen/conditions/tests/results/belongsto_owned.go @@ -48,3 +48,5 @@ func OwnedOwnerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto. Operator: operator, } } + +var OwnedPreloadAttributes = orm.NewPreloadCondition[belongsto.Owned](ownedOwnerIdFieldID) diff --git a/cmd/gen/conditions/tests/results/belongsto_owner.go b/cmd/gen/conditions/tests/results/belongsto_owner.go index 7caf93a..a748388 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owner.go +++ b/cmd/gen/conditions/tests/results/belongsto_owner.go @@ -31,3 +31,5 @@ func OwnerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongs Operator: operator, } } + +var OwnerPreloadAttributes = orm.NewPreloadCondition[belongsto.Owner]() diff --git a/cmd/gen/conditions/tests/results/columndefinition.go b/cmd/gen/conditions/tests/results/columndefinition.go index f27271d..a8a128d 100644 --- a/cmd/gen/conditions/tests/results/columndefinition.go +++ b/cmd/gen/conditions/tests/results/columndefinition.go @@ -40,3 +40,5 @@ func ColumnDefinitionString(operator orm.Operator[string]) orm.WhereCondition[co Operator: operator, } } + +var ColumnDefinitionPreloadAttributes = orm.NewPreloadCondition[columndefinition.ColumnDefinition](columnDefinitionStringFieldID) diff --git a/cmd/gen/conditions/tests/results/customtype.go b/cmd/gen/conditions/tests/results/customtype.go index daff176..09c7d36 100644 --- a/cmd/gen/conditions/tests/results/customtype.go +++ b/cmd/gen/conditions/tests/results/customtype.go @@ -40,3 +40,5 @@ func CustomTypeCustom(operator orm.Operator[customtype.MultiString]) orm.WhereCo Operator: operator, } } + +var CustomTypePreloadAttributes = orm.NewPreloadCondition[customtype.CustomType](customTypeCustomFieldID) diff --git a/cmd/gen/conditions/tests/results/goembedded.go b/cmd/gen/conditions/tests/results/goembedded.go index 7fc0bd4..c83ed30 100644 --- a/cmd/gen/conditions/tests/results/goembedded.go +++ b/cmd/gen/conditions/tests/results/goembedded.go @@ -49,3 +49,5 @@ func GoEmbeddedToBeEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[go Operator: operator, } } + +var GoEmbeddedPreloadAttributes = orm.NewPreloadCondition[goembedded.GoEmbedded](goEmbeddedIntFieldID, goEmbeddedToBeEmbeddedIntFieldID) diff --git a/cmd/gen/conditions/tests/results/gormembedded.go b/cmd/gen/conditions/tests/results/gormembedded.go index aa63d80..dc989ea 100644 --- a/cmd/gen/conditions/tests/results/gormembedded.go +++ b/cmd/gen/conditions/tests/results/gormembedded.go @@ -61,3 +61,5 @@ func GormEmbeddedGormEmbeddedNoPrefixInt(operator orm.Operator[int]) orm.WhereCo Operator: operator, } } + +var GormEmbeddedPreloadAttributes = orm.NewPreloadCondition[gormembedded.GormEmbedded](gormEmbeddedIntFieldID, gormEmbeddedGormEmbeddedIntFieldID, gormEmbeddedGormEmbeddedNoPrefixIntFieldID) diff --git a/cmd/gen/conditions/tests/results/hasmany_company.go b/cmd/gen/conditions/tests/results/hasmany_company.go index 75fb49d..493a32a 100644 --- a/cmd/gen/conditions/tests/results/hasmany_company.go +++ b/cmd/gen/conditions/tests/results/hasmany_company.go @@ -31,3 +31,5 @@ func CompanyDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasma Operator: operator, } } + +var CompanyPreloadAttributes = orm.NewPreloadCondition[hasmany.Company]() diff --git a/cmd/gen/conditions/tests/results/hasmany_seller.go b/cmd/gen/conditions/tests/results/hasmany_seller.go index 5922b72..9f0cb64 100644 --- a/cmd/gen/conditions/tests/results/hasmany_seller.go +++ b/cmd/gen/conditions/tests/results/hasmany_seller.go @@ -48,3 +48,5 @@ func SellerCompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany Operator: operator, } } + +var SellerPreloadAttributes = orm.NewPreloadCondition[hasmany.Seller](sellerCompanyIdFieldID) diff --git a/cmd/gen/conditions/tests/results/hasone_city.go b/cmd/gen/conditions/tests/results/hasone_city.go index 9d7f4d6..4c9c197 100644 --- a/cmd/gen/conditions/tests/results/hasone_city.go +++ b/cmd/gen/conditions/tests/results/hasone_city.go @@ -48,3 +48,5 @@ func CityCountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.Ci Operator: operator, } } + +var CityPreloadAttributes = orm.NewPreloadCondition[hasone.City](cityCountryIdFieldID) diff --git a/cmd/gen/conditions/tests/results/hasone_country.go b/cmd/gen/conditions/tests/results/hasone_country.go index c2e0728..d8927c4 100644 --- a/cmd/gen/conditions/tests/results/hasone_country.go +++ b/cmd/gen/conditions/tests/results/hasone_country.go @@ -39,3 +39,5 @@ func CountryCapital(conditions ...orm.Condition[hasone.City]) orm.Condition[haso T2Field: "CountryID", } } + +var CountryPreloadAttributes = orm.NewPreloadCondition[hasone.Country]() diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package1.go b/cmd/gen/conditions/tests/results/multiplepackage_package1.go index c8914ff..9139a21 100644 --- a/cmd/gen/conditions/tests/results/multiplepackage_package1.go +++ b/cmd/gen/conditions/tests/results/multiplepackage_package1.go @@ -40,3 +40,5 @@ func Package1Package2(conditions ...orm.Condition[package2.Package2]) orm.Condit T2Field: "Package1ID", } } + +var Package1PreloadAttributes = orm.NewPreloadCondition[package1.Package1]() diff --git a/cmd/gen/conditions/tests/results/nullabletypes.go b/cmd/gen/conditions/tests/results/nullabletypes.go index cf84e9d..62c923f 100644 --- a/cmd/gen/conditions/tests/results/nullabletypes.go +++ b/cmd/gen/conditions/tests/results/nullabletypes.go @@ -103,3 +103,5 @@ func NullableTypesTime(operator orm.Operator[time.Time]) orm.WhereCondition[null Operator: operator, } } + +var NullableTypesPreloadAttributes = orm.NewPreloadCondition[nullabletypes.NullableTypes](nullableTypesStringFieldID, nullableTypesInt64FieldID, nullableTypesInt32FieldID, nullableTypesInt16FieldID, nullableTypesByteFieldID, nullableTypesFloat64FieldID, nullableTypesBoolFieldID, nullableTypesTimeFieldID) diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey.go b/cmd/gen/conditions/tests/results/overrideforeignkey.go index 262a29e..fa09c17 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkey.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkey.go @@ -48,3 +48,5 @@ func BicycleOwnerSomethingId(operator orm.Operator[string]) orm.WhereCondition[o Operator: operator, } } + +var BicyclePreloadAttributes = orm.NewPreloadCondition[overrideforeignkey.Bicycle](bicycleOwnerSomethingIdFieldID) diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go index 7eaa079..f993769 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go @@ -40,3 +40,5 @@ func CreditCardUserReference(operator orm.Operator[orm.UUID]) orm.WhereCondition Operator: operator, } } + +var CreditCardPreloadAttributes = orm.NewPreloadCondition[overrideforeignkeyinverse.CreditCard](creditCardUserReferenceFieldID) diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go index 72fe55a..c7eb58e 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go @@ -39,3 +39,5 @@ func UserCreditCard(conditions ...orm.Condition[overrideforeignkeyinverse.Credit T2Field: "UserReference", } } + +var UserPreloadAttributes = orm.NewPreloadCondition[overrideforeignkeyinverse.User]() diff --git a/cmd/gen/conditions/tests/results/overridereferences.go b/cmd/gen/conditions/tests/results/overridereferences.go index af7af02..0df2522 100644 --- a/cmd/gen/conditions/tests/results/overridereferences.go +++ b/cmd/gen/conditions/tests/results/overridereferences.go @@ -48,3 +48,5 @@ func PhoneBrandName(operator orm.Operator[string]) orm.WhereCondition[overridere Operator: operator, } } + +var PhonePreloadAttributes = orm.NewPreloadCondition[overridereferences.Phone](phoneBrandNameFieldID) diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go index 37f58b3..08f4d43 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go @@ -48,3 +48,5 @@ func ComputerProcessor(conditions ...orm.Condition[overridereferencesinverse.Pro T2Field: "ComputerName", } } + +var ComputerPreloadAttributes = orm.NewPreloadCondition[overridereferencesinverse.Computer](computerNameFieldID) diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go index ac2fabb..372a926 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go @@ -40,3 +40,5 @@ func ProcessorComputerName(operator orm.Operator[string]) orm.WhereCondition[ove Operator: operator, } } + +var ProcessorPreloadAttributes = orm.NewPreloadCondition[overridereferencesinverse.Processor](processorComputerNameFieldID) diff --git a/cmd/gen/conditions/tests/results/selfreferential.go b/cmd/gen/conditions/tests/results/selfreferential.go index 239439f..5def489 100644 --- a/cmd/gen/conditions/tests/results/selfreferential.go +++ b/cmd/gen/conditions/tests/results/selfreferential.go @@ -48,3 +48,5 @@ func EmployeeBossId(operator orm.Operator[orm.UUID]) orm.WhereCondition[selfrefe Operator: operator, } } + +var EmployeePreloadAttributes = orm.NewPreloadCondition[selfreferential.Employee](employeeBossIdFieldID) diff --git a/cmd/gen/conditions/tests/results/uintmodel.go b/cmd/gen/conditions/tests/results/uintmodel.go index fd4bb58..66953ed 100644 --- a/cmd/gen/conditions/tests/results/uintmodel.go +++ b/cmd/gen/conditions/tests/results/uintmodel.go @@ -31,3 +31,5 @@ func UintModelDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uin Operator: operator, } } + +var UintModelPreloadAttributes = orm.NewPreloadCondition[uintmodel.UintModel]() diff --git a/cmd/gen/conditions/tests/results/uuidmodel.go b/cmd/gen/conditions/tests/results/uuidmodel.go index dc6fc15..15c55d0 100644 --- a/cmd/gen/conditions/tests/results/uuidmodel.go +++ b/cmd/gen/conditions/tests/results/uuidmodel.go @@ -31,3 +31,5 @@ func UUIDModelDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uui Operator: operator, } } + +var UUIDModelPreloadAttributes = orm.NewPreloadCondition[uuidmodel.UUIDModel]() From a879449e32f4aa61be4aae94e01e44df6e8f46c7 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 15:35:30 +0200 Subject: [PATCH 22/31] add preload relations --- cmd/gen/conditions/condition.go | 17 +++++++ cmd/gen/conditions/conditionsGenerator.go | 21 +++++++++ cmd/gen/conditions/main_test.go | 11 +++-- .../tests/results/belongsto_owned.go | 2 + .../tests/results/hasmany_seller.go | 2 + .../conditions/tests/results/hasone_city.go | 2 + .../tests/results/hasone_country.go | 2 + .../tests/results/multiplepackage_package1.go | 2 + .../tests/results/multiplepackage_package2.go | 44 +++++++++++++++++++ ...gnkey.go => overrideforeignkey_bicycle.go} | 2 + .../results/overrideforeignkey_person.go | 35 +++++++++++++++ .../results/overrideforeignkeyinverse_user.go | 2 + .../tests/results/overridereferences_brand.go | 44 +++++++++++++++++++ ...erences.go => overridereferences_phone.go} | 2 + .../overridereferencesinverse_computer.go | 2 + .../tests/results/selfreferential.go | 2 + 16 files changed, 188 insertions(+), 4 deletions(-) create mode 100644 cmd/gen/conditions/tests/results/multiplepackage_package2.go rename cmd/gen/conditions/tests/results/{overrideforeignkey.go => overrideforeignkey_bicycle.go} (92%) create mode 100644 cmd/gen/conditions/tests/results/overrideforeignkey_person.go create mode 100644 cmd/gen/conditions/tests/results/overridereferences_brand.go rename cmd/gen/conditions/tests/results/{overridereferences.go => overridereferences_phone.go} (92%) diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index 3c01e93..ee7f0ba 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -39,6 +39,7 @@ type Condition struct { param *JenParam destPkg string fieldIdentifier string + preloadName string } func NewCondition(destPkg string, objectType Type, field Field) *Condition { @@ -308,6 +309,22 @@ func (condition *Condition) generateJoin(objectType Type, field Field, t1Field, ), ), ) + + // preload for the relation + preloadName := getPreloadRelationName(objectType, field) + condition.codes = append( + condition.codes, + jen.Var().Id( + preloadName, + ).Op("=").Add(jen.Id(conditionName)).Call( + jen.Id(getPreloadAttributesName(field.TypeName())), + ), + ) + condition.preloadName = preloadName +} + +func getPreloadRelationName(objectType Type, field Field) string { + return objectType.Name() + "Preload" + field.Name } // Generate condition names diff --git a/cmd/gen/conditions/conditionsGenerator.go b/cmd/gen/conditions/conditionsGenerator.go index 7b64a49..293be85 100644 --- a/cmd/gen/conditions/conditionsGenerator.go +++ b/cmd/gen/conditions/conditionsGenerator.go @@ -49,6 +49,15 @@ func (cg ConditionsGenerator) Into(file *File) error { ) fieldIdentifiers := []jen.Code{} + preloadRelationsCondition := jen.Var().Id( + objectName + "PreloadRelations", + ).Op("=").Index().Add(jen.Qual( + badaasORMPath, badaasORMCondition, + )).Types( + objectQual, + ) + relationPreloads := []jen.Code{} + for _, condition := range conditions { file.Add(condition.codes...) @@ -59,10 +68,22 @@ func (cg ConditionsGenerator) Into(file *File) error { jen.Qual("", condition.fieldIdentifier), ) } + + // add the preload to the list of all possible preloads + if condition.preloadName != "" { + relationPreloads = append( + relationPreloads, + jen.Qual("", condition.preloadName), + ) + } } file.Add(preloadAttributesCondition.Call(fieldIdentifiers...)) + if len(relationPreloads) > 0 { + file.Add(preloadRelationsCondition.Values(relationPreloads...)) + } + return nil } diff --git a/cmd/gen/conditions/main_test.go b/cmd/gen/conditions/main_test.go index 8d18b83..e120534 100644 --- a/cmd/gen/conditions/main_test.go +++ b/cmd/gen/conditions/main_test.go @@ -105,6 +105,9 @@ func TestMultiplePackage(t *testing.T) { doTest(t, "./tests/multiplepackage/package1", []Comparison{ {Have: "package1_conditions.go", Expected: "./tests/results/multiplepackage_package1.go"}, }) + doTest(t, "./tests/multiplepackage/package2", []Comparison{ + {Have: "package2_conditions.go", Expected: "./tests/results/multiplepackage_package2.go"}, + }) } func TestColumnDefinition(t *testing.T) { @@ -115,16 +118,16 @@ func TestColumnDefinition(t *testing.T) { func TestOverrideForeignKey(t *testing.T) { doTest(t, "./tests/overrideforeignkey", []Comparison{ - {Have: "bicycle_conditions.go", Expected: "./tests/results/overrideforeignkey.go"}, + {Have: "bicycle_conditions.go", Expected: "./tests/results/overrideforeignkey_bicycle.go"}, + {Have: "person_conditions.go", Expected: "./tests/results/overrideforeignkey_person.go"}, }) - utils.RemoveFile("person_conditions.go") } func TestOverrideReferences(t *testing.T) { doTest(t, "./tests/overridereferences", []Comparison{ - {Have: "phone_conditions.go", Expected: "./tests/results/overridereferences.go"}, + {Have: "phone_conditions.go", Expected: "./tests/results/overridereferences_phone.go"}, + {Have: "brand_conditions.go", Expected: "./tests/results/overridereferences_brand.go"}, }) - utils.RemoveFile("brand_conditions.go") } func TestOverrideForeignKeyInverse(t *testing.T) { diff --git a/cmd/gen/conditions/tests/results/belongsto_owned.go b/cmd/gen/conditions/tests/results/belongsto_owned.go index 05dd4d8..be27fce 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owned.go +++ b/cmd/gen/conditions/tests/results/belongsto_owned.go @@ -40,6 +40,7 @@ func OwnedOwner(conditions ...orm.Condition[belongsto.Owner]) orm.Condition[belo } } +var OwnedPreloadOwner = OwnedOwner(OwnerPreloadAttributes) var ownedOwnerIdFieldID = orm.FieldIdentifier{Field: "OwnerID"} func OwnedOwnerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owned] { @@ -50,3 +51,4 @@ func OwnedOwnerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto. } var OwnedPreloadAttributes = orm.NewPreloadCondition[belongsto.Owned](ownedOwnerIdFieldID) +var OwnedPreloadRelations = []orm.Condition[belongsto.Owned]{OwnedPreloadOwner} diff --git a/cmd/gen/conditions/tests/results/hasmany_seller.go b/cmd/gen/conditions/tests/results/hasmany_seller.go index 9f0cb64..c5de260 100644 --- a/cmd/gen/conditions/tests/results/hasmany_seller.go +++ b/cmd/gen/conditions/tests/results/hasmany_seller.go @@ -40,6 +40,7 @@ func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.Condition[h } } +var SellerPreloadCompany = SellerCompany(CompanyPreloadAttributes) var sellerCompanyIdFieldID = orm.FieldIdentifier{Field: "CompanyID"} func SellerCompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Seller] { @@ -50,3 +51,4 @@ func SellerCompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany } var SellerPreloadAttributes = orm.NewPreloadCondition[hasmany.Seller](sellerCompanyIdFieldID) +var SellerPreloadRelations = []orm.Condition[hasmany.Seller]{SellerPreloadCompany} diff --git a/cmd/gen/conditions/tests/results/hasone_city.go b/cmd/gen/conditions/tests/results/hasone_city.go index 4c9c197..ea31ce1 100644 --- a/cmd/gen/conditions/tests/results/hasone_city.go +++ b/cmd/gen/conditions/tests/results/hasone_city.go @@ -40,6 +40,7 @@ func CityCountry(conditions ...orm.Condition[hasone.Country]) orm.Condition[haso } } +var CityPreloadCountry = CityCountry(CountryPreloadAttributes) var cityCountryIdFieldID = orm.FieldIdentifier{Field: "CountryID"} func CityCountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.City] { @@ -50,3 +51,4 @@ func CityCountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.Ci } var CityPreloadAttributes = orm.NewPreloadCondition[hasone.City](cityCountryIdFieldID) +var CityPreloadRelations = []orm.Condition[hasone.City]{CityPreloadCountry} diff --git a/cmd/gen/conditions/tests/results/hasone_country.go b/cmd/gen/conditions/tests/results/hasone_country.go index d8927c4..9ac915c 100644 --- a/cmd/gen/conditions/tests/results/hasone_country.go +++ b/cmd/gen/conditions/tests/results/hasone_country.go @@ -40,4 +40,6 @@ func CountryCapital(conditions ...orm.Condition[hasone.City]) orm.Condition[haso } } +var CountryPreloadCapital = CountryCapital(CityPreloadAttributes) var CountryPreloadAttributes = orm.NewPreloadCondition[hasone.Country]() +var CountryPreloadRelations = []orm.Condition[hasone.Country]{CountryPreloadCapital} diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package1.go b/cmd/gen/conditions/tests/results/multiplepackage_package1.go index 9139a21..413e708 100644 --- a/cmd/gen/conditions/tests/results/multiplepackage_package1.go +++ b/cmd/gen/conditions/tests/results/multiplepackage_package1.go @@ -41,4 +41,6 @@ func Package1Package2(conditions ...orm.Condition[package2.Package2]) orm.Condit } } +var Package1PreloadPackage2 = Package1Package2(Package2PreloadAttributes) var Package1PreloadAttributes = orm.NewPreloadCondition[package1.Package1]() +var Package1PreloadRelations = []orm.Condition[package1.Package1]{Package1PreloadPackage2} diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package2.go b/cmd/gen/conditions/tests/results/multiplepackage_package2.go new file mode 100644 index 0000000..9b67c0e --- /dev/null +++ b/cmd/gen/conditions/tests/results/multiplepackage_package2.go @@ -0,0 +1,44 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + package2 "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/multiplepackage/package2" + orm "github.com/ditrit/badaas/orm" + "time" +) + +func Package2Id(operator orm.Operator[orm.UUID]) orm.WhereCondition[package2.Package2] { + return orm.FieldCondition[package2.Package2, orm.UUID]{ + FieldIdentifier: orm.IDFieldID, + Operator: operator, + } +} +func Package2CreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package2.Package2] { + return orm.FieldCondition[package2.Package2, time.Time]{ + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, + } +} +func Package2UpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package2.Package2] { + return orm.FieldCondition[package2.Package2, time.Time]{ + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, + } +} +func Package2DeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package2.Package2] { + return orm.FieldCondition[package2.Package2, time.Time]{ + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, + } +} + +var package2Package1IdFieldID = orm.FieldIdentifier{Field: "Package1ID"} + +func Package2Package1Id(operator orm.Operator[orm.UUID]) orm.WhereCondition[package2.Package2] { + return orm.FieldCondition[package2.Package2, orm.UUID]{ + FieldIdentifier: package2Package1IdFieldID, + Operator: operator, + } +} + +var Package2PreloadAttributes = orm.NewPreloadCondition[package2.Package2](package2Package1IdFieldID) diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey.go b/cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go similarity index 92% rename from cmd/gen/conditions/tests/results/overrideforeignkey.go rename to cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go index fa09c17..3d2de20 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkey.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go @@ -40,6 +40,7 @@ func BicycleOwner(conditions ...orm.Condition[overrideforeignkey.Person]) orm.Co } } +var BicyclePreloadOwner = BicycleOwner(PersonPreloadAttributes) var bicycleOwnerSomethingIdFieldID = orm.FieldIdentifier{Field: "OwnerSomethingID"} func BicycleOwnerSomethingId(operator orm.Operator[string]) orm.WhereCondition[overrideforeignkey.Bicycle] { @@ -50,3 +51,4 @@ func BicycleOwnerSomethingId(operator orm.Operator[string]) orm.WhereCondition[o } var BicyclePreloadAttributes = orm.NewPreloadCondition[overrideforeignkey.Bicycle](bicycleOwnerSomethingIdFieldID) +var BicyclePreloadRelations = []orm.Condition[overrideforeignkey.Bicycle]{BicyclePreloadOwner} diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey_person.go b/cmd/gen/conditions/tests/results/overrideforeignkey_person.go new file mode 100644 index 0000000..1f23b71 --- /dev/null +++ b/cmd/gen/conditions/tests/results/overrideforeignkey_person.go @@ -0,0 +1,35 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + overrideforeignkey "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overrideforeignkey" + orm "github.com/ditrit/badaas/orm" + "time" +) + +func PersonId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkey.Person] { + return orm.FieldCondition[overrideforeignkey.Person, orm.UUID]{ + FieldIdentifier: orm.IDFieldID, + Operator: operator, + } +} +func PersonCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Person] { + return orm.FieldCondition[overrideforeignkey.Person, time.Time]{ + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, + } +} +func PersonUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Person] { + return orm.FieldCondition[overrideforeignkey.Person, time.Time]{ + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, + } +} +func PersonDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Person] { + return orm.FieldCondition[overrideforeignkey.Person, time.Time]{ + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, + } +} + +var PersonPreloadAttributes = orm.NewPreloadCondition[overrideforeignkey.Person]() diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go index c7eb58e..ac8de78 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go @@ -40,4 +40,6 @@ func UserCreditCard(conditions ...orm.Condition[overrideforeignkeyinverse.Credit } } +var UserPreloadCreditCard = UserCreditCard(CreditCardPreloadAttributes) var UserPreloadAttributes = orm.NewPreloadCondition[overrideforeignkeyinverse.User]() +var UserPreloadRelations = []orm.Condition[overrideforeignkeyinverse.User]{UserPreloadCreditCard} diff --git a/cmd/gen/conditions/tests/results/overridereferences_brand.go b/cmd/gen/conditions/tests/results/overridereferences_brand.go new file mode 100644 index 0000000..ee50d8c --- /dev/null +++ b/cmd/gen/conditions/tests/results/overridereferences_brand.go @@ -0,0 +1,44 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + overridereferences "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overridereferences" + orm "github.com/ditrit/badaas/orm" + "time" +) + +func BrandId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferences.Brand] { + return orm.FieldCondition[overridereferences.Brand, orm.UUID]{ + FieldIdentifier: orm.IDFieldID, + Operator: operator, + } +} +func BrandCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Brand] { + return orm.FieldCondition[overridereferences.Brand, time.Time]{ + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, + } +} +func BrandUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Brand] { + return orm.FieldCondition[overridereferences.Brand, time.Time]{ + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, + } +} +func BrandDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Brand] { + return orm.FieldCondition[overridereferences.Brand, time.Time]{ + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, + } +} + +var brandNameFieldID = orm.FieldIdentifier{Field: "Name"} + +func BrandName(operator orm.Operator[string]) orm.WhereCondition[overridereferences.Brand] { + return orm.FieldCondition[overridereferences.Brand, string]{ + FieldIdentifier: brandNameFieldID, + Operator: operator, + } +} + +var BrandPreloadAttributes = orm.NewPreloadCondition[overridereferences.Brand](brandNameFieldID) diff --git a/cmd/gen/conditions/tests/results/overridereferences.go b/cmd/gen/conditions/tests/results/overridereferences_phone.go similarity index 92% rename from cmd/gen/conditions/tests/results/overridereferences.go rename to cmd/gen/conditions/tests/results/overridereferences_phone.go index 0df2522..50353d4 100644 --- a/cmd/gen/conditions/tests/results/overridereferences.go +++ b/cmd/gen/conditions/tests/results/overridereferences_phone.go @@ -40,6 +40,7 @@ func PhoneBrand(conditions ...orm.Condition[overridereferences.Brand]) orm.Condi } } +var PhonePreloadBrand = PhoneBrand(BrandPreloadAttributes) var phoneBrandNameFieldID = orm.FieldIdentifier{Field: "BrandName"} func PhoneBrandName(operator orm.Operator[string]) orm.WhereCondition[overridereferences.Phone] { @@ -50,3 +51,4 @@ func PhoneBrandName(operator orm.Operator[string]) orm.WhereCondition[overridere } var PhonePreloadAttributes = orm.NewPreloadCondition[overridereferences.Phone](phoneBrandNameFieldID) +var PhonePreloadRelations = []orm.Condition[overridereferences.Phone]{PhonePreloadBrand} diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go index 08f4d43..dd9940b 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go @@ -49,4 +49,6 @@ func ComputerProcessor(conditions ...orm.Condition[overridereferencesinverse.Pro } } +var ComputerPreloadProcessor = ComputerProcessor(ProcessorPreloadAttributes) var ComputerPreloadAttributes = orm.NewPreloadCondition[overridereferencesinverse.Computer](computerNameFieldID) +var ComputerPreloadRelations = []orm.Condition[overridereferencesinverse.Computer]{ComputerPreloadProcessor} diff --git a/cmd/gen/conditions/tests/results/selfreferential.go b/cmd/gen/conditions/tests/results/selfreferential.go index 5def489..a7907b2 100644 --- a/cmd/gen/conditions/tests/results/selfreferential.go +++ b/cmd/gen/conditions/tests/results/selfreferential.go @@ -40,6 +40,7 @@ func EmployeeBoss(conditions ...orm.Condition[selfreferential.Employee]) orm.Con } } +var EmployeePreloadBoss = EmployeeBoss(EmployeePreloadAttributes) var employeeBossIdFieldID = orm.FieldIdentifier{Field: "BossID"} func EmployeeBossId(operator orm.Operator[orm.UUID]) orm.WhereCondition[selfreferential.Employee] { @@ -50,3 +51,4 @@ func EmployeeBossId(operator orm.Operator[orm.UUID]) orm.WhereCondition[selfrefe } var EmployeePreloadAttributes = orm.NewPreloadCondition[selfreferential.Employee](employeeBossIdFieldID) +var EmployeePreloadRelations = []orm.Condition[selfreferential.Employee]{EmployeePreloadBoss} From 62ec80b82d6fc623b8672fc53ea562eba582d80b Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 15:52:04 +0200 Subject: [PATCH 23/31] add preload to join conditions to support nested preloads --- cmd/gen/conditions/condition.go | 16 +++++++++------- .../conditions/tests/results/belongsto_owned.go | 11 ++++++----- .../conditions/tests/results/hasmany_seller.go | 11 ++++++----- cmd/gen/conditions/tests/results/hasone_city.go | 11 ++++++----- .../conditions/tests/results/hasone_country.go | 11 ++++++----- .../tests/results/multiplepackage_package1.go | 11 ++++++----- .../tests/results/overrideforeignkey_bicycle.go | 11 ++++++----- .../results/overrideforeignkeyinverse_user.go | 11 ++++++----- .../tests/results/overridereferences_phone.go | 11 ++++++----- .../overridereferencesinverse_computer.go | 11 ++++++----- .../conditions/tests/results/selfreferential.go | 11 ++++++----- 11 files changed, 69 insertions(+), 57 deletions(-) diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index ee7f0ba..911233c 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -15,6 +15,7 @@ const ( badaasORMFieldCondition = "FieldCondition" badaasORMWhereCondition = "WhereCondition" badaasORMJoinCondition = "JoinCondition" + badaasORMIJoinCondition = "IJoinCondition" badaasORMFieldIdentifier = "FieldIdentifier" IDFieldID = "IDFieldID" CreatedAtFieldID = "CreatedAtFieldID" @@ -278,8 +279,8 @@ func (condition *Condition) generateJoin(objectType Type, field Field, t1Field, conditionName := getConditionName(objectType, field) log.Logger.Debugf("Generated %q", conditionName) - ormT1Condition := jen.Qual( - badaasORMPath, badaasORMCondition, + ormT1IJoinCondition := jen.Qual( + badaasORMPath, badaasORMIJoinCondition, ).Types(t1) ormT2Condition := jen.Qual( badaasORMPath, badaasORMCondition, @@ -297,14 +298,15 @@ func (condition *Condition) generateJoin(objectType Type, field Field, t1Field, ).Params( jen.Id("conditions").Op("...").Add(ormT2Condition), ).Add( - ormT1Condition, + ormT1IJoinCondition, ).Block( jen.Return( ormJoinCondition.Values(jen.Dict{ - jen.Id("T1Field"): jen.Lit(t1Field), - jen.Id("T2Field"): jen.Lit(t2Field), - jen.Id("RelationField"): jen.Lit(field.Name), - jen.Id("Conditions"): jen.Id("conditions"), + jen.Id("T1Field"): jen.Lit(t1Field), + jen.Id("T2Field"): jen.Lit(t2Field), + jen.Id("RelationField"): jen.Lit(field.Name), + jen.Id("Conditions"): jen.Id("conditions"), + jen.Id("T1PreloadCondition"): jen.Id(getPreloadAttributesName(objectType.Name())), }), ), ), diff --git a/cmd/gen/conditions/tests/results/belongsto_owned.go b/cmd/gen/conditions/tests/results/belongsto_owned.go index be27fce..835db51 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owned.go +++ b/cmd/gen/conditions/tests/results/belongsto_owned.go @@ -31,12 +31,13 @@ func OwnedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongs Operator: operator, } } -func OwnedOwner(conditions ...orm.Condition[belongsto.Owner]) orm.Condition[belongsto.Owned] { +func OwnedOwner(conditions ...orm.Condition[belongsto.Owner]) orm.IJoinCondition[belongsto.Owned] { return orm.JoinCondition[belongsto.Owned, belongsto.Owner]{ - Conditions: conditions, - RelationField: "Owner", - T1Field: "OwnerID", - T2Field: "ID", + Conditions: conditions, + RelationField: "Owner", + T1Field: "OwnerID", + T1PreloadCondition: OwnedPreloadAttributes, + T2Field: "ID", } } diff --git a/cmd/gen/conditions/tests/results/hasmany_seller.go b/cmd/gen/conditions/tests/results/hasmany_seller.go index c5de260..90af50d 100644 --- a/cmd/gen/conditions/tests/results/hasmany_seller.go +++ b/cmd/gen/conditions/tests/results/hasmany_seller.go @@ -31,12 +31,13 @@ func SellerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasman Operator: operator, } } -func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.Condition[hasmany.Seller] { +func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.IJoinCondition[hasmany.Seller] { return orm.JoinCondition[hasmany.Seller, hasmany.Company]{ - Conditions: conditions, - RelationField: "Company", - T1Field: "CompanyID", - T2Field: "ID", + Conditions: conditions, + RelationField: "Company", + T1Field: "CompanyID", + T1PreloadCondition: SellerPreloadAttributes, + T2Field: "ID", } } diff --git a/cmd/gen/conditions/tests/results/hasone_city.go b/cmd/gen/conditions/tests/results/hasone_city.go index ea31ce1..fab9f21 100644 --- a/cmd/gen/conditions/tests/results/hasone_city.go +++ b/cmd/gen/conditions/tests/results/hasone_city.go @@ -31,12 +31,13 @@ func CityDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.C Operator: operator, } } -func CityCountry(conditions ...orm.Condition[hasone.Country]) orm.Condition[hasone.City] { +func CityCountry(conditions ...orm.Condition[hasone.Country]) orm.IJoinCondition[hasone.City] { return orm.JoinCondition[hasone.City, hasone.Country]{ - Conditions: conditions, - RelationField: "Country", - T1Field: "CountryID", - T2Field: "ID", + Conditions: conditions, + RelationField: "Country", + T1Field: "CountryID", + T1PreloadCondition: CityPreloadAttributes, + T2Field: "ID", } } diff --git a/cmd/gen/conditions/tests/results/hasone_country.go b/cmd/gen/conditions/tests/results/hasone_country.go index 9ac915c..7d08820 100644 --- a/cmd/gen/conditions/tests/results/hasone_country.go +++ b/cmd/gen/conditions/tests/results/hasone_country.go @@ -31,12 +31,13 @@ func CountryDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hason Operator: operator, } } -func CountryCapital(conditions ...orm.Condition[hasone.City]) orm.Condition[hasone.Country] { +func CountryCapital(conditions ...orm.Condition[hasone.City]) orm.IJoinCondition[hasone.Country] { return orm.JoinCondition[hasone.Country, hasone.City]{ - Conditions: conditions, - RelationField: "Capital", - T1Field: "ID", - T2Field: "CountryID", + Conditions: conditions, + RelationField: "Capital", + T1Field: "ID", + T1PreloadCondition: CountryPreloadAttributes, + T2Field: "CountryID", } } diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package1.go b/cmd/gen/conditions/tests/results/multiplepackage_package1.go index 413e708..75029d1 100644 --- a/cmd/gen/conditions/tests/results/multiplepackage_package1.go +++ b/cmd/gen/conditions/tests/results/multiplepackage_package1.go @@ -32,12 +32,13 @@ func Package1DeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[pack Operator: operator, } } -func Package1Package2(conditions ...orm.Condition[package2.Package2]) orm.Condition[package1.Package1] { +func Package1Package2(conditions ...orm.Condition[package2.Package2]) orm.IJoinCondition[package1.Package1] { return orm.JoinCondition[package1.Package1, package2.Package2]{ - Conditions: conditions, - RelationField: "Package2", - T1Field: "ID", - T2Field: "Package1ID", + Conditions: conditions, + RelationField: "Package2", + T1Field: "ID", + T1PreloadCondition: Package1PreloadAttributes, + T2Field: "Package1ID", } } diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go b/cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go index 3d2de20..7c615d9 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go @@ -31,12 +31,13 @@ func BicycleDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overr Operator: operator, } } -func BicycleOwner(conditions ...orm.Condition[overrideforeignkey.Person]) orm.Condition[overrideforeignkey.Bicycle] { +func BicycleOwner(conditions ...orm.Condition[overrideforeignkey.Person]) orm.IJoinCondition[overrideforeignkey.Bicycle] { return orm.JoinCondition[overrideforeignkey.Bicycle, overrideforeignkey.Person]{ - Conditions: conditions, - RelationField: "Owner", - T1Field: "OwnerSomethingID", - T2Field: "ID", + Conditions: conditions, + RelationField: "Owner", + T1Field: "OwnerSomethingID", + T1PreloadCondition: BicyclePreloadAttributes, + T2Field: "ID", } } diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go index ac8de78..075f775 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go @@ -31,12 +31,13 @@ func UserDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[override Operator: operator, } } -func UserCreditCard(conditions ...orm.Condition[overrideforeignkeyinverse.CreditCard]) orm.Condition[overrideforeignkeyinverse.User] { +func UserCreditCard(conditions ...orm.Condition[overrideforeignkeyinverse.CreditCard]) orm.IJoinCondition[overrideforeignkeyinverse.User] { return orm.JoinCondition[overrideforeignkeyinverse.User, overrideforeignkeyinverse.CreditCard]{ - Conditions: conditions, - RelationField: "CreditCard", - T1Field: "ID", - T2Field: "UserReference", + Conditions: conditions, + RelationField: "CreditCard", + T1Field: "ID", + T1PreloadCondition: UserPreloadAttributes, + T2Field: "UserReference", } } diff --git a/cmd/gen/conditions/tests/results/overridereferences_phone.go b/cmd/gen/conditions/tests/results/overridereferences_phone.go index 50353d4..4624f79 100644 --- a/cmd/gen/conditions/tests/results/overridereferences_phone.go +++ b/cmd/gen/conditions/tests/results/overridereferences_phone.go @@ -31,12 +31,13 @@ func PhoneDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrid Operator: operator, } } -func PhoneBrand(conditions ...orm.Condition[overridereferences.Brand]) orm.Condition[overridereferences.Phone] { +func PhoneBrand(conditions ...orm.Condition[overridereferences.Brand]) orm.IJoinCondition[overridereferences.Phone] { return orm.JoinCondition[overridereferences.Phone, overridereferences.Brand]{ - Conditions: conditions, - RelationField: "Brand", - T1Field: "BrandName", - T2Field: "Name", + Conditions: conditions, + RelationField: "Brand", + T1Field: "BrandName", + T1PreloadCondition: PhonePreloadAttributes, + T2Field: "Name", } } diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go index dd9940b..8fffa44 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go @@ -40,12 +40,13 @@ func ComputerName(operator orm.Operator[string]) orm.WhereCondition[overriderefe Operator: operator, } } -func ComputerProcessor(conditions ...orm.Condition[overridereferencesinverse.Processor]) orm.Condition[overridereferencesinverse.Computer] { +func ComputerProcessor(conditions ...orm.Condition[overridereferencesinverse.Processor]) orm.IJoinCondition[overridereferencesinverse.Computer] { return orm.JoinCondition[overridereferencesinverse.Computer, overridereferencesinverse.Processor]{ - Conditions: conditions, - RelationField: "Processor", - T1Field: "Name", - T2Field: "ComputerName", + Conditions: conditions, + RelationField: "Processor", + T1Field: "Name", + T1PreloadCondition: ComputerPreloadAttributes, + T2Field: "ComputerName", } } diff --git a/cmd/gen/conditions/tests/results/selfreferential.go b/cmd/gen/conditions/tests/results/selfreferential.go index a7907b2..7ab2b25 100644 --- a/cmd/gen/conditions/tests/results/selfreferential.go +++ b/cmd/gen/conditions/tests/results/selfreferential.go @@ -31,12 +31,13 @@ func EmployeeDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[self Operator: operator, } } -func EmployeeBoss(conditions ...orm.Condition[selfreferential.Employee]) orm.Condition[selfreferential.Employee] { +func EmployeeBoss(conditions ...orm.Condition[selfreferential.Employee]) orm.IJoinCondition[selfreferential.Employee] { return orm.JoinCondition[selfreferential.Employee, selfreferential.Employee]{ - Conditions: conditions, - RelationField: "Boss", - T1Field: "BossID", - T2Field: "ID", + Conditions: conditions, + RelationField: "Boss", + T1Field: "BossID", + T1PreloadCondition: EmployeePreloadAttributes, + T2Field: "ID", } } From 0af08d3c3bd5a5469644c80d5d1c4451dccd6cf0 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 16:14:59 +0200 Subject: [PATCH 24/31] generate relation getters --- .gitignore | 3 +- cmd/gen/conditions/condition.go | 13 +- cmd/gen/conditions/field.go | 12 + cmd/gen/conditions/main.go | 15 +- cmd/gen/conditions/main_test.go | 42 +++- .../conditions/relationGettersGenerator.go | 224 ++++++++++++++++++ .../tests/belongsto/badaas-orm_result.go | 8 + .../tests/hasmany/badaas-orm_result.go | 8 + .../tests/hasone/badaas-orm_result.go | 11 + .../package1/badaas-orm_result.go | 11 + .../overrideforeignkey/badaas-orm_result.go | 8 + .../badaas-orm_result.go | 8 + .../overridereferences/badaas-orm_result.go | 8 + .../badaas-orm_result.go | 8 + .../conditions/tests/results/goembedded.go | 4 +- .../conditions/tests/results/gormembedded.go | 4 +- cmd/gen/conditions/tests/results/uintmodel.go | 4 +- .../selfreferential/badaas-orm_result.go | 8 + cmd/gen/conditions/type.go | 24 +- cmd/gen/docker_test.go | 23 +- cmd/{utils => testutils}/file.go | 9 +- cmd/utils/slice.go | 15 ++ cmd/utils/slice_test.go | 59 +++++ 23 files changed, 486 insertions(+), 43 deletions(-) create mode 100644 cmd/gen/conditions/relationGettersGenerator.go create mode 100644 cmd/gen/conditions/tests/belongsto/badaas-orm_result.go create mode 100644 cmd/gen/conditions/tests/hasmany/badaas-orm_result.go create mode 100644 cmd/gen/conditions/tests/hasone/badaas-orm_result.go create mode 100644 cmd/gen/conditions/tests/multiplepackage/package1/badaas-orm_result.go create mode 100644 cmd/gen/conditions/tests/overrideforeignkey/badaas-orm_result.go create mode 100644 cmd/gen/conditions/tests/overrideforeignkeyinverse/badaas-orm_result.go create mode 100644 cmd/gen/conditions/tests/overridereferences/badaas-orm_result.go create mode 100644 cmd/gen/conditions/tests/overridereferencesinverse/badaas-orm_result.go create mode 100644 cmd/gen/conditions/tests/selfreferential/badaas-orm_result.go rename cmd/{utils => testutils}/file.go (63%) create mode 100644 cmd/utils/slice.go create mode 100644 cmd/utils/slice_test.go diff --git a/.gitignore b/.gitignore index 4b927af..6ead366 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,5 @@ go.work badaas-cli # test results -cmd/gen/conditions/*_conditions.go \ No newline at end of file +cmd/gen/conditions/*_conditions.go +cmd/gen/conditions/tests/**/badaas-orm.go \ No newline at end of file diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index 911233c..3907d52 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -24,6 +24,8 @@ const ( // badaas/orm/operator.go badaasORMOperator = "Operator" // badaas/orm/baseModels.go + uIntID = "UIntID" + uuid = "UUID" uuidModel = "UUIDModel" uIntModel = "UIntModel" ) @@ -125,9 +127,10 @@ func (condition *Condition) generateForNamedType(objectType Type, field Field) { objectType, field, ) - } else if field.Type.IsGormCustomType() || field.TypeString() == "time.Time" { + } else if field.Type.IsGormCustomType() || field.TypeString() == "time.Time" || field.IsModelID() { // field is a Gorm Custom type (implements Scanner and Valuer interfaces) // or a named type supported by gorm (time.Time) + // or a badaas-orm id (uuid or uintid) condition.param.ToCustomType(condition.destPkg, field.Type) condition.generateWhere( objectType, @@ -140,15 +143,15 @@ func (condition *Condition) generateForNamedType(objectType Type, field Field) { // Generate condition between object and field when the field is a Badaas Model func (condition *Condition) generateForBadaasModel(objectType Type, field Field) { - hasFK, _ := objectType.HasFK(field) - if hasFK { - // belongsTo relation + _, err := objectType.GetFK(field) + if err == nil { + // has the fk -> belongsTo relation condition.generateJoinWithFK( objectType, field, ) } else { - // hasOne relation + // has not the fk -> hasOne relation condition.generateJoinWithoutFK( objectType, field, diff --git a/cmd/gen/conditions/field.go b/cmd/gen/conditions/field.go index 56c0430..2ddef3a 100644 --- a/cmd/gen/conditions/field.go +++ b/cmd/gen/conditions/field.go @@ -3,8 +3,16 @@ package conditions import ( "errors" "go/types" + + "github.com/elliotchance/pie/v2" ) +// badaas/orm/baseModels.go +var modelIDs = []string{ + badaasORMPath + "." + uIntID, + badaasORMPath + "." + uuid, +} + type Field struct { Name string NamePrefix string @@ -14,6 +22,10 @@ type Field struct { ColumnPrefix string } +func (field Field) IsModelID() bool { + return pie.Contains(modelIDs, field.TypeString()) +} + // Get the name of the column where the data for a field will be saved func (field Field) getColumnName() string { columnTag, isPresent := field.Tags[columnTagName] diff --git a/cmd/gen/conditions/main.go b/cmd/gen/conditions/main.go index d90084c..7507fb6 100644 --- a/cmd/gen/conditions/main.go +++ b/cmd/gen/conditions/main.go @@ -5,6 +5,7 @@ import ( "fmt" "go/types" "os" + "path/filepath" "github.com/ettle/strcase" "github.com/spf13/cobra" @@ -54,21 +55,29 @@ func generateConditions(_ *cobra.Command, args []string) { } // Generate conditions for each package - for _, pkg := range pkgs { - generateConditionsForPkg(destPkg, pkg) + for i, pkg := range pkgs { + generateConditionsForPkg(destPkg, args[i], pkg) } } // Generates a file with conditions for each Badaas model in the package -func generateConditionsForPkg(destPkg string, pkg *packages.Package) { +func generateConditionsForPkg(destPkg string, pkgPath string, pkg *packages.Package) { log.Logger.Infof("Generating conditions for types in package %q", pkg.Types.Name()) + relationGettersFile := NewFile(pkg.Types.Name(), filepath.Join(pkgPath, "badaas-orm.go")) + for _, name := range pkg.Types.Scope().Names() { object := getObject(pkg, name) if object != nil { generateConditionsForObject(destPkg, object) + _ = NewRelationGettersGenerator(object).Into(relationGettersFile) } } + + err := relationGettersFile.Save() + if err != nil { + panic(err) + } } func generateConditionsForObject(destPkg string, object types.Object) { diff --git a/cmd/gen/conditions/main_test.go b/cmd/gen/conditions/main_test.go index e120534..d8d64f9 100644 --- a/cmd/gen/conditions/main_test.go +++ b/cmd/gen/conditions/main_test.go @@ -9,7 +9,7 @@ import ( "github.com/spf13/viper" "gotest.tools/assert" - "github.com/ditrit/badaas-cli/cmd/utils" + "github.com/ditrit/badaas-cli/cmd/testutils" ) const chunkSize = 100000 @@ -18,66 +18,84 @@ func TestUIntModel(t *testing.T) { doTest(t, "./tests/uintmodel", []Comparison{ {Have: "uint_model_conditions.go", Expected: "./tests/results/uintmodel.go"}, }) + testutils.CheckFileNotExists(t, "./tests/uintmodel/badaas-orm.go") } func TestUUIDModel(t *testing.T) { doTest(t, "./tests/uuidmodel", []Comparison{ {Have: "uuid_model_conditions.go", Expected: "./tests/results/uuidmodel.go"}, }) + testutils.CheckFileNotExists(t, "./tests/uuidmodel/badaas-orm.go") } func TestBasicTypes(t *testing.T) { doTest(t, "./tests/basictypes", []Comparison{ {Have: "basic_types_conditions.go", Expected: "./tests/results/basictypes.go"}, }) + testutils.CheckFileNotExists(t, "./tests/basictypes/badaas-orm.go") } func TestBasicPointers(t *testing.T) { doTest(t, "./tests/basicpointers", []Comparison{ {Have: "basic_pointers_conditions.go", Expected: "./tests/results/basicpointers.go"}, }) + testutils.CheckFileNotExists(t, "./tests/basicpointers/badaas-orm.go") } func TestBasicSlices(t *testing.T) { doTest(t, "./tests/basicslices", []Comparison{ {Have: "basic_slices_conditions.go", Expected: "./tests/results/basicslices.go"}, }) + testutils.CheckFileNotExists(t, "./tests/basicslices/badaas-orm.go") } func TestBasicSlicesPointer(t *testing.T) { doTest(t, "./tests/basicslicespointer", []Comparison{ {Have: "basic_slices_pointer_conditions.go", Expected: "./tests/results/basicslicespointer.go"}, }) + testutils.CheckFileNotExists(t, "./tests/basicslicespointer/badaas-orm.go") } func TestGoEmbedded(t *testing.T) { doTest(t, "./tests/goembedded", []Comparison{ {Have: "go_embedded_conditions.go", Expected: "./tests/results/goembedded.go"}, }) + testutils.CheckFileNotExists(t, "./tests/goembedded/badaas-orm.go") } func TestGormEmbedded(t *testing.T) { doTest(t, "./tests/gormembedded", []Comparison{ {Have: "gorm_embedded_conditions.go", Expected: "./tests/results/gormembedded.go"}, }) + testutils.CheckFileNotExists(t, "./tests/gormembedded/badaas-orm.go") } func TestCustomType(t *testing.T) { doTest(t, "./tests/customtype", []Comparison{ {Have: "custom_type_conditions.go", Expected: "./tests/results/customtype.go"}, }) + testutils.CheckFileNotExists(t, "./tests/customtype/badaas-orm.go") +} + +func TestColumnDefinition(t *testing.T) { + doTest(t, "./tests/columndefinition", []Comparison{ + {Have: "column_definition_conditions.go", Expected: "./tests/results/columndefinition.go"}, + }) + testutils.CheckFileNotExists(t, "./tests/columndefinition/badaas-orm.go") } func TestNullableTypes(t *testing.T) { doTest(t, "./tests/nullabletypes", []Comparison{ {Have: "nullable_types_conditions.go", Expected: "./tests/results/nullabletypes.go"}, }) + testutils.CheckFileNotExists(t, "./tests/nullabletypes/badaas-orm.go") } func TestBelongsTo(t *testing.T) { doTest(t, "./tests/belongsto", []Comparison{ {Have: "owner_conditions.go", Expected: "./tests/results/belongsto_owner.go"}, {Have: "owned_conditions.go", Expected: "./tests/results/belongsto_owned.go"}, + {Have: "./tests/belongsto/badaas-orm.go", Expected: "./tests/belongsto/badaas-orm_result.go"}, }) } @@ -85,6 +103,7 @@ func TestHasOne(t *testing.T) { doTest(t, "./tests/hasone", []Comparison{ {Have: "country_conditions.go", Expected: "./tests/results/hasone_country.go"}, {Have: "city_conditions.go", Expected: "./tests/results/hasone_city.go"}, + {Have: "./tests/hasone/badaas-orm.go", Expected: "./tests/hasone/badaas-orm_result.go"}, }) } @@ -92,34 +111,32 @@ func TestHasMany(t *testing.T) { doTest(t, "./tests/hasmany", []Comparison{ {Have: "company_conditions.go", Expected: "./tests/results/hasmany_company.go"}, {Have: "seller_conditions.go", Expected: "./tests/results/hasmany_seller.go"}, + {Have: "./tests/hasmany/badaas-orm.go", Expected: "./tests/hasmany/badaas-orm_result.go"}, }) } func TestSelfReferential(t *testing.T) { doTest(t, "./tests/selfreferential", []Comparison{ {Have: "employee_conditions.go", Expected: "./tests/results/selfreferential.go"}, + {Have: "./tests/selfreferential/badaas-orm.go", Expected: "./tests/selfreferential/badaas-orm_result.go"}, }) } func TestMultiplePackage(t *testing.T) { doTest(t, "./tests/multiplepackage/package1", []Comparison{ {Have: "package1_conditions.go", Expected: "./tests/results/multiplepackage_package1.go"}, + {Have: "./tests/multiplepackage/package1/badaas-orm.go", Expected: "./tests/multiplepackage/package1/badaas-orm_result.go"}, }) doTest(t, "./tests/multiplepackage/package2", []Comparison{ {Have: "package2_conditions.go", Expected: "./tests/results/multiplepackage_package2.go"}, }) } -func TestColumnDefinition(t *testing.T) { - doTest(t, "./tests/columndefinition", []Comparison{ - {Have: "column_definition_conditions.go", Expected: "./tests/results/columndefinition.go"}, - }) -} - func TestOverrideForeignKey(t *testing.T) { doTest(t, "./tests/overrideforeignkey", []Comparison{ {Have: "bicycle_conditions.go", Expected: "./tests/results/overrideforeignkey_bicycle.go"}, {Have: "person_conditions.go", Expected: "./tests/results/overrideforeignkey_person.go"}, + {Have: "./tests/overrideforeignkey/badaas-orm.go", Expected: "./tests/overrideforeignkey/badaas-orm_result.go"}, }) } @@ -127,6 +144,7 @@ func TestOverrideReferences(t *testing.T) { doTest(t, "./tests/overridereferences", []Comparison{ {Have: "phone_conditions.go", Expected: "./tests/results/overridereferences_phone.go"}, {Have: "brand_conditions.go", Expected: "./tests/results/overridereferences_brand.go"}, + {Have: "./tests/overridereferences/badaas-orm.go", Expected: "./tests/overridereferences/badaas-orm_result.go"}, }) } @@ -134,6 +152,7 @@ func TestOverrideForeignKeyInverse(t *testing.T) { doTest(t, "./tests/overrideforeignkeyinverse", []Comparison{ {Have: "user_conditions.go", Expected: "./tests/results/overrideforeignkeyinverse_user.go"}, {Have: "credit_card_conditions.go", Expected: "./tests/results/overrideforeignkeyinverse_credit_card.go"}, + {Have: "./tests/overrideforeignkeyinverse/badaas-orm.go", Expected: "./tests/overrideforeignkeyinverse/badaas-orm_result.go"}, }) } @@ -141,6 +160,7 @@ func TestOverrideReferencesInverse(t *testing.T) { doTest(t, "./tests/overridereferencesinverse", []Comparison{ {Have: "computer_conditions.go", Expected: "./tests/results/overridereferencesinverse_computer.go"}, {Have: "processor_conditions.go", Expected: "./tests/results/overridereferencesinverse_processor.go"}, + {Have: "./tests/overridereferencesinverse/badaas-orm.go", Expected: "./tests/overridereferencesinverse/badaas-orm_result.go"}, }) } @@ -158,8 +178,8 @@ func doTest(t *testing.T, sourcePkg string, comparisons []Comparison) { } func checkFilesEqual(t *testing.T, file1, file2 string) { - stat1 := utils.CheckFileExists(t, file1) - stat2 := utils.CheckFileExists(t, file2) + stat1 := testutils.CheckFileExists(t, file1) + stat2 := testutils.CheckFileExists(t, file2) // do inputs at least have the same size? assert.Equal(t, stat1.Size(), stat2.Size(), "File lens are not equal") @@ -179,6 +199,7 @@ func checkFilesEqual(t *testing.T, file1, file2 string) { b1 := make([]byte, chunkSize) b2 := make([]byte, chunkSize) + for { n1, err1 := io.ReadFull(f1, b1) n2, err2 := io.ReadFull(f2, b2) @@ -193,10 +214,11 @@ func checkFilesEqual(t *testing.T, file1, file2 string) { if err1 != nil { t.Error(err1) } + if err2 != nil { t.Error(err2) } } - utils.RemoveFile(file1) + testutils.RemoveFile(file1) } diff --git a/cmd/gen/conditions/relationGettersGenerator.go b/cmd/gen/conditions/relationGettersGenerator.go new file mode 100644 index 0000000..c4b2038 --- /dev/null +++ b/cmd/gen/conditions/relationGettersGenerator.go @@ -0,0 +1,224 @@ +package conditions + +import ( + "go/types" + + "github.com/dave/jennifer/jen" + "github.com/ettle/strcase" + + "github.com/ditrit/badaas-cli/cmd/log" +) + +const ( + badaasORMVerifyStructLoaded = "VerifyStructLoaded" + badaasORMVerifyPointerLoaded = "VerifyPointerLoaded" + badaasORMVerifyPointerWithIDLoaded = "VerifyPointerWithIDLoaded" + badaasORMVerifyCollectionLoaded = "VerifyCollectionLoaded" +) + +type RelationGettersGenerator struct { + object types.Object + objectType Type +} + +func NewRelationGettersGenerator(object types.Object) *RelationGettersGenerator { + return &RelationGettersGenerator{ + object: object, + objectType: Type{object.Type()}, + } +} + +// Add conditions for an object in the file +func (generator RelationGettersGenerator) Into(file *File) error { + fields, err := getFields(generator.objectType) + if err != nil { + return err + } + + log.Logger.Infof("Generating relation getters for type %q in %s", generator.object.Name(), file.name) + + file.Add(generator.ForEachField(file, fields)...) + + return nil +} + +func (generator RelationGettersGenerator) ForEachField(file *File, fields []Field) []jen.Code { + relationGetters := []jen.Code{} + + for _, field := range fields { + if field.Embedded { + relationGetters = append( + relationGetters, + generateForEmbeddedField[jen.Code]( + file, + field, + generator, + )..., + ) + } else { + getterForField := generator.generateForField(field) + if getterForField != nil { + relationGetters = append(relationGetters, getterForField) + } + } + } + + return relationGetters +} + +func (generator RelationGettersGenerator) generateForField(field Field) jen.Code { + switch fieldType := field.GetType().(type) { + case *types.Named: + // the field is a named type (user defined structs) + _, err := field.Type.BadaasModelStruct() + if err == nil { + log.Logger.Debugf("Generating relation getter for type %q and field %s", generator.object.Name(), field.Name) + // field is a badaas Model + return generator.verifyStruct(field) + } + case *types.Pointer: + // the field is a pointer + return generator.generateForPointer(field.ChangeType(fieldType.Elem())) + default: + log.Logger.Debugf("struct field type not handled: %T", fieldType) + } + + return nil +} + +func (generator RelationGettersGenerator) generateForPointer(field Field) jen.Code { + switch fieldType := field.GetType().(type) { + case *types.Named: + _, err := field.Type.BadaasModelStruct() + if err == nil { + // field is a pointer to Badaas Model + fk, err := generator.objectType.GetFK(field) + if err != nil { + log.Logger.Debugf("unhandled: field is a pointer and object not has the fk: %s", field.Type) + return nil + } + + log.Logger.Debugf("Generating relation getter for type %q and field %s", generator.object.Name(), field.Name) + + switch fk.GetType().(type) { + case *types.Named: + if fk.IsModelID() { + return generator.verifyPointerWithID(field) + } + case *types.Pointer: + // the fk is a pointer + return generator.verifyPointer(field) + } + } + case *types.Slice: + return generator.generateForSlicePointer( + field.ChangeType(fieldType.Elem()), + nil, + ) + } + + return nil +} + +func (generator RelationGettersGenerator) generateForSlicePointer(field Field, fieldTypePrefix *jen.Statement) jen.Code { + switch fieldType := field.GetType().(type) { + case *types.Named: + _, err := field.Type.BadaasModelStruct() + if err == nil { + // field is a pointer to a slice of badaas Model + return generator.verifyCollection(field, fieldTypePrefix) + } + case *types.Pointer: + return generator.generateForSlicePointer( + field.ChangeType(fieldType.Elem()), + jen.Op("*"), + ) + } + + return nil +} + +func getGetterName(field Field) string { + return "Get" + strcase.ToPascal(field.Name) +} + +func (generator RelationGettersGenerator) verifyStruct(field Field) *jen.Statement { + return generator.verifyCommon( + field, + badaasORMVerifyStructLoaded, + jen.Op("*"), + nil, + jen.Op("&").Id("m").Op(".").Id(field.Name), + ) +} + +func (generator RelationGettersGenerator) verifyPointer(field Field) *jen.Statement { + return generator.verifyPointerCommon(field, badaasORMVerifyPointerLoaded) +} + +func (generator RelationGettersGenerator) verifyPointerWithID(field Field) *jen.Statement { + return generator.verifyPointerCommon(field, badaasORMVerifyPointerWithIDLoaded) +} + +func (generator RelationGettersGenerator) verifyCollection(field Field, fieldTypePrefix *jen.Statement) jen.Code { + return generator.verifyCommon( + field, + badaasORMVerifyCollectionLoaded, + jen.Index(), + fieldTypePrefix, + jen.Id("m").Op(".").Id(field.Name), + ) +} + +func (generator RelationGettersGenerator) verifyPointerCommon(field Field, verifyFunc string) *jen.Statement { + return generator.verifyCommon( + field, + verifyFunc, + jen.Op("*"), + nil, + jen.Id("m").Op(".").Id(field.Name+"ID"), + jen.Id("m").Op(".").Id(field.Name), + ) +} + +func (generator RelationGettersGenerator) verifyCommon( + field Field, + verifyFunc string, + returnType *jen.Statement, + fieldTypePrefix *jen.Statement, + callParams ...jen.Code, +) *jen.Statement { + fieldType := jen.Qual( + getRelativePackagePath( + generator.object.Pkg().Name(), + field.Type, + ), + field.TypeName(), + ) + + if fieldTypePrefix != nil { + fieldType = fieldTypePrefix.Add(fieldType) + } + + return jen.Func().Parens( + jen.Id("m").Id(generator.object.Name()), + ).Id(getGetterName(field)).Params().Add( + jen.Parens( + jen.List( + returnType.Add(fieldType), + jen.Id("error"), + ), + ), + ).Block( + jen.Return( + jen.Qual( + badaasORMPath, + verifyFunc, + ).Types( + fieldType, + ).Call( + callParams..., + ), + ), + ) +} diff --git a/cmd/gen/conditions/tests/belongsto/badaas-orm_result.go b/cmd/gen/conditions/tests/belongsto/badaas-orm_result.go new file mode 100644 index 0000000..e371a04 --- /dev/null +++ b/cmd/gen/conditions/tests/belongsto/badaas-orm_result.go @@ -0,0 +1,8 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package belongsto + +import orm "github.com/ditrit/badaas/orm" + +func (m Owned) GetOwner() (*Owner, error) { + return orm.VerifyStructLoaded[Owner](&m.Owner) +} diff --git a/cmd/gen/conditions/tests/hasmany/badaas-orm_result.go b/cmd/gen/conditions/tests/hasmany/badaas-orm_result.go new file mode 100644 index 0000000..5c730e1 --- /dev/null +++ b/cmd/gen/conditions/tests/hasmany/badaas-orm_result.go @@ -0,0 +1,8 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package hasmany + +import orm "github.com/ditrit/badaas/orm" + +func (m Seller) GetCompany() (*Company, error) { + return orm.VerifyPointerLoaded[Company](m.CompanyID, m.Company) +} diff --git a/cmd/gen/conditions/tests/hasone/badaas-orm_result.go b/cmd/gen/conditions/tests/hasone/badaas-orm_result.go new file mode 100644 index 0000000..8b54a6d --- /dev/null +++ b/cmd/gen/conditions/tests/hasone/badaas-orm_result.go @@ -0,0 +1,11 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package hasone + +import orm "github.com/ditrit/badaas/orm" + +func (m City) GetCountry() (*Country, error) { + return orm.VerifyPointerWithIDLoaded[Country](m.CountryID, m.Country) +} +func (m Country) GetCapital() (*City, error) { + return orm.VerifyStructLoaded[City](&m.Capital) +} diff --git a/cmd/gen/conditions/tests/multiplepackage/package1/badaas-orm_result.go b/cmd/gen/conditions/tests/multiplepackage/package1/badaas-orm_result.go new file mode 100644 index 0000000..af902eb --- /dev/null +++ b/cmd/gen/conditions/tests/multiplepackage/package1/badaas-orm_result.go @@ -0,0 +1,11 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package package1 + +import ( + package2 "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/multiplepackage/package2" + orm "github.com/ditrit/badaas/orm" +) + +func (m Package1) GetPackage2() (*package2.Package2, error) { + return orm.VerifyStructLoaded[package2.Package2](&m.Package2) +} diff --git a/cmd/gen/conditions/tests/overrideforeignkey/badaas-orm_result.go b/cmd/gen/conditions/tests/overrideforeignkey/badaas-orm_result.go new file mode 100644 index 0000000..24a0918 --- /dev/null +++ b/cmd/gen/conditions/tests/overrideforeignkey/badaas-orm_result.go @@ -0,0 +1,8 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package overrideforeignkey + +import orm "github.com/ditrit/badaas/orm" + +func (m Bicycle) GetOwner() (*Person, error) { + return orm.VerifyStructLoaded[Person](&m.Owner) +} diff --git a/cmd/gen/conditions/tests/overrideforeignkeyinverse/badaas-orm_result.go b/cmd/gen/conditions/tests/overrideforeignkeyinverse/badaas-orm_result.go new file mode 100644 index 0000000..732988c --- /dev/null +++ b/cmd/gen/conditions/tests/overrideforeignkeyinverse/badaas-orm_result.go @@ -0,0 +1,8 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package overrideforeignkeyinverse + +import orm "github.com/ditrit/badaas/orm" + +func (m User) GetCreditCard() (*CreditCard, error) { + return orm.VerifyStructLoaded[CreditCard](&m.CreditCard) +} diff --git a/cmd/gen/conditions/tests/overridereferences/badaas-orm_result.go b/cmd/gen/conditions/tests/overridereferences/badaas-orm_result.go new file mode 100644 index 0000000..03fad6e --- /dev/null +++ b/cmd/gen/conditions/tests/overridereferences/badaas-orm_result.go @@ -0,0 +1,8 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package overridereferences + +import orm "github.com/ditrit/badaas/orm" + +func (m Phone) GetBrand() (*Brand, error) { + return orm.VerifyStructLoaded[Brand](&m.Brand) +} diff --git a/cmd/gen/conditions/tests/overridereferencesinverse/badaas-orm_result.go b/cmd/gen/conditions/tests/overridereferencesinverse/badaas-orm_result.go new file mode 100644 index 0000000..79b8211 --- /dev/null +++ b/cmd/gen/conditions/tests/overridereferencesinverse/badaas-orm_result.go @@ -0,0 +1,8 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package overridereferencesinverse + +import orm "github.com/ditrit/badaas/orm" + +func (m Computer) GetProcessor() (*Processor, error) { + return orm.VerifyStructLoaded[Processor](&m.Processor) +} diff --git a/cmd/gen/conditions/tests/results/goembedded.go b/cmd/gen/conditions/tests/results/goembedded.go index c83ed30..e9cddaa 100644 --- a/cmd/gen/conditions/tests/results/goembedded.go +++ b/cmd/gen/conditions/tests/results/goembedded.go @@ -7,8 +7,8 @@ import ( "time" ) -func GoEmbeddedId(operator orm.Operator[uint]) orm.WhereCondition[goembedded.GoEmbedded] { - return orm.FieldCondition[goembedded.GoEmbedded, uint]{ +func GoEmbeddedId(operator orm.Operator[orm.UIntID]) orm.WhereCondition[goembedded.GoEmbedded] { + return orm.FieldCondition[goembedded.GoEmbedded, orm.UIntID]{ FieldIdentifier: orm.IDFieldID, Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/gormembedded.go b/cmd/gen/conditions/tests/results/gormembedded.go index dc989ea..1590fcb 100644 --- a/cmd/gen/conditions/tests/results/gormembedded.go +++ b/cmd/gen/conditions/tests/results/gormembedded.go @@ -7,8 +7,8 @@ import ( "time" ) -func GormEmbeddedId(operator orm.Operator[uint]) orm.WhereCondition[gormembedded.GormEmbedded] { - return orm.FieldCondition[gormembedded.GormEmbedded, uint]{ +func GormEmbeddedId(operator orm.Operator[orm.UIntID]) orm.WhereCondition[gormembedded.GormEmbedded] { + return orm.FieldCondition[gormembedded.GormEmbedded, orm.UIntID]{ FieldIdentifier: orm.IDFieldID, Operator: operator, } diff --git a/cmd/gen/conditions/tests/results/uintmodel.go b/cmd/gen/conditions/tests/results/uintmodel.go index 66953ed..93061f5 100644 --- a/cmd/gen/conditions/tests/results/uintmodel.go +++ b/cmd/gen/conditions/tests/results/uintmodel.go @@ -7,8 +7,8 @@ import ( "time" ) -func UintModelId(operator orm.Operator[uint]) orm.WhereCondition[uintmodel.UintModel] { - return orm.FieldCondition[uintmodel.UintModel, uint]{ +func UintModelId(operator orm.Operator[orm.UIntID]) orm.WhereCondition[uintmodel.UintModel] { + return orm.FieldCondition[uintmodel.UintModel, orm.UIntID]{ FieldIdentifier: orm.IDFieldID, Operator: operator, } diff --git a/cmd/gen/conditions/tests/selfreferential/badaas-orm_result.go b/cmd/gen/conditions/tests/selfreferential/badaas-orm_result.go new file mode 100644 index 0000000..a377a92 --- /dev/null +++ b/cmd/gen/conditions/tests/selfreferential/badaas-orm_result.go @@ -0,0 +1,8 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package selfreferential + +import orm "github.com/ditrit/badaas/orm" + +func (m Employee) GetBoss() (*Employee, error) { + return orm.VerifyPointerLoaded[Employee](m.BossID, m.Boss) +} diff --git a/cmd/gen/conditions/type.go b/cmd/gen/conditions/type.go index 74aa6e0..3e13b8b 100644 --- a/cmd/gen/conditions/type.go +++ b/cmd/gen/conditions/type.go @@ -1,12 +1,15 @@ package conditions import ( + "errors" "fmt" "go/types" "regexp" "strings" "github.com/elliotchance/pie/v2" + + "github.com/ditrit/badaas-cli/cmd/utils" ) var ( @@ -32,6 +35,8 @@ var ( } ) +var ErrFkNotInTypeFields = errors.New("fk not in type's fields") + type Type struct { types.Type } @@ -84,16 +89,23 @@ func isBaseModel(fieldName string) bool { return pie.Contains(badaasORMBaseModels, fieldName) } -// Returns true is the type has a foreign key to the field's object +// Returns the fk field of the type to the "field"'s object // (another field that references that object) -func (t Type) HasFK(field Field) (bool, error) { +func (t Type) GetFK(field Field) (*Field, error) { objectFields, err := getFields(t) if err != nil { - return false, err + return nil, err + } + + fk := utils.FindFirst(objectFields, func(otherField Field) bool { + return strings.EqualFold(otherField.Name, field.getFKAttribute()) + }) + + if fk == nil { + return nil, ErrFkNotInTypeFields } - return pie.Any(objectFields, func(otherField Field) bool { - return otherField.Name == field.getFKAttribute() - }), nil + + return fk, nil } var ( diff --git a/cmd/gen/docker_test.go b/cmd/gen/docker_test.go index d20a7f7..a7ca484 100644 --- a/cmd/gen/docker_test.go +++ b/cmd/gen/docker_test.go @@ -5,8 +5,9 @@ import ( "path/filepath" "testing" - "github.com/ditrit/badaas-cli/cmd/utils" "github.com/stretchr/testify/assert" + + "github.com/ditrit/badaas-cli/cmd/testutils" ) func TestGenerateDockerFilesCreateFilesWhenDestinationFolderNotExists(t *testing.T) { @@ -159,21 +160,21 @@ func assertPanic(t *testing.T, functionShouldPanic func(), errorMessage string) } func checkFilesExist(t *testing.T) { - utils.CheckFileExists(t, ".dockerignore") - utils.CheckFileExists(t, "Makefile") - utils.CheckFileExists(t, filepath.Join("badaas", "config", "badaas.yml")) - utils.CheckFileExists(t, filepath.Join("badaas", "docker", "api", "docker-compose.yml")) - utils.CheckFileExists(t, filepath.Join("badaas", "docker", "api", "Dockerfile")) + testutils.CheckFileExists(t, ".dockerignore") + testutils.CheckFileExists(t, "Makefile") + testutils.CheckFileExists(t, filepath.Join("badaas", "config", "badaas.yml")) + testutils.CheckFileExists(t, filepath.Join("badaas", "docker", "api", "docker-compose.yml")) + testutils.CheckFileExists(t, filepath.Join("badaas", "docker", "api", "Dockerfile")) checkDockerDBFilesExist(t) } func checkDockerDBFilesExist(t *testing.T) { - utils.CheckFileExists(t, filepath.Join("badaas", "docker", "db", "docker-compose.yml")) + testutils.CheckFileExists(t, filepath.Join("badaas", "docker", "db", "docker-compose.yml")) } func teardown() { - utils.RemoveFile(".dockerignore") - utils.RemoveFile("Makefile") - utils.RemoveFile("file.txt") - utils.RemoveFile("badaas") + testutils.RemoveFile(".dockerignore") + testutils.RemoveFile("Makefile") + testutils.RemoveFile("file.txt") + testutils.RemoveFile("badaas") } diff --git a/cmd/utils/file.go b/cmd/testutils/file.go similarity index 63% rename from cmd/utils/file.go rename to cmd/testutils/file.go index add5520..f7c153a 100644 --- a/cmd/utils/file.go +++ b/cmd/testutils/file.go @@ -1,4 +1,4 @@ -package utils +package testutils import ( "io/fs" @@ -7,6 +7,13 @@ import ( "testing" ) +func CheckFileNotExists(t *testing.T, name string) { + _, err := os.Stat(name) + if err == nil { + t.Error(err, "Should have been an error") + } +} + func CheckFileExists(t *testing.T, name string) fs.FileInfo { stat, err := os.Stat(name) if err != nil { diff --git a/cmd/utils/slice.go b/cmd/utils/slice.go new file mode 100644 index 0000000..2b37095 --- /dev/null +++ b/cmd/utils/slice.go @@ -0,0 +1,15 @@ +package utils + +import ( + "github.com/elliotchance/pie/v2" +) + +func FindFirst[T any](ss []T, fn func(value T) bool) *T { + index := pie.FindFirstUsing(ss, fn) + + if index == -1 { + return nil + } + + return &ss[index] +} diff --git a/cmd/utils/slice_test.go b/cmd/utils/slice_test.go new file mode 100644 index 0000000..df29a67 --- /dev/null +++ b/cmd/utils/slice_test.go @@ -0,0 +1,59 @@ +package utils_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/ditrit/badaas-cli/cmd/utils" +) + +var ( + testResult3 = 33.04 + testResult4 = 0.11 +) + +var findFirstTests = []struct { + ss []float64 + expression func(value float64) bool + expected *float64 +}{ + { + nil, + func(value float64) bool { return value == 1.5 }, + nil, + }, + { + []float64{}, + func(value float64) bool { return value == 0.1 }, + nil, + }, + { + []float64{0.0, 1.5, 3.2}, + func(value float64) bool { return value == 9.99 }, + nil, + }, + { + []float64{5.4, 6.98, 4.987, 33.04}, + func(value float64) bool { return value == 33.04 }, + &testResult3, + }, + { + []float64{9.0, 0.11, 150.44, 33.04}, + func(value float64) bool { return value == 0.11 }, + &testResult4, + }, +} + +func TestFindFirst(t *testing.T) { + for _, test := range findFirstTests { + t.Run("", func(t *testing.T) { + result := utils.FindFirst(test.ss, test.expression) + if result == nil { + assert.Nil(t, test.expected) + } else { + assert.Equal(t, *test.expected, *result) + } + }) + } +} From 4b996156603e9a017cc22e52a18e7d7d9cd44f21 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 16:20:51 +0200 Subject: [PATCH 25/31] generate conditions for collections --- cmd/gen/conditions/condition.go | 74 ++++++++++++++++--- cmd/gen/conditions/main_test.go | 8 ++ .../tests/hasmany/badaas-orm_result.go | 3 + cmd/gen/conditions/tests/hasmany/hasmany.go | 2 +- .../hasmanywithpointers/badaas-orm_result.go | 11 +++ .../hasmanywithpointers.go | 18 +++++ .../tests/results/hasmany_company.go | 4 + .../results/hasmanywithpointers_company.go | 39 ++++++++++ .../results/hasmanywithpointers_seller.go | 55 ++++++++++++++ 9 files changed, 203 insertions(+), 11 deletions(-) create mode 100644 cmd/gen/conditions/tests/hasmanywithpointers/badaas-orm_result.go create mode 100644 cmd/gen/conditions/tests/hasmanywithpointers/hasmanywithpointers.go create mode 100644 cmd/gen/conditions/tests/results/hasmanywithpointers_company.go create mode 100644 cmd/gen/conditions/tests/results/hasmanywithpointers_seller.go diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index 3907d52..a8d3f02 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -11,16 +11,17 @@ import ( const ( // badaas/orm/condition.go - badaasORMCondition = "Condition" - badaasORMFieldCondition = "FieldCondition" - badaasORMWhereCondition = "WhereCondition" - badaasORMJoinCondition = "JoinCondition" - badaasORMIJoinCondition = "IJoinCondition" - badaasORMFieldIdentifier = "FieldIdentifier" - IDFieldID = "IDFieldID" - CreatedAtFieldID = "CreatedAtFieldID" - UpdatedAtFieldID = "UpdatedAtFieldID" - DeletedAtFieldID = "DeletedAtFieldID" + badaasORMCondition = "Condition" + badaasORMFieldCondition = "FieldCondition" + badaasORMWhereCondition = "WhereCondition" + badaasORMJoinCondition = "JoinCondition" + badaasORMIJoinCondition = "IJoinCondition" + badaasORMFieldIdentifier = "FieldIdentifier" + badaasORMNewCollectionPreload = "NewCollectionPreloadCondition" + IDFieldID = "IDFieldID" + CreatedAtFieldID = "CreatedAtFieldID" + UpdatedAtFieldID = "UpdatedAtFieldID" + DeletedAtFieldID = "DeletedAtFieldID" // badaas/orm/operator.go badaasORMOperator = "Operator" // badaas/orm/baseModels.go @@ -102,6 +103,13 @@ func (condition *Condition) generateForSlice(objectType Type, field Field) { objectType, field, ) + case *types.Named: + // slice of named types (user defined types) + _, err := field.Type.BadaasModelStruct() + if err == nil { + // field is a Badaas Model + condition.generateCollectionPreload(objectType, field) + } case *types.Pointer: // slice of pointers, generate code for a slice of the pointed type condition.generateForSlice( @@ -332,6 +340,52 @@ func getPreloadRelationName(objectType Type, field Field) string { return objectType.Name() + "Preload" + field.Name } +func (condition *Condition) generateCollectionPreload(objectType Type, field Field) { + t1 := jen.Qual( + getRelativePackagePath(condition.destPkg, objectType), + objectType.Name(), + ) + + t2 := jen.Qual( + getRelativePackagePath(condition.destPkg, field.Type), + field.TypeName(), + ) + + ormT1Condition := jen.Qual( + badaasORMPath, badaasORMCondition, + ).Types(t1) + ormT2IJoinCondition := jen.Qual( + badaasORMPath, badaasORMIJoinCondition, + ).Types(t2) + ormNewCollectionPreload := jen.Qual( + badaasORMPath, badaasORMNewCollectionPreload, + ).Types( + t1, t2, + ) + + preloadName := getPreloadRelationName(objectType, field) + + condition.codes = append( + condition.codes, + jen.Func().Id( + preloadName, + ).Params( + jen.Id("nestedPreloads").Op("...").Add(ormT2IJoinCondition), + ).Add( + ormT1Condition, + ).Block( + jen.Return( + ormNewCollectionPreload.Call( + jen.Lit(field.Name), + jen.Id("nestedPreloads"), + ), + ), + ), + ) + + condition.preloadName = preloadName + "()" +} + // Generate condition names func getConditionName(typeV Type, field Field) string { return typeV.Name() + strcase.ToPascal(field.NamePrefix) + strcase.ToPascal(field.Name) diff --git a/cmd/gen/conditions/main_test.go b/cmd/gen/conditions/main_test.go index d8d64f9..e47d731 100644 --- a/cmd/gen/conditions/main_test.go +++ b/cmd/gen/conditions/main_test.go @@ -115,6 +115,14 @@ func TestHasMany(t *testing.T) { }) } +func TestHasManyWithPointers(t *testing.T) { + doTest(t, "./tests/hasmanywithpointers", []Comparison{ + {Have: "company_with_pointers_conditions.go", Expected: "./tests/results/hasmanywithpointers_company.go"}, + {Have: "seller_in_pointers_conditions.go", Expected: "./tests/results/hasmanywithpointers_seller.go"}, + {Have: "./tests/hasmanywithpointers/badaas-orm.go", Expected: "./tests/hasmanywithpointers/badaas-orm_result.go"}, + }) +} + func TestSelfReferential(t *testing.T) { doTest(t, "./tests/selfreferential", []Comparison{ {Have: "employee_conditions.go", Expected: "./tests/results/selfreferential.go"}, diff --git a/cmd/gen/conditions/tests/hasmany/badaas-orm_result.go b/cmd/gen/conditions/tests/hasmany/badaas-orm_result.go index 5c730e1..4ea630d 100644 --- a/cmd/gen/conditions/tests/hasmany/badaas-orm_result.go +++ b/cmd/gen/conditions/tests/hasmany/badaas-orm_result.go @@ -3,6 +3,9 @@ package hasmany import orm "github.com/ditrit/badaas/orm" +func (m Company) GetSellers() ([]Seller, error) { + return orm.VerifyCollectionLoaded[Seller](m.Sellers) +} func (m Seller) GetCompany() (*Company, error) { return orm.VerifyPointerLoaded[Company](m.CompanyID, m.Company) } diff --git a/cmd/gen/conditions/tests/hasmany/hasmany.go b/cmd/gen/conditions/tests/hasmany/hasmany.go index 9d82e8b..2cc579e 100644 --- a/cmd/gen/conditions/tests/hasmany/hasmany.go +++ b/cmd/gen/conditions/tests/hasmany/hasmany.go @@ -5,7 +5,7 @@ import "github.com/ditrit/badaas/orm" type Company struct { orm.UUIDModel - Sellers []Seller // Company HasMany Sellers (Company 0..1 -> 0..* Seller) + Sellers *[]Seller // Company HasMany Sellers (Company 0..1 -> 0..* Seller) } type Seller struct { diff --git a/cmd/gen/conditions/tests/hasmanywithpointers/badaas-orm_result.go b/cmd/gen/conditions/tests/hasmanywithpointers/badaas-orm_result.go new file mode 100644 index 0000000..51ddaf8 --- /dev/null +++ b/cmd/gen/conditions/tests/hasmanywithpointers/badaas-orm_result.go @@ -0,0 +1,11 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package hasmanywithpointers + +import orm "github.com/ditrit/badaas/orm" + +func (m CompanyWithPointers) GetSellers() ([]*SellerInPointers, error) { + return orm.VerifyCollectionLoaded[*SellerInPointers](m.Sellers) +} +func (m SellerInPointers) GetCompany() (*CompanyWithPointers, error) { + return orm.VerifyPointerLoaded[CompanyWithPointers](m.CompanyID, m.Company) +} diff --git a/cmd/gen/conditions/tests/hasmanywithpointers/hasmanywithpointers.go b/cmd/gen/conditions/tests/hasmanywithpointers/hasmanywithpointers.go new file mode 100644 index 0000000..97d7e28 --- /dev/null +++ b/cmd/gen/conditions/tests/hasmanywithpointers/hasmanywithpointers.go @@ -0,0 +1,18 @@ +package hasmanywithpointers + +import ( + "github.com/ditrit/badaas/orm" +) + +type CompanyWithPointers struct { + orm.UUIDModel + + Sellers *[]*SellerInPointers // CompanyWithPointers HasMany SellerInPointers +} + +type SellerInPointers struct { + orm.UUIDModel + + Company *CompanyWithPointers + CompanyID *orm.UUID // Company HasMany Seller +} diff --git a/cmd/gen/conditions/tests/results/hasmany_company.go b/cmd/gen/conditions/tests/results/hasmany_company.go index 493a32a..6a023a1 100644 --- a/cmd/gen/conditions/tests/results/hasmany_company.go +++ b/cmd/gen/conditions/tests/results/hasmany_company.go @@ -31,5 +31,9 @@ func CompanyDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasma Operator: operator, } } +func CompanyPreloadSellers(nestedPreloads ...orm.IJoinCondition[hasmany.Seller]) orm.Condition[hasmany.Company] { + return orm.NewCollectionPreloadCondition[hasmany.Company, hasmany.Seller]("Sellers", nestedPreloads) +} var CompanyPreloadAttributes = orm.NewPreloadCondition[hasmany.Company]() +var CompanyPreloadRelations = []orm.Condition[hasmany.Company]{CompanyPreloadSellers()} diff --git a/cmd/gen/conditions/tests/results/hasmanywithpointers_company.go b/cmd/gen/conditions/tests/results/hasmanywithpointers_company.go new file mode 100644 index 0000000..d60e9c8 --- /dev/null +++ b/cmd/gen/conditions/tests/results/hasmanywithpointers_company.go @@ -0,0 +1,39 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + hasmanywithpointers "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasmanywithpointers" + orm "github.com/ditrit/badaas/orm" + "time" +) + +func CompanyWithPointersId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmanywithpointers.CompanyWithPointers] { + return orm.FieldCondition[hasmanywithpointers.CompanyWithPointers, orm.UUID]{ + FieldIdentifier: orm.IDFieldID, + Operator: operator, + } +} +func CompanyWithPointersCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.CompanyWithPointers] { + return orm.FieldCondition[hasmanywithpointers.CompanyWithPointers, time.Time]{ + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, + } +} +func CompanyWithPointersUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.CompanyWithPointers] { + return orm.FieldCondition[hasmanywithpointers.CompanyWithPointers, time.Time]{ + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, + } +} +func CompanyWithPointersDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.CompanyWithPointers] { + return orm.FieldCondition[hasmanywithpointers.CompanyWithPointers, time.Time]{ + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, + } +} +func CompanyWithPointersPreloadSellers(nestedPreloads ...orm.IJoinCondition[hasmanywithpointers.SellerInPointers]) orm.Condition[hasmanywithpointers.CompanyWithPointers] { + return orm.NewCollectionPreloadCondition[hasmanywithpointers.CompanyWithPointers, hasmanywithpointers.SellerInPointers]("Sellers", nestedPreloads) +} + +var CompanyWithPointersPreloadAttributes = orm.NewPreloadCondition[hasmanywithpointers.CompanyWithPointers]() +var CompanyWithPointersPreloadRelations = []orm.Condition[hasmanywithpointers.CompanyWithPointers]{CompanyWithPointersPreloadSellers()} diff --git a/cmd/gen/conditions/tests/results/hasmanywithpointers_seller.go b/cmd/gen/conditions/tests/results/hasmanywithpointers_seller.go new file mode 100644 index 0000000..ab8bcc3 --- /dev/null +++ b/cmd/gen/conditions/tests/results/hasmanywithpointers_seller.go @@ -0,0 +1,55 @@ +// Code generated by badaas-cli v0.0.0, DO NOT EDIT. +package conditions + +import ( + hasmanywithpointers "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasmanywithpointers" + orm "github.com/ditrit/badaas/orm" + "time" +) + +func SellerInPointersId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmanywithpointers.SellerInPointers] { + return orm.FieldCondition[hasmanywithpointers.SellerInPointers, orm.UUID]{ + FieldIdentifier: orm.IDFieldID, + Operator: operator, + } +} +func SellerInPointersCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.SellerInPointers] { + return orm.FieldCondition[hasmanywithpointers.SellerInPointers, time.Time]{ + FieldIdentifier: orm.CreatedAtFieldID, + Operator: operator, + } +} +func SellerInPointersUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.SellerInPointers] { + return orm.FieldCondition[hasmanywithpointers.SellerInPointers, time.Time]{ + FieldIdentifier: orm.UpdatedAtFieldID, + Operator: operator, + } +} +func SellerInPointersDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.SellerInPointers] { + return orm.FieldCondition[hasmanywithpointers.SellerInPointers, time.Time]{ + FieldIdentifier: orm.DeletedAtFieldID, + Operator: operator, + } +} +func SellerInPointersCompany(conditions ...orm.Condition[hasmanywithpointers.CompanyWithPointers]) orm.IJoinCondition[hasmanywithpointers.SellerInPointers] { + return orm.JoinCondition[hasmanywithpointers.SellerInPointers, hasmanywithpointers.CompanyWithPointers]{ + Conditions: conditions, + RelationField: "Company", + T1Field: "CompanyID", + T1PreloadCondition: SellerInPointersPreloadAttributes, + T2Field: "ID", + } +} + +var SellerInPointersPreloadCompany = SellerInPointersCompany(CompanyWithPointersPreloadAttributes) +var sellerInPointersCompanyIdFieldID = orm.FieldIdentifier{Field: "CompanyID"} + +func SellerInPointersCompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmanywithpointers.SellerInPointers] { + return orm.FieldCondition[hasmanywithpointers.SellerInPointers, orm.UUID]{ + FieldIdentifier: sellerInPointersCompanyIdFieldID, + Operator: operator, + } +} + +var SellerInPointersPreloadAttributes = orm.NewPreloadCondition[hasmanywithpointers.SellerInPointers](sellerInPointersCompanyIdFieldID) +var SellerInPointersPreloadRelations = []orm.Condition[hasmanywithpointers.SellerInPointers]{SellerInPointersPreloadCompany} From 655c94fca53045f4e822cbe2d5058ac80950dd08 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 16:36:40 +0200 Subject: [PATCH 26/31] update badaas version --- go.mod | 4 ++-- go.sum | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 12aaecc..08c3d48 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/dave/jennifer v1.6.1 - github.com/ditrit/badaas v0.0.0-20230803081820-22f16f685d3e + github.com/ditrit/badaas v0.0.0-20230807114103-72cff2a37890 github.com/ditrit/verdeter v0.4.0 github.com/elliotchance/pie/v2 v2.7.0 github.com/ettle/strcase v0.1.1 @@ -14,7 +14,6 @@ require ( github.com/spf13/viper v1.16.0 github.com/stretchr/testify v1.8.4 golang.org/x/tools v0.11.1 - gorm.io/gorm v1.25.1 gotest.tools v2.2.0+incompatible ) @@ -54,4 +53,5 @@ require ( gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gorm.io/driver/postgres v1.5.2 // indirect + gorm.io/gorm v1.25.1 // indirect ) diff --git a/go.sum b/go.sum index aec99dd..ef2d92d 100644 --- a/go.sum +++ b/go.sum @@ -53,8 +53,8 @@ github.com/dave/jennifer v1.6.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/ditrit/badaas v0.0.0-20230802090641-cb55dbcce177 h1:0PIcEg9WlEq8t8TNPTF7GFWU8ZRt77t8JK1Ecm95lfc= -github.com/ditrit/badaas v0.0.0-20230802090641-cb55dbcce177/go.mod h1:FS3I+obfV7FiYp3tUbZObckOclqmEPtGwTXsGOk8WJs= +github.com/ditrit/badaas v0.0.0-20230807114103-72cff2a37890 h1:Y4oG6q2kJI/G0m+bCPuwv/mrKYhtJP4cqYHsuFsAn0M= +github.com/ditrit/badaas v0.0.0-20230807114103-72cff2a37890/go.mod h1:FS3I+obfV7FiYp3tUbZObckOclqmEPtGwTXsGOk8WJs= github.com/ditrit/verdeter v0.4.0 h1:DzEOFauuXEGNQYP6OgYtHwEyb3w9riem99u0xE/l7+o= github.com/ditrit/verdeter v0.4.0/go.mod h1:sKpWuOvYqNabLN4aNXqeBhcWpt7nf0frwqk0B5M6ax0= github.com/elliotchance/pie/v2 v2.7.0 h1:FqoIKg4uj0G/CrLGuMS9ejnFKa92lxE1dEgBD3pShXg= From 65bb3101599d90d2859d83c3792a6f27fe8b705f Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 14:31:04 +0200 Subject: [PATCH 27/31] clean tests result before tests execution --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e65468f..4152766 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,11 @@ lint: golangci-lint run -test_unit: +test_unit: clean_test_unit_results go test ./... -v +clean_test_unit_results: + rm -f cmd/gen/conditions/*_conditions.go + rm -f cmd/gen/conditions/tests/**/badaas-orm.go + .PHONY: test_unit \ No newline at end of file From 57620a6480e331863455271b688563063e5b5cda Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Thu, 3 Aug 2023 16:40:01 +0200 Subject: [PATCH 28/31] update changelog --- changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.md b/changelog.md index 966ada5..542c871 100644 --- a/changelog.md +++ b/changelog.md @@ -12,5 +12,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add generation of docker and configuration files - Add gen conditions to generate the conditions for the badaas' compilable query system. - Add support for operators in condition generation. +- Add preload conditions generation. [unreleased]: https://github.com/ditrit/badaas-cli/blob/main/changelog.md#unreleased \ No newline at end of file From 6d99e6aba5ed398e7b15036041deb284ba2e90b1 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Fri, 4 Aug 2023 17:24:42 +0200 Subject: [PATCH 29/31] make field identifiers exported and add the reflect type --- cmd/gen/conditions/condition.go | 39 ++--- cmd/gen/conditions/conditionsGenerator.go | 17 ++ .../conditions/tests/results/basicpointers.go | 161 +++++++++++++----- .../conditions/tests/results/basicslices.go | 161 +++++++++++++----- .../tests/results/basicslicespointer.go | 161 +++++++++++++----- .../conditions/tests/results/basictypes.go | 161 +++++++++++++----- .../tests/results/belongsto_owned.go | 42 ++++- .../tests/results/belongsto_owner.go | 35 +++- .../tests/results/columndefinition.go | 43 ++++- .../conditions/tests/results/customtype.go | 42 ++++- .../conditions/tests/results/goembedded.go | 49 +++++- .../conditions/tests/results/gormembedded.go | 54 ++++-- .../tests/results/hasmany_company.go | 35 +++- .../tests/results/hasmany_seller.go | 42 ++++- .../results/hasmanywithpointers_company.go | 35 +++- .../results/hasmanywithpointers_seller.go | 42 ++++- .../conditions/tests/results/hasone_city.go | 42 ++++- .../tests/results/hasone_country.go | 35 +++- .../tests/results/multiplepackage_package1.go | 35 +++- .../tests/results/multiplepackage_package2.go | 42 ++++- .../conditions/tests/results/nullabletypes.go | 91 +++++++--- .../results/overrideforeignkey_bicycle.go | 42 ++++- .../results/overrideforeignkey_person.go | 35 +++- .../overrideforeignkeyinverse_credit_card.go | 42 ++++- .../results/overrideforeignkeyinverse_user.go | 35 +++- .../tests/results/overridereferences_brand.go | 42 ++++- .../tests/results/overridereferences_phone.go | 42 ++++- .../overridereferencesinverse_computer.go | 42 ++++- .../overridereferencesinverse_processor.go | 42 ++++- .../tests/results/selfreferential.go | 42 ++++- cmd/gen/conditions/tests/results/uintmodel.go | 35 +++- cmd/gen/conditions/tests/results/uuidmodel.go | 35 +++- 32 files changed, 1424 insertions(+), 374 deletions(-) diff --git a/cmd/gen/conditions/condition.go b/cmd/gen/conditions/condition.go index a8d3f02..6f051ce 100644 --- a/cmd/gen/conditions/condition.go +++ b/cmd/gen/conditions/condition.go @@ -18,10 +18,6 @@ const ( badaasORMIJoinCondition = "IJoinCondition" badaasORMFieldIdentifier = "FieldIdentifier" badaasORMNewCollectionPreload = "NewCollectionPreloadCondition" - IDFieldID = "IDFieldID" - CreatedAtFieldID = "CreatedAtFieldID" - UpdatedAtFieldID = "UpdatedAtFieldID" - DeletedAtFieldID = "DeletedAtFieldID" // badaas/orm/operator.go badaasORMOperator = "Operator" // badaas/orm/baseModels.go @@ -31,13 +27,6 @@ const ( uIntModel = "UIntModel" ) -var constantFieldIdentifiers = map[string]*jen.Statement{ - "ID": jen.Qual(badaasORMPath, IDFieldID), - "CreatedAt": jen.Qual(badaasORMPath, CreatedAtFieldID), - "UpdatedAt": jen.Qual(badaasORMPath, UpdatedAtFieldID), - "DeletedAt": jen.Qual(badaasORMPath, DeletedAtFieldID), -} - type Condition struct { codes []jen.Code param *JenParam @@ -190,14 +179,6 @@ func (condition *Condition) generateWhere(objectType Type, field Field) { conditionName := getConditionName(objectType, field) log.Logger.Debugf("Generated %q", conditionName) - var fieldIdentifier *jen.Statement - - if constantFieldIdentifier, ok := constantFieldIdentifiers[field.Name]; ok { - fieldIdentifier = constantFieldIdentifier - } else { - fieldIdentifier = condition.createFieldIdentifier(field, conditionName) - } - condition.codes = append( condition.codes, jen.Func().Id( @@ -209,8 +190,10 @@ func (condition *Condition) generateWhere(objectType Type, field Field) { ).Block( jen.Return( fieldCondition.Clone().Values(jen.Dict{ - jen.Id("Operator"): jen.Id("operator"), - jen.Id("FieldIdentifier"): fieldIdentifier, + jen.Id("Operator"): jen.Id("operator"), + jen.Id("FieldIdentifier"): condition.createFieldIdentifier( + objectType.Name(), field, conditionName, + ), }), ), ), @@ -219,14 +202,16 @@ func (condition *Condition) generateWhere(objectType Type, field Field) { // create a variable containing the definition of the field identifier // to use it in the where condition and in the preload condition -func (condition *Condition) createFieldIdentifier(field Field, conditionName string) *jen.Statement { - fieldIdentifierValues := jen.Dict{} +func (condition *Condition) createFieldIdentifier(objectName string, field Field, conditionName string) *jen.Statement { + fieldIdentifierValues := jen.Dict{ + jen.Id("ModelType"): jen.Id(getObjectTypeName(objectName)), + jen.Id("Field"): jen.Lit(field.Name), + } + columnName := field.getColumnName() if columnName != "" { fieldIdentifierValues[jen.Id("Column")] = jen.Lit(columnName) - } else { - fieldIdentifierValues[jen.Id("Field")] = jen.Lit(field.Name) } columnPrefix := field.ColumnPrefix @@ -236,9 +221,11 @@ func (condition *Condition) createFieldIdentifier(field Field, conditionName str fieldIdentifierVar := jen.Qual( badaasORMPath, badaasORMFieldIdentifier, + ).Types( + condition.param.GenericType(), ).Values(fieldIdentifierValues) - fieldIdentifierName := strcase.ToCamel(conditionName) + "FieldID" + fieldIdentifierName := conditionName + "Field" condition.codes = append( condition.codes, diff --git a/cmd/gen/conditions/conditionsGenerator.go b/cmd/gen/conditions/conditionsGenerator.go index 293be85..fa881e9 100644 --- a/cmd/gen/conditions/conditionsGenerator.go +++ b/cmd/gen/conditions/conditionsGenerator.go @@ -4,6 +4,7 @@ import ( "go/types" "github.com/dave/jennifer/jen" + "github.com/ettle/strcase" "github.com/ditrit/badaas-cli/cmd/log" ) @@ -58,6 +59,18 @@ func (cg ConditionsGenerator) Into(file *File) error { ) relationPreloads := []jen.Code{} + // object reflect type definition + file.Add( + jen.Var().Id( + getObjectTypeName(objectName), + ).Op("=").Add( + jen.Qual( + "reflect", + "TypeOf", + ).Call(jen.Op("*").New(objectQual)), + ), + ) + for _, condition := range conditions { file.Add(condition.codes...) @@ -87,6 +100,10 @@ func (cg ConditionsGenerator) Into(file *File) error { return nil } +func getObjectTypeName(objectType string) string { + return strcase.ToCamel(objectType) + "Type" +} + func getPreloadAttributesName(objectName string) string { return objectName + "PreloadAttributes" } diff --git a/cmd/gen/conditions/tests/results/basicpointers.go b/cmd/gen/conditions/tests/results/basicpointers.go index 8cb853a..29beefb 100644 --- a/cmd/gen/conditions/tests/results/basicpointers.go +++ b/cmd/gen/conditions/tests/results/basicpointers.go @@ -4,194 +4,273 @@ package conditions import ( basicpointers "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basicpointers" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var basicPointersType = reflect.TypeOf(*new(basicpointers.BasicPointers)) +var BasicPointersIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: basicPointersType, +} + func BasicPointersId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: BasicPointersIdField, Operator: operator, } } + +var BasicPointersCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: basicPointersType, +} + func BasicPointersCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: BasicPointersCreatedAtField, Operator: operator, } } + +var BasicPointersUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: basicPointersType, +} + func BasicPointersUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: BasicPointersUpdatedAtField, Operator: operator, } } + +var BasicPointersDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: basicPointersType, +} + func BasicPointersDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: BasicPointersDeletedAtField, Operator: operator, } } -var basicPointersBoolFieldID = orm.FieldIdentifier{Field: "Bool"} +var BasicPointersBoolField = orm.FieldIdentifier[bool]{ + Field: "Bool", + ModelType: basicPointersType, +} func BasicPointersBool(operator orm.Operator[bool]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, bool]{ - FieldIdentifier: basicPointersBoolFieldID, + FieldIdentifier: BasicPointersBoolField, Operator: operator, } } -var basicPointersIntFieldID = orm.FieldIdentifier{Field: "Int"} +var BasicPointersIntField = orm.FieldIdentifier[int]{ + Field: "Int", + ModelType: basicPointersType, +} func BasicPointersInt(operator orm.Operator[int]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, int]{ - FieldIdentifier: basicPointersIntFieldID, + FieldIdentifier: BasicPointersIntField, Operator: operator, } } -var basicPointersInt8FieldID = orm.FieldIdentifier{Field: "Int8"} +var BasicPointersInt8Field = orm.FieldIdentifier[int8]{ + Field: "Int8", + ModelType: basicPointersType, +} func BasicPointersInt8(operator orm.Operator[int8]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, int8]{ - FieldIdentifier: basicPointersInt8FieldID, + FieldIdentifier: BasicPointersInt8Field, Operator: operator, } } -var basicPointersInt16FieldID = orm.FieldIdentifier{Field: "Int16"} +var BasicPointersInt16Field = orm.FieldIdentifier[int16]{ + Field: "Int16", + ModelType: basicPointersType, +} func BasicPointersInt16(operator orm.Operator[int16]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, int16]{ - FieldIdentifier: basicPointersInt16FieldID, + FieldIdentifier: BasicPointersInt16Field, Operator: operator, } } -var basicPointersInt32FieldID = orm.FieldIdentifier{Field: "Int32"} +var BasicPointersInt32Field = orm.FieldIdentifier[int32]{ + Field: "Int32", + ModelType: basicPointersType, +} func BasicPointersInt32(operator orm.Operator[int32]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, int32]{ - FieldIdentifier: basicPointersInt32FieldID, + FieldIdentifier: BasicPointersInt32Field, Operator: operator, } } -var basicPointersInt64FieldID = orm.FieldIdentifier{Field: "Int64"} +var BasicPointersInt64Field = orm.FieldIdentifier[int64]{ + Field: "Int64", + ModelType: basicPointersType, +} func BasicPointersInt64(operator orm.Operator[int64]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, int64]{ - FieldIdentifier: basicPointersInt64FieldID, + FieldIdentifier: BasicPointersInt64Field, Operator: operator, } } -var basicPointersUIntFieldID = orm.FieldIdentifier{Field: "UInt"} +var BasicPointersUIntField = orm.FieldIdentifier[uint]{ + Field: "UInt", + ModelType: basicPointersType, +} func BasicPointersUInt(operator orm.Operator[uint]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint]{ - FieldIdentifier: basicPointersUIntFieldID, + FieldIdentifier: BasicPointersUIntField, Operator: operator, } } -var basicPointersUInt8FieldID = orm.FieldIdentifier{Field: "UInt8"} +var BasicPointersUInt8Field = orm.FieldIdentifier[uint8]{ + Field: "UInt8", + ModelType: basicPointersType, +} func BasicPointersUInt8(operator orm.Operator[uint8]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint8]{ - FieldIdentifier: basicPointersUInt8FieldID, + FieldIdentifier: BasicPointersUInt8Field, Operator: operator, } } -var basicPointersUInt16FieldID = orm.FieldIdentifier{Field: "UInt16"} +var BasicPointersUInt16Field = orm.FieldIdentifier[uint16]{ + Field: "UInt16", + ModelType: basicPointersType, +} func BasicPointersUInt16(operator orm.Operator[uint16]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint16]{ - FieldIdentifier: basicPointersUInt16FieldID, + FieldIdentifier: BasicPointersUInt16Field, Operator: operator, } } -var basicPointersUInt32FieldID = orm.FieldIdentifier{Field: "UInt32"} +var BasicPointersUInt32Field = orm.FieldIdentifier[uint32]{ + Field: "UInt32", + ModelType: basicPointersType, +} func BasicPointersUInt32(operator orm.Operator[uint32]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint32]{ - FieldIdentifier: basicPointersUInt32FieldID, + FieldIdentifier: BasicPointersUInt32Field, Operator: operator, } } -var basicPointersUInt64FieldID = orm.FieldIdentifier{Field: "UInt64"} +var BasicPointersUInt64Field = orm.FieldIdentifier[uint64]{ + Field: "UInt64", + ModelType: basicPointersType, +} func BasicPointersUInt64(operator orm.Operator[uint64]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint64]{ - FieldIdentifier: basicPointersUInt64FieldID, + FieldIdentifier: BasicPointersUInt64Field, Operator: operator, } } -var basicPointersUIntptrFieldID = orm.FieldIdentifier{Field: "UIntptr"} +var BasicPointersUIntptrField = orm.FieldIdentifier[uintptr]{ + Field: "UIntptr", + ModelType: basicPointersType, +} func BasicPointersUIntptr(operator orm.Operator[uintptr]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uintptr]{ - FieldIdentifier: basicPointersUIntptrFieldID, + FieldIdentifier: BasicPointersUIntptrField, Operator: operator, } } -var basicPointersFloat32FieldID = orm.FieldIdentifier{Field: "Float32"} +var BasicPointersFloat32Field = orm.FieldIdentifier[float32]{ + Field: "Float32", + ModelType: basicPointersType, +} func BasicPointersFloat32(operator orm.Operator[float32]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, float32]{ - FieldIdentifier: basicPointersFloat32FieldID, + FieldIdentifier: BasicPointersFloat32Field, Operator: operator, } } -var basicPointersFloat64FieldID = orm.FieldIdentifier{Field: "Float64"} +var BasicPointersFloat64Field = orm.FieldIdentifier[float64]{ + Field: "Float64", + ModelType: basicPointersType, +} func BasicPointersFloat64(operator orm.Operator[float64]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, float64]{ - FieldIdentifier: basicPointersFloat64FieldID, + FieldIdentifier: BasicPointersFloat64Field, Operator: operator, } } -var basicPointersComplex64FieldID = orm.FieldIdentifier{Field: "Complex64"} +var BasicPointersComplex64Field = orm.FieldIdentifier[complex64]{ + Field: "Complex64", + ModelType: basicPointersType, +} func BasicPointersComplex64(operator orm.Operator[complex64]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, complex64]{ - FieldIdentifier: basicPointersComplex64FieldID, + FieldIdentifier: BasicPointersComplex64Field, Operator: operator, } } -var basicPointersComplex128FieldID = orm.FieldIdentifier{Field: "Complex128"} +var BasicPointersComplex128Field = orm.FieldIdentifier[complex128]{ + Field: "Complex128", + ModelType: basicPointersType, +} func BasicPointersComplex128(operator orm.Operator[complex128]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, complex128]{ - FieldIdentifier: basicPointersComplex128FieldID, + FieldIdentifier: BasicPointersComplex128Field, Operator: operator, } } -var basicPointersStringFieldID = orm.FieldIdentifier{Field: "String"} +var BasicPointersStringField = orm.FieldIdentifier[string]{ + Field: "String", + ModelType: basicPointersType, +} func BasicPointersString(operator orm.Operator[string]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, string]{ - FieldIdentifier: basicPointersStringFieldID, + FieldIdentifier: BasicPointersStringField, Operator: operator, } } -var basicPointersByteFieldID = orm.FieldIdentifier{Field: "Byte"} +var BasicPointersByteField = orm.FieldIdentifier[uint8]{ + Field: "Byte", + ModelType: basicPointersType, +} func BasicPointersByte(operator orm.Operator[uint8]) orm.WhereCondition[basicpointers.BasicPointers] { return orm.FieldCondition[basicpointers.BasicPointers, uint8]{ - FieldIdentifier: basicPointersByteFieldID, + FieldIdentifier: BasicPointersByteField, Operator: operator, } } -var BasicPointersPreloadAttributes = orm.NewPreloadCondition[basicpointers.BasicPointers](basicPointersBoolFieldID, basicPointersIntFieldID, basicPointersInt8FieldID, basicPointersInt16FieldID, basicPointersInt32FieldID, basicPointersInt64FieldID, basicPointersUIntFieldID, basicPointersUInt8FieldID, basicPointersUInt16FieldID, basicPointersUInt32FieldID, basicPointersUInt64FieldID, basicPointersUIntptrFieldID, basicPointersFloat32FieldID, basicPointersFloat64FieldID, basicPointersComplex64FieldID, basicPointersComplex128FieldID, basicPointersStringFieldID, basicPointersByteFieldID) +var BasicPointersPreloadAttributes = orm.NewPreloadCondition[basicpointers.BasicPointers](BasicPointersIdField, BasicPointersCreatedAtField, BasicPointersUpdatedAtField, BasicPointersDeletedAtField, BasicPointersBoolField, BasicPointersIntField, BasicPointersInt8Field, BasicPointersInt16Field, BasicPointersInt32Field, BasicPointersInt64Field, BasicPointersUIntField, BasicPointersUInt8Field, BasicPointersUInt16Field, BasicPointersUInt32Field, BasicPointersUInt64Field, BasicPointersUIntptrField, BasicPointersFloat32Field, BasicPointersFloat64Field, BasicPointersComplex64Field, BasicPointersComplex128Field, BasicPointersStringField, BasicPointersByteField) diff --git a/cmd/gen/conditions/tests/results/basicslices.go b/cmd/gen/conditions/tests/results/basicslices.go index 5d68b83..e9c0ad1 100644 --- a/cmd/gen/conditions/tests/results/basicslices.go +++ b/cmd/gen/conditions/tests/results/basicslices.go @@ -4,194 +4,273 @@ package conditions import ( basicslices "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basicslices" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var basicSlicesType = reflect.TypeOf(*new(basicslices.BasicSlices)) +var BasicSlicesIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: basicSlicesType, +} + func BasicSlicesId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: BasicSlicesIdField, Operator: operator, } } + +var BasicSlicesCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: basicSlicesType, +} + func BasicSlicesCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: BasicSlicesCreatedAtField, Operator: operator, } } + +var BasicSlicesUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: basicSlicesType, +} + func BasicSlicesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: BasicSlicesUpdatedAtField, Operator: operator, } } + +var BasicSlicesDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: basicSlicesType, +} + func BasicSlicesDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: BasicSlicesDeletedAtField, Operator: operator, } } -var basicSlicesBoolFieldID = orm.FieldIdentifier{Field: "Bool"} +var BasicSlicesBoolField = orm.FieldIdentifier[[]bool]{ + Field: "Bool", + ModelType: basicSlicesType, +} func BasicSlicesBool(operator orm.Operator[[]bool]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []bool]{ - FieldIdentifier: basicSlicesBoolFieldID, + FieldIdentifier: BasicSlicesBoolField, Operator: operator, } } -var basicSlicesIntFieldID = orm.FieldIdentifier{Field: "Int"} +var BasicSlicesIntField = orm.FieldIdentifier[[]int]{ + Field: "Int", + ModelType: basicSlicesType, +} func BasicSlicesInt(operator orm.Operator[[]int]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []int]{ - FieldIdentifier: basicSlicesIntFieldID, + FieldIdentifier: BasicSlicesIntField, Operator: operator, } } -var basicSlicesInt8FieldID = orm.FieldIdentifier{Field: "Int8"} +var BasicSlicesInt8Field = orm.FieldIdentifier[[]int8]{ + Field: "Int8", + ModelType: basicSlicesType, +} func BasicSlicesInt8(operator orm.Operator[[]int8]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []int8]{ - FieldIdentifier: basicSlicesInt8FieldID, + FieldIdentifier: BasicSlicesInt8Field, Operator: operator, } } -var basicSlicesInt16FieldID = orm.FieldIdentifier{Field: "Int16"} +var BasicSlicesInt16Field = orm.FieldIdentifier[[]int16]{ + Field: "Int16", + ModelType: basicSlicesType, +} func BasicSlicesInt16(operator orm.Operator[[]int16]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []int16]{ - FieldIdentifier: basicSlicesInt16FieldID, + FieldIdentifier: BasicSlicesInt16Field, Operator: operator, } } -var basicSlicesInt32FieldID = orm.FieldIdentifier{Field: "Int32"} +var BasicSlicesInt32Field = orm.FieldIdentifier[[]int32]{ + Field: "Int32", + ModelType: basicSlicesType, +} func BasicSlicesInt32(operator orm.Operator[[]int32]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []int32]{ - FieldIdentifier: basicSlicesInt32FieldID, + FieldIdentifier: BasicSlicesInt32Field, Operator: operator, } } -var basicSlicesInt64FieldID = orm.FieldIdentifier{Field: "Int64"} +var BasicSlicesInt64Field = orm.FieldIdentifier[[]int64]{ + Field: "Int64", + ModelType: basicSlicesType, +} func BasicSlicesInt64(operator orm.Operator[[]int64]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []int64]{ - FieldIdentifier: basicSlicesInt64FieldID, + FieldIdentifier: BasicSlicesInt64Field, Operator: operator, } } -var basicSlicesUIntFieldID = orm.FieldIdentifier{Field: "UInt"} +var BasicSlicesUIntField = orm.FieldIdentifier[[]uint]{ + Field: "UInt", + ModelType: basicSlicesType, +} func BasicSlicesUInt(operator orm.Operator[[]uint]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint]{ - FieldIdentifier: basicSlicesUIntFieldID, + FieldIdentifier: BasicSlicesUIntField, Operator: operator, } } -var basicSlicesUInt8FieldID = orm.FieldIdentifier{Field: "UInt8"} +var BasicSlicesUInt8Field = orm.FieldIdentifier[[]uint8]{ + Field: "UInt8", + ModelType: basicSlicesType, +} func BasicSlicesUInt8(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint8]{ - FieldIdentifier: basicSlicesUInt8FieldID, + FieldIdentifier: BasicSlicesUInt8Field, Operator: operator, } } -var basicSlicesUInt16FieldID = orm.FieldIdentifier{Field: "UInt16"} +var BasicSlicesUInt16Field = orm.FieldIdentifier[[]uint16]{ + Field: "UInt16", + ModelType: basicSlicesType, +} func BasicSlicesUInt16(operator orm.Operator[[]uint16]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint16]{ - FieldIdentifier: basicSlicesUInt16FieldID, + FieldIdentifier: BasicSlicesUInt16Field, Operator: operator, } } -var basicSlicesUInt32FieldID = orm.FieldIdentifier{Field: "UInt32"} +var BasicSlicesUInt32Field = orm.FieldIdentifier[[]uint32]{ + Field: "UInt32", + ModelType: basicSlicesType, +} func BasicSlicesUInt32(operator orm.Operator[[]uint32]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint32]{ - FieldIdentifier: basicSlicesUInt32FieldID, + FieldIdentifier: BasicSlicesUInt32Field, Operator: operator, } } -var basicSlicesUInt64FieldID = orm.FieldIdentifier{Field: "UInt64"} +var BasicSlicesUInt64Field = orm.FieldIdentifier[[]uint64]{ + Field: "UInt64", + ModelType: basicSlicesType, +} func BasicSlicesUInt64(operator orm.Operator[[]uint64]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint64]{ - FieldIdentifier: basicSlicesUInt64FieldID, + FieldIdentifier: BasicSlicesUInt64Field, Operator: operator, } } -var basicSlicesUIntptrFieldID = orm.FieldIdentifier{Field: "UIntptr"} +var BasicSlicesUIntptrField = orm.FieldIdentifier[[]uintptr]{ + Field: "UIntptr", + ModelType: basicSlicesType, +} func BasicSlicesUIntptr(operator orm.Operator[[]uintptr]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uintptr]{ - FieldIdentifier: basicSlicesUIntptrFieldID, + FieldIdentifier: BasicSlicesUIntptrField, Operator: operator, } } -var basicSlicesFloat32FieldID = orm.FieldIdentifier{Field: "Float32"} +var BasicSlicesFloat32Field = orm.FieldIdentifier[[]float32]{ + Field: "Float32", + ModelType: basicSlicesType, +} func BasicSlicesFloat32(operator orm.Operator[[]float32]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []float32]{ - FieldIdentifier: basicSlicesFloat32FieldID, + FieldIdentifier: BasicSlicesFloat32Field, Operator: operator, } } -var basicSlicesFloat64FieldID = orm.FieldIdentifier{Field: "Float64"} +var BasicSlicesFloat64Field = orm.FieldIdentifier[[]float64]{ + Field: "Float64", + ModelType: basicSlicesType, +} func BasicSlicesFloat64(operator orm.Operator[[]float64]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []float64]{ - FieldIdentifier: basicSlicesFloat64FieldID, + FieldIdentifier: BasicSlicesFloat64Field, Operator: operator, } } -var basicSlicesComplex64FieldID = orm.FieldIdentifier{Field: "Complex64"} +var BasicSlicesComplex64Field = orm.FieldIdentifier[[]complex64]{ + Field: "Complex64", + ModelType: basicSlicesType, +} func BasicSlicesComplex64(operator orm.Operator[[]complex64]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []complex64]{ - FieldIdentifier: basicSlicesComplex64FieldID, + FieldIdentifier: BasicSlicesComplex64Field, Operator: operator, } } -var basicSlicesComplex128FieldID = orm.FieldIdentifier{Field: "Complex128"} +var BasicSlicesComplex128Field = orm.FieldIdentifier[[]complex128]{ + Field: "Complex128", + ModelType: basicSlicesType, +} func BasicSlicesComplex128(operator orm.Operator[[]complex128]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []complex128]{ - FieldIdentifier: basicSlicesComplex128FieldID, + FieldIdentifier: BasicSlicesComplex128Field, Operator: operator, } } -var basicSlicesStringFieldID = orm.FieldIdentifier{Field: "String"} +var BasicSlicesStringField = orm.FieldIdentifier[[]string]{ + Field: "String", + ModelType: basicSlicesType, +} func BasicSlicesString(operator orm.Operator[[]string]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []string]{ - FieldIdentifier: basicSlicesStringFieldID, + FieldIdentifier: BasicSlicesStringField, Operator: operator, } } -var basicSlicesByteFieldID = orm.FieldIdentifier{Field: "Byte"} +var BasicSlicesByteField = orm.FieldIdentifier[[]uint8]{ + Field: "Byte", + ModelType: basicSlicesType, +} func BasicSlicesByte(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslices.BasicSlices] { return orm.FieldCondition[basicslices.BasicSlices, []uint8]{ - FieldIdentifier: basicSlicesByteFieldID, + FieldIdentifier: BasicSlicesByteField, Operator: operator, } } -var BasicSlicesPreloadAttributes = orm.NewPreloadCondition[basicslices.BasicSlices](basicSlicesBoolFieldID, basicSlicesIntFieldID, basicSlicesInt8FieldID, basicSlicesInt16FieldID, basicSlicesInt32FieldID, basicSlicesInt64FieldID, basicSlicesUIntFieldID, basicSlicesUInt8FieldID, basicSlicesUInt16FieldID, basicSlicesUInt32FieldID, basicSlicesUInt64FieldID, basicSlicesUIntptrFieldID, basicSlicesFloat32FieldID, basicSlicesFloat64FieldID, basicSlicesComplex64FieldID, basicSlicesComplex128FieldID, basicSlicesStringFieldID, basicSlicesByteFieldID) +var BasicSlicesPreloadAttributes = orm.NewPreloadCondition[basicslices.BasicSlices](BasicSlicesIdField, BasicSlicesCreatedAtField, BasicSlicesUpdatedAtField, BasicSlicesDeletedAtField, BasicSlicesBoolField, BasicSlicesIntField, BasicSlicesInt8Field, BasicSlicesInt16Field, BasicSlicesInt32Field, BasicSlicesInt64Field, BasicSlicesUIntField, BasicSlicesUInt8Field, BasicSlicesUInt16Field, BasicSlicesUInt32Field, BasicSlicesUInt64Field, BasicSlicesUIntptrField, BasicSlicesFloat32Field, BasicSlicesFloat64Field, BasicSlicesComplex64Field, BasicSlicesComplex128Field, BasicSlicesStringField, BasicSlicesByteField) diff --git a/cmd/gen/conditions/tests/results/basicslicespointer.go b/cmd/gen/conditions/tests/results/basicslicespointer.go index a0c346b..412ce86 100644 --- a/cmd/gen/conditions/tests/results/basicslicespointer.go +++ b/cmd/gen/conditions/tests/results/basicslicespointer.go @@ -4,194 +4,273 @@ package conditions import ( basicslicespointer "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basicslicespointer" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var basicSlicesPointerType = reflect.TypeOf(*new(basicslicespointer.BasicSlicesPointer)) +var BasicSlicesPointerIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: basicSlicesPointerType, +} + func BasicSlicesPointerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: BasicSlicesPointerIdField, Operator: operator, } } + +var BasicSlicesPointerCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: basicSlicesPointerType, +} + func BasicSlicesPointerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: BasicSlicesPointerCreatedAtField, Operator: operator, } } + +var BasicSlicesPointerUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: basicSlicesPointerType, +} + func BasicSlicesPointerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: BasicSlicesPointerUpdatedAtField, Operator: operator, } } + +var BasicSlicesPointerDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: basicSlicesPointerType, +} + func BasicSlicesPointerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: BasicSlicesPointerDeletedAtField, Operator: operator, } } -var basicSlicesPointerBoolFieldID = orm.FieldIdentifier{Field: "Bool"} +var BasicSlicesPointerBoolField = orm.FieldIdentifier[[]bool]{ + Field: "Bool", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerBool(operator orm.Operator[[]bool]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []bool]{ - FieldIdentifier: basicSlicesPointerBoolFieldID, + FieldIdentifier: BasicSlicesPointerBoolField, Operator: operator, } } -var basicSlicesPointerIntFieldID = orm.FieldIdentifier{Field: "Int"} +var BasicSlicesPointerIntField = orm.FieldIdentifier[[]int]{ + Field: "Int", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerInt(operator orm.Operator[[]int]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int]{ - FieldIdentifier: basicSlicesPointerIntFieldID, + FieldIdentifier: BasicSlicesPointerIntField, Operator: operator, } } -var basicSlicesPointerInt8FieldID = orm.FieldIdentifier{Field: "Int8"} +var BasicSlicesPointerInt8Field = orm.FieldIdentifier[[]int8]{ + Field: "Int8", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerInt8(operator orm.Operator[[]int8]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int8]{ - FieldIdentifier: basicSlicesPointerInt8FieldID, + FieldIdentifier: BasicSlicesPointerInt8Field, Operator: operator, } } -var basicSlicesPointerInt16FieldID = orm.FieldIdentifier{Field: "Int16"} +var BasicSlicesPointerInt16Field = orm.FieldIdentifier[[]int16]{ + Field: "Int16", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerInt16(operator orm.Operator[[]int16]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int16]{ - FieldIdentifier: basicSlicesPointerInt16FieldID, + FieldIdentifier: BasicSlicesPointerInt16Field, Operator: operator, } } -var basicSlicesPointerInt32FieldID = orm.FieldIdentifier{Field: "Int32"} +var BasicSlicesPointerInt32Field = orm.FieldIdentifier[[]int32]{ + Field: "Int32", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerInt32(operator orm.Operator[[]int32]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int32]{ - FieldIdentifier: basicSlicesPointerInt32FieldID, + FieldIdentifier: BasicSlicesPointerInt32Field, Operator: operator, } } -var basicSlicesPointerInt64FieldID = orm.FieldIdentifier{Field: "Int64"} +var BasicSlicesPointerInt64Field = orm.FieldIdentifier[[]int64]{ + Field: "Int64", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerInt64(operator orm.Operator[[]int64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []int64]{ - FieldIdentifier: basicSlicesPointerInt64FieldID, + FieldIdentifier: BasicSlicesPointerInt64Field, Operator: operator, } } -var basicSlicesPointerUIntFieldID = orm.FieldIdentifier{Field: "UInt"} +var BasicSlicesPointerUIntField = orm.FieldIdentifier[[]uint]{ + Field: "UInt", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerUInt(operator orm.Operator[[]uint]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint]{ - FieldIdentifier: basicSlicesPointerUIntFieldID, + FieldIdentifier: BasicSlicesPointerUIntField, Operator: operator, } } -var basicSlicesPointerUInt8FieldID = orm.FieldIdentifier{Field: "UInt8"} +var BasicSlicesPointerUInt8Field = orm.FieldIdentifier[[]uint8]{ + Field: "UInt8", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerUInt8(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint8]{ - FieldIdentifier: basicSlicesPointerUInt8FieldID, + FieldIdentifier: BasicSlicesPointerUInt8Field, Operator: operator, } } -var basicSlicesPointerUInt16FieldID = orm.FieldIdentifier{Field: "UInt16"} +var BasicSlicesPointerUInt16Field = orm.FieldIdentifier[[]uint16]{ + Field: "UInt16", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerUInt16(operator orm.Operator[[]uint16]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint16]{ - FieldIdentifier: basicSlicesPointerUInt16FieldID, + FieldIdentifier: BasicSlicesPointerUInt16Field, Operator: operator, } } -var basicSlicesPointerUInt32FieldID = orm.FieldIdentifier{Field: "UInt32"} +var BasicSlicesPointerUInt32Field = orm.FieldIdentifier[[]uint32]{ + Field: "UInt32", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerUInt32(operator orm.Operator[[]uint32]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint32]{ - FieldIdentifier: basicSlicesPointerUInt32FieldID, + FieldIdentifier: BasicSlicesPointerUInt32Field, Operator: operator, } } -var basicSlicesPointerUInt64FieldID = orm.FieldIdentifier{Field: "UInt64"} +var BasicSlicesPointerUInt64Field = orm.FieldIdentifier[[]uint64]{ + Field: "UInt64", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerUInt64(operator orm.Operator[[]uint64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint64]{ - FieldIdentifier: basicSlicesPointerUInt64FieldID, + FieldIdentifier: BasicSlicesPointerUInt64Field, Operator: operator, } } -var basicSlicesPointerUIntptrFieldID = orm.FieldIdentifier{Field: "UIntptr"} +var BasicSlicesPointerUIntptrField = orm.FieldIdentifier[[]uintptr]{ + Field: "UIntptr", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerUIntptr(operator orm.Operator[[]uintptr]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uintptr]{ - FieldIdentifier: basicSlicesPointerUIntptrFieldID, + FieldIdentifier: BasicSlicesPointerUIntptrField, Operator: operator, } } -var basicSlicesPointerFloat32FieldID = orm.FieldIdentifier{Field: "Float32"} +var BasicSlicesPointerFloat32Field = orm.FieldIdentifier[[]float32]{ + Field: "Float32", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerFloat32(operator orm.Operator[[]float32]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []float32]{ - FieldIdentifier: basicSlicesPointerFloat32FieldID, + FieldIdentifier: BasicSlicesPointerFloat32Field, Operator: operator, } } -var basicSlicesPointerFloat64FieldID = orm.FieldIdentifier{Field: "Float64"} +var BasicSlicesPointerFloat64Field = orm.FieldIdentifier[[]float64]{ + Field: "Float64", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerFloat64(operator orm.Operator[[]float64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []float64]{ - FieldIdentifier: basicSlicesPointerFloat64FieldID, + FieldIdentifier: BasicSlicesPointerFloat64Field, Operator: operator, } } -var basicSlicesPointerComplex64FieldID = orm.FieldIdentifier{Field: "Complex64"} +var BasicSlicesPointerComplex64Field = orm.FieldIdentifier[[]complex64]{ + Field: "Complex64", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerComplex64(operator orm.Operator[[]complex64]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []complex64]{ - FieldIdentifier: basicSlicesPointerComplex64FieldID, + FieldIdentifier: BasicSlicesPointerComplex64Field, Operator: operator, } } -var basicSlicesPointerComplex128FieldID = orm.FieldIdentifier{Field: "Complex128"} +var BasicSlicesPointerComplex128Field = orm.FieldIdentifier[[]complex128]{ + Field: "Complex128", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerComplex128(operator orm.Operator[[]complex128]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []complex128]{ - FieldIdentifier: basicSlicesPointerComplex128FieldID, + FieldIdentifier: BasicSlicesPointerComplex128Field, Operator: operator, } } -var basicSlicesPointerStringFieldID = orm.FieldIdentifier{Field: "String"} +var BasicSlicesPointerStringField = orm.FieldIdentifier[[]string]{ + Field: "String", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerString(operator orm.Operator[[]string]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []string]{ - FieldIdentifier: basicSlicesPointerStringFieldID, + FieldIdentifier: BasicSlicesPointerStringField, Operator: operator, } } -var basicSlicesPointerByteFieldID = orm.FieldIdentifier{Field: "Byte"} +var BasicSlicesPointerByteField = orm.FieldIdentifier[[]uint8]{ + Field: "Byte", + ModelType: basicSlicesPointerType, +} func BasicSlicesPointerByte(operator orm.Operator[[]uint8]) orm.WhereCondition[basicslicespointer.BasicSlicesPointer] { return orm.FieldCondition[basicslicespointer.BasicSlicesPointer, []uint8]{ - FieldIdentifier: basicSlicesPointerByteFieldID, + FieldIdentifier: BasicSlicesPointerByteField, Operator: operator, } } -var BasicSlicesPointerPreloadAttributes = orm.NewPreloadCondition[basicslicespointer.BasicSlicesPointer](basicSlicesPointerBoolFieldID, basicSlicesPointerIntFieldID, basicSlicesPointerInt8FieldID, basicSlicesPointerInt16FieldID, basicSlicesPointerInt32FieldID, basicSlicesPointerInt64FieldID, basicSlicesPointerUIntFieldID, basicSlicesPointerUInt8FieldID, basicSlicesPointerUInt16FieldID, basicSlicesPointerUInt32FieldID, basicSlicesPointerUInt64FieldID, basicSlicesPointerUIntptrFieldID, basicSlicesPointerFloat32FieldID, basicSlicesPointerFloat64FieldID, basicSlicesPointerComplex64FieldID, basicSlicesPointerComplex128FieldID, basicSlicesPointerStringFieldID, basicSlicesPointerByteFieldID) +var BasicSlicesPointerPreloadAttributes = orm.NewPreloadCondition[basicslicespointer.BasicSlicesPointer](BasicSlicesPointerIdField, BasicSlicesPointerCreatedAtField, BasicSlicesPointerUpdatedAtField, BasicSlicesPointerDeletedAtField, BasicSlicesPointerBoolField, BasicSlicesPointerIntField, BasicSlicesPointerInt8Field, BasicSlicesPointerInt16Field, BasicSlicesPointerInt32Field, BasicSlicesPointerInt64Field, BasicSlicesPointerUIntField, BasicSlicesPointerUInt8Field, BasicSlicesPointerUInt16Field, BasicSlicesPointerUInt32Field, BasicSlicesPointerUInt64Field, BasicSlicesPointerUIntptrField, BasicSlicesPointerFloat32Field, BasicSlicesPointerFloat64Field, BasicSlicesPointerComplex64Field, BasicSlicesPointerComplex128Field, BasicSlicesPointerStringField, BasicSlicesPointerByteField) diff --git a/cmd/gen/conditions/tests/results/basictypes.go b/cmd/gen/conditions/tests/results/basictypes.go index 05b02aa..74f20b1 100644 --- a/cmd/gen/conditions/tests/results/basictypes.go +++ b/cmd/gen/conditions/tests/results/basictypes.go @@ -4,194 +4,273 @@ package conditions import ( basictypes "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/basictypes" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var basicTypesType = reflect.TypeOf(*new(basictypes.BasicTypes)) +var BasicTypesIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: basicTypesType, +} + func BasicTypesId(operator orm.Operator[orm.UUID]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: BasicTypesIdField, Operator: operator, } } + +var BasicTypesCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: basicTypesType, +} + func BasicTypesCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: BasicTypesCreatedAtField, Operator: operator, } } + +var BasicTypesUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: basicTypesType, +} + func BasicTypesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: BasicTypesUpdatedAtField, Operator: operator, } } + +var BasicTypesDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: basicTypesType, +} + func BasicTypesDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: BasicTypesDeletedAtField, Operator: operator, } } -var basicTypesBoolFieldID = orm.FieldIdentifier{Field: "Bool"} +var BasicTypesBoolField = orm.FieldIdentifier[bool]{ + Field: "Bool", + ModelType: basicTypesType, +} func BasicTypesBool(operator orm.Operator[bool]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, bool]{ - FieldIdentifier: basicTypesBoolFieldID, + FieldIdentifier: BasicTypesBoolField, Operator: operator, } } -var basicTypesIntFieldID = orm.FieldIdentifier{Field: "Int"} +var BasicTypesIntField = orm.FieldIdentifier[int]{ + Field: "Int", + ModelType: basicTypesType, +} func BasicTypesInt(operator orm.Operator[int]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, int]{ - FieldIdentifier: basicTypesIntFieldID, + FieldIdentifier: BasicTypesIntField, Operator: operator, } } -var basicTypesInt8FieldID = orm.FieldIdentifier{Field: "Int8"} +var BasicTypesInt8Field = orm.FieldIdentifier[int8]{ + Field: "Int8", + ModelType: basicTypesType, +} func BasicTypesInt8(operator orm.Operator[int8]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, int8]{ - FieldIdentifier: basicTypesInt8FieldID, + FieldIdentifier: BasicTypesInt8Field, Operator: operator, } } -var basicTypesInt16FieldID = orm.FieldIdentifier{Field: "Int16"} +var BasicTypesInt16Field = orm.FieldIdentifier[int16]{ + Field: "Int16", + ModelType: basicTypesType, +} func BasicTypesInt16(operator orm.Operator[int16]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, int16]{ - FieldIdentifier: basicTypesInt16FieldID, + FieldIdentifier: BasicTypesInt16Field, Operator: operator, } } -var basicTypesInt32FieldID = orm.FieldIdentifier{Field: "Int32"} +var BasicTypesInt32Field = orm.FieldIdentifier[int32]{ + Field: "Int32", + ModelType: basicTypesType, +} func BasicTypesInt32(operator orm.Operator[int32]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, int32]{ - FieldIdentifier: basicTypesInt32FieldID, + FieldIdentifier: BasicTypesInt32Field, Operator: operator, } } -var basicTypesInt64FieldID = orm.FieldIdentifier{Field: "Int64"} +var BasicTypesInt64Field = orm.FieldIdentifier[int64]{ + Field: "Int64", + ModelType: basicTypesType, +} func BasicTypesInt64(operator orm.Operator[int64]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, int64]{ - FieldIdentifier: basicTypesInt64FieldID, + FieldIdentifier: BasicTypesInt64Field, Operator: operator, } } -var basicTypesUIntFieldID = orm.FieldIdentifier{Field: "UInt"} +var BasicTypesUIntField = orm.FieldIdentifier[uint]{ + Field: "UInt", + ModelType: basicTypesType, +} func BasicTypesUInt(operator orm.Operator[uint]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint]{ - FieldIdentifier: basicTypesUIntFieldID, + FieldIdentifier: BasicTypesUIntField, Operator: operator, } } -var basicTypesUInt8FieldID = orm.FieldIdentifier{Field: "UInt8"} +var BasicTypesUInt8Field = orm.FieldIdentifier[uint8]{ + Field: "UInt8", + ModelType: basicTypesType, +} func BasicTypesUInt8(operator orm.Operator[uint8]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint8]{ - FieldIdentifier: basicTypesUInt8FieldID, + FieldIdentifier: BasicTypesUInt8Field, Operator: operator, } } -var basicTypesUInt16FieldID = orm.FieldIdentifier{Field: "UInt16"} +var BasicTypesUInt16Field = orm.FieldIdentifier[uint16]{ + Field: "UInt16", + ModelType: basicTypesType, +} func BasicTypesUInt16(operator orm.Operator[uint16]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint16]{ - FieldIdentifier: basicTypesUInt16FieldID, + FieldIdentifier: BasicTypesUInt16Field, Operator: operator, } } -var basicTypesUInt32FieldID = orm.FieldIdentifier{Field: "UInt32"} +var BasicTypesUInt32Field = orm.FieldIdentifier[uint32]{ + Field: "UInt32", + ModelType: basicTypesType, +} func BasicTypesUInt32(operator orm.Operator[uint32]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint32]{ - FieldIdentifier: basicTypesUInt32FieldID, + FieldIdentifier: BasicTypesUInt32Field, Operator: operator, } } -var basicTypesUInt64FieldID = orm.FieldIdentifier{Field: "UInt64"} +var BasicTypesUInt64Field = orm.FieldIdentifier[uint64]{ + Field: "UInt64", + ModelType: basicTypesType, +} func BasicTypesUInt64(operator orm.Operator[uint64]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint64]{ - FieldIdentifier: basicTypesUInt64FieldID, + FieldIdentifier: BasicTypesUInt64Field, Operator: operator, } } -var basicTypesUIntptrFieldID = orm.FieldIdentifier{Field: "UIntptr"} +var BasicTypesUIntptrField = orm.FieldIdentifier[uintptr]{ + Field: "UIntptr", + ModelType: basicTypesType, +} func BasicTypesUIntptr(operator orm.Operator[uintptr]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uintptr]{ - FieldIdentifier: basicTypesUIntptrFieldID, + FieldIdentifier: BasicTypesUIntptrField, Operator: operator, } } -var basicTypesFloat32FieldID = orm.FieldIdentifier{Field: "Float32"} +var BasicTypesFloat32Field = orm.FieldIdentifier[float32]{ + Field: "Float32", + ModelType: basicTypesType, +} func BasicTypesFloat32(operator orm.Operator[float32]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, float32]{ - FieldIdentifier: basicTypesFloat32FieldID, + FieldIdentifier: BasicTypesFloat32Field, Operator: operator, } } -var basicTypesFloat64FieldID = orm.FieldIdentifier{Field: "Float64"} +var BasicTypesFloat64Field = orm.FieldIdentifier[float64]{ + Field: "Float64", + ModelType: basicTypesType, +} func BasicTypesFloat64(operator orm.Operator[float64]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, float64]{ - FieldIdentifier: basicTypesFloat64FieldID, + FieldIdentifier: BasicTypesFloat64Field, Operator: operator, } } -var basicTypesComplex64FieldID = orm.FieldIdentifier{Field: "Complex64"} +var BasicTypesComplex64Field = orm.FieldIdentifier[complex64]{ + Field: "Complex64", + ModelType: basicTypesType, +} func BasicTypesComplex64(operator orm.Operator[complex64]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, complex64]{ - FieldIdentifier: basicTypesComplex64FieldID, + FieldIdentifier: BasicTypesComplex64Field, Operator: operator, } } -var basicTypesComplex128FieldID = orm.FieldIdentifier{Field: "Complex128"} +var BasicTypesComplex128Field = orm.FieldIdentifier[complex128]{ + Field: "Complex128", + ModelType: basicTypesType, +} func BasicTypesComplex128(operator orm.Operator[complex128]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, complex128]{ - FieldIdentifier: basicTypesComplex128FieldID, + FieldIdentifier: BasicTypesComplex128Field, Operator: operator, } } -var basicTypesStringFieldID = orm.FieldIdentifier{Field: "String"} +var BasicTypesStringField = orm.FieldIdentifier[string]{ + Field: "String", + ModelType: basicTypesType, +} func BasicTypesString(operator orm.Operator[string]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, string]{ - FieldIdentifier: basicTypesStringFieldID, + FieldIdentifier: BasicTypesStringField, Operator: operator, } } -var basicTypesByteFieldID = orm.FieldIdentifier{Field: "Byte"} +var BasicTypesByteField = orm.FieldIdentifier[uint8]{ + Field: "Byte", + ModelType: basicTypesType, +} func BasicTypesByte(operator orm.Operator[uint8]) orm.WhereCondition[basictypes.BasicTypes] { return orm.FieldCondition[basictypes.BasicTypes, uint8]{ - FieldIdentifier: basicTypesByteFieldID, + FieldIdentifier: BasicTypesByteField, Operator: operator, } } -var BasicTypesPreloadAttributes = orm.NewPreloadCondition[basictypes.BasicTypes](basicTypesBoolFieldID, basicTypesIntFieldID, basicTypesInt8FieldID, basicTypesInt16FieldID, basicTypesInt32FieldID, basicTypesInt64FieldID, basicTypesUIntFieldID, basicTypesUInt8FieldID, basicTypesUInt16FieldID, basicTypesUInt32FieldID, basicTypesUInt64FieldID, basicTypesUIntptrFieldID, basicTypesFloat32FieldID, basicTypesFloat64FieldID, basicTypesComplex64FieldID, basicTypesComplex128FieldID, basicTypesStringFieldID, basicTypesByteFieldID) +var BasicTypesPreloadAttributes = orm.NewPreloadCondition[basictypes.BasicTypes](BasicTypesIdField, BasicTypesCreatedAtField, BasicTypesUpdatedAtField, BasicTypesDeletedAtField, BasicTypesBoolField, BasicTypesIntField, BasicTypesInt8Field, BasicTypesInt16Field, BasicTypesInt32Field, BasicTypesInt64Field, BasicTypesUIntField, BasicTypesUInt8Field, BasicTypesUInt16Field, BasicTypesUInt32Field, BasicTypesUInt64Field, BasicTypesUIntptrField, BasicTypesFloat32Field, BasicTypesFloat64Field, BasicTypesComplex64Field, BasicTypesComplex128Field, BasicTypesStringField, BasicTypesByteField) diff --git a/cmd/gen/conditions/tests/results/belongsto_owned.go b/cmd/gen/conditions/tests/results/belongsto_owned.go index 835db51..a29ad11 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owned.go +++ b/cmd/gen/conditions/tests/results/belongsto_owned.go @@ -4,30 +4,55 @@ package conditions import ( belongsto "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/belongsto" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var ownedType = reflect.TypeOf(*new(belongsto.Owned)) +var OwnedIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: ownedType, +} + func OwnedId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owned] { return orm.FieldCondition[belongsto.Owned, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: OwnedIdField, Operator: operator, } } + +var OwnedCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: ownedType, +} + func OwnedCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owned] { return orm.FieldCondition[belongsto.Owned, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: OwnedCreatedAtField, Operator: operator, } } + +var OwnedUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: ownedType, +} + func OwnedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owned] { return orm.FieldCondition[belongsto.Owned, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: OwnedUpdatedAtField, Operator: operator, } } + +var OwnedDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: ownedType, +} + func OwnedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owned] { return orm.FieldCondition[belongsto.Owned, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: OwnedDeletedAtField, Operator: operator, } } @@ -42,14 +67,17 @@ func OwnedOwner(conditions ...orm.Condition[belongsto.Owner]) orm.IJoinCondition } var OwnedPreloadOwner = OwnedOwner(OwnerPreloadAttributes) -var ownedOwnerIdFieldID = orm.FieldIdentifier{Field: "OwnerID"} +var OwnedOwnerIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "OwnerID", + ModelType: ownedType, +} func OwnedOwnerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owned] { return orm.FieldCondition[belongsto.Owned, orm.UUID]{ - FieldIdentifier: ownedOwnerIdFieldID, + FieldIdentifier: OwnedOwnerIdField, Operator: operator, } } -var OwnedPreloadAttributes = orm.NewPreloadCondition[belongsto.Owned](ownedOwnerIdFieldID) +var OwnedPreloadAttributes = orm.NewPreloadCondition[belongsto.Owned](OwnedIdField, OwnedCreatedAtField, OwnedUpdatedAtField, OwnedDeletedAtField, OwnedOwnerIdField) var OwnedPreloadRelations = []orm.Condition[belongsto.Owned]{OwnedPreloadOwner} diff --git a/cmd/gen/conditions/tests/results/belongsto_owner.go b/cmd/gen/conditions/tests/results/belongsto_owner.go index a748388..288ff82 100644 --- a/cmd/gen/conditions/tests/results/belongsto_owner.go +++ b/cmd/gen/conditions/tests/results/belongsto_owner.go @@ -4,32 +4,57 @@ package conditions import ( belongsto "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/belongsto" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var ownerType = reflect.TypeOf(*new(belongsto.Owner)) +var OwnerIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: ownerType, +} + func OwnerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[belongsto.Owner] { return orm.FieldCondition[belongsto.Owner, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: OwnerIdField, Operator: operator, } } + +var OwnerCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: ownerType, +} + func OwnerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owner] { return orm.FieldCondition[belongsto.Owner, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: OwnerCreatedAtField, Operator: operator, } } + +var OwnerUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: ownerType, +} + func OwnerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owner] { return orm.FieldCondition[belongsto.Owner, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: OwnerUpdatedAtField, Operator: operator, } } + +var OwnerDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: ownerType, +} + func OwnerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[belongsto.Owner] { return orm.FieldCondition[belongsto.Owner, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: OwnerDeletedAtField, Operator: operator, } } -var OwnerPreloadAttributes = orm.NewPreloadCondition[belongsto.Owner]() +var OwnerPreloadAttributes = orm.NewPreloadCondition[belongsto.Owner](OwnerIdField, OwnerCreatedAtField, OwnerUpdatedAtField, OwnerDeletedAtField) diff --git a/cmd/gen/conditions/tests/results/columndefinition.go b/cmd/gen/conditions/tests/results/columndefinition.go index a8a128d..6c755ce 100644 --- a/cmd/gen/conditions/tests/results/columndefinition.go +++ b/cmd/gen/conditions/tests/results/columndefinition.go @@ -4,41 +4,70 @@ package conditions import ( columndefinition "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/columndefinition" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var columnDefinitionType = reflect.TypeOf(*new(columndefinition.ColumnDefinition)) +var ColumnDefinitionIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: columnDefinitionType, +} + func ColumnDefinitionId(operator orm.Operator[orm.UUID]) orm.WhereCondition[columndefinition.ColumnDefinition] { return orm.FieldCondition[columndefinition.ColumnDefinition, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: ColumnDefinitionIdField, Operator: operator, } } + +var ColumnDefinitionCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: columnDefinitionType, +} + func ColumnDefinitionCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[columndefinition.ColumnDefinition] { return orm.FieldCondition[columndefinition.ColumnDefinition, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: ColumnDefinitionCreatedAtField, Operator: operator, } } + +var ColumnDefinitionUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: columnDefinitionType, +} + func ColumnDefinitionUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[columndefinition.ColumnDefinition] { return orm.FieldCondition[columndefinition.ColumnDefinition, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: ColumnDefinitionUpdatedAtField, Operator: operator, } } + +var ColumnDefinitionDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: columnDefinitionType, +} + func ColumnDefinitionDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[columndefinition.ColumnDefinition] { return orm.FieldCondition[columndefinition.ColumnDefinition, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: ColumnDefinitionDeletedAtField, Operator: operator, } } -var columnDefinitionStringFieldID = orm.FieldIdentifier{Column: "string_something_else"} +var ColumnDefinitionStringField = orm.FieldIdentifier[string]{ + Column: "string_something_else", + Field: "String", + ModelType: columnDefinitionType, +} func ColumnDefinitionString(operator orm.Operator[string]) orm.WhereCondition[columndefinition.ColumnDefinition] { return orm.FieldCondition[columndefinition.ColumnDefinition, string]{ - FieldIdentifier: columnDefinitionStringFieldID, + FieldIdentifier: ColumnDefinitionStringField, Operator: operator, } } -var ColumnDefinitionPreloadAttributes = orm.NewPreloadCondition[columndefinition.ColumnDefinition](columnDefinitionStringFieldID) +var ColumnDefinitionPreloadAttributes = orm.NewPreloadCondition[columndefinition.ColumnDefinition](ColumnDefinitionIdField, ColumnDefinitionCreatedAtField, ColumnDefinitionUpdatedAtField, ColumnDefinitionDeletedAtField, ColumnDefinitionStringField) diff --git a/cmd/gen/conditions/tests/results/customtype.go b/cmd/gen/conditions/tests/results/customtype.go index 09c7d36..c0496b4 100644 --- a/cmd/gen/conditions/tests/results/customtype.go +++ b/cmd/gen/conditions/tests/results/customtype.go @@ -4,41 +4,69 @@ package conditions import ( customtype "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/customtype" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var customTypeType = reflect.TypeOf(*new(customtype.CustomType)) +var CustomTypeIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: customTypeType, +} + func CustomTypeId(operator orm.Operator[orm.UUID]) orm.WhereCondition[customtype.CustomType] { return orm.FieldCondition[customtype.CustomType, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: CustomTypeIdField, Operator: operator, } } + +var CustomTypeCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: customTypeType, +} + func CustomTypeCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[customtype.CustomType] { return orm.FieldCondition[customtype.CustomType, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: CustomTypeCreatedAtField, Operator: operator, } } + +var CustomTypeUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: customTypeType, +} + func CustomTypeUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[customtype.CustomType] { return orm.FieldCondition[customtype.CustomType, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: CustomTypeUpdatedAtField, Operator: operator, } } + +var CustomTypeDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: customTypeType, +} + func CustomTypeDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[customtype.CustomType] { return orm.FieldCondition[customtype.CustomType, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: CustomTypeDeletedAtField, Operator: operator, } } -var customTypeCustomFieldID = orm.FieldIdentifier{Field: "Custom"} +var CustomTypeCustomField = orm.FieldIdentifier[customtype.MultiString]{ + Field: "Custom", + ModelType: customTypeType, +} func CustomTypeCustom(operator orm.Operator[customtype.MultiString]) orm.WhereCondition[customtype.CustomType] { return orm.FieldCondition[customtype.CustomType, customtype.MultiString]{ - FieldIdentifier: customTypeCustomFieldID, + FieldIdentifier: CustomTypeCustomField, Operator: operator, } } -var CustomTypePreloadAttributes = orm.NewPreloadCondition[customtype.CustomType](customTypeCustomFieldID) +var CustomTypePreloadAttributes = orm.NewPreloadCondition[customtype.CustomType](CustomTypeIdField, CustomTypeCreatedAtField, CustomTypeUpdatedAtField, CustomTypeDeletedAtField, CustomTypeCustomField) diff --git a/cmd/gen/conditions/tests/results/goembedded.go b/cmd/gen/conditions/tests/results/goembedded.go index e9cddaa..12c3011 100644 --- a/cmd/gen/conditions/tests/results/goembedded.go +++ b/cmd/gen/conditions/tests/results/goembedded.go @@ -4,50 +4,81 @@ package conditions import ( goembedded "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/goembedded" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var goEmbeddedType = reflect.TypeOf(*new(goembedded.GoEmbedded)) +var GoEmbeddedIdField = orm.FieldIdentifier[orm.UIntID]{ + Field: "ID", + ModelType: goEmbeddedType, +} + func GoEmbeddedId(operator orm.Operator[orm.UIntID]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, orm.UIntID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: GoEmbeddedIdField, Operator: operator, } } + +var GoEmbeddedCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: goEmbeddedType, +} + func GoEmbeddedCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: GoEmbeddedCreatedAtField, Operator: operator, } } + +var GoEmbeddedUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: goEmbeddedType, +} + func GoEmbeddedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: GoEmbeddedUpdatedAtField, Operator: operator, } } + +var GoEmbeddedDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: goEmbeddedType, +} + func GoEmbeddedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: GoEmbeddedDeletedAtField, Operator: operator, } } -var goEmbeddedIntFieldID = orm.FieldIdentifier{Field: "Int"} +var GoEmbeddedIntField = orm.FieldIdentifier[int]{ + Field: "Int", + ModelType: goEmbeddedType, +} func GoEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, int]{ - FieldIdentifier: goEmbeddedIntFieldID, + FieldIdentifier: GoEmbeddedIntField, Operator: operator, } } -var goEmbeddedToBeEmbeddedIntFieldID = orm.FieldIdentifier{Field: "Int"} +var GoEmbeddedToBeEmbeddedIntField = orm.FieldIdentifier[int]{ + Field: "Int", + ModelType: goEmbeddedType, +} func GoEmbeddedToBeEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[goembedded.GoEmbedded] { return orm.FieldCondition[goembedded.GoEmbedded, int]{ - FieldIdentifier: goEmbeddedToBeEmbeddedIntFieldID, + FieldIdentifier: GoEmbeddedToBeEmbeddedIntField, Operator: operator, } } -var GoEmbeddedPreloadAttributes = orm.NewPreloadCondition[goembedded.GoEmbedded](goEmbeddedIntFieldID, goEmbeddedToBeEmbeddedIntFieldID) +var GoEmbeddedPreloadAttributes = orm.NewPreloadCondition[goembedded.GoEmbedded](GoEmbeddedIdField, GoEmbeddedCreatedAtField, GoEmbeddedUpdatedAtField, GoEmbeddedDeletedAtField, GoEmbeddedIntField, GoEmbeddedToBeEmbeddedIntField) diff --git a/cmd/gen/conditions/tests/results/gormembedded.go b/cmd/gen/conditions/tests/results/gormembedded.go index 1590fcb..c1d4f00 100644 --- a/cmd/gen/conditions/tests/results/gormembedded.go +++ b/cmd/gen/conditions/tests/results/gormembedded.go @@ -4,62 +4,94 @@ package conditions import ( gormembedded "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/gormembedded" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var gormEmbeddedType = reflect.TypeOf(*new(gormembedded.GormEmbedded)) +var GormEmbeddedIdField = orm.FieldIdentifier[orm.UIntID]{ + Field: "ID", + ModelType: gormEmbeddedType, +} + func GormEmbeddedId(operator orm.Operator[orm.UIntID]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, orm.UIntID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: GormEmbeddedIdField, Operator: operator, } } + +var GormEmbeddedCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: gormEmbeddedType, +} + func GormEmbeddedCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: GormEmbeddedCreatedAtField, Operator: operator, } } + +var GormEmbeddedUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: gormEmbeddedType, +} + func GormEmbeddedUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: GormEmbeddedUpdatedAtField, Operator: operator, } } + +var GormEmbeddedDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: gormEmbeddedType, +} + func GormEmbeddedDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: GormEmbeddedDeletedAtField, Operator: operator, } } -var gormEmbeddedIntFieldID = orm.FieldIdentifier{Field: "Int"} +var GormEmbeddedIntField = orm.FieldIdentifier[int]{ + Field: "Int", + ModelType: gormEmbeddedType, +} func GormEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, int]{ - FieldIdentifier: gormEmbeddedIntFieldID, + FieldIdentifier: GormEmbeddedIntField, Operator: operator, } } -var gormEmbeddedGormEmbeddedIntFieldID = orm.FieldIdentifier{ +var GormEmbeddedGormEmbeddedIntField = orm.FieldIdentifier[int]{ ColumnPrefix: "gorm_embedded_", Field: "Int", + ModelType: gormEmbeddedType, } func GormEmbeddedGormEmbeddedInt(operator orm.Operator[int]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, int]{ - FieldIdentifier: gormEmbeddedGormEmbeddedIntFieldID, + FieldIdentifier: GormEmbeddedGormEmbeddedIntField, Operator: operator, } } -var gormEmbeddedGormEmbeddedNoPrefixIntFieldID = orm.FieldIdentifier{Field: "Int"} +var GormEmbeddedGormEmbeddedNoPrefixIntField = orm.FieldIdentifier[int]{ + Field: "Int", + ModelType: gormEmbeddedType, +} func GormEmbeddedGormEmbeddedNoPrefixInt(operator orm.Operator[int]) orm.WhereCondition[gormembedded.GormEmbedded] { return orm.FieldCondition[gormembedded.GormEmbedded, int]{ - FieldIdentifier: gormEmbeddedGormEmbeddedNoPrefixIntFieldID, + FieldIdentifier: GormEmbeddedGormEmbeddedNoPrefixIntField, Operator: operator, } } -var GormEmbeddedPreloadAttributes = orm.NewPreloadCondition[gormembedded.GormEmbedded](gormEmbeddedIntFieldID, gormEmbeddedGormEmbeddedIntFieldID, gormEmbeddedGormEmbeddedNoPrefixIntFieldID) +var GormEmbeddedPreloadAttributes = orm.NewPreloadCondition[gormembedded.GormEmbedded](GormEmbeddedIdField, GormEmbeddedCreatedAtField, GormEmbeddedUpdatedAtField, GormEmbeddedDeletedAtField, GormEmbeddedIntField, GormEmbeddedGormEmbeddedIntField, GormEmbeddedGormEmbeddedNoPrefixIntField) diff --git a/cmd/gen/conditions/tests/results/hasmany_company.go b/cmd/gen/conditions/tests/results/hasmany_company.go index 6a023a1..58523bc 100644 --- a/cmd/gen/conditions/tests/results/hasmany_company.go +++ b/cmd/gen/conditions/tests/results/hasmany_company.go @@ -4,30 +4,55 @@ package conditions import ( hasmany "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasmany" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var companyType = reflect.TypeOf(*new(hasmany.Company)) +var CompanyIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: companyType, +} + func CompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Company] { return orm.FieldCondition[hasmany.Company, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: CompanyIdField, Operator: operator, } } + +var CompanyCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: companyType, +} + func CompanyCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Company] { return orm.FieldCondition[hasmany.Company, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: CompanyCreatedAtField, Operator: operator, } } + +var CompanyUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: companyType, +} + func CompanyUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Company] { return orm.FieldCondition[hasmany.Company, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: CompanyUpdatedAtField, Operator: operator, } } + +var CompanyDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: companyType, +} + func CompanyDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Company] { return orm.FieldCondition[hasmany.Company, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: CompanyDeletedAtField, Operator: operator, } } @@ -35,5 +60,5 @@ func CompanyPreloadSellers(nestedPreloads ...orm.IJoinCondition[hasmany.Seller]) return orm.NewCollectionPreloadCondition[hasmany.Company, hasmany.Seller]("Sellers", nestedPreloads) } -var CompanyPreloadAttributes = orm.NewPreloadCondition[hasmany.Company]() +var CompanyPreloadAttributes = orm.NewPreloadCondition[hasmany.Company](CompanyIdField, CompanyCreatedAtField, CompanyUpdatedAtField, CompanyDeletedAtField) var CompanyPreloadRelations = []orm.Condition[hasmany.Company]{CompanyPreloadSellers()} diff --git a/cmd/gen/conditions/tests/results/hasmany_seller.go b/cmd/gen/conditions/tests/results/hasmany_seller.go index 90af50d..7056528 100644 --- a/cmd/gen/conditions/tests/results/hasmany_seller.go +++ b/cmd/gen/conditions/tests/results/hasmany_seller.go @@ -4,30 +4,55 @@ package conditions import ( hasmany "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasmany" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var sellerType = reflect.TypeOf(*new(hasmany.Seller)) +var SellerIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: sellerType, +} + func SellerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: SellerIdField, Operator: operator, } } + +var SellerCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: sellerType, +} + func SellerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: SellerCreatedAtField, Operator: operator, } } + +var SellerUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: sellerType, +} + func SellerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: SellerUpdatedAtField, Operator: operator, } } + +var SellerDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: sellerType, +} + func SellerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: SellerDeletedAtField, Operator: operator, } } @@ -42,14 +67,17 @@ func SellerCompany(conditions ...orm.Condition[hasmany.Company]) orm.IJoinCondit } var SellerPreloadCompany = SellerCompany(CompanyPreloadAttributes) -var sellerCompanyIdFieldID = orm.FieldIdentifier{Field: "CompanyID"} +var SellerCompanyIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "CompanyID", + ModelType: sellerType, +} func SellerCompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmany.Seller] { return orm.FieldCondition[hasmany.Seller, orm.UUID]{ - FieldIdentifier: sellerCompanyIdFieldID, + FieldIdentifier: SellerCompanyIdField, Operator: operator, } } -var SellerPreloadAttributes = orm.NewPreloadCondition[hasmany.Seller](sellerCompanyIdFieldID) +var SellerPreloadAttributes = orm.NewPreloadCondition[hasmany.Seller](SellerIdField, SellerCreatedAtField, SellerUpdatedAtField, SellerDeletedAtField, SellerCompanyIdField) var SellerPreloadRelations = []orm.Condition[hasmany.Seller]{SellerPreloadCompany} diff --git a/cmd/gen/conditions/tests/results/hasmanywithpointers_company.go b/cmd/gen/conditions/tests/results/hasmanywithpointers_company.go index d60e9c8..b898d7e 100644 --- a/cmd/gen/conditions/tests/results/hasmanywithpointers_company.go +++ b/cmd/gen/conditions/tests/results/hasmanywithpointers_company.go @@ -4,30 +4,55 @@ package conditions import ( hasmanywithpointers "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasmanywithpointers" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var companyWithPointersType = reflect.TypeOf(*new(hasmanywithpointers.CompanyWithPointers)) +var CompanyWithPointersIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: companyWithPointersType, +} + func CompanyWithPointersId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmanywithpointers.CompanyWithPointers] { return orm.FieldCondition[hasmanywithpointers.CompanyWithPointers, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: CompanyWithPointersIdField, Operator: operator, } } + +var CompanyWithPointersCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: companyWithPointersType, +} + func CompanyWithPointersCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.CompanyWithPointers] { return orm.FieldCondition[hasmanywithpointers.CompanyWithPointers, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: CompanyWithPointersCreatedAtField, Operator: operator, } } + +var CompanyWithPointersUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: companyWithPointersType, +} + func CompanyWithPointersUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.CompanyWithPointers] { return orm.FieldCondition[hasmanywithpointers.CompanyWithPointers, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: CompanyWithPointersUpdatedAtField, Operator: operator, } } + +var CompanyWithPointersDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: companyWithPointersType, +} + func CompanyWithPointersDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.CompanyWithPointers] { return orm.FieldCondition[hasmanywithpointers.CompanyWithPointers, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: CompanyWithPointersDeletedAtField, Operator: operator, } } @@ -35,5 +60,5 @@ func CompanyWithPointersPreloadSellers(nestedPreloads ...orm.IJoinCondition[hasm return orm.NewCollectionPreloadCondition[hasmanywithpointers.CompanyWithPointers, hasmanywithpointers.SellerInPointers]("Sellers", nestedPreloads) } -var CompanyWithPointersPreloadAttributes = orm.NewPreloadCondition[hasmanywithpointers.CompanyWithPointers]() +var CompanyWithPointersPreloadAttributes = orm.NewPreloadCondition[hasmanywithpointers.CompanyWithPointers](CompanyWithPointersIdField, CompanyWithPointersCreatedAtField, CompanyWithPointersUpdatedAtField, CompanyWithPointersDeletedAtField) var CompanyWithPointersPreloadRelations = []orm.Condition[hasmanywithpointers.CompanyWithPointers]{CompanyWithPointersPreloadSellers()} diff --git a/cmd/gen/conditions/tests/results/hasmanywithpointers_seller.go b/cmd/gen/conditions/tests/results/hasmanywithpointers_seller.go index ab8bcc3..9fe37f8 100644 --- a/cmd/gen/conditions/tests/results/hasmanywithpointers_seller.go +++ b/cmd/gen/conditions/tests/results/hasmanywithpointers_seller.go @@ -4,30 +4,55 @@ package conditions import ( hasmanywithpointers "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasmanywithpointers" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var sellerInPointersType = reflect.TypeOf(*new(hasmanywithpointers.SellerInPointers)) +var SellerInPointersIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: sellerInPointersType, +} + func SellerInPointersId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmanywithpointers.SellerInPointers] { return orm.FieldCondition[hasmanywithpointers.SellerInPointers, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: SellerInPointersIdField, Operator: operator, } } + +var SellerInPointersCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: sellerInPointersType, +} + func SellerInPointersCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.SellerInPointers] { return orm.FieldCondition[hasmanywithpointers.SellerInPointers, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: SellerInPointersCreatedAtField, Operator: operator, } } + +var SellerInPointersUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: sellerInPointersType, +} + func SellerInPointersUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.SellerInPointers] { return orm.FieldCondition[hasmanywithpointers.SellerInPointers, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: SellerInPointersUpdatedAtField, Operator: operator, } } + +var SellerInPointersDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: sellerInPointersType, +} + func SellerInPointersDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasmanywithpointers.SellerInPointers] { return orm.FieldCondition[hasmanywithpointers.SellerInPointers, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: SellerInPointersDeletedAtField, Operator: operator, } } @@ -42,14 +67,17 @@ func SellerInPointersCompany(conditions ...orm.Condition[hasmanywithpointers.Com } var SellerInPointersPreloadCompany = SellerInPointersCompany(CompanyWithPointersPreloadAttributes) -var sellerInPointersCompanyIdFieldID = orm.FieldIdentifier{Field: "CompanyID"} +var SellerInPointersCompanyIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "CompanyID", + ModelType: sellerInPointersType, +} func SellerInPointersCompanyId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasmanywithpointers.SellerInPointers] { return orm.FieldCondition[hasmanywithpointers.SellerInPointers, orm.UUID]{ - FieldIdentifier: sellerInPointersCompanyIdFieldID, + FieldIdentifier: SellerInPointersCompanyIdField, Operator: operator, } } -var SellerInPointersPreloadAttributes = orm.NewPreloadCondition[hasmanywithpointers.SellerInPointers](sellerInPointersCompanyIdFieldID) +var SellerInPointersPreloadAttributes = orm.NewPreloadCondition[hasmanywithpointers.SellerInPointers](SellerInPointersIdField, SellerInPointersCreatedAtField, SellerInPointersUpdatedAtField, SellerInPointersDeletedAtField, SellerInPointersCompanyIdField) var SellerInPointersPreloadRelations = []orm.Condition[hasmanywithpointers.SellerInPointers]{SellerInPointersPreloadCompany} diff --git a/cmd/gen/conditions/tests/results/hasone_city.go b/cmd/gen/conditions/tests/results/hasone_city.go index fab9f21..ee91f6d 100644 --- a/cmd/gen/conditions/tests/results/hasone_city.go +++ b/cmd/gen/conditions/tests/results/hasone_city.go @@ -4,30 +4,55 @@ package conditions import ( hasone "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasone" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var cityType = reflect.TypeOf(*new(hasone.City)) +var CityIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: cityType, +} + func CityId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: CityIdField, Operator: operator, } } + +var CityCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: cityType, +} + func CityCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: CityCreatedAtField, Operator: operator, } } + +var CityUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: cityType, +} + func CityUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: CityUpdatedAtField, Operator: operator, } } + +var CityDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: cityType, +} + func CityDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: CityDeletedAtField, Operator: operator, } } @@ -42,14 +67,17 @@ func CityCountry(conditions ...orm.Condition[hasone.Country]) orm.IJoinCondition } var CityPreloadCountry = CityCountry(CountryPreloadAttributes) -var cityCountryIdFieldID = orm.FieldIdentifier{Field: "CountryID"} +var CityCountryIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "CountryID", + ModelType: cityType, +} func CityCountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.City] { return orm.FieldCondition[hasone.City, orm.UUID]{ - FieldIdentifier: cityCountryIdFieldID, + FieldIdentifier: CityCountryIdField, Operator: operator, } } -var CityPreloadAttributes = orm.NewPreloadCondition[hasone.City](cityCountryIdFieldID) +var CityPreloadAttributes = orm.NewPreloadCondition[hasone.City](CityIdField, CityCreatedAtField, CityUpdatedAtField, CityDeletedAtField, CityCountryIdField) var CityPreloadRelations = []orm.Condition[hasone.City]{CityPreloadCountry} diff --git a/cmd/gen/conditions/tests/results/hasone_country.go b/cmd/gen/conditions/tests/results/hasone_country.go index 7d08820..1c64220 100644 --- a/cmd/gen/conditions/tests/results/hasone_country.go +++ b/cmd/gen/conditions/tests/results/hasone_country.go @@ -4,30 +4,55 @@ package conditions import ( hasone "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/hasone" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var countryType = reflect.TypeOf(*new(hasone.Country)) +var CountryIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: countryType, +} + func CountryId(operator orm.Operator[orm.UUID]) orm.WhereCondition[hasone.Country] { return orm.FieldCondition[hasone.Country, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: CountryIdField, Operator: operator, } } + +var CountryCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: countryType, +} + func CountryCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.Country] { return orm.FieldCondition[hasone.Country, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: CountryCreatedAtField, Operator: operator, } } + +var CountryUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: countryType, +} + func CountryUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.Country] { return orm.FieldCondition[hasone.Country, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: CountryUpdatedAtField, Operator: operator, } } + +var CountryDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: countryType, +} + func CountryDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[hasone.Country] { return orm.FieldCondition[hasone.Country, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: CountryDeletedAtField, Operator: operator, } } @@ -42,5 +67,5 @@ func CountryCapital(conditions ...orm.Condition[hasone.City]) orm.IJoinCondition } var CountryPreloadCapital = CountryCapital(CityPreloadAttributes) -var CountryPreloadAttributes = orm.NewPreloadCondition[hasone.Country]() +var CountryPreloadAttributes = orm.NewPreloadCondition[hasone.Country](CountryIdField, CountryCreatedAtField, CountryUpdatedAtField, CountryDeletedAtField) var CountryPreloadRelations = []orm.Condition[hasone.Country]{CountryPreloadCapital} diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package1.go b/cmd/gen/conditions/tests/results/multiplepackage_package1.go index 75029d1..0cdc0d9 100644 --- a/cmd/gen/conditions/tests/results/multiplepackage_package1.go +++ b/cmd/gen/conditions/tests/results/multiplepackage_package1.go @@ -5,30 +5,55 @@ import ( package1 "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/multiplepackage/package1" package2 "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/multiplepackage/package2" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var package1Type = reflect.TypeOf(*new(package1.Package1)) +var Package1IdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: package1Type, +} + func Package1Id(operator orm.Operator[orm.UUID]) orm.WhereCondition[package1.Package1] { return orm.FieldCondition[package1.Package1, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: Package1IdField, Operator: operator, } } + +var Package1CreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: package1Type, +} + func Package1CreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package1.Package1] { return orm.FieldCondition[package1.Package1, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: Package1CreatedAtField, Operator: operator, } } + +var Package1UpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: package1Type, +} + func Package1UpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package1.Package1] { return orm.FieldCondition[package1.Package1, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: Package1UpdatedAtField, Operator: operator, } } + +var Package1DeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: package1Type, +} + func Package1DeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package1.Package1] { return orm.FieldCondition[package1.Package1, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: Package1DeletedAtField, Operator: operator, } } @@ -43,5 +68,5 @@ func Package1Package2(conditions ...orm.Condition[package2.Package2]) orm.IJoinC } var Package1PreloadPackage2 = Package1Package2(Package2PreloadAttributes) -var Package1PreloadAttributes = orm.NewPreloadCondition[package1.Package1]() +var Package1PreloadAttributes = orm.NewPreloadCondition[package1.Package1](Package1IdField, Package1CreatedAtField, Package1UpdatedAtField, Package1DeletedAtField) var Package1PreloadRelations = []orm.Condition[package1.Package1]{Package1PreloadPackage2} diff --git a/cmd/gen/conditions/tests/results/multiplepackage_package2.go b/cmd/gen/conditions/tests/results/multiplepackage_package2.go index 9b67c0e..95c74e8 100644 --- a/cmd/gen/conditions/tests/results/multiplepackage_package2.go +++ b/cmd/gen/conditions/tests/results/multiplepackage_package2.go @@ -4,41 +4,69 @@ package conditions import ( package2 "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/multiplepackage/package2" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var package2Type = reflect.TypeOf(*new(package2.Package2)) +var Package2IdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: package2Type, +} + func Package2Id(operator orm.Operator[orm.UUID]) orm.WhereCondition[package2.Package2] { return orm.FieldCondition[package2.Package2, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: Package2IdField, Operator: operator, } } + +var Package2CreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: package2Type, +} + func Package2CreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package2.Package2] { return orm.FieldCondition[package2.Package2, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: Package2CreatedAtField, Operator: operator, } } + +var Package2UpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: package2Type, +} + func Package2UpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package2.Package2] { return orm.FieldCondition[package2.Package2, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: Package2UpdatedAtField, Operator: operator, } } + +var Package2DeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: package2Type, +} + func Package2DeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[package2.Package2] { return orm.FieldCondition[package2.Package2, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: Package2DeletedAtField, Operator: operator, } } -var package2Package1IdFieldID = orm.FieldIdentifier{Field: "Package1ID"} +var Package2Package1IdField = orm.FieldIdentifier[orm.UUID]{ + Field: "Package1ID", + ModelType: package2Type, +} func Package2Package1Id(operator orm.Operator[orm.UUID]) orm.WhereCondition[package2.Package2] { return orm.FieldCondition[package2.Package2, orm.UUID]{ - FieldIdentifier: package2Package1IdFieldID, + FieldIdentifier: Package2Package1IdField, Operator: operator, } } -var Package2PreloadAttributes = orm.NewPreloadCondition[package2.Package2](package2Package1IdFieldID) +var Package2PreloadAttributes = orm.NewPreloadCondition[package2.Package2](Package2IdField, Package2CreatedAtField, Package2UpdatedAtField, Package2DeletedAtField, Package2Package1IdField) diff --git a/cmd/gen/conditions/tests/results/nullabletypes.go b/cmd/gen/conditions/tests/results/nullabletypes.go index 62c923f..316b0d4 100644 --- a/cmd/gen/conditions/tests/results/nullabletypes.go +++ b/cmd/gen/conditions/tests/results/nullabletypes.go @@ -4,104 +4,153 @@ package conditions import ( nullabletypes "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/nullabletypes" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var nullableTypesType = reflect.TypeOf(*new(nullabletypes.NullableTypes)) +var NullableTypesIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: nullableTypesType, +} + func NullableTypesId(operator orm.Operator[orm.UUID]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: NullableTypesIdField, Operator: operator, } } + +var NullableTypesCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: nullableTypesType, +} + func NullableTypesCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: NullableTypesCreatedAtField, Operator: operator, } } + +var NullableTypesUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: nullableTypesType, +} + func NullableTypesUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: NullableTypesUpdatedAtField, Operator: operator, } } + +var NullableTypesDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: nullableTypesType, +} + func NullableTypesDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: NullableTypesDeletedAtField, Operator: operator, } } -var nullableTypesStringFieldID = orm.FieldIdentifier{Field: "String"} +var NullableTypesStringField = orm.FieldIdentifier[string]{ + Field: "String", + ModelType: nullableTypesType, +} func NullableTypesString(operator orm.Operator[string]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, string]{ - FieldIdentifier: nullableTypesStringFieldID, + FieldIdentifier: NullableTypesStringField, Operator: operator, } } -var nullableTypesInt64FieldID = orm.FieldIdentifier{Field: "Int64"} +var NullableTypesInt64Field = orm.FieldIdentifier[int64]{ + Field: "Int64", + ModelType: nullableTypesType, +} func NullableTypesInt64(operator orm.Operator[int64]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, int64]{ - FieldIdentifier: nullableTypesInt64FieldID, + FieldIdentifier: NullableTypesInt64Field, Operator: operator, } } -var nullableTypesInt32FieldID = orm.FieldIdentifier{Field: "Int32"} +var NullableTypesInt32Field = orm.FieldIdentifier[int32]{ + Field: "Int32", + ModelType: nullableTypesType, +} func NullableTypesInt32(operator orm.Operator[int32]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, int32]{ - FieldIdentifier: nullableTypesInt32FieldID, + FieldIdentifier: NullableTypesInt32Field, Operator: operator, } } -var nullableTypesInt16FieldID = orm.FieldIdentifier{Field: "Int16"} +var NullableTypesInt16Field = orm.FieldIdentifier[int16]{ + Field: "Int16", + ModelType: nullableTypesType, +} func NullableTypesInt16(operator orm.Operator[int16]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, int16]{ - FieldIdentifier: nullableTypesInt16FieldID, + FieldIdentifier: NullableTypesInt16Field, Operator: operator, } } -var nullableTypesByteFieldID = orm.FieldIdentifier{Field: "Byte"} +var NullableTypesByteField = orm.FieldIdentifier[int8]{ + Field: "Byte", + ModelType: nullableTypesType, +} func NullableTypesByte(operator orm.Operator[int8]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, int8]{ - FieldIdentifier: nullableTypesByteFieldID, + FieldIdentifier: NullableTypesByteField, Operator: operator, } } -var nullableTypesFloat64FieldID = orm.FieldIdentifier{Field: "Float64"} +var NullableTypesFloat64Field = orm.FieldIdentifier[float64]{ + Field: "Float64", + ModelType: nullableTypesType, +} func NullableTypesFloat64(operator orm.Operator[float64]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, float64]{ - FieldIdentifier: nullableTypesFloat64FieldID, + FieldIdentifier: NullableTypesFloat64Field, Operator: operator, } } -var nullableTypesBoolFieldID = orm.FieldIdentifier{Field: "Bool"} +var NullableTypesBoolField = orm.FieldIdentifier[bool]{ + Field: "Bool", + ModelType: nullableTypesType, +} func NullableTypesBool(operator orm.Operator[bool]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, bool]{ - FieldIdentifier: nullableTypesBoolFieldID, + FieldIdentifier: NullableTypesBoolField, Operator: operator, } } -var nullableTypesTimeFieldID = orm.FieldIdentifier{Field: "Time"} +var NullableTypesTimeField = orm.FieldIdentifier[time.Time]{ + Field: "Time", + ModelType: nullableTypesType, +} func NullableTypesTime(operator orm.Operator[time.Time]) orm.WhereCondition[nullabletypes.NullableTypes] { return orm.FieldCondition[nullabletypes.NullableTypes, time.Time]{ - FieldIdentifier: nullableTypesTimeFieldID, + FieldIdentifier: NullableTypesTimeField, Operator: operator, } } -var NullableTypesPreloadAttributes = orm.NewPreloadCondition[nullabletypes.NullableTypes](nullableTypesStringFieldID, nullableTypesInt64FieldID, nullableTypesInt32FieldID, nullableTypesInt16FieldID, nullableTypesByteFieldID, nullableTypesFloat64FieldID, nullableTypesBoolFieldID, nullableTypesTimeFieldID) +var NullableTypesPreloadAttributes = orm.NewPreloadCondition[nullabletypes.NullableTypes](NullableTypesIdField, NullableTypesCreatedAtField, NullableTypesUpdatedAtField, NullableTypesDeletedAtField, NullableTypesStringField, NullableTypesInt64Field, NullableTypesInt32Field, NullableTypesInt16Field, NullableTypesByteField, NullableTypesFloat64Field, NullableTypesBoolField, NullableTypesTimeField) diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go b/cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go index 7c615d9..79394d4 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkey_bicycle.go @@ -4,30 +4,55 @@ package conditions import ( overrideforeignkey "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overrideforeignkey" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var bicycleType = reflect.TypeOf(*new(overrideforeignkey.Bicycle)) +var BicycleIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: bicycleType, +} + func BicycleId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkey.Bicycle] { return orm.FieldCondition[overrideforeignkey.Bicycle, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: BicycleIdField, Operator: operator, } } + +var BicycleCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: bicycleType, +} + func BicycleCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Bicycle] { return orm.FieldCondition[overrideforeignkey.Bicycle, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: BicycleCreatedAtField, Operator: operator, } } + +var BicycleUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: bicycleType, +} + func BicycleUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Bicycle] { return orm.FieldCondition[overrideforeignkey.Bicycle, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: BicycleUpdatedAtField, Operator: operator, } } + +var BicycleDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: bicycleType, +} + func BicycleDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Bicycle] { return orm.FieldCondition[overrideforeignkey.Bicycle, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: BicycleDeletedAtField, Operator: operator, } } @@ -42,14 +67,17 @@ func BicycleOwner(conditions ...orm.Condition[overrideforeignkey.Person]) orm.IJ } var BicyclePreloadOwner = BicycleOwner(PersonPreloadAttributes) -var bicycleOwnerSomethingIdFieldID = orm.FieldIdentifier{Field: "OwnerSomethingID"} +var BicycleOwnerSomethingIdField = orm.FieldIdentifier[string]{ + Field: "OwnerSomethingID", + ModelType: bicycleType, +} func BicycleOwnerSomethingId(operator orm.Operator[string]) orm.WhereCondition[overrideforeignkey.Bicycle] { return orm.FieldCondition[overrideforeignkey.Bicycle, string]{ - FieldIdentifier: bicycleOwnerSomethingIdFieldID, + FieldIdentifier: BicycleOwnerSomethingIdField, Operator: operator, } } -var BicyclePreloadAttributes = orm.NewPreloadCondition[overrideforeignkey.Bicycle](bicycleOwnerSomethingIdFieldID) +var BicyclePreloadAttributes = orm.NewPreloadCondition[overrideforeignkey.Bicycle](BicycleIdField, BicycleCreatedAtField, BicycleUpdatedAtField, BicycleDeletedAtField, BicycleOwnerSomethingIdField) var BicyclePreloadRelations = []orm.Condition[overrideforeignkey.Bicycle]{BicyclePreloadOwner} diff --git a/cmd/gen/conditions/tests/results/overrideforeignkey_person.go b/cmd/gen/conditions/tests/results/overrideforeignkey_person.go index 1f23b71..eeaddf5 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkey_person.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkey_person.go @@ -4,32 +4,57 @@ package conditions import ( overrideforeignkey "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overrideforeignkey" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var personType = reflect.TypeOf(*new(overrideforeignkey.Person)) +var PersonIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: personType, +} + func PersonId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkey.Person] { return orm.FieldCondition[overrideforeignkey.Person, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: PersonIdField, Operator: operator, } } + +var PersonCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: personType, +} + func PersonCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Person] { return orm.FieldCondition[overrideforeignkey.Person, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: PersonCreatedAtField, Operator: operator, } } + +var PersonUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: personType, +} + func PersonUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Person] { return orm.FieldCondition[overrideforeignkey.Person, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: PersonUpdatedAtField, Operator: operator, } } + +var PersonDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: personType, +} + func PersonDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkey.Person] { return orm.FieldCondition[overrideforeignkey.Person, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: PersonDeletedAtField, Operator: operator, } } -var PersonPreloadAttributes = orm.NewPreloadCondition[overrideforeignkey.Person]() +var PersonPreloadAttributes = orm.NewPreloadCondition[overrideforeignkey.Person](PersonIdField, PersonCreatedAtField, PersonUpdatedAtField, PersonDeletedAtField) diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go index f993769..f725c27 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_credit_card.go @@ -4,41 +4,69 @@ package conditions import ( overrideforeignkeyinverse "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overrideforeignkeyinverse" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var creditCardType = reflect.TypeOf(*new(overrideforeignkeyinverse.CreditCard)) +var CreditCardIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: creditCardType, +} + func CreditCardId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: CreditCardIdField, Operator: operator, } } + +var CreditCardCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: creditCardType, +} + func CreditCardCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: CreditCardCreatedAtField, Operator: operator, } } + +var CreditCardUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: creditCardType, +} + func CreditCardUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: CreditCardUpdatedAtField, Operator: operator, } } + +var CreditCardDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: creditCardType, +} + func CreditCardDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: CreditCardDeletedAtField, Operator: operator, } } -var creditCardUserReferenceFieldID = orm.FieldIdentifier{Field: "UserReference"} +var CreditCardUserReferenceField = orm.FieldIdentifier[orm.UUID]{ + Field: "UserReference", + ModelType: creditCardType, +} func CreditCardUserReference(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkeyinverse.CreditCard] { return orm.FieldCondition[overrideforeignkeyinverse.CreditCard, orm.UUID]{ - FieldIdentifier: creditCardUserReferenceFieldID, + FieldIdentifier: CreditCardUserReferenceField, Operator: operator, } } -var CreditCardPreloadAttributes = orm.NewPreloadCondition[overrideforeignkeyinverse.CreditCard](creditCardUserReferenceFieldID) +var CreditCardPreloadAttributes = orm.NewPreloadCondition[overrideforeignkeyinverse.CreditCard](CreditCardIdField, CreditCardCreatedAtField, CreditCardUpdatedAtField, CreditCardDeletedAtField, CreditCardUserReferenceField) diff --git a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go index 075f775..cd995dd 100644 --- a/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go +++ b/cmd/gen/conditions/tests/results/overrideforeignkeyinverse_user.go @@ -4,30 +4,55 @@ package conditions import ( overrideforeignkeyinverse "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overrideforeignkeyinverse" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var userType = reflect.TypeOf(*new(overrideforeignkeyinverse.User)) +var UserIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: userType, +} + func UserId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overrideforeignkeyinverse.User] { return orm.FieldCondition[overrideforeignkeyinverse.User, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: UserIdField, Operator: operator, } } + +var UserCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: userType, +} + func UserCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.User] { return orm.FieldCondition[overrideforeignkeyinverse.User, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: UserCreatedAtField, Operator: operator, } } + +var UserUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: userType, +} + func UserUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.User] { return orm.FieldCondition[overrideforeignkeyinverse.User, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: UserUpdatedAtField, Operator: operator, } } + +var UserDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: userType, +} + func UserDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overrideforeignkeyinverse.User] { return orm.FieldCondition[overrideforeignkeyinverse.User, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: UserDeletedAtField, Operator: operator, } } @@ -42,5 +67,5 @@ func UserCreditCard(conditions ...orm.Condition[overrideforeignkeyinverse.Credit } var UserPreloadCreditCard = UserCreditCard(CreditCardPreloadAttributes) -var UserPreloadAttributes = orm.NewPreloadCondition[overrideforeignkeyinverse.User]() +var UserPreloadAttributes = orm.NewPreloadCondition[overrideforeignkeyinverse.User](UserIdField, UserCreatedAtField, UserUpdatedAtField, UserDeletedAtField) var UserPreloadRelations = []orm.Condition[overrideforeignkeyinverse.User]{UserPreloadCreditCard} diff --git a/cmd/gen/conditions/tests/results/overridereferences_brand.go b/cmd/gen/conditions/tests/results/overridereferences_brand.go index ee50d8c..08e82fc 100644 --- a/cmd/gen/conditions/tests/results/overridereferences_brand.go +++ b/cmd/gen/conditions/tests/results/overridereferences_brand.go @@ -4,41 +4,69 @@ package conditions import ( overridereferences "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overridereferences" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var brandType = reflect.TypeOf(*new(overridereferences.Brand)) +var BrandIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: brandType, +} + func BrandId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferences.Brand] { return orm.FieldCondition[overridereferences.Brand, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: BrandIdField, Operator: operator, } } + +var BrandCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: brandType, +} + func BrandCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Brand] { return orm.FieldCondition[overridereferences.Brand, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: BrandCreatedAtField, Operator: operator, } } + +var BrandUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: brandType, +} + func BrandUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Brand] { return orm.FieldCondition[overridereferences.Brand, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: BrandUpdatedAtField, Operator: operator, } } + +var BrandDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: brandType, +} + func BrandDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Brand] { return orm.FieldCondition[overridereferences.Brand, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: BrandDeletedAtField, Operator: operator, } } -var brandNameFieldID = orm.FieldIdentifier{Field: "Name"} +var BrandNameField = orm.FieldIdentifier[string]{ + Field: "Name", + ModelType: brandType, +} func BrandName(operator orm.Operator[string]) orm.WhereCondition[overridereferences.Brand] { return orm.FieldCondition[overridereferences.Brand, string]{ - FieldIdentifier: brandNameFieldID, + FieldIdentifier: BrandNameField, Operator: operator, } } -var BrandPreloadAttributes = orm.NewPreloadCondition[overridereferences.Brand](brandNameFieldID) +var BrandPreloadAttributes = orm.NewPreloadCondition[overridereferences.Brand](BrandIdField, BrandCreatedAtField, BrandUpdatedAtField, BrandDeletedAtField, BrandNameField) diff --git a/cmd/gen/conditions/tests/results/overridereferences_phone.go b/cmd/gen/conditions/tests/results/overridereferences_phone.go index 4624f79..4715f03 100644 --- a/cmd/gen/conditions/tests/results/overridereferences_phone.go +++ b/cmd/gen/conditions/tests/results/overridereferences_phone.go @@ -4,30 +4,55 @@ package conditions import ( overridereferences "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overridereferences" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var phoneType = reflect.TypeOf(*new(overridereferences.Phone)) +var PhoneIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: phoneType, +} + func PhoneId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferences.Phone] { return orm.FieldCondition[overridereferences.Phone, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: PhoneIdField, Operator: operator, } } + +var PhoneCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: phoneType, +} + func PhoneCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Phone] { return orm.FieldCondition[overridereferences.Phone, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: PhoneCreatedAtField, Operator: operator, } } + +var PhoneUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: phoneType, +} + func PhoneUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Phone] { return orm.FieldCondition[overridereferences.Phone, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: PhoneUpdatedAtField, Operator: operator, } } + +var PhoneDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: phoneType, +} + func PhoneDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferences.Phone] { return orm.FieldCondition[overridereferences.Phone, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: PhoneDeletedAtField, Operator: operator, } } @@ -42,14 +67,17 @@ func PhoneBrand(conditions ...orm.Condition[overridereferences.Brand]) orm.IJoin } var PhonePreloadBrand = PhoneBrand(BrandPreloadAttributes) -var phoneBrandNameFieldID = orm.FieldIdentifier{Field: "BrandName"} +var PhoneBrandNameField = orm.FieldIdentifier[string]{ + Field: "BrandName", + ModelType: phoneType, +} func PhoneBrandName(operator orm.Operator[string]) orm.WhereCondition[overridereferences.Phone] { return orm.FieldCondition[overridereferences.Phone, string]{ - FieldIdentifier: phoneBrandNameFieldID, + FieldIdentifier: PhoneBrandNameField, Operator: operator, } } -var PhonePreloadAttributes = orm.NewPreloadCondition[overridereferences.Phone](phoneBrandNameFieldID) +var PhonePreloadAttributes = orm.NewPreloadCondition[overridereferences.Phone](PhoneIdField, PhoneCreatedAtField, PhoneUpdatedAtField, PhoneDeletedAtField, PhoneBrandNameField) var PhonePreloadRelations = []orm.Condition[overridereferences.Phone]{PhonePreloadBrand} diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go index 8fffa44..e772ebc 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_computer.go @@ -4,39 +4,67 @@ package conditions import ( overridereferencesinverse "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overridereferencesinverse" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var computerType = reflect.TypeOf(*new(overridereferencesinverse.Computer)) +var ComputerIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: computerType, +} + func ComputerId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferencesinverse.Computer] { return orm.FieldCondition[overridereferencesinverse.Computer, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: ComputerIdField, Operator: operator, } } + +var ComputerCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: computerType, +} + func ComputerCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Computer] { return orm.FieldCondition[overridereferencesinverse.Computer, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: ComputerCreatedAtField, Operator: operator, } } + +var ComputerUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: computerType, +} + func ComputerUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Computer] { return orm.FieldCondition[overridereferencesinverse.Computer, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: ComputerUpdatedAtField, Operator: operator, } } + +var ComputerDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: computerType, +} + func ComputerDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Computer] { return orm.FieldCondition[overridereferencesinverse.Computer, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: ComputerDeletedAtField, Operator: operator, } } -var computerNameFieldID = orm.FieldIdentifier{Field: "Name"} +var ComputerNameField = orm.FieldIdentifier[string]{ + Field: "Name", + ModelType: computerType, +} func ComputerName(operator orm.Operator[string]) orm.WhereCondition[overridereferencesinverse.Computer] { return orm.FieldCondition[overridereferencesinverse.Computer, string]{ - FieldIdentifier: computerNameFieldID, + FieldIdentifier: ComputerNameField, Operator: operator, } } @@ -51,5 +79,5 @@ func ComputerProcessor(conditions ...orm.Condition[overridereferencesinverse.Pro } var ComputerPreloadProcessor = ComputerProcessor(ProcessorPreloadAttributes) -var ComputerPreloadAttributes = orm.NewPreloadCondition[overridereferencesinverse.Computer](computerNameFieldID) +var ComputerPreloadAttributes = orm.NewPreloadCondition[overridereferencesinverse.Computer](ComputerIdField, ComputerCreatedAtField, ComputerUpdatedAtField, ComputerDeletedAtField, ComputerNameField) var ComputerPreloadRelations = []orm.Condition[overridereferencesinverse.Computer]{ComputerPreloadProcessor} diff --git a/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go b/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go index 372a926..6303fd6 100644 --- a/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go +++ b/cmd/gen/conditions/tests/results/overridereferencesinverse_processor.go @@ -4,41 +4,69 @@ package conditions import ( overridereferencesinverse "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/overridereferencesinverse" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var processorType = reflect.TypeOf(*new(overridereferencesinverse.Processor)) +var ProcessorIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: processorType, +} + func ProcessorId(operator orm.Operator[orm.UUID]) orm.WhereCondition[overridereferencesinverse.Processor] { return orm.FieldCondition[overridereferencesinverse.Processor, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: ProcessorIdField, Operator: operator, } } + +var ProcessorCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: processorType, +} + func ProcessorCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Processor] { return orm.FieldCondition[overridereferencesinverse.Processor, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: ProcessorCreatedAtField, Operator: operator, } } + +var ProcessorUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: processorType, +} + func ProcessorUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Processor] { return orm.FieldCondition[overridereferencesinverse.Processor, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: ProcessorUpdatedAtField, Operator: operator, } } + +var ProcessorDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: processorType, +} + func ProcessorDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[overridereferencesinverse.Processor] { return orm.FieldCondition[overridereferencesinverse.Processor, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: ProcessorDeletedAtField, Operator: operator, } } -var processorComputerNameFieldID = orm.FieldIdentifier{Field: "ComputerName"} +var ProcessorComputerNameField = orm.FieldIdentifier[string]{ + Field: "ComputerName", + ModelType: processorType, +} func ProcessorComputerName(operator orm.Operator[string]) orm.WhereCondition[overridereferencesinverse.Processor] { return orm.FieldCondition[overridereferencesinverse.Processor, string]{ - FieldIdentifier: processorComputerNameFieldID, + FieldIdentifier: ProcessorComputerNameField, Operator: operator, } } -var ProcessorPreloadAttributes = orm.NewPreloadCondition[overridereferencesinverse.Processor](processorComputerNameFieldID) +var ProcessorPreloadAttributes = orm.NewPreloadCondition[overridereferencesinverse.Processor](ProcessorIdField, ProcessorCreatedAtField, ProcessorUpdatedAtField, ProcessorDeletedAtField, ProcessorComputerNameField) diff --git a/cmd/gen/conditions/tests/results/selfreferential.go b/cmd/gen/conditions/tests/results/selfreferential.go index 7ab2b25..64800b8 100644 --- a/cmd/gen/conditions/tests/results/selfreferential.go +++ b/cmd/gen/conditions/tests/results/selfreferential.go @@ -4,30 +4,55 @@ package conditions import ( selfreferential "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/selfreferential" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var employeeType = reflect.TypeOf(*new(selfreferential.Employee)) +var EmployeeIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: employeeType, +} + func EmployeeId(operator orm.Operator[orm.UUID]) orm.WhereCondition[selfreferential.Employee] { return orm.FieldCondition[selfreferential.Employee, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: EmployeeIdField, Operator: operator, } } + +var EmployeeCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: employeeType, +} + func EmployeeCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[selfreferential.Employee] { return orm.FieldCondition[selfreferential.Employee, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: EmployeeCreatedAtField, Operator: operator, } } + +var EmployeeUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: employeeType, +} + func EmployeeUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[selfreferential.Employee] { return orm.FieldCondition[selfreferential.Employee, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: EmployeeUpdatedAtField, Operator: operator, } } + +var EmployeeDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: employeeType, +} + func EmployeeDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[selfreferential.Employee] { return orm.FieldCondition[selfreferential.Employee, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: EmployeeDeletedAtField, Operator: operator, } } @@ -42,14 +67,17 @@ func EmployeeBoss(conditions ...orm.Condition[selfreferential.Employee]) orm.IJo } var EmployeePreloadBoss = EmployeeBoss(EmployeePreloadAttributes) -var employeeBossIdFieldID = orm.FieldIdentifier{Field: "BossID"} +var EmployeeBossIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "BossID", + ModelType: employeeType, +} func EmployeeBossId(operator orm.Operator[orm.UUID]) orm.WhereCondition[selfreferential.Employee] { return orm.FieldCondition[selfreferential.Employee, orm.UUID]{ - FieldIdentifier: employeeBossIdFieldID, + FieldIdentifier: EmployeeBossIdField, Operator: operator, } } -var EmployeePreloadAttributes = orm.NewPreloadCondition[selfreferential.Employee](employeeBossIdFieldID) +var EmployeePreloadAttributes = orm.NewPreloadCondition[selfreferential.Employee](EmployeeIdField, EmployeeCreatedAtField, EmployeeUpdatedAtField, EmployeeDeletedAtField, EmployeeBossIdField) var EmployeePreloadRelations = []orm.Condition[selfreferential.Employee]{EmployeePreloadBoss} diff --git a/cmd/gen/conditions/tests/results/uintmodel.go b/cmd/gen/conditions/tests/results/uintmodel.go index 93061f5..bd6b987 100644 --- a/cmd/gen/conditions/tests/results/uintmodel.go +++ b/cmd/gen/conditions/tests/results/uintmodel.go @@ -4,32 +4,57 @@ package conditions import ( uintmodel "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/uintmodel" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var uintModelType = reflect.TypeOf(*new(uintmodel.UintModel)) +var UintModelIdField = orm.FieldIdentifier[orm.UIntID]{ + Field: "ID", + ModelType: uintModelType, +} + func UintModelId(operator orm.Operator[orm.UIntID]) orm.WhereCondition[uintmodel.UintModel] { return orm.FieldCondition[uintmodel.UintModel, orm.UIntID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: UintModelIdField, Operator: operator, } } + +var UintModelCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: uintModelType, +} + func UintModelCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uintmodel.UintModel] { return orm.FieldCondition[uintmodel.UintModel, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: UintModelCreatedAtField, Operator: operator, } } + +var UintModelUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: uintModelType, +} + func UintModelUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uintmodel.UintModel] { return orm.FieldCondition[uintmodel.UintModel, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: UintModelUpdatedAtField, Operator: operator, } } + +var UintModelDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: uintModelType, +} + func UintModelDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uintmodel.UintModel] { return orm.FieldCondition[uintmodel.UintModel, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: UintModelDeletedAtField, Operator: operator, } } -var UintModelPreloadAttributes = orm.NewPreloadCondition[uintmodel.UintModel]() +var UintModelPreloadAttributes = orm.NewPreloadCondition[uintmodel.UintModel](UintModelIdField, UintModelCreatedAtField, UintModelUpdatedAtField, UintModelDeletedAtField) diff --git a/cmd/gen/conditions/tests/results/uuidmodel.go b/cmd/gen/conditions/tests/results/uuidmodel.go index 15c55d0..f825bdb 100644 --- a/cmd/gen/conditions/tests/results/uuidmodel.go +++ b/cmd/gen/conditions/tests/results/uuidmodel.go @@ -4,32 +4,57 @@ package conditions import ( uuidmodel "github.com/ditrit/badaas-cli/cmd/gen/conditions/tests/uuidmodel" orm "github.com/ditrit/badaas/orm" + "reflect" "time" ) +var uuidModelType = reflect.TypeOf(*new(uuidmodel.UUIDModel)) +var UUIDModelIdField = orm.FieldIdentifier[orm.UUID]{ + Field: "ID", + ModelType: uuidModelType, +} + func UUIDModelId(operator orm.Operator[orm.UUID]) orm.WhereCondition[uuidmodel.UUIDModel] { return orm.FieldCondition[uuidmodel.UUIDModel, orm.UUID]{ - FieldIdentifier: orm.IDFieldID, + FieldIdentifier: UUIDModelIdField, Operator: operator, } } + +var UUIDModelCreatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "CreatedAt", + ModelType: uuidModelType, +} + func UUIDModelCreatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uuidmodel.UUIDModel] { return orm.FieldCondition[uuidmodel.UUIDModel, time.Time]{ - FieldIdentifier: orm.CreatedAtFieldID, + FieldIdentifier: UUIDModelCreatedAtField, Operator: operator, } } + +var UUIDModelUpdatedAtField = orm.FieldIdentifier[time.Time]{ + Field: "UpdatedAt", + ModelType: uuidModelType, +} + func UUIDModelUpdatedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uuidmodel.UUIDModel] { return orm.FieldCondition[uuidmodel.UUIDModel, time.Time]{ - FieldIdentifier: orm.UpdatedAtFieldID, + FieldIdentifier: UUIDModelUpdatedAtField, Operator: operator, } } + +var UUIDModelDeletedAtField = orm.FieldIdentifier[time.Time]{ + Field: "DeletedAt", + ModelType: uuidModelType, +} + func UUIDModelDeletedAt(operator orm.Operator[time.Time]) orm.WhereCondition[uuidmodel.UUIDModel] { return orm.FieldCondition[uuidmodel.UUIDModel, time.Time]{ - FieldIdentifier: orm.DeletedAtFieldID, + FieldIdentifier: UUIDModelDeletedAtField, Operator: operator, } } -var UUIDModelPreloadAttributes = orm.NewPreloadCondition[uuidmodel.UUIDModel]() +var UUIDModelPreloadAttributes = orm.NewPreloadCondition[uuidmodel.UUIDModel](UUIDModelIdField, UUIDModelCreatedAtField, UUIDModelUpdatedAtField, UUIDModelDeletedAtField) From 89dda486c78ef9acea2a7769d1f9f80b11526851 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Mon, 7 Aug 2023 13:33:09 +0200 Subject: [PATCH 30/31] update badaas version --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 08c3d48..dc6b150 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( github.com/dave/jennifer v1.6.1 - github.com/ditrit/badaas v0.0.0-20230807114103-72cff2a37890 + github.com/ditrit/badaas v0.0.0-20230807114456-ce08b6d549b4 github.com/ditrit/verdeter v0.4.0 github.com/elliotchance/pie/v2 v2.7.0 github.com/ettle/strcase v0.1.1 diff --git a/go.sum b/go.sum index ef2d92d..4fa88ea 100644 --- a/go.sum +++ b/go.sum @@ -53,8 +53,8 @@ github.com/dave/jennifer v1.6.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/ditrit/badaas v0.0.0-20230807114103-72cff2a37890 h1:Y4oG6q2kJI/G0m+bCPuwv/mrKYhtJP4cqYHsuFsAn0M= -github.com/ditrit/badaas v0.0.0-20230807114103-72cff2a37890/go.mod h1:FS3I+obfV7FiYp3tUbZObckOclqmEPtGwTXsGOk8WJs= +github.com/ditrit/badaas v0.0.0-20230807114456-ce08b6d549b4 h1:27Rsh0wp+563kH1LNBkRJUxf6qZXjE86B5EKvZcC3jU= +github.com/ditrit/badaas v0.0.0-20230807114456-ce08b6d549b4/go.mod h1:FS3I+obfV7FiYp3tUbZObckOclqmEPtGwTXsGOk8WJs= github.com/ditrit/verdeter v0.4.0 h1:DzEOFauuXEGNQYP6OgYtHwEyb3w9riem99u0xE/l7+o= github.com/ditrit/verdeter v0.4.0/go.mod h1:sKpWuOvYqNabLN4aNXqeBhcWpt7nf0frwqk0B5M6ax0= github.com/elliotchance/pie/v2 v2.7.0 h1:FqoIKg4uj0G/CrLGuMS9ejnFKa92lxE1dEgBD3pShXg= From 58703d495f01903cf6c095c905858464639ac847 Mon Sep 17 00:00:00 2001 From: Franco Liberali Date: Mon, 7 Aug 2023 13:34:12 +0200 Subject: [PATCH 31/31] update changelog --- changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.md b/changelog.md index 542c871..67a76d1 100644 --- a/changelog.md +++ b/changelog.md @@ -13,5 +13,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add gen conditions to generate the conditions for the badaas' compilable query system. - Add support for operators in condition generation. - Add preload conditions generation. +- Add support for dynamic operators. [unreleased]: https://github.com/ditrit/badaas-cli/blob/main/changelog.md#unreleased \ No newline at end of file