Browse Source

gf框架搭建

master
maziyang 2 weeks ago
commit
e6634cd9f3
  1. 1
      .gitattributes
  2. 19
      .gitignore
  3. 7
      Makefile
  4. 4
      README.MD
  5. 15
      api/hello/hello.go
  6. 12
      api/hello/v1/hello.go
  7. 17
      api/vote_poll/v1/vote_poll.go
  8. 38
      go.mod
  9. 77
      go.sum
  10. 14
      hack/config.yaml
  11. 20
      hack/hack-cli.mk
  12. 75
      hack/hack.mk
  13. 30
      internal/cmd/cmd.go
  14. 1
      internal/consts/consts.go
  15. 5
      internal/controller/hello/hello.go
  16. 15
      internal/controller/hello/hello_new.go
  17. 13
      internal/controller/hello/hello_v1_hello.go
  18. 0
      internal/dao/.gitkeep
  19. 87
      internal/dao/internal/post.go
  20. 85
      internal/dao/internal/remain_vote_number.go
  21. 89
      internal/dao/internal/user.go
  22. 85
      internal/dao/internal/vote_option.go
  23. 91
      internal/dao/internal/vote_poll.go
  24. 89
      internal/dao/internal/vote_record.go
  25. 22
      internal/dao/post.go
  26. 22
      internal/dao/remain_vote_number.go
  27. 22
      internal/dao/user.go
  28. 22
      internal/dao/vote_option.go
  29. 22
      internal/dao/vote_poll.go
  30. 22
      internal/dao/vote_record.go
  31. 0
      internal/logic/.gitkeep
  32. 0
      internal/model/.gitkeep
  33. 0
      internal/model/do/.gitkeep
  34. 20
      internal/model/do/post.go
  35. 19
      internal/model/do/remain_vote_number.go
  36. 21
      internal/model/do/user.go
  37. 18
      internal/model/do/vote_option.go
  38. 22
      internal/model/do/vote_poll.go
  39. 21
      internal/model/do/vote_record.go
  40. 0
      internal/model/entity/.gitkeep
  41. 18
      internal/model/entity/post.go
  42. 17
      internal/model/entity/remain_vote_number.go
  43. 19
      internal/model/entity/user.go
  44. 13
      internal/model/entity/vote_option.go
  45. 20
      internal/model/entity/vote_poll.go
  46. 19
      internal/model/entity/vote_record.go
  47. 1
      internal/packed/packed.go
  48. 0
      internal/service/.gitkeep
  49. 15
      main.go
  50. 21
      manifest/deploy/kustomize/base/deployment.yaml
  51. 8
      manifest/deploy/kustomize/base/kustomization.yaml
  52. 12
      manifest/deploy/kustomize/base/service.yaml
  53. 14
      manifest/deploy/kustomize/overlays/develop/configmap.yaml
  54. 10
      manifest/deploy/kustomize/overlays/develop/deployment.yaml
  55. 14
      manifest/deploy/kustomize/overlays/develop/kustomization.yaml
  56. 16
      manifest/docker/Dockerfile
  57. 8
      manifest/docker/docker.sh
  58. 0
      manifest/i18n/.gitkeep
  59. 0
      manifest/protobuf/.keep-if-necessary
  60. 0
      resource/public/html/.gitkeep
  61. 0
      resource/public/plugin/.gitkeep
  62. 0
      resource/public/resource/css/.gitkeep
  63. 0
      resource/public/resource/image/.gitkeep
  64. 0
      resource/public/resource/js/.gitkeep
  65. 0
      resource/template/.gitkeep
  66. 0
      utility/.gitkeep

1
.gitattributes

@ -0,0 +1 @@
* linguist-language=GO

19
.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

7
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

4
README.MD

@ -0,0 +1,4 @@
# GoFrame Template For SingleRepo
Quick Start:
- https://goframe.org/quick

15
api/hello/hello.go

@ -0,0 +1,15 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package hello
import (
"context"
"practice_ArticleVote_Go/api/hello/v1"
)
type IHelloV1 interface {
Hello(ctx context.Context, req *v1.HelloReq) (res *v1.HelloRes, err error)
}

12
api/hello/v1/hello.go

@ -0,0 +1,12 @@
package v1
import (
"github.com/gogf/gf/v2/frame/g"
)
type HelloReq struct {
g.Meta `path:"/hello" tags:"Hello" method:"get" summary:"You first hello api"`
}
type HelloRes struct {
g.Meta `mime:"text/html" example:"string"`
}

17
api/vote_poll/v1/vote_poll.go

@ -0,0 +1,17 @@
package v1
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
)
type CreateVoteReq struct {
g.Meta `path:"/createVote" method:"post" tags:"新增投票"`
PostId int64 `v:"required" dc:"文章/视频 ID"`
VoteTitle string `v:"required" dc:"投票标题"`
MultiSelection int `v:"required" dc:"支持多选"`
DeadlineTime *gtime.Time `v:"required" dc:"截止时间"`
}
type CreateVoteResp struct {
Id int64 `json:"id" dc:"投票 id"`
}

38
go.mod

@ -0,0 +1,38 @@
module practice_ArticleVote_Go
go 1.22
toolchain go1.23.10
require (
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.0
github.com/gogf/gf/v2 v2.9.0
)
require (
github.com/BurntSushi/toml v1.4.0 // indirect
github.com/clbanning/mxj/v2 v2.7.0 // indirect
github.com/emirpasic/gods v1.18.1 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-sql-driver/mysql v1.7.1 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
github.com/grokify/html-strip-tags-go v0.1.0 // indirect
github.com/magiconair/properties v1.8.9 // 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.16 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
go.opentelemetry.io/otel v1.32.0 // indirect
go.opentelemetry.io/otel/metric v1.32.0 // indirect
go.opentelemetry.io/otel/sdk v1.32.0 // indirect
go.opentelemetry.io/otel/trace v1.32.0 // indirect
golang.org/x/net v0.32.0 // indirect
golang.org/x/sys v0.28.0 // indirect
golang.org/x/text v0.21.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

77
go.sum

@ -0,0 +1,77 @@
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/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.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
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.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
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.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.0 h1:1f7EeD0lfPHoXfaJDSL7cxRcSRelbsAKgF3MGXY+Uyo=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.0/go.mod h1:tToO1PjGkLIR+9DbJ0wrKicYma0H/EUHXOpwel6Dw+0=
github.com/gogf/gf/v2 v2.9.0 h1:semN5Q5qGjDQEv4620VzxcJzJlSD07gmyJ9Sy9zfbHk=
github.com/gogf/gf/v2 v2.9.0/go.mod h1:sWGQw+pLILtuHmbOxoe0D+0DdaXxbleT57axOLH2vKI=
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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
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/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
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.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/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
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/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
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.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

14
hack/config.yaml

@ -0,0 +1,14 @@
# CLI tool, only in development environment.
# https://goframe.org/docs/cli
gfcli:
gen:
dao:
- link: "mysql:root:123456@tcp(127.0.0.1:3306)/link_test"
descriptionTag: true
docker:
build: "-a amd64 -s linux -p temp -ew"
tagPrefixes:
- my.image.pub/my-app

20
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;

75
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

30
internal/cmd/cmd.go

@ -0,0 +1,30 @@
package cmd
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gcmd"
"practice_ArticleVote_Go/internal/controller/hello"
)
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("/", func(group *ghttp.RouterGroup) {
group.Middleware(ghttp.MiddlewareHandlerResponse)
group.Bind(
hello.NewV1(),
)
})
s.Run()
return nil
},
}
)

1
internal/consts/consts.go

@ -0,0 +1 @@
package consts

5
internal/controller/hello/hello.go

@ -0,0 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package hello

15
internal/controller/hello/hello_new.go

@ -0,0 +1,15 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package hello
import (
"practice_ArticleVote_Go/api/hello"
)
type ControllerV1 struct{}
func NewV1() hello.IHelloV1 {
return &ControllerV1{}
}

13
internal/controller/hello/hello_v1_hello.go

@ -0,0 +1,13 @@
package hello
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"practice_ArticleVote_Go/api/hello/v1"
)
func (c *ControllerV1) Hello(ctx context.Context, req *v1.HelloReq) (res *v1.HelloRes, err error) {
g.RequestFromCtx(ctx).Response.Writeln("Hello World!")
return
}

0
internal/dao/.gitkeep

87
internal/dao/internal/post.go

@ -0,0 +1,87 @@
// ==========================================================================
// 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"
)
// PostDao is the data access object for the table post.
type PostDao struct {
table string // table is the underlying table name of the DAO.
group string // group is the database configuration group name of the current DAO.
columns PostColumns // columns contains all the column names of Table for convenient usage.
handlers []gdb.ModelHandler // handlers for customized model modification.
}
// PostColumns defines and stores column names for the table post.
type PostColumns struct {
Id string //
PostTitle string // 文章/视频标题
PostContent string // 文章/视频内容
VoteStatus string // 是否发起投票:1发起,0不发起
CreateTime string //
}
// postColumns holds the columns for the table post.
var postColumns = PostColumns{
Id: "id",
PostTitle: "post_title",
PostContent: "post_content",
VoteStatus: "vote_status",
CreateTime: "create_time",
}
// NewPostDao creates and returns a new DAO object for table data access.
func NewPostDao(handlers ...gdb.ModelHandler) *PostDao {
return &PostDao{
group: "default",
table: "post",
columns: postColumns,
handlers: handlers,
}
}
// DB retrieves and returns the underlying raw database management object of the current DAO.
func (dao *PostDao) DB() gdb.DB {
return g.DB(dao.group)
}
// Table returns the table name of the current DAO.
func (dao *PostDao) Table() string {
return dao.table
}
// Columns returns all column names of the current DAO.
func (dao *PostDao) Columns() PostColumns {
return dao.columns
}
// Group returns the database configuration group name of the current DAO.
func (dao *PostDao) Group() string {
return dao.group
}
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
func (dao *PostDao) Ctx(ctx context.Context) *gdb.Model {
model := dao.DB().Model(dao.table)
for _, handler := range dao.handlers {
model = handler(model)
}
return model.Safe().Ctx(ctx)
}
// Transaction wraps the transaction logic using function f.
// It rolls back the transaction and returns the error if function f returns a non-nil error.
// It commits the transaction and returns nil if function f returns nil.
//
// Note: Do not commit or roll back the transaction in function f,
// as it is automatically handled by this function.
func (dao *PostDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
return dao.Ctx(ctx).Transaction(ctx, f)
}

85
internal/dao/internal/remain_vote_number.go

@ -0,0 +1,85 @@
// ==========================================================================
// 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"
)
// RemainVoteNumberDao is the data access object for the table remain_vote_number.
type RemainVoteNumberDao struct {
table string // table is the underlying table name of the DAO.
group string // group is the database configuration group name of the current DAO.
columns RemainVoteNumberColumns // columns contains all the column names of Table for convenient usage.
handlers []gdb.ModelHandler // handlers for customized model modification.
}
// RemainVoteNumberColumns defines and stores column names for the table remain_vote_number.
type RemainVoteNumberColumns struct {
Id string //
UserId string //
RemainTimes string //
LastDate string //
}
// remainVoteNumberColumns holds the columns for the table remain_vote_number.
var remainVoteNumberColumns = RemainVoteNumberColumns{
Id: "id",
UserId: "user_id",
RemainTimes: "remain_times",
LastDate: "last_date",
}
// NewRemainVoteNumberDao creates and returns a new DAO object for table data access.
func NewRemainVoteNumberDao(handlers ...gdb.ModelHandler) *RemainVoteNumberDao {
return &RemainVoteNumberDao{
group: "default",
table: "remain_vote_number",
columns: remainVoteNumberColumns,
handlers: handlers,
}
}
// DB retrieves and returns the underlying raw database management object of the current DAO.
func (dao *RemainVoteNumberDao) DB() gdb.DB {
return g.DB(dao.group)
}
// Table returns the table name of the current DAO.
func (dao *RemainVoteNumberDao) Table() string {
return dao.table
}
// Columns returns all column names of the current DAO.
func (dao *RemainVoteNumberDao) Columns() RemainVoteNumberColumns {
return dao.columns
}
// Group returns the database configuration group name of the current DAO.
func (dao *RemainVoteNumberDao) Group() string {
return dao.group
}
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
func (dao *RemainVoteNumberDao) Ctx(ctx context.Context) *gdb.Model {
model := dao.DB().Model(dao.table)
for _, handler := range dao.handlers {
model = handler(model)
}
return model.Safe().Ctx(ctx)
}
// Transaction wraps the transaction logic using function f.
// It rolls back the transaction and returns the error if function f returns a non-nil error.
// It commits the transaction and returns nil if function f returns nil.
//
// Note: Do not commit or roll back the transaction in function f,
// as it is automatically handled by this function.
func (dao *RemainVoteNumberDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
return dao.Ctx(ctx).Transaction(ctx, f)
}

89
internal/dao/internal/user.go

@ -0,0 +1,89 @@
// ==========================================================================
// 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"
)
// UserDao is the data access object for the table user.
type UserDao struct {
table string // table is the underlying table name of the DAO.
group string // group is the database configuration group name of the current DAO.
columns UserColumns // columns contains all the column names of Table for convenient usage.
handlers []gdb.ModelHandler // handlers for customized model modification.
}
// UserColumns defines and stores column names for the table user.
type UserColumns struct {
Id string //
Account string //
Password string //
Username string //
Status string //
CreateTime string //
}
// userColumns holds the columns for the table user.
var userColumns = UserColumns{
Id: "id",
Account: "account",
Password: "password",
Username: "username",
Status: "status",
CreateTime: "create_time",
}
// NewUserDao creates and returns a new DAO object for table data access.
func NewUserDao(handlers ...gdb.ModelHandler) *UserDao {
return &UserDao{
group: "default",
table: "user",
columns: userColumns,
handlers: handlers,
}
}
// DB retrieves and returns the underlying raw database management object of the current DAO.
func (dao *UserDao) DB() gdb.DB {
return g.DB(dao.group)
}
// Table returns the table name of the current DAO.
func (dao *UserDao) Table() string {
return dao.table
}
// Columns returns all column names of the current DAO.
func (dao *UserDao) Columns() UserColumns {
return dao.columns
}
// Group returns the database configuration group name of the current DAO.
func (dao *UserDao) Group() string {
return dao.group
}
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
func (dao *UserDao) Ctx(ctx context.Context) *gdb.Model {
model := dao.DB().Model(dao.table)
for _, handler := range dao.handlers {
model = handler(model)
}
return model.Safe().Ctx(ctx)
}
// Transaction wraps the transaction logic using function f.
// It rolls back the transaction and returns the error if function f returns a non-nil error.
// It commits the transaction and returns nil if function f returns nil.
//
// Note: Do not commit or roll back the transaction in function f,
// as it is automatically handled by this function.
func (dao *UserDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
return dao.Ctx(ctx).Transaction(ctx, f)
}

85
internal/dao/internal/vote_option.go

@ -0,0 +1,85 @@
// ==========================================================================
// 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"
)
// VoteOptionDao is the data access object for the table vote_option.
type VoteOptionDao struct {
table string // table is the underlying table name of the DAO.
group string // group is the database configuration group name of the current DAO.
columns VoteOptionColumns // columns contains all the column names of Table for convenient usage.
handlers []gdb.ModelHandler // handlers for customized model modification.
}
// VoteOptionColumns defines and stores column names for the table vote_option.
type VoteOptionColumns struct {
Id string //
VoteId string // 投票活动ID
OptionContent string // 选项内容
Status string // 选项状态
}
// voteOptionColumns holds the columns for the table vote_option.
var voteOptionColumns = VoteOptionColumns{
Id: "id",
VoteId: "vote_id",
OptionContent: "option_content",
Status: "status",
}
// NewVoteOptionDao creates and returns a new DAO object for table data access.
func NewVoteOptionDao(handlers ...gdb.ModelHandler) *VoteOptionDao {
return &VoteOptionDao{
group: "default",
table: "vote_option",
columns: voteOptionColumns,
handlers: handlers,
}
}
// DB retrieves and returns the underlying raw database management object of the current DAO.
func (dao *VoteOptionDao) DB() gdb.DB {
return g.DB(dao.group)
}
// Table returns the table name of the current DAO.
func (dao *VoteOptionDao) Table() string {
return dao.table
}
// Columns returns all column names of the current DAO.
func (dao *VoteOptionDao) Columns() VoteOptionColumns {
return dao.columns
}
// Group returns the database configuration group name of the current DAO.
func (dao *VoteOptionDao) Group() string {
return dao.group
}
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
func (dao *VoteOptionDao) Ctx(ctx context.Context) *gdb.Model {
model := dao.DB().Model(dao.table)
for _, handler := range dao.handlers {
model = handler(model)
}
return model.Safe().Ctx(ctx)
}
// Transaction wraps the transaction logic using function f.
// It rolls back the transaction and returns the error if function f returns a non-nil error.
// It commits the transaction and returns nil if function f returns nil.
//
// Note: Do not commit or roll back the transaction in function f,
// as it is automatically handled by this function.
func (dao *VoteOptionDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
return dao.Ctx(ctx).Transaction(ctx, f)
}

91
internal/dao/internal/vote_poll.go

@ -0,0 +1,91 @@
// ==========================================================================
// 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"
)
// VotePollDao is the data access object for the table vote_poll.
type VotePollDao struct {
table string // table is the underlying table name of the DAO.
group string // group is the database configuration group name of the current DAO.
columns VotePollColumns // columns contains all the column names of Table for convenient usage.
handlers []gdb.ModelHandler // handlers for customized model modification.
}
// VotePollColumns defines and stores column names for the table vote_poll.
type VotePollColumns struct {
Id string //
PostId string // 文章/视频ID
VoteTitle string // 投票活动标题
MultiOption string // 是否开启多选:1多选,0不多选
DeadlineTime string // 截止时间
CreateTime string //
Status string // 投票活动状态:1:进行中,0已结束
}
// votePollColumns holds the columns for the table vote_poll.
var votePollColumns = VotePollColumns{
Id: "id",
PostId: "post_id",
VoteTitle: "vote_title",
MultiOption: "multi_option",
DeadlineTime: "deadline_time",
CreateTime: "create_time",
Status: "status",
}
// NewVotePollDao creates and returns a new DAO object for table data access.
func NewVotePollDao(handlers ...gdb.ModelHandler) *VotePollDao {
return &VotePollDao{
group: "default",
table: "vote_poll",
columns: votePollColumns,
handlers: handlers,
}
}
// DB retrieves and returns the underlying raw database management object of the current DAO.
func (dao *VotePollDao) DB() gdb.DB {
return g.DB(dao.group)
}
// Table returns the table name of the current DAO.
func (dao *VotePollDao) Table() string {
return dao.table
}
// Columns returns all column names of the current DAO.
func (dao *VotePollDao) Columns() VotePollColumns {
return dao.columns
}
// Group returns the database configuration group name of the current DAO.
func (dao *VotePollDao) Group() string {
return dao.group
}
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
func (dao *VotePollDao) Ctx(ctx context.Context) *gdb.Model {
model := dao.DB().Model(dao.table)
for _, handler := range dao.handlers {
model = handler(model)
}
return model.Safe().Ctx(ctx)
}
// Transaction wraps the transaction logic using function f.
// It rolls back the transaction and returns the error if function f returns a non-nil error.
// It commits the transaction and returns nil if function f returns nil.
//
// Note: Do not commit or roll back the transaction in function f,
// as it is automatically handled by this function.
func (dao *VotePollDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
return dao.Ctx(ctx).Transaction(ctx, f)
}

89
internal/dao/internal/vote_record.go

@ -0,0 +1,89 @@
// ==========================================================================
// 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"
)
// VoteRecordDao is the data access object for the table vote_record.
type VoteRecordDao struct {
table string // table is the underlying table name of the DAO.
group string // group is the database configuration group name of the current DAO.
columns VoteRecordColumns // columns contains all the column names of Table for convenient usage.
handlers []gdb.ModelHandler // handlers for customized model modification.
}
// VoteRecordColumns defines and stores column names for the table vote_record.
type VoteRecordColumns struct {
Id string //
UserId string //
VoteId string //
OptionId string //
CreateTime string //
VoteIndex string //
}
// voteRecordColumns holds the columns for the table vote_record.
var voteRecordColumns = VoteRecordColumns{
Id: "id",
UserId: "user_id",
VoteId: "vote_id",
OptionId: "option_id",
CreateTime: "create_time",
VoteIndex: "vote_index",
}
// NewVoteRecordDao creates and returns a new DAO object for table data access.
func NewVoteRecordDao(handlers ...gdb.ModelHandler) *VoteRecordDao {
return &VoteRecordDao{
group: "default",
table: "vote_record",
columns: voteRecordColumns,
handlers: handlers,
}
}
// DB retrieves and returns the underlying raw database management object of the current DAO.
func (dao *VoteRecordDao) DB() gdb.DB {
return g.DB(dao.group)
}
// Table returns the table name of the current DAO.
func (dao *VoteRecordDao) Table() string {
return dao.table
}
// Columns returns all column names of the current DAO.
func (dao *VoteRecordDao) Columns() VoteRecordColumns {
return dao.columns
}
// Group returns the database configuration group name of the current DAO.
func (dao *VoteRecordDao) Group() string {
return dao.group
}
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
func (dao *VoteRecordDao) Ctx(ctx context.Context) *gdb.Model {
model := dao.DB().Model(dao.table)
for _, handler := range dao.handlers {
model = handler(model)
}
return model.Safe().Ctx(ctx)
}
// Transaction wraps the transaction logic using function f.
// It rolls back the transaction and returns the error if function f returns a non-nil error.
// It commits the transaction and returns nil if function f returns nil.
//
// Note: Do not commit or roll back the transaction in function f,
// as it is automatically handled by this function.
func (dao *VoteRecordDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
return dao.Ctx(ctx).Transaction(ctx, f)
}

22
internal/dao/post.go

@ -0,0 +1,22 @@
// =================================================================================
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
import (
"practice_ArticleVote_Go/internal/dao/internal"
)
// postDao is the data access object for the table post.
// You can define custom methods on it to extend its functionality as needed.
type postDao struct {
*internal.PostDao
}
var (
// Post is a globally accessible object for table post operations.
Post = postDao{internal.NewPostDao()}
)
// Add your custom methods and functionality below.

22
internal/dao/remain_vote_number.go

@ -0,0 +1,22 @@
// =================================================================================
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
import (
"practice_ArticleVote_Go/internal/dao/internal"
)
// remainVoteNumberDao is the data access object for the table remain_vote_number.
// You can define custom methods on it to extend its functionality as needed.
type remainVoteNumberDao struct {
*internal.RemainVoteNumberDao
}
var (
// RemainVoteNumber is a globally accessible object for table remain_vote_number operations.
RemainVoteNumber = remainVoteNumberDao{internal.NewRemainVoteNumberDao()}
)
// Add your custom methods and functionality below.

22
internal/dao/user.go

@ -0,0 +1,22 @@
// =================================================================================
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
import (
"practice_ArticleVote_Go/internal/dao/internal"
)
// userDao is the data access object for the table user.
// You can define custom methods on it to extend its functionality as needed.
type userDao struct {
*internal.UserDao
}
var (
// User is a globally accessible object for table user operations.
User = userDao{internal.NewUserDao()}
)
// Add your custom methods and functionality below.

22
internal/dao/vote_option.go

@ -0,0 +1,22 @@
// =================================================================================
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
import (
"practice_ArticleVote_Go/internal/dao/internal"
)
// voteOptionDao is the data access object for the table vote_option.
// You can define custom methods on it to extend its functionality as needed.
type voteOptionDao struct {
*internal.VoteOptionDao
}
var (
// VoteOption is a globally accessible object for table vote_option operations.
VoteOption = voteOptionDao{internal.NewVoteOptionDao()}
)
// Add your custom methods and functionality below.

22
internal/dao/vote_poll.go

@ -0,0 +1,22 @@
// =================================================================================
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
import (
"practice_ArticleVote_Go/internal/dao/internal"
)
// votePollDao is the data access object for the table vote_poll.
// You can define custom methods on it to extend its functionality as needed.
type votePollDao struct {
*internal.VotePollDao
}
var (
// VotePoll is a globally accessible object for table vote_poll operations.
VotePoll = votePollDao{internal.NewVotePollDao()}
)
// Add your custom methods and functionality below.

22
internal/dao/vote_record.go

@ -0,0 +1,22 @@
// =================================================================================
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
import (
"practice_ArticleVote_Go/internal/dao/internal"
)
// voteRecordDao is the data access object for the table vote_record.
// You can define custom methods on it to extend its functionality as needed.
type voteRecordDao struct {
*internal.VoteRecordDao
}
var (
// VoteRecord is a globally accessible object for table vote_record operations.
VoteRecord = voteRecordDao{internal.NewVoteRecordDao()}
)
// Add your custom methods and functionality below.

0
internal/logic/.gitkeep

0
internal/model/.gitkeep

0
internal/model/do/.gitkeep

20
internal/model/do/post.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"
)
// Post is the golang structure of table post for DAO operations like Where/Data.
type Post struct {
g.Meta `orm:"table:post, do:true"`
Id interface{} //
PostTitle interface{} // 文章/视频标题
PostContent interface{} // 文章/视频内容
VoteStatus interface{} // 是否发起投票:1发起,0不发起
CreateTime *gtime.Time //
}

19
internal/model/do/remain_vote_number.go

@ -0,0 +1,19 @@
// =================================================================================
// 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"
)
// RemainVoteNumber is the golang structure of table remain_vote_number for DAO operations like Where/Data.
type RemainVoteNumber struct {
g.Meta `orm:"table:remain_vote_number, do:true"`
Id interface{} //
UserId interface{} //
RemainTimes interface{} //
LastDate *gtime.Time //
}

21
internal/model/do/user.go

@ -0,0 +1,21 @@
// =================================================================================
// 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"
)
// User is the golang structure of table user for DAO operations like Where/Data.
type User struct {
g.Meta `orm:"table:user, do:true"`
Id interface{} //
Account interface{} //
Password interface{} //
Username interface{} //
Status interface{} //
CreateTime *gtime.Time //
}

18
internal/model/do/vote_option.go

@ -0,0 +1,18 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package do
import (
"github.com/gogf/gf/v2/frame/g"
)
// VoteOption is the golang structure of table vote_option for DAO operations like Where/Data.
type VoteOption struct {
g.Meta `orm:"table:vote_option, do:true"`
Id interface{} //
VoteId interface{} // 投票活动ID
OptionContent interface{} // 选项内容
Status interface{} // 选项状态
}

22
internal/model/do/vote_poll.go

@ -0,0 +1,22 @@
// =================================================================================
// 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"
)
// VotePoll is the golang structure of table vote_poll for DAO operations like Where/Data.
type VotePoll struct {
g.Meta `orm:"table:vote_poll, do:true"`
Id interface{} //
PostId interface{} // 文章/视频ID
VoteTitle interface{} // 投票活动标题
MultiOption interface{} // 是否开启多选:1多选,0不多选
DeadlineTime *gtime.Time // 截止时间
CreateTime *gtime.Time //
Status interface{} // 投票活动状态:1:进行中,0已结束
}

21
internal/model/do/vote_record.go

@ -0,0 +1,21 @@
// =================================================================================
// 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"
)
// VoteRecord is the golang structure of table vote_record for DAO operations like Where/Data.
type VoteRecord struct {
g.Meta `orm:"table:vote_record, do:true"`
Id interface{} //
UserId interface{} //
VoteId interface{} //
OptionId interface{} //
CreateTime *gtime.Time //
VoteIndex interface{} //
}

0
internal/model/entity/.gitkeep

18
internal/model/entity/post.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"
)
// Post is the golang structure for table post.
type Post struct {
Id int64 `json:"id" orm:"id" description:""` //
PostTitle string `json:"postTitle" orm:"post_title" description:"文章/视频标题"` // 文章/视频标题
PostContent string `json:"postContent" orm:"post_content" description:"文章/视频内容"` // 文章/视频内容
VoteStatus int `json:"voteStatus" orm:"vote_status" description:"是否发起投票:1发起,0不发起"` // 是否发起投票:1发起,0不发起
CreateTime *gtime.Time `json:"createTime" orm:"create_time" description:""` //
}

17
internal/model/entity/remain_vote_number.go

@ -0,0 +1,17 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package entity
import (
"github.com/gogf/gf/v2/os/gtime"
)
// RemainVoteNumber is the golang structure for table remain_vote_number.
type RemainVoteNumber struct {
Id int64 `json:"id" orm:"id" description:""` //
UserId int64 `json:"userId" orm:"user_id" description:""` //
RemainTimes int `json:"remainTimes" orm:"remain_times" description:""` //
LastDate *gtime.Time `json:"lastDate" orm:"last_date" description:""` //
}

19
internal/model/entity/user.go

@ -0,0 +1,19 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package entity
import (
"github.com/gogf/gf/v2/os/gtime"
)
// User is the golang structure for table user.
type User struct {
Id int64 `json:"id" orm:"id" description:""` //
Account string `json:"account" orm:"account" description:""` //
Password string `json:"password" orm:"password" description:""` //
Username string `json:"username" orm:"username" description:""` //
Status int `json:"status" orm:"status" description:""` //
CreateTime *gtime.Time `json:"createTime" orm:"create_time" description:""` //
}

13
internal/model/entity/vote_option.go

@ -0,0 +1,13 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package entity
// VoteOption is the golang structure for table vote_option.
type VoteOption struct {
Id int64 `json:"id" orm:"id" description:""` //
VoteId int64 `json:"voteId" orm:"vote_id" description:"投票活动ID"` // 投票活动ID
OptionContent string `json:"optionContent" orm:"option_content" description:"选项内容"` // 选项内容
Status int `json:"status" orm:"status" description:"选项状态"` // 选项状态
}

20
internal/model/entity/vote_poll.go

@ -0,0 +1,20 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package entity
import (
"github.com/gogf/gf/v2/os/gtime"
)
// VotePoll is the golang structure for table vote_poll.
type VotePoll struct {
Id int64 `json:"id" orm:"id" description:""` //
PostId int64 `json:"postId" orm:"post_id" description:"文章/视频ID"` // 文章/视频ID
VoteTitle string `json:"voteTitle" orm:"vote_title" description:"投票活动标题"` // 投票活动标题
MultiOption int `json:"multiOption" orm:"multi_option" description:"是否开启多选:1多选,0不多选"` // 是否开启多选:1多选,0不多选
DeadlineTime *gtime.Time `json:"deadlineTime" orm:"deadline_time" description:"截止时间"` // 截止时间
CreateTime *gtime.Time `json:"createTime" orm:"create_time" description:""` //
Status int `json:"status" orm:"status" description:"投票活动状态:1:进行中,0已结束"` // 投票活动状态:1:进行中,0已结束
}

19
internal/model/entity/vote_record.go

@ -0,0 +1,19 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package entity
import (
"github.com/gogf/gf/v2/os/gtime"
)
// VoteRecord is the golang structure for table vote_record.
type VoteRecord struct {
Id int64 `json:"id" orm:"id" description:""` //
UserId int64 `json:"userId" orm:"user_id" description:""` //
VoteId int64 `json:"voteId" orm:"vote_id" description:""` //
OptionId int64 `json:"optionId" orm:"option_id" description:""` //
CreateTime *gtime.Time `json:"createTime" orm:"create_time" description:""` //
VoteIndex int `json:"voteIndex" orm:"vote_index" description:""` //
}

1
internal/packed/packed.go

@ -0,0 +1 @@
package packed

0
internal/service/.gitkeep

15
main.go

@ -0,0 +1,15 @@
package main
import (
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
_ "practice_ArticleVote_Go/internal/packed"
"github.com/gogf/gf/v2/os/gctx"
"practice_ArticleVote_Go/internal/cmd"
)
func main() {
cmd.Main.Run(gctx.GetInitCtx())
}

21
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

8
manifest/deploy/kustomize/base/kustomization.yaml

@ -0,0 +1,8 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml

12
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

14
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

10
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

14
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

16
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

8
manifest/docker/docker.sh

@ -0,0 +1,8 @@
#!/bin/bash
# This shell is executed before docker build.

0
manifest/i18n/.gitkeep

0
manifest/protobuf/.keep-if-necessary

0
resource/public/html/.gitkeep

0
resource/public/plugin/.gitkeep

0
resource/public/resource/css/.gitkeep

0
resource/public/resource/image/.gitkeep

0
resource/public/resource/js/.gitkeep

0
resource/template/.gitkeep

0
utility/.gitkeep

Loading…
Cancel
Save