This is a To-Do List project implemented using Go language and gRPC.
- Compilation tools
- Database
- PostgreSQL: v15.7
- Programming language
- Go: v1.22
- Deveops
- Other
- Server
- Database
- Interceptor
- Other
git clone https://github.com/Frankie0702111/go-todolist-grpc.git
cd go-todolist-grpc
cp app.env.example app.env
vim app.env
vim internal/config/env.go
# Create docker image
docker compose build --no-cache
# Run docker
docker compose up -d
# Stop docker
docker compose stop
cp ./internal/config/env.go.example ./internal/config/env.go
vim ./internal/config/env.go
-
Documents
-
1.Choosing the correct AWS region
-
2.Changing the .pem file name (name: rds-ca-2019-root.pem)
-
3.Move the rds-ca-2019-root.pem file to internal/config/certs
# Up all migration
make migrate-up
# Down all migration
make migrate-down
# Specify batch up or down (default = 3 -> user, category, task)
make migrate-up number=1
make migrate-down number=1
Reference: Determining the SSL connection status
CREATE EXTENSION sslinfo;
SELECT ssl_is_used();
ssl_is_used
---------
t
(1 row)
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── api
│ ├── pb
│ │ ├── category.pb.go
│ │ ├── model.pb.go
│ │ ├── public.pb.go
│ │ ├── task.pb.go
│ │ ├── todolist.pb.go
│ │ ├── todolist.pb.gw.go
│ │ ├── todolist_grpc.pb.go
│ │ └── user.pb.go
│ └── proto
│ ├── category.proto
│ ├── google
│ │ └── api
│ │ ├── annotations.proto
│ │ ├── field_behavior.proto
│ │ ├── http.proto
│ │ └── httpbody.proto
│ ├── model.proto
│ ├── public.proto
│ ├── task.proto
│ ├── todolist.proto
│ └── user.proto
├── app.env.example
├── cmd
│ └── go-todolist-grpc
│ └── main.go
├── dev.Dockerfile
├── docker
│ └── pgsql
│ └── init.sql
├── docker-compose.yaml
├── go.mod
├── go.sum
├── init
│ └── logrotate.d
│ └── go-todolist-grpc
├── internal
│ ├── config
│ │ ├── config.go
│ │ ├── config_test.go
│ │ └── env.go.example
│ ├── middleware
│ │ └── authorization.go
│ ├── migrations
│ │ ├── 000001_create_users_table.down.sql
│ │ ├── 000001_create_users_table.up.sql
│ │ ├── 000002_create_categories_table.down.sql
│ │ ├── 000002_create_categories_table.up.sql
│ │ ├── 000003_create_tasks_table.down.sql
│ │ └── 000003_create_tasks_table.up.sql
│ ├── model
│ │ ├── mod_.go
│ │ ├── mod_category.go
│ │ ├── mod_category_test.go
│ │ ├── mod_task.go
│ │ ├── mod_task_test.go
│ │ ├── mod_user.go
│ │ └── mod_user_test.go
│ ├── pkg
│ │ ├── db
│ │ │ ├── builder
│ │ │ │ └── builder.go
│ │ │ ├── condition
│ │ │ │ ├── clausebuilder.go
│ │ │ │ └── condition.go
│ │ │ ├── db.go
│ │ │ ├── db_test.go
│ │ │ └── field
│ │ │ └── field.go
│ │ ├── log
│ │ │ └── log.go
│ │ └── util
│ │ ├── hash.go
│ │ ├── hash_test.go
│ │ ├── jwt.go
│ │ ├── jwt_test.go
│ │ ├── random.go
│ │ ├── random_test.go
│ │ ├── th.go
│ │ └── th_test.go
│ └── service
│ ├── s_.go
│ ├── s_category.go
│ ├── s_category_test.go
│ ├── s_take.go
│ ├── s_task_test.go
│ ├── s_user.go
│ └── s_user_test.go
├── postman
│ └── go-todolist-grpc (gateway).postman_collection.json
└── script
└── build.sh
-
api
: Contains Protocol Buffers definitions and generated Go codepb
: Generated Go code from Protocol Buffersproto
: Protocol Buffers definition files
-
cmd/go-todolist-grpc
: Main application for the gRPC and gateway server -
docker
: Docker-related filespgsql
: PostgreSQL initialization scripts
-
init/logrotate.d
: Log rotation configuration -
internal
: Internal packages and implementationsconfig
: Configuration files and environment settingsmiddleware
: Middleware implementationsmigrations
: Database migration filesmodel
: Data model definitionspkg
: Common packagesdb
: Database-related operationslog
: Logging utilitiesutil
: Utility functions
service
: gRPC service implementations
-
postman
: Postman collection for API testing -
script
: Build and utility scripts