commit dae23f28ebdba8e8931913f9be43311a0de1bc77 Author: majun Date: Mon Feb 2 14:17:13 2026 +0800 2026-02-02 14:00 上传第一版 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1fbf887 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* linguist-language=GO \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..18646b6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +.buildpath +.hgignore.swp +.project +.orig +.swp +.idea/ +.settings/ +.vscode/ +bin/ +**/.DS_Store +gf +main +main.exe +output/ +manifest/output/ +temp/ +temp.yaml +bin +**/config/config.yaml \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2a6e6e9 --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +ROOT_DIR = $(shell pwd) +NAMESPACE = "default" +DEPLOY_NAME = "template-single" +DOCKER_NAME = "template-single" + +include ./hack/hack-cli.mk +include ./hack/hack.mk \ No newline at end of file diff --git a/README.MD b/README.MD new file mode 100644 index 0000000..d36cedd --- /dev/null +++ b/README.MD @@ -0,0 +1,4 @@ +# GoFrame Template For SingleRepo + +Quick Start: +- https://goframe.org/quick \ No newline at end of file diff --git a/api/v1/cover.go b/api/v1/cover.go new file mode 100644 index 0000000..4923c0e --- /dev/null +++ b/api/v1/cover.go @@ -0,0 +1,10 @@ +package v1 + +type GetCoverImageReq struct { + Id int `json:"id" v:"required"` +} + +type UpdateCoverImageReq struct { + Id int `json:"id" v:"required"` + Url string `json:"url" v:"required"` +} diff --git a/api/v1/member.go b/api/v1/member.go new file mode 100644 index 0000000..ef844b2 --- /dev/null +++ b/api/v1/member.go @@ -0,0 +1,26 @@ +package v1 + +type InsertMemberReq struct { + Name string `json:"name" v:"required#姓名不可为空!"` + Code string `json:"code" v:"required#国家/地区代码不可为空!"` + Tel string `json:"tel" v:"required#电话号码不可为空!"` + Type int `json:"type"` + Url string `json:"url"` + WeChat string `json:"weChat" v:"required#微信ID不可为空!"` + Email string `json:"email" v:"required#邮箱号不可为空!"` +} + +type GetMemberListReq struct { + Page int `p:"page" d:"1"` + PageSize int `p:"page_size" d:"20"` +} + +type UpdateStateReq struct { + Id int `json:"id" v:"required"` + State int `json:"state" v:"required|integer|in:0,1"` +} + +type EditNoteReq struct { + Id int `json:"id" v:"required"` + Note string `json:"note"` +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..a7e3b19 --- /dev/null +++ b/go.mod @@ -0,0 +1,32 @@ +module UserRegister + +go 1.18 + +require ( + github.com/gogf/gf/contrib/drivers/mysql/v2 v2.4.1 + github.com/gogf/gf/v2 v2.7.1 +) + +require ( + github.com/BurntSushi/toml v1.3.2 // indirect + github.com/clbanning/mxj/v2 v2.7.0 // indirect + github.com/fatih/color v1.16.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/gorilla/websocket v1.5.1 // indirect + github.com/grokify/html-strip-tags-go v0.1.0 // indirect + github.com/magiconair/properties v1.8.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.9 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + go.opentelemetry.io/otel v1.14.0 // indirect + go.opentelemetry.io/otel/sdk v1.14.0 // indirect + go.opentelemetry.io/otel/trace v1.14.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/text v0.14.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..44c0363 --- /dev/null +++ b/go.sum @@ -0,0 +1,108 @@ +github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= +github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +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/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/gogf/gf/contrib/drivers/mysql/v2 v2.4.1 h1:ra6aO6+KUufCg9eK52oj6Q2SnCdrmkSZF9pd32EIivQ= +github.com/gogf/gf/contrib/drivers/mysql/v2 v2.4.1/go.mod h1:xubKxCvgbPt9r4yD3ecJoP3DC3sHqcJoMyS0eX837Zg= +github.com/gogf/gf/v2 v2.4.1/go.mod h1:tsbmtwcAl2chcYoq/fP9W2FZf06aw4i89X34nbSHo9Y= +github.com/gogf/gf/v2 v2.7.1 h1:Ukp7vzwh6VKnivEEx/xiMc61dL1HVZqCCHl//3GBRxc= +github.com/gogf/gf/v2 v2.7.1/go.mod h1:3oyGjyLHtSSo8kQ57Nj1TPdUNc0e2HS0A2J+KkXoW+I= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/grokify/html-strip-tags-go v0.0.1/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78= +github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4= +github.com/grokify/html-strip-tags-go v0.1.0/go.mod h1:ZdzgfHEzAfz9X6Xe5eBLVblWIxXfYSQ40S/VKrAOGpc= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +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.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +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.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= +go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM= +go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= +go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= +go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY= +go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= +go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= +go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M= +go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/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-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/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.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.8-0.20211105212822-18b340fc7af2/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +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= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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= diff --git a/hack/config.yaml b/hack/config.yaml new file mode 100644 index 0000000..08c5671 --- /dev/null +++ b/hack/config.yaml @@ -0,0 +1,18 @@ + +# CLI tool, only in development environment. +# https://goframe.org/pages/viewpage.action?pageId=3673173 +gfcli: + # 工具编译配置 + build: + name: "UserRegister" + path: "./bin" + arch: "amd64" + system: "linux" + packSrc: "manifest/i18n" + + # dao生成 + gen: + dao: + - link: "mysql:hcdbqb:xrZthbSyNpcseEsN@tcp(54.255.212.181:3306)/hcdbqb" + descriptionTag: true + noModelComment: true \ No newline at end of file diff --git a/hack/hack-cli.mk b/hack/hack-cli.mk new file mode 100644 index 0000000..f4e2ad2 --- /dev/null +++ b/hack/hack-cli.mk @@ -0,0 +1,20 @@ + +# Install/Update to the latest CLI tool. +.PHONY: cli +cli: + @set -e; \ + wget -O gf \ + https://github.com/gogf/gf/releases/latest/download/gf_$(shell go env GOOS)_$(shell go env GOARCH) && \ + chmod +x gf && \ + ./gf install -y && \ + rm ./gf + + +# Check and install CLI tool. +.PHONY: cli.install +cli.install: + @set -e; \ + gf -v > /dev/null 2>&1 || if [[ "$?" -ne "0" ]]; then \ + echo "GoFame CLI is not installed, start proceeding auto installation..."; \ + make cli; \ + fi; \ No newline at end of file diff --git a/hack/hack.mk b/hack/hack.mk new file mode 100644 index 0000000..2f68179 --- /dev/null +++ b/hack/hack.mk @@ -0,0 +1,75 @@ +.DEFAULT_GOAL := build + +# Update GoFrame and its CLI to latest stable version. +.PHONY: up +up: cli.install + @gf up -a + +# Build binary using configuration from hack/config.yaml. +.PHONY: build +build: cli.install + @gf build -ew + +# Parse api and generate controller/sdk. +.PHONY: ctrl +ctrl: cli.install + @gf gen ctrl + +# Generate Go files for DAO/DO/Entity. +.PHONY: dao +dao: cli.install + @gf gen dao + +# Parse current project go files and generate enums go file. +.PHONY: enums +enums: cli.install + @gf gen enums + +# Generate Go files for Service. +.PHONY: service +service: cli.install + @gf gen service + + +# Build docker image. +.PHONY: image +image: cli.install + $(eval _TAG = $(shell git rev-parse --short HEAD)) +ifneq (, $(shell git status --porcelain 2>/dev/null)) + $(eval _TAG = $(_TAG).dirty) +endif + $(eval _TAG = $(if ${TAG}, ${TAG}, $(_TAG))) + $(eval _PUSH = $(if ${PUSH}, ${PUSH}, )) + @gf docker ${_PUSH} -tn $(DOCKER_NAME):${_TAG}; + + +# Build docker image and automatically push to docker repo. +.PHONY: image.push +image.push: cli.install + @make image PUSH=-p; + + +# Deploy image and yaml to current kubectl environment. +.PHONY: deploy +deploy: cli.install + $(eval _TAG = $(if ${TAG}, ${TAG}, develop)) + + @set -e; \ + mkdir -p $(ROOT_DIR)/temp/kustomize;\ + cd $(ROOT_DIR)/manifest/deploy/kustomize/overlays/${_ENV};\ + kustomize build > $(ROOT_DIR)/temp/kustomize.yaml;\ + kubectl apply -f $(ROOT_DIR)/temp/kustomize.yaml; \ + if [ $(DEPLOY_NAME) != "" ]; then \ + kubectl patch -n $(NAMESPACE) deployment/$(DEPLOY_NAME) -p "{\"spec\":{\"template\":{\"metadata\":{\"labels\":{\"date\":\"$(shell date +%s)\"}}}}}"; \ + fi; + + +# Parsing protobuf files and generating go files. +.PHONY: pb +pb: cli.install + @gf gen pb + +# Generate protobuf files for database tables. +.PHONY: pbentity +pbentity: cli.install + @gf gen pbentity \ No newline at end of file diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go new file mode 100644 index 0000000..8bbfd1d --- /dev/null +++ b/internal/cmd/cmd.go @@ -0,0 +1,35 @@ +package cmd + +import ( + "UserRegister/internal/controller" + "UserRegister/internal/service" + "context" + + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/net/ghttp" + "github.com/gogf/gf/v2/os/gcmd" +) + +var ( + Main = gcmd.Command{ + Name: "main", + Usage: "main", + Brief: "start http server", + Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { + s := g.Server() + s.Group("/api", func(group *ghttp.RouterGroup) { + group.Middleware( + service.Middleware().CORS, + ) + group.POST("/member/getList", controller.Member.GetMmberList) + group.POST("/member/insert", controller.Member.InsertMember) + group.POST("/member/updateState", controller.Member.UpdateState) + group.POST("/member/editNote", controller.Member.EditNote) + group.POST("/cover/getImage", controller.Cover.GetCoverImage) + group.POST("/cover/updateImage", controller.Cover.UpdateCoverImage) + }) + s.Run() + return nil + }, + } +) diff --git a/internal/consts/consts.go b/internal/consts/consts.go new file mode 100644 index 0000000..d709a2b --- /dev/null +++ b/internal/consts/consts.go @@ -0,0 +1 @@ +package consts diff --git a/internal/controller/cover.go b/internal/controller/cover.go new file mode 100644 index 0000000..4cbbd3f --- /dev/null +++ b/internal/controller/cover.go @@ -0,0 +1,36 @@ +package controller + +import ( + v1 "UserRegister/api/v1" + "UserRegister/internal/service" + "UserRegister/utility/response" + "github.com/gogf/gf/v2/net/ghttp" +) + +var Cover = cCover{} + +type cCover struct{} + +func (c *cCover) GetCoverImage(r *ghttp.Request) { + var req *v1.GetCoverImageReq + if err := r.Parse(&req); err != nil { + response.JsonExit(r, 400, err.Error()) + } + res, err := service.Cover().GetCoverImage(req) + if err != nil { + response.JsonExit(r, 400, err.Error()) + } + response.JsonExit(r, 200, "success", res) +} + +func (c *cCover) UpdateCoverImage(r *ghttp.Request) { + var req *v1.UpdateCoverImageReq + if err := r.Parse(&req); err != nil { + response.JsonExit(r, 400, err.Error()) + } + err := service.Cover().UpdateCoverImage(req) + if err != nil { + response.JsonExit(r, 400, err.Error()) + } + response.JsonExit(r, 200, "success") +} diff --git a/internal/controller/member.go b/internal/controller/member.go new file mode 100644 index 0000000..a32d448 --- /dev/null +++ b/internal/controller/member.go @@ -0,0 +1,64 @@ +package controller + +import ( + v1 "UserRegister/api/v1" + "UserRegister/internal/service" + "UserRegister/utility/response" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/net/ghttp" +) + +var Member = cMember{} + +type cMember struct{} + +func (c *cMember) InsertMember(r *ghttp.Request) { + var req *v1.InsertMemberReq + if err := r.Parse(&req); err != nil { + response.JsonExit(r, 400, err.Error()) + } + err := service.Member().InsertMember(req) + if err != nil { + response.JsonExit(r, 400, err.Error()) + } + response.JsonExit(r, 200, "success") +} + +func (c *cMember) GetMmberList(r *ghttp.Request) { + var req *v1.GetMemberListReq + if err := r.Parse(&req); err != nil { + response.JsonExit(r, 400, err.Error()) + } + res, total, err := service.Member().GetMemberList(req) + if err != nil { + response.JsonExit(r, 400, err.Error()) + } + response.JsonExit(r, 200, "success", g.Map{ + "list": res, + "total": total, + }) +} + +func (c *cMember) UpdateState(r *ghttp.Request) { + var req *v1.UpdateStateReq + if err := r.Parse(&req); err != nil { + response.JsonExit(r, 400, err.Error()) + } + err := service.Member().UpdateState(req) + if err != nil { + response.JsonExit(r, 400, err.Error()) + } + response.JsonExit(r, 200, "success") +} + +func (c *cMember) EditNote(r *ghttp.Request) { + var req *v1.EditNoteReq + if err := r.Parse(&req); err != nil { + response.JsonExit(r, 400, err.Error()) + } + err := service.Member().EditNote(req) + if err != nil { + response.JsonExit(r, 400, err.Error()) + } + response.JsonExit(r, 200, "success") +} diff --git a/internal/dao/.gitkeep b/internal/dao/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/dao/cover_img.go b/internal/dao/cover_img.go new file mode 100644 index 0000000..413b25c --- /dev/null +++ b/internal/dao/cover_img.go @@ -0,0 +1,27 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package dao + +import ( + "UserRegister/internal/dao/internal" +) + +// internalCoverImgDao is internal type for wrapping internal DAO implements. +type internalCoverImgDao = *internal.CoverImgDao + +// coverImgDao is the data access object for table cover_img. +// You can define custom methods on it to extend its functionality as you wish. +type coverImgDao struct { + internalCoverImgDao +} + +var ( + // CoverImg is globally public accessible object for table cover_img operations. + CoverImg = coverImgDao{ + internal.NewCoverImgDao(), + } +) + +// Fill with you ideas below. diff --git a/internal/dao/internal/cover_img.go b/internal/dao/internal/cover_img.go new file mode 100644 index 0000000..bfcb287 --- /dev/null +++ b/internal/dao/internal/cover_img.go @@ -0,0 +1,81 @@ +// ========================================================================== +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package internal + +import ( + "context" + + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/frame/g" +) + +// CoverImgDao is the data access object for table cover_img. +type CoverImgDao struct { + table string // table is the underlying table name of the DAO. + group string // group is the database configuration group name of current DAO. + columns CoverImgColumns // columns contains all the column names of Table for convenient usage. +} + +// CoverImgColumns defines and stores column names for table cover_img. +type CoverImgColumns struct { + Id string // 主键id + Name string // 图片名称 + Url string // 图片链接 + CreatedAt string // 添加时间 + UpdatedAt string // 修改时间 +} + +// coverImgColumns holds the columns for table cover_img. +var coverImgColumns = CoverImgColumns{ + Id: "id", + Name: "name", + Url: "url", + CreatedAt: "created_at", + UpdatedAt: "updated_at", +} + +// NewCoverImgDao creates and returns a new DAO object for table data access. +func NewCoverImgDao() *CoverImgDao { + return &CoverImgDao{ + group: "default", + table: "cover_img", + columns: coverImgColumns, + } +} + +// DB retrieves and returns the underlying raw database management object of current DAO. +func (dao *CoverImgDao) DB() gdb.DB { + return g.DB(dao.group) +} + +// Table returns the table name of current dao. +func (dao *CoverImgDao) Table() string { + return dao.table +} + +// Columns returns all column names of current dao. +func (dao *CoverImgDao) Columns() CoverImgColumns { + return dao.columns +} + +// Group returns the configuration group name of database of current dao. +func (dao *CoverImgDao) Group() string { + return dao.group +} + +// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation. +func (dao *CoverImgDao) Ctx(ctx context.Context) *gdb.Model { + return dao.DB().Model(dao.table).Safe().Ctx(ctx) +} + +// Transaction wraps the transaction logic using function f. +// It rollbacks the transaction and returns the error from function f if it returns non-nil error. +// It commits the transaction and returns nil if function f returns nil. +// +// Note that, you should not Commit or Rollback the transaction in function f +// as it is automatically handled by this function. +func (dao *CoverImgDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) { + return dao.Ctx(ctx).Transaction(ctx, f) +} diff --git a/internal/dao/internal/member_info.go b/internal/dao/internal/member_info.go new file mode 100644 index 0000000..6cfbaf0 --- /dev/null +++ b/internal/dao/internal/member_info.go @@ -0,0 +1,95 @@ +// ========================================================================== +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package internal + +import ( + "context" + + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/frame/g" +) + +// MemberInfoDao is the data access object for table member_info. +type MemberInfoDao struct { + table string // table is the underlying table name of the DAO. + group string // group is the database configuration group name of current DAO. + columns MemberInfoColumns // columns contains all the column names of Table for convenient usage. +} + +// MemberInfoColumns defines and stores column names for table member_info. +type MemberInfoColumns struct { + Id string // 主键id + Name string // 姓名 + Code string // 国家/地区代码 + Telephone string // 电话号码 + Wechat string // 微信ID + Email string // 邮箱 + CreatedAt string // 添加时间 + Type string // 注册来源(0其他,1视频,2直播,3帖子) + Url string // 来源地址 + UrlMd5 string // 来源地址(MD5加密) + IsRelated string // 是否联系 + Note string // 备注 +} + +// memberInfoColumns holds the columns for table member_info. +var memberInfoColumns = MemberInfoColumns{ + Id: "id", + Name: "name", + Code: "code", + Telephone: "telephone", + Wechat: "wechat", + Email: "email", + CreatedAt: "created_at", + Type: "type", + Url: "url", + UrlMd5: "url_md5", + IsRelated: "is_related", + Note: "note", +} + +// NewMemberInfoDao creates and returns a new DAO object for table data access. +func NewMemberInfoDao() *MemberInfoDao { + return &MemberInfoDao{ + group: "default", + table: "member_info", + columns: memberInfoColumns, + } +} + +// DB retrieves and returns the underlying raw database management object of current DAO. +func (dao *MemberInfoDao) DB() gdb.DB { + return g.DB(dao.group) +} + +// Table returns the table name of current dao. +func (dao *MemberInfoDao) Table() string { + return dao.table +} + +// Columns returns all column names of current dao. +func (dao *MemberInfoDao) Columns() MemberInfoColumns { + return dao.columns +} + +// Group returns the configuration group name of database of current dao. +func (dao *MemberInfoDao) Group() string { + return dao.group +} + +// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation. +func (dao *MemberInfoDao) Ctx(ctx context.Context) *gdb.Model { + return dao.DB().Model(dao.table).Safe().Ctx(ctx) +} + +// Transaction wraps the transaction logic using function f. +// It rollbacks the transaction and returns the error from function f if it returns non-nil error. +// It commits the transaction and returns nil if function f returns nil. +// +// Note that, you should not Commit or Rollback the transaction in function f +// as it is automatically handled by this function. +func (dao *MemberInfoDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) { + return dao.Ctx(ctx).Transaction(ctx, f) +} diff --git a/internal/dao/member_info.go b/internal/dao/member_info.go new file mode 100644 index 0000000..05ced3e --- /dev/null +++ b/internal/dao/member_info.go @@ -0,0 +1,27 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package dao + +import ( + "UserRegister/internal/dao/internal" +) + +// internalMemberInfoDao is internal type for wrapping internal DAO implements. +type internalMemberInfoDao = *internal.MemberInfoDao + +// memberInfoDao is the data access object for table member_info. +// You can define custom methods on it to extend its functionality as you wish. +type memberInfoDao struct { + internalMemberInfoDao +} + +var ( + // MemberInfo is globally public accessible object for table member_info operations. + MemberInfo = memberInfoDao{ + internal.NewMemberInfoDao(), + } +) + +// Fill with you ideas below. diff --git a/internal/logic/.gitkeep b/internal/logic/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/logic/cover/cover.go b/internal/logic/cover/cover.go new file mode 100644 index 0000000..3ac4bb1 --- /dev/null +++ b/internal/logic/cover/cover.go @@ -0,0 +1,38 @@ +package cover + +import ( + v1 "UserRegister/api/v1" + "UserRegister/internal/service" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/util/gconv" +) + +type sCover struct{} + +func init() { + service.RegisterCover(NewCover()) +} + +func NewCover() *sCover { + return &sCover{} +} + +func (s *sCover) GetCoverImage(req *v1.GetCoverImageReq) (res string, err error) { + result, err := g.Model("cover_img").Fields("url"). + WherePri(req.Id).Value() + if err != nil { + return + } + res = gconv.String(result) + return +} + +func (s *sCover) UpdateCoverImage(req *v1.UpdateCoverImageReq) (err error) { + _, err = g.Model("cover_img").Data(g.Map{ + "url": req.Url, + }).WherePri(req.Id).Update() + if err != nil { + return + } + return +} diff --git a/internal/logic/logic.go b/internal/logic/logic.go new file mode 100644 index 0000000..6f902ac --- /dev/null +++ b/internal/logic/logic.go @@ -0,0 +1,11 @@ +// ========================================================================== +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package logic + +import ( + _ "UserRegister/internal/logic/cover" + _ "UserRegister/internal/logic/member" + _ "UserRegister/internal/logic/middleware" +) diff --git a/internal/logic/member/member.go b/internal/logic/member/member.go new file mode 100644 index 0000000..100a8e7 --- /dev/null +++ b/internal/logic/member/member.go @@ -0,0 +1,69 @@ +package member + +import ( + v1 "UserRegister/api/v1" + "UserRegister/internal/model/entity" + "UserRegister/internal/service" + "crypto/md5" + "fmt" + "github.com/gogf/gf/v2/frame/g" +) + +type sMember struct{} + +func init() { + service.RegisterMember(NewMember()) +} + +func NewMember() *sMember { + return &sMember{} +} + +func (s *sMember) InsertMember(req *v1.InsertMemberReq) (err error) { + _, err = g.Model("member_info").Data(g.Map{ + "name": req.Name, + "code": req.Code, + "telephone": req.Tel, + "type": req.Type, + "url": req.Url, + "url_md5": fmt.Sprintf("%x", md5.Sum([]byte(req.Url))), + "wechat": req.WeChat, + "email": req.Email, + }).Insert() + if err != nil { + return + } + return +} + +func (s *sMember) GetMemberList(req *v1.GetMemberListReq) (res []entity.MemberInfo, total int, err error) { + err = g.Model("member_info").OrderDesc("created_at"). + Page(req.Page, req.PageSize).ScanAndCount(&res, &total, false) + if err != nil { + return + } + if len(res) == 0 { + return []entity.MemberInfo{}, 0, nil + } + return +} + +func (s *sMember) UpdateState(req *v1.UpdateStateReq) (err error) { + _, err = g.Model("member_info").Data(g.Map{ + "is_related": req.State, + }).WherePri(req.Id).Update() + if err != nil { + return + } + return +} + +func (s *sMember) EditNote(req *v1.EditNoteReq) (err error) { + _, err = g.Model("member_info").Data(g.Map{ + "note": req.Note, + }).WherePri(req.Id).Update() + if err != nil { + return + } + return +} diff --git a/internal/logic/middleware/middleware.go b/internal/logic/middleware/middleware.go new file mode 100644 index 0000000..888138d --- /dev/null +++ b/internal/logic/middleware/middleware.go @@ -0,0 +1,22 @@ +package middleware + +import ( + "UserRegister/internal/service" + + "github.com/gogf/gf/v2/net/ghttp" +) + +type sMiddleware struct{} + +func init() { + service.RegisterMiddleware(New()) +} + +func New() *sMiddleware { + return &sMiddleware{} +} + +func (s *sMiddleware) CORS(r *ghttp.Request) { + r.Response.CORSDefault() + r.Middleware.Next() +} diff --git a/internal/model/.gitkeep b/internal/model/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/model/do/.gitkeep b/internal/model/do/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/model/do/cover_img.go b/internal/model/do/cover_img.go new file mode 100644 index 0000000..4c25291 --- /dev/null +++ b/internal/model/do/cover_img.go @@ -0,0 +1,20 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package do + +import ( + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gtime" +) + +// CoverImg is the golang structure of table cover_img for DAO operations like Where/Data. +type CoverImg struct { + g.Meta `orm:"table:cover_img, do:true"` + Id interface{} // 主键id + Name interface{} // 图片名称 + Url interface{} // 图片链接 + CreatedAt *gtime.Time // 添加时间 + UpdatedAt *gtime.Time // 修改时间 +} diff --git a/internal/model/do/member_info.go b/internal/model/do/member_info.go new file mode 100644 index 0000000..8859d34 --- /dev/null +++ b/internal/model/do/member_info.go @@ -0,0 +1,27 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package do + +import ( + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gtime" +) + +// MemberInfo is the golang structure of table member_info for DAO operations like Where/Data. +type MemberInfo struct { + g.Meta `orm:"table:member_info, do:true"` + Id interface{} // 主键id + Name interface{} // 姓名 + Code interface{} // 国家/地区代码 + Telephone interface{} // 电话号码 + Wechat interface{} // 微信ID + Email interface{} // 邮箱 + CreatedAt *gtime.Time // 添加时间 + Type interface{} // 注册来源(0其他,1视频,2直播,3帖子) + Url interface{} // 来源地址 + UrlMd5 interface{} // 来源地址(MD5加密) + IsRelated interface{} // 是否联系 + Note interface{} // 备注 +} diff --git a/internal/model/entity/.gitkeep b/internal/model/entity/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/model/entity/cover_img.go b/internal/model/entity/cover_img.go new file mode 100644 index 0000000..c495f29 --- /dev/null +++ b/internal/model/entity/cover_img.go @@ -0,0 +1,18 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package entity + +import ( + "github.com/gogf/gf/v2/os/gtime" +) + +// CoverImg is the golang structure for table cover_img. +type CoverImg struct { + Id int `json:"id" orm:"id" description:"主键id"` + Name string `json:"name" orm:"name" description:"图片名称"` + Url string `json:"url" orm:"url" description:"图片链接"` + CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"添加时间"` + UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"修改时间"` +} diff --git a/internal/model/entity/member_info.go b/internal/model/entity/member_info.go new file mode 100644 index 0000000..420246b --- /dev/null +++ b/internal/model/entity/member_info.go @@ -0,0 +1,25 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package entity + +import ( + "github.com/gogf/gf/v2/os/gtime" +) + +// MemberInfo is the golang structure for table member_info. +type MemberInfo struct { + Id int `json:"id" orm:"id" description:"主键id"` + Name string `json:"name" orm:"name" description:"姓名"` + Code string `json:"code" orm:"code" description:"国家/地区代码"` + Telephone string `json:"telephone" orm:"telephone" description:"电话号码"` + Wechat string `json:"wechat" orm:"wechat" description:"微信ID"` + Email string `json:"email" orm:"email" description:"邮箱"` + CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"添加时间"` + Type int `json:"type" orm:"type" description:"注册来源(0其他,1视频,2直播,3帖子)"` + Url string `json:"url" orm:"url" description:"来源地址"` + UrlMd5 string `json:"urlMd5" orm:"url_md5" description:"来源地址(MD5加密)"` + IsRelated int `json:"isRelated" orm:"is_related" description:"是否联系"` + Note string `json:"note" orm:"note" description:"备注"` +} diff --git a/internal/packed/packed.go b/internal/packed/packed.go new file mode 100644 index 0000000..e20ab1e --- /dev/null +++ b/internal/packed/packed.go @@ -0,0 +1 @@ +package packed diff --git a/internal/service/.gitkeep b/internal/service/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/internal/service/cover.go b/internal/service/cover.go new file mode 100644 index 0000000..78fc065 --- /dev/null +++ b/internal/service/cover.go @@ -0,0 +1,25 @@ +package service + +import v1 "UserRegister/api/v1" + +type ( + ICover interface { + GetCoverImage(req *v1.GetCoverImageReq) (res string, err error) + UpdateCoverImage(req *v1.UpdateCoverImageReq) (err error) + } +) + +var ( + localCover ICover +) + +func Cover() ICover { + if localCover == nil { + panic("implement not found for interface ICover, forgot register?") + } + return localCover +} + +func RegisterCover(i ICover) { + localCover = i +} diff --git a/internal/service/member.go b/internal/service/member.go new file mode 100644 index 0000000..0c72691 --- /dev/null +++ b/internal/service/member.go @@ -0,0 +1,30 @@ +package service + +import ( + v1 "UserRegister/api/v1" + "UserRegister/internal/model/entity" +) + +type ( + IMember interface { + InsertMember(req *v1.InsertMemberReq) (err error) + GetMemberList(req *v1.GetMemberListReq) (res []entity.MemberInfo, total int, err error) + UpdateState(req *v1.UpdateStateReq) (err error) + EditNote(req *v1.EditNoteReq) (err error) + } +) + +var ( + localMember IMember +) + +func Member() IMember { + if localMember == nil { + panic("implement not found for interface IMember, forgot register?") + } + return localMember +} + +func RegisterMember(i IMember) { + localMember = i +} diff --git a/internal/service/middleware.go b/internal/service/middleware.go new file mode 100644 index 0000000..a46aaaf --- /dev/null +++ b/internal/service/middleware.go @@ -0,0 +1,31 @@ +// ================================================================================ +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// You can delete these comments if you wish manually maintain this interface file. +// ================================================================================ + +package service + +import ( + "github.com/gogf/gf/v2/net/ghttp" +) + +type ( + IMiddleware interface { + CORS(r *ghttp.Request) + } +) + +var ( + localMiddleware IMiddleware +) + +func Middleware() IMiddleware { + if localMiddleware == nil { + panic("implement not found for interface IMiddleware, forgot register?") + } + return localMiddleware +} + +func RegisterMiddleware(i IMiddleware) { + localMiddleware = i +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..c4c0214 --- /dev/null +++ b/main.go @@ -0,0 +1,17 @@ +package main + +import ( + _ "UserRegister/internal/packed" + + _ "UserRegister/internal/logic" + + _ "github.com/gogf/gf/contrib/drivers/mysql/v2" + + "github.com/gogf/gf/v2/os/gctx" + + "UserRegister/internal/cmd" +) + +func main() { + cmd.Main.Run(gctx.GetInitCtx()) +} diff --git a/manifest/deploy/kustomize/base/deployment.yaml b/manifest/deploy/kustomize/base/deployment.yaml new file mode 100644 index 0000000..28f1d69 --- /dev/null +++ b/manifest/deploy/kustomize/base/deployment.yaml @@ -0,0 +1,21 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: template-single + labels: + app: template-single +spec: + replicas: 1 + selector: + matchLabels: + app: template-single + template: + metadata: + labels: + app: template-single + spec: + containers: + - name : main + image: template-single + imagePullPolicy: Always + diff --git a/manifest/deploy/kustomize/base/kustomization.yaml b/manifest/deploy/kustomize/base/kustomization.yaml new file mode 100644 index 0000000..302d92d --- /dev/null +++ b/manifest/deploy/kustomize/base/kustomization.yaml @@ -0,0 +1,8 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- deployment.yaml +- service.yaml + + + diff --git a/manifest/deploy/kustomize/base/service.yaml b/manifest/deploy/kustomize/base/service.yaml new file mode 100644 index 0000000..608771c --- /dev/null +++ b/manifest/deploy/kustomize/base/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: template-single +spec: + ports: + - port: 80 + protocol: TCP + targetPort: 8000 + selector: + app: template-single + diff --git a/manifest/deploy/kustomize/overlays/develop/configmap.yaml b/manifest/deploy/kustomize/overlays/develop/configmap.yaml new file mode 100644 index 0000000..3b1d0af --- /dev/null +++ b/manifest/deploy/kustomize/overlays/develop/configmap.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: template-single-configmap +data: + config.yaml: | + server: + address: ":8000" + openapiPath: "/api.json" + swaggerPath: "/swagger" + + logger: + level : "all" + stdout: true diff --git a/manifest/deploy/kustomize/overlays/develop/deployment.yaml b/manifest/deploy/kustomize/overlays/develop/deployment.yaml new file mode 100644 index 0000000..04e4851 --- /dev/null +++ b/manifest/deploy/kustomize/overlays/develop/deployment.yaml @@ -0,0 +1,10 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: template-single +spec: + template: + spec: + containers: + - name : main + image: template-single:develop \ No newline at end of file diff --git a/manifest/deploy/kustomize/overlays/develop/kustomization.yaml b/manifest/deploy/kustomize/overlays/develop/kustomization.yaml new file mode 100644 index 0000000..4731c47 --- /dev/null +++ b/manifest/deploy/kustomize/overlays/develop/kustomization.yaml @@ -0,0 +1,14 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: +- ../../base +- configmap.yaml + +patchesStrategicMerge: +- deployment.yaml + +namespace: default + + + diff --git a/manifest/docker/Dockerfile b/manifest/docker/Dockerfile new file mode 100644 index 0000000..d3abe8f --- /dev/null +++ b/manifest/docker/Dockerfile @@ -0,0 +1,16 @@ +FROM loads/alpine:3.8 + +############################################################################### +# INSTALLATION +############################################################################### + +ENV WORKDIR /app +ADD resource $WORKDIR/ +ADD ./temp/linux_amd64/main $WORKDIR/main +RUN chmod +x $WORKDIR/main + +############################################################################### +# START +############################################################################### +WORKDIR $WORKDIR +CMD ./main diff --git a/manifest/docker/docker.sh b/manifest/docker/docker.sh new file mode 100644 index 0000000..ff393f9 --- /dev/null +++ b/manifest/docker/docker.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +# This shell is executed before docker build. + + + + + diff --git a/manifest/i18n/.gitkeep b/manifest/i18n/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/manifest/protobuf/.keep-if-necessary b/manifest/protobuf/.keep-if-necessary new file mode 100644 index 0000000..e69de29 diff --git a/resource/public/html/.gitkeep b/resource/public/html/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/resource/public/plugin/.gitkeep b/resource/public/plugin/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/resource/public/resource/css/.gitkeep b/resource/public/resource/css/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/resource/public/resource/image/.gitkeep b/resource/public/resource/image/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/resource/public/resource/js/.gitkeep b/resource/public/resource/js/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/resource/template/.gitkeep b/resource/template/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/utility/.gitkeep b/utility/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/utility/response/response.go b/utility/response/response.go new file mode 100644 index 0000000..7dddb55 --- /dev/null +++ b/utility/response/response.go @@ -0,0 +1,39 @@ +package response + +import ( + "net/http" + + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/net/ghttp" +) + +// JsonRes 数据返回通用JSON数据结构 +type JsonRes struct { + Code int `json:"code"` // 错误码((0:成功, 1:失败, >1:错误码)) + Message string `json:"msg"` // 提示信息 + Data interface{} `json:"data"` // 返回数据(业务接口定义具体数据结构) +} + +// Json 返回标准JSON数据。 +func Json(r *ghttp.Request, code int, message string, data ...interface{}) { + var responseData interface{} + if len(data) > 0 { + responseData = data[0] + } else { + responseData = g.Map{} + } + r.Response.WriteJson(JsonRes{ + Code: code, + Message: message, + Data: responseData, + }) +} + +// JsonExit 返回标准JSON数据并退出当前HTTP执行函数。 +func JsonExit(r *ghttp.Request, code int, message string, data ...interface{}) { + if code == http.StatusBadRequest { + g.Log().Error(r.Context(), code, message) + } + Json(r, code, message, data...) + r.Exit() +}