update with pagination

This commit is contained in:
Pasha 2024-11-15 14:21:04 +03:00
parent c4f7c33c03
commit 2dc837be38
19 changed files with 268 additions and 160 deletions

@ -18,3 +18,4 @@ Modules:
service_save_path: ./internal/service
repository_save_path: ./internal/repository
server_save_path: ./internal/server/http
db: postgres

@ -12,6 +12,11 @@ map Discount {
threshold => **integer**
}
map Filter {
active => **boolean**
text => **string**
}
map Privilege {
amount => **integer**
privilegeID => **string**
@ -19,17 +24,17 @@ map Privilege {
map PromoCode {
id => **string** //primary_key//
createdAt => **string** //date-time//
dueTo => **integer**
offLimit => **boolean**
codeword => **string**
outdated => **boolean**
activationCount => **integer**
bonus => **bonus**
codeword => **string**
createdAt => **string** //date-time//
delete => **boolean**
description => **string**
fastLinks => **[]string**
dueTo => **integer**
greetings => **string**
offLimit => **boolean**
outdated => **boolean**
}
map Bonus {
@ -37,11 +42,6 @@ map Bonus {
privilege => **privilege**
}
map Filter {
active => **boolean**
text => **string**
}
Bonus::discount -> Discount
Bonus::privilege -> Privilege

22
go.mod

@ -1,6 +1,8 @@
module codeword
go 1.21
go 1.21.0
toolchain go1.23.1
require (
github.com/caarlos0/env/v8 v8.0.0
@ -10,7 +12,7 @@ require (
github.com/joho/godotenv v1.5.1
github.com/pioz/faker v1.7.3
github.com/rs/xid v1.5.0
github.com/stretchr/testify v1.8.4
github.com/stretchr/testify v1.9.0
github.com/twmb/franz-go v1.15.4
go.mongodb.org/mongo-driver v1.13.1
go.uber.org/zap v1.27.0
@ -25,18 +27,27 @@ require (
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/getkin/kin-openapi v0.122.0 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.1 // indirect
github.com/google/uuid v1.4.0 // indirect
github.com/invopop/yaml v0.3.1 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/klauspost/compress v1.16.7 // indirect
github.com/kr/pretty v0.1.0 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect
github.com/perimeterx/marshmallow v1.1.5 // indirect
github.com/pierrec/lz4/v4 v4.1.19 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/rs/zerolog v1.33.0 // indirect
github.com/twmb/franz-go/pkg/kmsg v1.7.0 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.50.0 // indirect
@ -49,10 +60,11 @@ require (
golang.org/x/crypto v0.17.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sync v0.4.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/sys v0.17.0 // indirect
golang.org/x/text v0.14.0 // indirect
google.golang.org/genproto v0.0.0-20240102182953-50ed04b92917 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240102182953-50ed04b92917 // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
penahub.gitlab.yandexcloud.net/pena-services/blueprint v0.0.0-20241114114746-100696f35c90 // indirect
)

34
go.sum

@ -4,6 +4,8 @@ github.com/caarlos0/env/v8 v8.0.0 h1:POhxHhSpuxrLMIdvTGARuZqR4Jjm8AYmoi/JKlcScs0
github.com/caarlos0/env/v8 v8.0.0/go.mod h1:7K4wMY9bH0esiXSSHlfHLX5xKGQMnkH5Fk4TDSSSzfo=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
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=
@ -11,8 +13,15 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/getkin/kin-openapi v0.122.0 h1:WB9Jbl0Hp/T79/JF9xlSW5Kl9uYdk/AWD0yAd9HOM10=
github.com/getkin/kin-openapi v0.122.0/go.mod h1:PCWw/lfBrJY4HcdqE3jj+QFkaFK8ABoqo7PvqVhXXqw=
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofiber/fiber/v2 v2.51.0 h1:JNACcZy5e2tGApWB2QrRpenTWn0fq0hkFm6k0C86gKQ=
github.com/gofiber/fiber/v2 v2.51.0/go.mod h1:xaQRZQJGqnKOQnbQw+ltvku3/h8QxvNi8o6JiJ7Ll0U=
github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
@ -28,24 +37,35 @@ 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/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/invopop/yaml v0.3.1 h1:f0+ZpmhfBSS4MhG+4HYseMdJhoeeopbSKbq5Rpeelso=
github.com/invopop/yaml v0.3.1/go.mod h1:PMOp3nn4/12yEZUFfmOuNHJsZToEEOwoWsT+D81KkeA=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I=
github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
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/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U=
github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
@ -54,20 +74,28 @@ github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs=
github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s=
github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw=
github.com/pierrec/lz4/v4 v4.1.19 h1:tYLzDnjDXh9qIxSTKHwXwOYmm9d887Y7Y1ZkyXYHAN4=
github.com/pierrec/lz4/v4 v4.1.19/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pioz/faker v1.7.3 h1:Tez8Emuq0UN+/d6mo3a9m/9ZZ/zdfJk0c5RtRatrceM=
github.com/pioz/faker v1.7.3/go.mod h1:xSpay5w/oz1a6+ww0M3vfpe40pSIykeUPeWEc3TvVlc=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
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/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
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/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/twmb/franz-go v1.15.4 h1:qBCkHaiutetnrXjAUWA99D9FEcZVMt2AYwkH3vWEQTw=
github.com/twmb/franz-go v1.15.4/go.mod h1:rC18hqNmfo8TMc1kz7CQmHL74PLNF8KVvhflxiiJZCU=
github.com/twmb/franz-go/pkg/kmsg v1.7.0 h1:a457IbvezYfA5UkiBvyV3zj0Is3y1i8EJgqjJYoij2E=
@ -121,8 +149,11 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -153,6 +184,7 @@ google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHh
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
@ -162,3 +194,5 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d h1:gbaDt35HMDqOK84WYmDIlXMI7rstUcRqNttaT6Kx1do=
penahub.gitlab.yandexcloud.net/backend/penahub_common v0.0.0-20240202120244-c4ef330cfe5d/go.mod h1:lTmpjry+8evVkXWbEC+WMOELcFkRD1lFMc7J09mOndM=
penahub.gitlab.yandexcloud.net/pena-services/blueprint v0.0.0-20241114114746-100696f35c90 h1:sSDKSdjexf5e6BOOxcuODf9FrctQGtDPb/udma5nq18=
penahub.gitlab.yandexcloud.net/pena-services/blueprint v0.0.0-20241114114746-100696f35c90/go.mod h1:NJEEmcYZDD5IzHOMvGgCWwtE0T6nNnaCBEQKPRapHts=

@ -19,24 +19,70 @@ func NewPromocodeController(service *service.PromocodeService) *PromocodeControl
func (c *PromocodeController) Register(router fiber.Router) {
router.Post("/promocode/activate", c.Activate)
router.Post("/promocode/getList", c.Getlist)
router.Delete("/promocode/{promocodeID}", c.Delete)
router.Post("/promocode/create", c.Createpromocode)
router.Put("/promocode/edit", c.Editpromocode)
router.Post("/promocode/fastlink", c.Createfastlink)
router.Delete("/promocode/{promocodeID}", c.Delete)
router.Post("/promocode/activate", c.Activate)
router.Post("/promocode/getList", c.Getlist)
}
func (c *PromocodeController) Name() string {
return ""
}
func (c *PromocodeController) Activate(ctx *fiber.Ctx) error {
// Обработчик для метода Activate
var request models.ActivateReq
if err := ctx.BodyParser(&request); err != nil {
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
}
response, err := c.PromocodeService.Activate(ctx.Context(), &request)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
return ctx.Status(fiber.StatusOK).JSON(response)
}
func (c *PromocodeController) Getlist(ctx *fiber.Ctx) error {
// Обработчик для метода Getlist
var request models.GetPromoCodesListReq
if err := ctx.BodyParser(&request); err != nil {
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
}
response, err := c.PromocodeService.Getlist(ctx.Context(), &request)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
return ctx.Status(fiber.StatusOK).JSON(response)
}
func (c *PromocodeController) Delete(ctx *fiber.Ctx) error {
// Обработчик для метода Delete
err := c.PromocodeService.Delete(ctx.Context())
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
return ctx.SendStatus(fiber.StatusOK)
}
func (c *PromocodeController) Createpromocode(ctx *fiber.Ctx) error {
// Обработчик для метода Createpromocode
@ -87,49 +133,3 @@ func (c *PromocodeController) Createfastlink(ctx *fiber.Ctx) error {
return ctx.Status(fiber.StatusOK).JSON(response)
}
func (c *PromocodeController) Delete(ctx *fiber.Ctx) error {
// Обработчик для метода Delete
err := c.PromocodeService.Delete(ctx.Context())
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
return ctx.SendStatus(fiber.StatusOK)
}
func (c *PromocodeController) Activate(ctx *fiber.Ctx) error {
// Обработчик для метода Activate
var request models.ActivateReq
if err := ctx.BodyParser(&request); err != nil {
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
}
response, err := c.PromocodeService.Activate(ctx.Context(), &request)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
return ctx.Status(fiber.StatusOK).JSON(response)
}
func (c *PromocodeController) Getlist(ctx *fiber.Ctx) error {
// Обработчик для метода Getlist
var request models.GetPromoCodesListReq
if err := ctx.BodyParser(&request); err != nil {
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request payload"})
}
response, err := c.PromocodeService.Getlist(ctx.Context(), &request)
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
}
return ctx.Status(fiber.StatusOK).JSON(response)
}

@ -19,13 +19,13 @@ func NewRecoverController(service *service.RecoverService) *RecoverController {
func (c *RecoverController) Register(router fiber.Router) {
router.Get("/readiness", c.Readiness)
router.Get("/liveness", c.Liveness)
router.Post("/recover", c.Recovery)
router.Get("/recover/{sign}", c.Recoverylink)
router.Get("/liveness", c.Liveness)
router.Get("/readiness", c.Readiness)
}
@ -33,10 +33,10 @@ func (c *RecoverController) Name() string {
return ""
}
func (c *RecoverController) Readiness(ctx *fiber.Ctx) error {
// Обработчик для метода Readiness
func (c *RecoverController) Liveness(ctx *fiber.Ctx) error {
// Обработчик для метода Liveness
err := c.RecoverService.Readiness(ctx.Context())
err := c.RecoverService.Liveness(ctx.Context())
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")
@ -74,10 +74,10 @@ func (c *RecoverController) Recoverylink(ctx *fiber.Ctx) error {
}
func (c *RecoverController) Liveness(ctx *fiber.Ctx) error {
// Обработчик для метода Liveness
func (c *RecoverController) Readiness(ctx *fiber.Ctx) error {
// Обработчик для метода Readiness
err := c.RecoverService.Liveness(ctx.Context())
err := c.RecoverService.Readiness(ctx.Context())
if err != nil {
return ctx.Status(fiber.StatusInternalServerError).SendString("Internal Server Error")

@ -1,12 +1,12 @@
package models
type Discount struct {
/* - Уровень скидки*/
Layer int `json:"layer"`
/* - Цель скидки*/
Target string `json:"target"`
/* - Порог скидки*/
Threshold int `json:"threshold"`
/* - Множитель скидки*/
Factor int `json:"factor"`
/* - Уровень скидки*/
Layer int `json:"layer"`
}

@ -1,6 +1,10 @@
package models
type EditPromoCodeReq struct {
/* - Приветственное сообщение после активации промокода*/
Greetings string `json:"Greetings"`
/* - Идентификатор промокода, который требуется обновить*/
ID string `json:"ID"`
/* - Количество активаций промокода*/
Activationcount int `json:"ActivationCount"`
/* - Флаг удаления промокода*/
@ -9,8 +13,4 @@ type EditPromoCodeReq struct {
Description string `json:"Description"`
/* - Дата окончания промокода в формате Unix time*/
Dueto int `json:"DueTo"`
/* - Приветственное сообщение после активации промокода*/
Greetings string `json:"Greetings"`
/* - Идентификатор промокода, который требуется обновить*/
ID string `json:"ID"`
}

@ -1,10 +1,10 @@
package models
type GetPromoCodesListReq struct {
/* - Номер страницы*/
Page int `json:"page"`
/* - */
Filter Filter `json:"filter"`
/* - Максимальное количество элементов на странице*/
Limit int `json:"limit"`
/* - Номер страницы*/
Page int `json:"page"`
}

@ -1,8 +1,8 @@
package models
type Privilege struct {
/* - Количество привилегии*/
Amount int `json:"amount"`
/* - Идентификатор привилегии*/
Privilegeid string `json:"privilegeID"`
/* - Количество привилегии*/
Amount int `json:"amount"`
}

@ -3,26 +3,26 @@ package models
type PromoCode struct {
/* - Идентификатор промокода*/
ID string `json:"id"`
/* - Количество активаций промокода*/
Activationcount int `json:"activationCount"`
/* - Бонус, предоставляемый с промокодом*/
Bonus Bonus `json:"bonus"`
/* - Кодовое слово для активации промокода*/
Codeword string `json:"codeword"`
/* - Дата и время создания промокода*/
Createdat string `json:"createdAt"`
/* - Флаг*/
Delete bool `json:"delete"`
/* - Описание промокода*/
Description string `json:"description"`
/* - Список быстрых ссылок для активации промокода*/
Fastlinks []string `json:"fastLinks"`
/* - Дата истечения действия промокода в формате Unix time*/
Dueto int `json:"dueTo"`
/* - Приветственное сообщение после активации промокода*/
Greetings string `json:"greetings"`
/* - Флаг*/
Offlimit bool `json:"offLimit"`
/* - Количество активаций промокода*/
Activationcount int `json:"activationCount"`
/* - Флаг*/
Outdated bool `json:"outdated"`
/* - Кодовое слово для активации промокода*/
Codeword string `json:"codeword"`
/* - Дата и время создания промокода*/
Createdat string `json:"createdAt"`
/* - Дата истечения действия промокода в формате Unix time*/
Dueto int `json:"dueTo"`
/* - Флаг*/
Offlimit bool `json:"offLimit"`
}

@ -1,8 +1,6 @@
package models
type PromoCodeReq struct {
/* - Количество активаций промокода*/
Activationcount int `json:"activationCount"`
/* - Бонус*/
Bonus Bonus `json:"bonus"`
/* - Кодовое слово для активации промокода*/
@ -15,4 +13,6 @@ type PromoCodeReq struct {
Fastlinks []string `json:"fastLinks"`
/* - Приветственное сообщение после активации промокода*/
Greetings string `json:"greetings"`
/* - Количество активаций промокода*/
Activationcount int `json:"activationCount"`
}

@ -3,13 +3,53 @@ package repository
import (
"codeword/internal/models"
"context"
"database/sql"
)
type PromocodeRepository struct {
queries *sqlcgen.Queries
pool *sql.DB
}
func NewPromocodeRepository() *PromocodeRepository {
return &PromocodeRepository{}
type PromocodeDeps struct {
Queries *sqlcgen.Queries
Pool *sql.DB
}
func NewPromocodeRepository(deps PromocodeDeps) *PromocodeRepository {
return &PromocodeRepository{
queries: deps.Queries,
pool: deps.Pool,
}
}
func (r *PromocodeRepository) Activate(ctx context.Context, request *models.ActivateReq) (*models.ActivateResp, error) {
//TODO:IMPLEMENT ME
return &models.ActivateResp{}, nil
}
func (r *PromocodeRepository) Getlist(ctx context.Context, request *models.GetPromoCodesListReq) (*models.GetPromoCodesListResp, error) {
rows, err := r.queries.Getlist(ctx, sqlcgen.GetlistParams{
Page: request.Page,
Limit: request.Size,
})
if err != nil {
return nil, err
}
return &models.GetPromoCodesListResp{}, nil
}
func (r *PromocodeRepository) Delete(ctx context.Context) error {
//TODO:IMPLEMENT ME
return nil
}
func (r *PromocodeRepository) Createpromocode(ctx context.Context, request *models.PromoCodeReq) (*models.PromoCode, error) {
@ -32,24 +72,3 @@ func (r *PromocodeRepository) Createfastlink(ctx context.Context, request *model
return &models.CreateFastLinkResp{}, nil
}
func (r *PromocodeRepository) Delete(ctx context.Context) error {
//TODO:IMPLEMENT ME
return nil
}
func (r *PromocodeRepository) Activate(ctx context.Context, request *models.ActivateReq) (*models.ActivateResp, error) {
//TODO:IMPLEMENT ME
return &models.ActivateResp{}, nil
}
func (r *PromocodeRepository) Getlist(ctx context.Context, request *models.GetPromoCodesListReq) (*models.GetPromoCodesListResp, error) {
//TODO:IMPLEMENT ME
return &models.GetPromoCodesListResp{}, nil
}

@ -3,16 +3,27 @@ package repository
import (
"codeword/internal/models"
"context"
"database/sql"
)
type RecoverRepository struct {
queries *sqlcgen.Queries
pool *sql.DB
}
func NewRecoverRepository() *RecoverRepository {
return &RecoverRepository{}
type RecoverDeps struct {
Queries *sqlcgen.Queries
Pool *sql.DB
}
func (r *RecoverRepository) Readiness(ctx context.Context) error {
func NewRecoverRepository(deps RecoverDeps) *RecoverRepository {
return &RecoverRepository{
queries: deps.Queries,
pool: deps.Pool,
}
}
func (r *RecoverRepository) Liveness(ctx context.Context) error {
//TODO:IMPLEMENT ME
return nil
@ -33,7 +44,7 @@ func (r *RecoverRepository) Recoverylink(ctx context.Context) error {
}
func (r *RecoverRepository) Liveness(ctx context.Context) error {
func (r *RecoverRepository) Readiness(ctx context.Context) error {
//TODO:IMPLEMENT ME
return nil

@ -3,13 +3,24 @@ package repository
import (
"codeword/internal/models"
"context"
"database/sql"
)
type StatsRepository struct {
queries *sqlcgen.Queries
pool *sql.DB
}
func NewStatsRepository() *StatsRepository {
return &StatsRepository{}
type StatsDeps struct {
Queries *sqlcgen.Queries
Pool *sql.DB
}
func NewStatsRepository(deps StatsDeps) *StatsRepository {
return &StatsRepository{
queries: deps.Queries,
pool: deps.Pool,
}
}
func (r *StatsRepository) Getstats(ctx context.Context, request *models.PromoCodeStatsReq) (*models.PromoCodeStatsResp, error) {

@ -16,6 +16,36 @@ func NewPromocodeService(repository *repository.PromocodeRepository) *PromocodeS
}
}
func (s *PromocodeService) Activate(ctx context.Context, request *models.ActivateReq) (*models.ActivateResp, error) {
response, err := s.PromocodeRepository.Activate(ctx, request)
if err != nil {
return nil, err
}
return response, nil
}
func (s *PromocodeService) Getlist(ctx context.Context, request *models.GetPromoCodesListReq) (*models.GetPromoCodesListResp, error) {
response, err := s.PromocodeRepository.Getlist(ctx, request)
if err != nil {
return nil, err
}
return response, nil
}
func (s *PromocodeService) Delete(ctx context.Context) error {
err := s.PromocodeRepository.Delete(ctx)
if err != nil {
return err
}
return nil
}
func (s *PromocodeService) Createpromocode(ctx context.Context, request *models.PromoCodeReq) (*models.PromoCode, error) {
response, err := s.PromocodeRepository.Createpromocode(ctx, request)
@ -45,33 +75,3 @@ func (s *PromocodeService) Createfastlink(ctx context.Context, request *models.C
return response, nil
}
func (s *PromocodeService) Delete(ctx context.Context) error {
err := s.PromocodeRepository.Delete(ctx)
if err != nil {
return err
}
return nil
}
func (s *PromocodeService) Activate(ctx context.Context, request *models.ActivateReq) (*models.ActivateResp, error) {
response, err := s.PromocodeRepository.Activate(ctx, request)
if err != nil {
return nil, err
}
return response, nil
}
func (s *PromocodeService) Getlist(ctx context.Context, request *models.GetPromoCodesListReq) (*models.GetPromoCodesListResp, error) {
response, err := s.PromocodeRepository.Getlist(ctx, request)
if err != nil {
return nil, err
}
return response, nil
}

@ -16,9 +16,9 @@ func NewRecoverService(repository *repository.RecoverRepository) *RecoverService
}
}
func (s *RecoverService) Readiness(ctx context.Context) error {
func (s *RecoverService) Liveness(ctx context.Context) error {
err := s.RecoverRepository.Readiness(ctx)
err := s.RecoverRepository.Liveness(ctx)
if err != nil {
return err
}
@ -46,9 +46,9 @@ func (s *RecoverService) Recoverylink(ctx context.Context) error {
}
func (s *RecoverService) Liveness(ctx context.Context) error {
func (s *RecoverService) Readiness(ctx context.Context) error {
err := s.RecoverRepository.Liveness(ctx)
err := s.RecoverRepository.Readiness(ctx)
if err != nil {
return err
}

@ -0,0 +1,5 @@
-- name: Getlist :many
SELECT *
FROM {{ .TableName }} AS a
ORDER BY a.created_at DESC
LIMIT $2 OFFSET ($1-1)*$2;

15
sqlc.yaml Normal file

@ -0,0 +1,15 @@
version: "1"
packages:
- name: "sqlcgen"
path: ".internal/sqlc/sqlcgen"
queries: ".internal/sqlc/db_query/queries.sql"
schema:
- "todo"
engine: "postgresql"
emit_json_tags: true
emit_db_tags: true
emit_prepared_queries: false
emit_interface: false
emit_exact_table_names: false
emit_empty_slices: false
sql_package: "database/sql"