From 814f3bca156b2dd6574c0917c026a18785eb08f4 Mon Sep 17 00:00:00 2001 From: nfel Date: Sun, 1 Dec 2024 23:06:51 +0330 Subject: [PATCH] Working with a boilerplate --- .gitignore | 2 ++ go.mod | 6 +++++ go.sum | 20 ++++++++++++---- makefile | 7 +++--- sqlc.yaml | 25 ++++++++++++++++---- src/db/migration/000001_init.down.sql | 0 src/db/migration/000001_init.up.sql | 34 +++++++++++++++++++++++++++ src/internal/const/query/q.sql | 3 +++ 8 files changed, 84 insertions(+), 13 deletions(-) create mode 100644 src/db/migration/000001_init.down.sql create mode 100644 src/db/migration/000001_init.up.sql create mode 100644 src/internal/const/query/q.sql diff --git a/.gitignore b/.gitignore index a52265b..d590973 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ src/stub src/internal/storage/persistence +.idea/ +.vscode/ diff --git a/go.mod b/go.mod index ced9675..1e38119 100644 --- a/go.mod +++ b/go.mod @@ -6,12 +6,18 @@ require ( github.com/BurntSushi/toml v1.4.0 github.com/kavenegar/kavenegar-go v0.0.0-20240205151018-77039f51467d github.com/spf13/cobra v1.8.1 + google.golang.org/grpc v1.68.0 google.golang.org/protobuf v1.35.2 ) require ( + github.com/go-jet/jet/v2 v2.12.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect + golang.org/x/net v0.29.0 // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/text v0.18.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect ) replace github.com/kavenegar/kavenegar-go v0.0.0-20240205151018-77039f51467d => github.com/nfel/kavenegar-go v1.0.3 diff --git a/go.sum b/go.sum index b3ebf29..5d146b8 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,12 @@ github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/go-jet/jet/v2 v2.12.0 h1:z2JfvBAZgsfxlQz6NXBYdZTXc7ep3jhbszTLtETv1JE= +github.com/go-jet/jet/v2 v2.12.0/go.mod h1:ufQVRQeI1mbcO5R8uCEVcVf3Foej9kReBdwDx7YMWUM= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/nfel/kavenegar-go v1.0.3 h1:ux8YWhG0NmOa0dZpW8cL+qzKusoOewIiw5tufWececU= @@ -12,8 +16,16 @@ github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/makefile b/makefile index e050922..60ea9f5 100644 --- a/makefile +++ b/makefile @@ -75,10 +75,9 @@ GOOS=linux GOARCH=amd64 DOCKER_IMG= DOCKER_REG= -all: tidy build run +all: clean build run -# Ignore -tidy: +clean: @echo -ne "Formating Code \r" @go fmt ./... @rm $(OUT) @@ -117,7 +116,7 @@ build-migrate: @echo -ne "Running Migrate \r" @migrate \ -path ./src/db/migration\ - -database postgres://gitea:gitea@localhost:5432/test1?sslmode=disable\ + -database postgres://gitea:gitea@localhost:5432/test3?sslmode=disable\ up build-sqlc: diff --git a/sqlc.yaml b/sqlc.yaml index 11421ab..c142971 100644 --- a/sqlc.yaml +++ b/sqlc.yaml @@ -1,15 +1,17 @@ version: "2" servers: - engine: postgresql - uri: "postgresql://gitea:gitea@localhost:5432/test1?sslmode=disable" + uri: ${PG_URL} sql: - - engine: postgresql + - name: repo + engine: postgresql schema: src/db/migration/ queries: src/internal/const/query/ gen: go: - package: persistence - out: src/internal/storage/persistence/ + sql_package: "pgx/v5" + package: db + out: src/internal/domain/db/ emit_db_tags: true emit_json_tags: true emit_prepared_queries: false @@ -18,4 +20,17 @@ sql: emit_empty_slices: true # sql_package: "pgx/v5" database: - uri: postgresql://gitea:gitea@localhost:5432/test1 + managed: true + rules: + - sqlc/db-prepare + - no-pg + - no-delete +rules: + - name: no-pg + message: "invalid engine: postgresql" + rule: | + config.engine == "postgresql" + - name: no-delete + message: "don't use delete statements" + rule: | + query.sql.contains("DELETE") diff --git a/src/db/migration/000001_init.down.sql b/src/db/migration/000001_init.down.sql new file mode 100644 index 0000000..e69de29 diff --git a/src/db/migration/000001_init.up.sql b/src/db/migration/000001_init.up.sql new file mode 100644 index 0000000..89c4d2a --- /dev/null +++ b/src/db/migration/000001_init.up.sql @@ -0,0 +1,34 @@ +BEGIN; + +CREATE OR REPLACE FUNCTION trigger_set_timestamp() + RETURNS TRIGGER AS $$ +BEGIN + NEW.updated_at = NOW(); + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + + + -- optional uint64 id = 1; // Record Id of Log stored in db + -- string content = 2; + -- string effective_user = 3; + -- optional LogSource source = 5; + -- Importance importance = 6; + -- Meta meta = 7; + +CREATE TABLE if not EXISTS log +( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + type VARCHAR(255) NOT NULL, + content VARCHAR(255) NOT NULL, + user_id BIGINT, + + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); +CREATE TRIGGER set_timestamp + BEFORE UPDATE ON log + FOR EACH ROW +EXECUTE PROCEDURE trigger_set_timestamp(); + +COMMIT; diff --git a/src/internal/const/query/q.sql b/src/internal/const/query/q.sql new file mode 100644 index 0000000..2d808e6 --- /dev/null +++ b/src/internal/const/query/q.sql @@ -0,0 +1,3 @@ +--- name: GetUser :one +SELECT * FROM user +WHERE id = $1 LIMIT 1;