gitextract_78o5kfb2/ ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── pr-check.yml │ └── tests.yml ├── .gitignore ├── .golangci.yml ├── .licenserc.yaml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── README.md ├── _typos.toml ├── book-shop/ │ ├── Makefile │ ├── README.md │ ├── app/ │ │ ├── facade/ │ │ │ ├── handlers/ │ │ │ │ ├── handler_item/ │ │ │ │ │ ├── add.go │ │ │ │ │ ├── del.go │ │ │ │ │ ├── edit.go │ │ │ │ │ ├── get.go │ │ │ │ │ ├── list.go │ │ │ │ │ ├── mget2c.go │ │ │ │ │ ├── offline.go │ │ │ │ │ ├── online.go │ │ │ │ │ └── search.go │ │ │ │ ├── handler_order/ │ │ │ │ │ ├── cancel.go │ │ │ │ │ ├── create.go │ │ │ │ │ ├── get.go │ │ │ │ │ └── list.go │ │ │ │ └── handler_user/ │ │ │ │ ├── shop_login.go │ │ │ │ ├── user_login.go │ │ │ │ └── user_register.go │ │ │ ├── infras/ │ │ │ │ └── client/ │ │ │ │ ├── init.go │ │ │ │ ├── item.go │ │ │ │ ├── order.go │ │ │ │ └── user.go │ │ │ ├── main.go │ │ │ ├── model/ │ │ │ │ └── model.go │ │ │ └── run.sh │ │ ├── item/ │ │ │ ├── build.sh │ │ │ ├── common/ │ │ │ │ ├── constant/ │ │ │ │ │ └── constant.go │ │ │ │ ├── converter/ │ │ │ │ │ ├── dto_2_entity.go │ │ │ │ │ └── entity_2_dto.go │ │ │ │ ├── entity/ │ │ │ │ │ └── product_entity.go │ │ │ │ └── po/ │ │ │ │ └── product_po.go │ │ │ ├── domain/ │ │ │ │ ├── repository/ │ │ │ │ │ ├── product_2c_repository.go │ │ │ │ │ ├── product_repository.go │ │ │ │ │ ├── repository_registry.go │ │ │ │ │ └── stock_repository.go │ │ │ │ └── service/ │ │ │ │ ├── product_query_service.go │ │ │ │ ├── product_state_service.go │ │ │ │ ├── product_stock_service.go │ │ │ │ └── product_update_service.go │ │ │ ├── handler/ │ │ │ │ ├── add_handler.go │ │ │ │ ├── decrease_stock_handler.go │ │ │ │ ├── decrease_stock_revert_handler.go │ │ │ │ ├── delete_handler.go │ │ │ │ ├── edit_handler.go │ │ │ │ ├── get_handler.go │ │ │ │ ├── list_handler.go │ │ │ │ ├── mget2c_handler.go │ │ │ │ ├── offline_handler.go │ │ │ │ ├── online_handler.go │ │ │ │ └── search_handler.go │ │ │ ├── handler.go │ │ │ ├── infras/ │ │ │ │ ├── es/ │ │ │ │ │ └── client.go │ │ │ │ ├── init.go │ │ │ │ └── repository/ │ │ │ │ ├── converter/ │ │ │ │ │ ├── product_do_2_po.go │ │ │ │ │ └── product_po_2_do.go │ │ │ │ ├── differ/ │ │ │ │ │ └── po_diff.go │ │ │ │ ├── init.go │ │ │ │ ├── product_2c_repo_impl.go │ │ │ │ ├── product_repo_impl.go │ │ │ │ └── stock_repo_impl.go │ │ │ ├── main.go │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── order/ │ │ │ ├── build.sh │ │ │ ├── common/ │ │ │ │ └── converter.go │ │ │ ├── dal/ │ │ │ │ ├── client/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── item.go │ │ │ │ │ └── user.go │ │ │ │ └── db/ │ │ │ │ ├── init.go │ │ │ │ └── order.go │ │ │ ├── handler.go │ │ │ ├── main.go │ │ │ ├── module/ │ │ │ │ ├── order_query_module.go │ │ │ │ └── order_update_module.go │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ └── user/ │ │ ├── build.sh │ │ ├── handler.go │ │ ├── infras/ │ │ │ ├── db/ │ │ │ │ ├── init.go │ │ │ │ └── user.go │ │ │ └── redis/ │ │ │ └── client.go │ │ ├── main.go │ │ ├── script/ │ │ │ └── bootstrap.sh │ │ └── service/ │ │ └── user_service.go │ ├── deploy/ │ │ ├── mysql/ │ │ │ └── init.sql │ │ └── redis/ │ │ └── redis.conf │ ├── docker-compose.yml │ ├── docs/ │ │ ├── docs.go │ │ ├── swagger.json │ │ └── swagger.yaml │ ├── go.mod │ ├── go.sum │ ├── idl/ │ │ ├── base.thrift │ │ ├── item.thrift │ │ ├── order.thrift │ │ └── user.thrift │ ├── kitex_gen/ │ │ ├── base/ │ │ │ ├── base.go │ │ │ ├── k-base.go │ │ │ └── k-consts.go │ │ └── cwg/ │ │ └── bookshop/ │ │ ├── item/ │ │ │ ├── item.go │ │ │ ├── itemservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── itemservice.go │ │ │ │ └── server.go │ │ │ ├── k-consts.go │ │ │ └── k-item.go │ │ ├── order/ │ │ │ ├── k-consts.go │ │ │ ├── k-order.go │ │ │ ├── order.go │ │ │ └── orderservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── orderservice.go │ │ │ └── server.go │ │ └── user/ │ │ ├── k-consts.go │ │ ├── k-user.go │ │ ├── user.go │ │ └── userservice/ │ │ ├── client.go │ │ ├── invoker.go │ │ ├── server.go │ │ └── userservice.go │ ├── licenses/ │ │ ├── LICENSE-copier.txt │ │ ├── LICENSE-diff.txt │ │ ├── LICENSE-elastic.txt │ │ ├── LICENSE-gorm-mysql.txt │ │ ├── LICENSE-gorm.txt │ │ ├── LICENSE-redigo.txt │ │ ├── LICENSE-snowflake.txt │ │ └── LICENSE-thrift.txt │ └── pkg/ │ ├── conf/ │ │ └── conf.go │ ├── errno/ │ │ ├── errno.go │ │ └── resp.go │ └── utils/ │ ├── idgen.go │ └── logutil.go ├── bookinfo/ │ ├── Makefile │ ├── README.md │ ├── README_CN.md │ ├── build/ │ │ └── Dockerfile │ ├── cmd/ │ │ ├── details/ │ │ │ └── cmd.go │ │ ├── main.go │ │ ├── productpage/ │ │ │ └── cmd.go │ │ ├── ratings/ │ │ │ └── cmd.go │ │ └── reviews/ │ │ └── cmd.go │ ├── conf/ │ │ ├── details.yaml │ │ ├── productpage.yaml │ │ ├── ratings.yaml │ │ └── reviews.yaml │ ├── go.mod │ ├── go.sum │ ├── idl/ │ │ ├── base.thrift │ │ ├── details.thrift │ │ ├── productpage.thrift │ │ ├── ratings.thrift │ │ └── reviews.thrift │ ├── internal/ │ │ ├── handler/ │ │ │ └── productpage/ │ │ │ └── product.go │ │ ├── server/ │ │ │ ├── details/ │ │ │ │ ├── options.go │ │ │ │ ├── server.go │ │ │ │ ├── wire.go │ │ │ │ └── wire_gen.go │ │ │ ├── productpage/ │ │ │ │ ├── options.go │ │ │ │ ├── server.go │ │ │ │ ├── wire.go │ │ │ │ └── wire_gen.go │ │ │ ├── ratings/ │ │ │ │ ├── options.go │ │ │ │ ├── server.go │ │ │ │ ├── wire.go │ │ │ │ └── wire_gen.go │ │ │ └── reviews/ │ │ │ ├── options.go │ │ │ ├── server.go │ │ │ ├── wire.go │ │ │ └── wire_gen.go │ │ └── service/ │ │ ├── details/ │ │ │ └── service.go │ │ ├── ratings/ │ │ │ └── service.go │ │ └── reviews/ │ │ └── service.go │ ├── kitex_gen/ │ │ ├── base/ │ │ │ ├── base.go │ │ │ ├── k-base.go │ │ │ └── k-consts.go │ │ └── cwg/ │ │ └── bookinfo/ │ │ ├── details/ │ │ │ ├── details.go │ │ │ ├── detailsservice/ │ │ │ │ ├── client.go │ │ │ │ ├── detailsservice.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── k-consts.go │ │ │ └── k-details.go │ │ ├── product/ │ │ │ ├── k-consts.go │ │ │ ├── k-productpage.go │ │ │ ├── productpage.go │ │ │ └── productpageservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── productpageservice.go │ │ │ └── server.go │ │ ├── ratings/ │ │ │ ├── k-consts.go │ │ │ ├── k-ratings.go │ │ │ ├── ratings.go │ │ │ └── ratingservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── ratingservice.go │ │ │ └── server.go │ │ └── reviews/ │ │ ├── k-consts.go │ │ ├── k-reviews.go │ │ ├── reviews.go │ │ └── reviewsservice/ │ │ ├── client.go │ │ ├── invoker.go │ │ ├── reviewsservice.go │ │ └── server.go │ ├── licenses/ │ │ ├── LICENSE-cobra.txt │ │ ├── LICENSE-logrus.txt │ │ ├── LICENSE-opentelemetry-go.txt │ │ ├── LICENSE-pflag.txt │ │ ├── LICENSE-testify.txt │ │ ├── LICENSE-thrift.txt │ │ ├── LICENSE-viper.txt │ │ └── LICENSE-wire.txt │ ├── manifest/ │ │ └── bookinfo/ │ │ ├── traffic/ │ │ │ ├── bookinfo-gateway.yaml │ │ │ ├── canary.yaml │ │ │ ├── destination-rule-all.yaml │ │ │ ├── virtual-service-ratings-canary.yaml │ │ │ ├── virtual-service-reviews-50-50.yaml │ │ │ ├── virtual-service-reviews-80-20.yaml │ │ │ ├── virtual-service-reviews-canary.yaml │ │ │ ├── virtual-service-reviews-v1.yaml │ │ │ └── virtual-service-reviews-v2.yaml │ │ └── workloads/ │ │ ├── Chart.yaml │ │ ├── charts/ │ │ │ ├── details/ │ │ │ │ ├── .helmignore │ │ │ │ ├── Chart.yaml │ │ │ │ ├── templates/ │ │ │ │ │ ├── NOTES.txt │ │ │ │ │ ├── details.cm.yaml │ │ │ │ │ ├── details.svc.yaml │ │ │ │ │ └── details.yaml │ │ │ │ └── values.yaml │ │ │ ├── productpage/ │ │ │ │ ├── .helmignore │ │ │ │ ├── Chart.yaml │ │ │ │ ├── templates/ │ │ │ │ │ ├── NOTES.txt │ │ │ │ │ ├── productpage.cm.yaml │ │ │ │ │ ├── productpage.svc.yaml │ │ │ │ │ └── productpage.yaml │ │ │ │ └── values.yaml │ │ │ ├── ratings/ │ │ │ │ ├── .helmignore │ │ │ │ ├── Chart.yaml │ │ │ │ ├── templates/ │ │ │ │ │ ├── NOTES.txt │ │ │ │ │ ├── ratings-v1.yaml │ │ │ │ │ ├── ratings-v2.yaml │ │ │ │ │ ├── ratings.cm.yaml │ │ │ │ │ └── ratings.svc.yaml │ │ │ │ └── values.yaml │ │ │ └── reviews/ │ │ │ ├── .helmignore │ │ │ ├── Chart.yaml │ │ │ ├── templates/ │ │ │ │ ├── NOTES.txt │ │ │ │ ├── reviews-v1.yaml │ │ │ │ ├── reviews-v2.yaml │ │ │ │ ├── reviews-v3.yaml │ │ │ │ ├── reviews.cm.yaml │ │ │ │ └── reviews.svc.yaml │ │ │ └── values.yaml │ │ └── values.yaml │ └── pkg/ │ ├── configparser/ │ │ ├── config.go │ │ ├── parser.go │ │ ├── provider_file.go │ │ └── provider_flags.go │ ├── constants/ │ │ ├── env.go │ │ └── service.go │ ├── injectors/ │ │ ├── provide_details.go │ │ ├── provide_ratings.go │ │ └── provide_reviews.go │ ├── metadata/ │ │ └── propagator.go │ ├── utils/ │ │ └── logutils/ │ │ └── level.go │ └── version/ │ ├── var.go │ └── version.go ├── check_branch_name.sh ├── easy_note/ │ ├── Makefile │ ├── README.md │ ├── api.md │ ├── api_request/ │ │ ├── api_service/ │ │ │ ├── api_service.go │ │ │ └── hertz_client.go │ │ └── main.go │ ├── cmd/ │ │ ├── api/ │ │ │ ├── .gitignore │ │ │ ├── .hz │ │ │ ├── Makefile │ │ │ ├── build.sh │ │ │ ├── hertz_handler/ │ │ │ │ ├── demoapi/ │ │ │ │ │ ├── api_service.go │ │ │ │ │ └── handler.go │ │ │ │ └── ping.go │ │ │ ├── hertz_router/ │ │ │ │ ├── demoapi/ │ │ │ │ │ ├── api.go │ │ │ │ │ └── middleware.go │ │ │ │ └── register.go │ │ │ ├── main.go │ │ │ ├── mw/ │ │ │ │ └── jwt.go │ │ │ ├── router.go │ │ │ ├── router_gen.go │ │ │ ├── rpc/ │ │ │ │ ├── init.go │ │ │ │ ├── note.go │ │ │ │ └── user.go │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── note/ │ │ │ ├── Makefile │ │ │ ├── build.sh │ │ │ ├── dal/ │ │ │ │ ├── db/ │ │ │ │ │ ├── init.go │ │ │ │ │ └── note.go │ │ │ │ └── init.go │ │ │ ├── handler.go │ │ │ ├── main.go │ │ │ ├── pack/ │ │ │ │ ├── note.go │ │ │ │ └── resp.go │ │ │ ├── rpc/ │ │ │ │ ├── init.go │ │ │ │ └── user.go │ │ │ ├── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── service/ │ │ │ ├── create_note.go │ │ │ ├── delete_note.go │ │ │ ├── mget_note.go │ │ │ ├── query_note.go │ │ │ └── update_note.go │ │ └── user/ │ │ ├── Makefile │ │ ├── build.sh │ │ ├── dal/ │ │ │ ├── db/ │ │ │ │ ├── init.go │ │ │ │ └── user.go │ │ │ └── init.go │ │ ├── handler.go │ │ ├── main.go │ │ ├── pack/ │ │ │ ├── resp.go │ │ │ └── user.go │ │ ├── script/ │ │ │ └── bootstrap.sh │ │ └── service/ │ │ ├── check_user.go │ │ ├── create_user.go │ │ └── mget_user.go │ ├── docker-compose.yaml │ ├── go.mod │ ├── go.sum │ ├── hertz_gen/ │ │ └── demoapi/ │ │ └── api.go │ ├── idl/ │ │ ├── api.thrift │ │ ├── note.thrift │ │ └── user.thrift │ ├── kitex_gen/ │ │ ├── demonote/ │ │ │ ├── k-consts.go │ │ │ ├── k-note.go │ │ │ ├── note.go │ │ │ ├── note_validator.go │ │ │ └── noteservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── noteservice.go │ │ │ └── server.go │ │ └── demouser/ │ │ ├── k-consts.go │ │ ├── k-user.go │ │ ├── user.go │ │ ├── user_validator.go │ │ └── userservice/ │ │ ├── client.go │ │ ├── invoker.go │ │ ├── server.go │ │ └── userservice.go │ ├── licenses/ │ │ ├── LICENSE-gorm-mysql.txt │ │ ├── LICENSE-gorm.txt │ │ ├── LICENSE-opentelemetry-go.txt │ │ └── LICENSE-thrift.txt │ └── pkg/ │ ├── configs/ │ │ ├── otel/ │ │ │ └── otel-collector-config.yaml │ │ └── sql/ │ │ └── init.sql │ ├── consts/ │ │ └── consts.go │ ├── errno/ │ │ └── errno.go │ └── mw/ │ ├── client.go │ ├── common.go │ └── server.go ├── gomall/ │ ├── .gitignore │ ├── Makefile │ ├── README.md │ ├── README_cn.md │ ├── app/ │ │ ├── cart/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ ├── cart.go │ │ │ │ │ └── cart_test.go │ │ │ │ └── service/ │ │ │ │ ├── add_item.go │ │ │ │ ├── add_item_test.go │ │ │ │ ├── empty_cart.go │ │ │ │ ├── empty_cart_test.go │ │ │ │ ├── get_cart.go │ │ │ │ └── get_cart_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── infra/ │ │ │ │ └── rpc/ │ │ │ │ └── client.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ ├── bootstrap.sh │ │ │ │ └── cart.sql │ │ │ └── utils/ │ │ │ ├── constant.go │ │ │ └── errors.go │ │ ├── checkout/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── checkout.go │ │ │ │ └── checkout_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── infra/ │ │ │ │ ├── mq/ │ │ │ │ │ └── nats.go │ │ │ │ └── rpc/ │ │ │ │ └── client.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── utils/ │ │ │ └── errors.go │ │ ├── email/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── consumer/ │ │ │ │ │ ├── consumer.go │ │ │ │ │ └── email/ │ │ │ │ │ ├── email.go │ │ │ │ │ └── email_test.go │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── send.go │ │ │ │ └── send_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── infra/ │ │ │ │ ├── mq/ │ │ │ │ │ └── nats.go │ │ │ │ └── notify/ │ │ │ │ └── email.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── frontend/ │ │ │ ├── .air.toml │ │ │ ├── .gitignore │ │ │ ├── .hz │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── handler/ │ │ │ │ │ ├── about/ │ │ │ │ │ │ ├── about_service.go │ │ │ │ │ │ └── about_service_test.go │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth_service.go │ │ │ │ │ │ └── auth_service_test.go │ │ │ │ │ ├── cart/ │ │ │ │ │ │ ├── cart_service.go │ │ │ │ │ │ └── cart_service_test.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ ├── category_service.go │ │ │ │ │ │ └── category_service_test.go │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ ├── checkout_service.go │ │ │ │ │ │ └── checkout_service_test.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── home_service.go │ │ │ │ │ │ └── home_service_test.go │ │ │ │ │ ├── order/ │ │ │ │ │ │ ├── order_service.go │ │ │ │ │ │ └── order_service_test.go │ │ │ │ │ └── product/ │ │ │ │ │ ├── product_service.go │ │ │ │ │ └── product_service_test.go │ │ │ │ ├── router/ │ │ │ │ │ ├── about/ │ │ │ │ │ │ ├── about.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth_page.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── cart/ │ │ │ │ │ │ ├── cart_page.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ ├── category_page.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ ├── checkout_page.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── order/ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ └── order_page.go │ │ │ │ │ ├── product/ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ └── product_page.go │ │ │ │ │ └── register.go │ │ │ │ ├── service/ │ │ │ │ │ ├── about.go │ │ │ │ │ ├── add_cart_item.go │ │ │ │ │ ├── category.go │ │ │ │ │ ├── checkout.go │ │ │ │ │ ├── checkout_result.go │ │ │ │ │ ├── checkout_waiting.go │ │ │ │ │ ├── get_cart.go │ │ │ │ │ ├── get_product.go │ │ │ │ │ ├── home.go │ │ │ │ │ ├── login.go │ │ │ │ │ ├── logout.go │ │ │ │ │ ├── order_list.go │ │ │ │ │ ├── register.go │ │ │ │ │ └── search_producs.go │ │ │ │ └── utils/ │ │ │ │ └── resp.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── hertz_gen/ │ │ │ │ ├── api/ │ │ │ │ │ └── api.pb.go │ │ │ │ └── frontend/ │ │ │ │ ├── about/ │ │ │ │ │ └── about.pb.go │ │ │ │ ├── auth/ │ │ │ │ │ └── auth_page.pb.go │ │ │ │ ├── cart/ │ │ │ │ │ └── cart_page.pb.go │ │ │ │ ├── category/ │ │ │ │ │ └── category_page.pb.go │ │ │ │ ├── checkout/ │ │ │ │ │ └── checkout_page.pb.go │ │ │ │ ├── common/ │ │ │ │ │ └── common.pb.go │ │ │ │ ├── home/ │ │ │ │ │ └── home.pb.go │ │ │ │ ├── order/ │ │ │ │ │ └── order_page.pb.go │ │ │ │ └── product/ │ │ │ │ └── product_page.pb.go │ │ │ ├── infra/ │ │ │ │ ├── mtl/ │ │ │ │ │ ├── log.go │ │ │ │ │ ├── metric.go │ │ │ │ │ ├── mtl.go │ │ │ │ │ └── tracing.go │ │ │ │ └── rpc/ │ │ │ │ └── client.go │ │ │ ├── main.go │ │ │ ├── middleware/ │ │ │ │ ├── auth.go │ │ │ │ └── middleware.go │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── template/ │ │ │ │ ├── about.tmpl │ │ │ │ ├── cart-num.tmpl │ │ │ │ ├── cart.tmpl │ │ │ │ ├── category.tmpl │ │ │ │ ├── checkout.tmpl │ │ │ │ ├── error.tmpl │ │ │ │ ├── footer.tmpl │ │ │ │ ├── header.tmpl │ │ │ │ ├── home.tmpl │ │ │ │ ├── order.tmpl │ │ │ │ ├── product.tmpl │ │ │ │ ├── result.tmpl │ │ │ │ ├── search.tmpl │ │ │ │ ├── sign-in.tmpl │ │ │ │ ├── sign-up.tmpl │ │ │ │ ├── utils.tmpl │ │ │ │ └── waiting.tmpl │ │ │ ├── types/ │ │ │ │ └── order.go │ │ │ └── utils/ │ │ │ ├── constant.go │ │ │ ├── errors.go │ │ │ ├── function.go │ │ │ ├── response.go │ │ │ ├── safe.go │ │ │ └── strings.go │ │ ├── order/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ ├── order.go │ │ │ │ │ └── order_item.go │ │ │ │ └── service/ │ │ │ │ ├── list_order.go │ │ │ │ ├── list_order_test.go │ │ │ │ ├── mark_order_paid.go │ │ │ │ ├── mark_order_paid_test.go │ │ │ │ ├── place_order.go │ │ │ │ └── place_order_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── test/ │ │ │ └── rpc_test.go │ │ ├── payment/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ └── payment.go │ │ │ │ └── service/ │ │ │ │ ├── charge.go │ │ │ │ └── charge_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── middleware/ │ │ │ │ └── mw.go │ │ │ ├── payment.sql │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── utils/ │ │ │ └── errors.go │ │ ├── product/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ ├── category.go │ │ │ │ │ └── product.go │ │ │ │ └── service/ │ │ │ │ ├── get_product.go │ │ │ │ ├── get_product_test.go │ │ │ │ ├── list_products.go │ │ │ │ ├── list_products_test.go │ │ │ │ ├── search_products.go │ │ │ │ └── search_products_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ ├── bootstrap.sh │ │ │ │ └── product.sql │ │ │ └── utils/ │ │ │ └── constant.go │ │ └── user/ │ │ ├── .gitignore │ │ ├── biz/ │ │ │ ├── dal/ │ │ │ │ ├── init.go │ │ │ │ ├── mysql/ │ │ │ │ │ └── init.go │ │ │ │ └── redis/ │ │ │ │ └── init.go │ │ │ ├── model/ │ │ │ │ ├── base.go │ │ │ │ └── user.go │ │ │ └── service/ │ │ │ ├── login.go │ │ │ ├── login_test.go │ │ │ ├── register.go │ │ │ └── register_test.go │ │ ├── build.sh │ │ ├── conf/ │ │ │ ├── conf.go │ │ │ ├── dev/ │ │ │ │ └── conf.yaml │ │ │ ├── online/ │ │ │ │ └── conf.yaml │ │ │ └── test/ │ │ │ └── conf.yaml │ │ ├── docker-compose.yaml │ │ ├── go.mod │ │ ├── go.sum │ │ ├── handler.go │ │ ├── kitex_info.yaml │ │ ├── main.go │ │ ├── readme.md │ │ └── script/ │ │ └── bootstrap.sh │ ├── common/ │ │ ├── clientsuite/ │ │ │ └── client.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── mtl/ │ │ │ ├── log.go │ │ │ ├── metrics.go │ │ │ └── tracing.go │ │ ├── serversuite/ │ │ │ └── server.go │ │ └── utils/ │ │ ├── ip.go │ │ └── kitex.go │ ├── db/ │ │ └── sql/ │ │ └── ini/ │ │ ├── README.md │ │ └── databases.sql │ ├── deploy/ │ │ ├── config/ │ │ │ ├── loki.yml │ │ │ ├── prometheus.yml │ │ │ └── promtail.yml │ │ └── grafana.json │ ├── docker-compose.yaml │ ├── go.work │ ├── gomall.code-workspace │ ├── idl/ │ │ ├── api.proto │ │ ├── cart.proto │ │ ├── checkout.proto │ │ ├── email.proto │ │ ├── frontend/ │ │ │ ├── about.proto │ │ │ ├── auth_page.proto │ │ │ ├── cart_page.proto │ │ │ ├── category_page.proto │ │ │ ├── checkout_page.proto │ │ │ ├── common.proto │ │ │ ├── home.proto │ │ │ ├── order_page.proto │ │ │ └── product_page.proto │ │ ├── order.proto │ │ ├── payment.proto │ │ ├── product.proto │ │ └── user.proto │ ├── rpc_gen/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── kitex_gen/ │ │ │ ├── cart/ │ │ │ │ ├── cart.pb.fast.go │ │ │ │ ├── cart.pb.go │ │ │ │ └── cartservice/ │ │ │ │ ├── cartservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── checkout/ │ │ │ │ ├── checkout.pb.fast.go │ │ │ │ ├── checkout.pb.go │ │ │ │ └── checkoutservice/ │ │ │ │ ├── checkoutservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── email/ │ │ │ │ ├── email.pb.fast.go │ │ │ │ ├── email.pb.go │ │ │ │ └── emailservice/ │ │ │ │ ├── client.go │ │ │ │ ├── emailservice.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── order/ │ │ │ │ ├── order.pb.fast.go │ │ │ │ ├── order.pb.go │ │ │ │ └── orderservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── orderservice.go │ │ │ │ └── server.go │ │ │ ├── payment/ │ │ │ │ ├── payment.pb.fast.go │ │ │ │ ├── payment.pb.go │ │ │ │ └── paymentservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── paymentservice.go │ │ │ │ └── server.go │ │ │ ├── product/ │ │ │ │ ├── product.pb.fast.go │ │ │ │ ├── product.pb.go │ │ │ │ └── productcatalogservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── productcatalogservice.go │ │ │ │ └── server.go │ │ │ └── user/ │ │ │ ├── user.pb.fast.go │ │ │ ├── user.pb.go │ │ │ └── userservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── server.go │ │ │ └── userservice.go │ │ └── rpc/ │ │ ├── cart/ │ │ │ ├── cart_client.go │ │ │ ├── cart_default.go │ │ │ └── cart_init.go │ │ ├── checkout/ │ │ │ ├── checkout_client.go │ │ │ ├── checkout_default.go │ │ │ └── checkout_init.go │ │ ├── email/ │ │ │ ├── email_client.go │ │ │ ├── email_default.go │ │ │ └── email_init.go │ │ ├── order/ │ │ │ ├── order_client.go │ │ │ ├── order_default.go │ │ │ └── order_init.go │ │ ├── payment/ │ │ │ ├── payment_client.go │ │ │ ├── payment_default.go │ │ │ └── payment_init.go │ │ ├── product/ │ │ │ ├── product_client.go │ │ │ ├── product_default.go │ │ │ └── product_init.go │ │ └── user/ │ │ ├── user_client.go │ │ ├── user_default.go │ │ └── user_init.go │ ├── scripts/ │ │ ├── copy_env.sh │ │ ├── fix.sh │ │ ├── gen.sh │ │ ├── list_app.sh │ │ ├── run.sh │ │ ├── run_all.sh │ │ ├── tidy.sh │ │ └── vet.sh │ └── tutorial/ │ ├── README.md │ ├── ch01/ │ │ ├── go.work │ │ └── hello_world/ │ │ ├── go.mod │ │ ├── go.sum │ │ └── main.go │ ├── ch02/ │ │ ├── Makefile │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ └── idl/ │ │ ├── echo.proto │ │ └── echo.thrift │ ├── ch03/ │ │ ├── Makefile │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ └── client/ │ │ │ │ │ └── client.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ └── idl/ │ │ ├── echo.proto │ │ └── echo.thrift │ ├── ch04/ │ │ ├── Makefile │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ └── client/ │ │ │ │ │ └── client.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ └── idl/ │ │ ├── echo.proto │ │ └── echo.thrift │ ├── ch05/ │ │ ├── Makefile │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ └── idl/ │ │ ├── echo.proto │ │ └── echo.thrift │ ├── ch06/ │ │ ├── Makefile │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ └── idl/ │ │ ├── echo.proto │ │ └── echo.thrift │ ├── ch07/ │ │ ├── Makefile │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ └── middleware.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ └── client/ │ │ │ │ └── client.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ └── idl/ │ │ ├── echo.proto │ │ └── echo.thrift │ ├── ch08/ │ │ ├── Makefile │ │ ├── app/ │ │ │ └── frontend/ │ │ │ ├── .gitignore │ │ │ ├── .hz │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── handler/ │ │ │ │ │ └── home/ │ │ │ │ │ ├── home_service.go │ │ │ │ │ └── home_service_test.go │ │ │ │ ├── router/ │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ └── register.go │ │ │ │ ├── service/ │ │ │ │ │ └── home.go │ │ │ │ └── utils/ │ │ │ │ └── resp.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── hertz_gen/ │ │ │ │ ├── api/ │ │ │ │ │ └── api.pb.go │ │ │ │ └── frontend/ │ │ │ │ └── home/ │ │ │ │ └── home.pb.go │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── template/ │ │ │ ├── footer.tmpl │ │ │ ├── header.tmpl │ │ │ └── home.tmpl │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ └── client/ │ │ │ │ └── client.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ └── idl/ │ │ ├── api.proto │ │ ├── echo.proto │ │ ├── echo.thrift │ │ └── frontend/ │ │ └── home.proto │ ├── ch09/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── app/ │ │ │ ├── frontend/ │ │ │ │ ├── .air.toml │ │ │ │ ├── .gitignore │ │ │ │ ├── .hz │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_service.go │ │ │ │ │ │ │ └── auth_service_test.go │ │ │ │ │ │ └── home/ │ │ │ │ │ │ ├── home_service.go │ │ │ │ │ │ └── home_service_test.go │ │ │ │ │ ├── router/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ └── register.go │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ ├── login.go │ │ │ │ │ │ ├── logout.go │ │ │ │ │ │ └── register.go │ │ │ │ │ └── utils/ │ │ │ │ │ └── resp.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── hertz_gen/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── api.pb.go │ │ │ │ │ └── frontend/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── auth_page.pb.go │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── common.pb.go │ │ │ │ │ └── home/ │ │ │ │ │ └── home.pb.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ ├── client.go │ │ │ │ │ └── client_test.go │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ ├── auth.go │ │ │ │ │ └── middleware.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ ├── template/ │ │ │ │ │ ├── about.tmpl │ │ │ │ │ ├── footer.tmpl │ │ │ │ │ ├── header.tmpl │ │ │ │ │ ├── home.tmpl │ │ │ │ │ ├── required.tmpl │ │ │ │ │ ├── sign-in.tmpl │ │ │ │ │ └── sign-up.tmpl │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ ├── errors.go │ │ │ │ └── function.go │ │ │ └── user/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ └── user.go │ │ │ │ └── service/ │ │ │ │ ├── login.go │ │ │ │ ├── login_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── db/ │ │ │ └── sql/ │ │ │ └── ini/ │ │ │ ├── README.md │ │ │ └── databases.sql │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ └── client/ │ │ │ │ └── client.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── idl/ │ │ │ ├── api.proto │ │ │ ├── echo.proto │ │ │ ├── echo.thrift │ │ │ ├── frontend/ │ │ │ │ ├── auth_page.proto │ │ │ │ ├── common.proto │ │ │ │ └── home.proto │ │ │ └── user.proto │ │ └── rpc_gen/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── kitex_gen/ │ │ │ └── user/ │ │ │ ├── user.pb.fast.go │ │ │ ├── user.pb.go │ │ │ └── userservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── server.go │ │ │ └── userservice.go │ │ └── rpc/ │ │ └── user/ │ │ ├── user_client.go │ │ ├── user_default.go │ │ └── user_init.go │ ├── ch10/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── app/ │ │ │ ├── frontend/ │ │ │ │ ├── .air.toml │ │ │ │ ├── .gitignore │ │ │ │ ├── .hz │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_service.go │ │ │ │ │ │ │ └── auth_service_test.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_service.go │ │ │ │ │ │ │ └── category_service_test.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home_service.go │ │ │ │ │ │ │ └── home_service_test.go │ │ │ │ │ │ └── product/ │ │ │ │ │ │ ├── product_service.go │ │ │ │ │ │ └── product_service_test.go │ │ │ │ │ ├── router/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── product/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── product_page.go │ │ │ │ │ │ └── register.go │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ ├── get_product.go │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ ├── login.go │ │ │ │ │ │ ├── logout.go │ │ │ │ │ │ ├── register.go │ │ │ │ │ │ └── search_products.go │ │ │ │ │ └── utils/ │ │ │ │ │ └── resp.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── hertz_gen/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── api.pb.go │ │ │ │ │ └── frontend/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── auth_page.pb.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── category_page.pb.go │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── common.pb.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ └── home.pb.go │ │ │ │ │ └── product/ │ │ │ │ │ └── product_page.pb.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ ├── client.go │ │ │ │ │ └── client_test.go │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ ├── auth.go │ │ │ │ │ └── middleware.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ ├── template/ │ │ │ │ │ ├── about.tmpl │ │ │ │ │ ├── category.tmpl │ │ │ │ │ ├── footer.tmpl │ │ │ │ │ ├── header.tmpl │ │ │ │ │ ├── home.tmpl │ │ │ │ │ ├── product.tmpl │ │ │ │ │ ├── required.tmpl │ │ │ │ │ ├── search.tmpl │ │ │ │ │ ├── sign-in.tmpl │ │ │ │ │ └── sign-up.tmpl │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ ├── errors.go │ │ │ │ └── function.go │ │ │ ├── product/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ └── product.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── get_product.go │ │ │ │ │ ├── get_product_test.go │ │ │ │ │ ├── list_products.go │ │ │ │ │ ├── list_products_test.go │ │ │ │ │ ├── search_products.go │ │ │ │ │ └── search_products_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── user/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ └── user.go │ │ │ │ └── service/ │ │ │ │ ├── login.go │ │ │ │ ├── login_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── db/ │ │ │ └── sql/ │ │ │ └── ini/ │ │ │ ├── README.md │ │ │ └── databases.sql │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ └── client/ │ │ │ │ └── client.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── idl/ │ │ │ ├── api.proto │ │ │ ├── echo.proto │ │ │ ├── echo.thrift │ │ │ ├── frontend/ │ │ │ │ ├── auth_page.proto │ │ │ │ ├── category_page.proto │ │ │ │ ├── common.proto │ │ │ │ ├── home.proto │ │ │ │ └── product_page.proto │ │ │ ├── product.proto │ │ │ └── user.proto │ │ └── rpc_gen/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── kitex_gen/ │ │ │ ├── product/ │ │ │ │ ├── product.pb.fast.go │ │ │ │ ├── product.pb.go │ │ │ │ └── productcatalogservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── productcatalogservice.go │ │ │ │ └── server.go │ │ │ └── user/ │ │ │ ├── user.pb.fast.go │ │ │ ├── user.pb.go │ │ │ └── userservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── server.go │ │ │ └── userservice.go │ │ └── rpc/ │ │ ├── product/ │ │ │ ├── product_client.go │ │ │ ├── product_default.go │ │ │ └── product_init.go │ │ └── user/ │ │ ├── user_client.go │ │ ├── user_default.go │ │ └── user_init.go │ ├── ch11/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── app/ │ │ │ ├── cart/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── cart.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── add_item.go │ │ │ │ │ ├── add_item_test.go │ │ │ │ │ ├── empty_cart.go │ │ │ │ │ ├── empty_cart_test.go │ │ │ │ │ ├── get_cart.go │ │ │ │ │ └── get_cart_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ └── utils/ │ │ │ │ └── errors.go │ │ │ ├── frontend/ │ │ │ │ ├── .air.toml │ │ │ │ ├── .gitignore │ │ │ │ ├── .hz │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_service.go │ │ │ │ │ │ │ └── auth_service_test.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_service.go │ │ │ │ │ │ │ └── cart_service_test.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_service.go │ │ │ │ │ │ │ └── category_service_test.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home_service.go │ │ │ │ │ │ │ └── home_service_test.go │ │ │ │ │ │ └── product/ │ │ │ │ │ │ ├── product_service.go │ │ │ │ │ │ └── product_service_test.go │ │ │ │ │ ├── router/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── product/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── product_page.go │ │ │ │ │ │ └── register.go │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── add_cart_item.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ ├── get_cart.go │ │ │ │ │ │ ├── get_product.go │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ ├── login.go │ │ │ │ │ │ ├── logout.go │ │ │ │ │ │ ├── register.go │ │ │ │ │ │ └── search_products.go │ │ │ │ │ └── utils/ │ │ │ │ │ └── resp.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── hertz_gen/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── api.pb.go │ │ │ │ │ └── frontend/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── auth_page.pb.go │ │ │ │ │ ├── cart/ │ │ │ │ │ │ └── cart_page.pb.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── category_page.pb.go │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── common.pb.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ └── home.pb.go │ │ │ │ │ └── product/ │ │ │ │ │ └── product_page.pb.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ ├── client.go │ │ │ │ │ └── client_test.go │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ ├── auth.go │ │ │ │ │ └── middleware.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ ├── template/ │ │ │ │ │ ├── about.tmpl │ │ │ │ │ ├── cart-num.tmpl │ │ │ │ │ ├── cart.tmpl │ │ │ │ │ ├── category.tmpl │ │ │ │ │ ├── footer.tmpl │ │ │ │ │ ├── header.tmpl │ │ │ │ │ ├── home.tmpl │ │ │ │ │ ├── product.tmpl │ │ │ │ │ ├── required.tmpl │ │ │ │ │ ├── search.tmpl │ │ │ │ │ ├── sign-in.tmpl │ │ │ │ │ └── sign-up.tmpl │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ ├── errors.go │ │ │ │ └── function.go │ │ │ ├── product/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ └── product.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── get_product.go │ │ │ │ │ ├── get_product_test.go │ │ │ │ │ ├── list_products.go │ │ │ │ │ ├── list_products_test.go │ │ │ │ │ ├── search_products.go │ │ │ │ │ └── search_products_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ ├── bootstrap.sh │ │ │ │ │ └── product.sql │ │ │ │ └── utils/ │ │ │ │ └── constant.go │ │ │ └── user/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ └── user.go │ │ │ │ └── service/ │ │ │ │ ├── login.go │ │ │ │ ├── login_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── db/ │ │ │ └── sql/ │ │ │ └── ini/ │ │ │ ├── README.md │ │ │ └── databases.sql │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ └── client/ │ │ │ │ └── client.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── idl/ │ │ │ ├── api.proto │ │ │ ├── cart.proto │ │ │ ├── echo.proto │ │ │ ├── echo.thrift │ │ │ ├── frontend/ │ │ │ │ ├── auth_page.proto │ │ │ │ ├── cart_page.proto │ │ │ │ ├── category_page.proto │ │ │ │ ├── common.proto │ │ │ │ ├── home.proto │ │ │ │ └── product_page.proto │ │ │ ├── product.proto │ │ │ └── user.proto │ │ └── rpc_gen/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── kitex_gen/ │ │ │ ├── cart/ │ │ │ │ ├── cart.pb.fast.go │ │ │ │ ├── cart.pb.go │ │ │ │ └── cartservice/ │ │ │ │ ├── cartservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── product/ │ │ │ │ ├── product.pb.fast.go │ │ │ │ ├── product.pb.go │ │ │ │ └── productcatalogservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── productcatalogservice.go │ │ │ │ └── server.go │ │ │ └── user/ │ │ │ ├── user.pb.fast.go │ │ │ ├── user.pb.go │ │ │ └── userservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── server.go │ │ │ └── userservice.go │ │ └── rpc/ │ │ ├── cart/ │ │ │ ├── cart_client.go │ │ │ ├── cart_default.go │ │ │ └── cart_init.go │ │ ├── product/ │ │ │ ├── product_client.go │ │ │ ├── product_default.go │ │ │ └── product_init.go │ │ └── user/ │ │ ├── user_client.go │ │ ├── user_default.go │ │ └── user_init.go │ ├── ch12/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── app/ │ │ │ ├── cart/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── cart.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── add_item.go │ │ │ │ │ ├── add_item_test.go │ │ │ │ │ ├── empty_cart.go │ │ │ │ │ ├── empty_cart_test.go │ │ │ │ │ ├── get_cart.go │ │ │ │ │ └── get_cart_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ └── utils/ │ │ │ │ └── errors.go │ │ │ ├── checkout/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── checkout.go │ │ │ │ │ └── checkout_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── frontend/ │ │ │ │ ├── .air.toml │ │ │ │ ├── .gitignore │ │ │ │ ├── .hz │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_service.go │ │ │ │ │ │ │ └── auth_service_test.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_service.go │ │ │ │ │ │ │ └── cart_service_test.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_service.go │ │ │ │ │ │ │ └── category_service_test.go │ │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ │ ├── checkout_service.go │ │ │ │ │ │ │ └── checkout_service_test.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home_service.go │ │ │ │ │ │ │ └── home_service_test.go │ │ │ │ │ │ └── product/ │ │ │ │ │ │ ├── product_service.go │ │ │ │ │ │ └── product_service_test.go │ │ │ │ │ ├── router/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ │ ├── checkout_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── product/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── product_page.go │ │ │ │ │ │ └── register.go │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── add_cart_item.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ ├── checkout.go │ │ │ │ │ │ ├── checkout_result.go │ │ │ │ │ │ ├── checkout_waiting.go │ │ │ │ │ │ ├── get_cart.go │ │ │ │ │ │ ├── get_product.go │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ ├── login.go │ │ │ │ │ │ ├── logout.go │ │ │ │ │ │ ├── register.go │ │ │ │ │ │ └── search_products.go │ │ │ │ │ └── utils/ │ │ │ │ │ └── resp.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── hertz_gen/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── api.pb.go │ │ │ │ │ └── frontend/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── auth_page.pb.go │ │ │ │ │ ├── cart/ │ │ │ │ │ │ └── cart_page.pb.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── category_page.pb.go │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ └── checkout_page.pb.go │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── common.pb.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ └── home.pb.go │ │ │ │ │ └── product/ │ │ │ │ │ └── product_page.pb.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ ├── client.go │ │ │ │ │ └── client_test.go │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ ├── auth.go │ │ │ │ │ └── middleware.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ ├── template/ │ │ │ │ │ ├── about.tmpl │ │ │ │ │ ├── cart-num.tmpl │ │ │ │ │ ├── cart.tmpl │ │ │ │ │ ├── category.tmpl │ │ │ │ │ ├── checkout.tmpl │ │ │ │ │ ├── footer.tmpl │ │ │ │ │ ├── header.tmpl │ │ │ │ │ ├── home.tmpl │ │ │ │ │ ├── product.tmpl │ │ │ │ │ ├── required.tmpl │ │ │ │ │ ├── result.tmpl │ │ │ │ │ ├── search.tmpl │ │ │ │ │ ├── sign-in.tmpl │ │ │ │ │ ├── sign-up.tmpl │ │ │ │ │ └── waiting.tmpl │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ ├── errors.go │ │ │ │ └── function.go │ │ │ ├── payment/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── payment.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── charge.go │ │ │ │ │ └── charge_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── product/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ └── product.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── get_product.go │ │ │ │ │ ├── get_product_test.go │ │ │ │ │ ├── list_products.go │ │ │ │ │ ├── list_products_test.go │ │ │ │ │ ├── search_products.go │ │ │ │ │ └── search_products_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ ├── bootstrap.sh │ │ │ │ │ └── product.sql │ │ │ │ └── utils/ │ │ │ │ └── constant.go │ │ │ └── user/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ └── user.go │ │ │ │ └── service/ │ │ │ │ ├── login.go │ │ │ │ ├── login_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── db/ │ │ │ └── sql/ │ │ │ └── ini/ │ │ │ ├── README.md │ │ │ └── databases.sql │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ └── client/ │ │ │ │ └── client.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── idl/ │ │ │ ├── api.proto │ │ │ ├── cart.proto │ │ │ ├── checkout.proto │ │ │ ├── echo.proto │ │ │ ├── echo.thrift │ │ │ ├── frontend/ │ │ │ │ ├── auth_page.proto │ │ │ │ ├── cart_page.proto │ │ │ │ ├── category_page.proto │ │ │ │ ├── checkout_page.proto │ │ │ │ ├── common.proto │ │ │ │ ├── home.proto │ │ │ │ └── product_page.proto │ │ │ ├── payment.proto │ │ │ ├── product.proto │ │ │ └── user.proto │ │ └── rpc_gen/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── kitex_gen/ │ │ │ ├── cart/ │ │ │ │ ├── cart.pb.fast.go │ │ │ │ ├── cart.pb.go │ │ │ │ └── cartservice/ │ │ │ │ ├── cartservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── checkout/ │ │ │ │ ├── checkout.pb.fast.go │ │ │ │ ├── checkout.pb.go │ │ │ │ └── checkoutservice/ │ │ │ │ ├── checkoutservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── payment/ │ │ │ │ ├── payment.pb.fast.go │ │ │ │ ├── payment.pb.go │ │ │ │ └── paymentservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── paymentservice.go │ │ │ │ └── server.go │ │ │ ├── product/ │ │ │ │ ├── product.pb.fast.go │ │ │ │ ├── product.pb.go │ │ │ │ └── productcatalogservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── productcatalogservice.go │ │ │ │ └── server.go │ │ │ └── user/ │ │ │ ├── user.pb.fast.go │ │ │ ├── user.pb.go │ │ │ └── userservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── server.go │ │ │ └── userservice.go │ │ └── rpc/ │ │ ├── cart/ │ │ │ ├── cart_client.go │ │ │ ├── cart_default.go │ │ │ └── cart_init.go │ │ ├── checkout/ │ │ │ ├── checkout_client.go │ │ │ ├── checkout_default.go │ │ │ └── checkout_init.go │ │ ├── payment/ │ │ │ ├── payment_client.go │ │ │ ├── payment_default.go │ │ │ └── payment_init.go │ │ ├── product/ │ │ │ ├── product_client.go │ │ │ ├── product_default.go │ │ │ └── product_init.go │ │ └── user/ │ │ ├── user_client.go │ │ ├── user_default.go │ │ └── user_init.go │ ├── ch13/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── app/ │ │ │ ├── cart/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── cart.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── add_item.go │ │ │ │ │ ├── add_item_test.go │ │ │ │ │ ├── empty_cart.go │ │ │ │ │ ├── empty_cart_test.go │ │ │ │ │ ├── get_cart.go │ │ │ │ │ └── get_cart_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ └── utils/ │ │ │ │ └── errors.go │ │ │ ├── checkout/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── checkout.go │ │ │ │ │ └── checkout_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── frontend/ │ │ │ │ ├── .air.toml │ │ │ │ ├── .gitignore │ │ │ │ ├── .hz │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_service.go │ │ │ │ │ │ │ └── auth_service_test.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_service.go │ │ │ │ │ │ │ └── cart_service_test.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_service.go │ │ │ │ │ │ │ └── category_service_test.go │ │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ │ ├── checkout_service.go │ │ │ │ │ │ │ └── checkout_service_test.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home_service.go │ │ │ │ │ │ │ └── home_service_test.go │ │ │ │ │ │ ├── order/ │ │ │ │ │ │ │ ├── order_service.go │ │ │ │ │ │ │ └── order_service_test.go │ │ │ │ │ │ └── product/ │ │ │ │ │ │ ├── product_service.go │ │ │ │ │ │ └── product_service_test.go │ │ │ │ │ ├── router/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ │ ├── checkout_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── order/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── order_page.go │ │ │ │ │ │ ├── product/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── product_page.go │ │ │ │ │ │ └── register.go │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── add_cart_item.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ ├── checkout.go │ │ │ │ │ │ ├── checkout_result.go │ │ │ │ │ │ ├── checkout_waiting.go │ │ │ │ │ │ ├── get_cart.go │ │ │ │ │ │ ├── get_product.go │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ ├── login.go │ │ │ │ │ │ ├── logout.go │ │ │ │ │ │ ├── order_list.go │ │ │ │ │ │ ├── register.go │ │ │ │ │ │ └── search_products.go │ │ │ │ │ └── utils/ │ │ │ │ │ └── resp.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── hertz_gen/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── api.pb.go │ │ │ │ │ └── frontend/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── auth_page.pb.go │ │ │ │ │ ├── cart/ │ │ │ │ │ │ └── cart_page.pb.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── category_page.pb.go │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ └── checkout_page.pb.go │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── common.pb.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ └── home.pb.go │ │ │ │ │ ├── order/ │ │ │ │ │ │ └── order_page.pb.go │ │ │ │ │ └── product/ │ │ │ │ │ └── product_page.pb.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ ├── client.go │ │ │ │ │ └── client_test.go │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ ├── auth.go │ │ │ │ │ └── middleware.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ ├── template/ │ │ │ │ │ ├── about.tmpl │ │ │ │ │ ├── cart-num.tmpl │ │ │ │ │ ├── cart.tmpl │ │ │ │ │ ├── category.tmpl │ │ │ │ │ ├── checkout.tmpl │ │ │ │ │ ├── footer.tmpl │ │ │ │ │ ├── header.tmpl │ │ │ │ │ ├── home.tmpl │ │ │ │ │ ├── order.tmpl │ │ │ │ │ ├── product.tmpl │ │ │ │ │ ├── required.tmpl │ │ │ │ │ ├── result.tmpl │ │ │ │ │ ├── search.tmpl │ │ │ │ │ ├── sign-in.tmpl │ │ │ │ │ ├── sign-up.tmpl │ │ │ │ │ └── waiting.tmpl │ │ │ │ ├── types/ │ │ │ │ │ └── order.go │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ ├── errors.go │ │ │ │ └── function.go │ │ │ ├── order/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── order.go │ │ │ │ │ │ └── order_item.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── list_order.go │ │ │ │ │ ├── list_order_test.go │ │ │ │ │ ├── place_order.go │ │ │ │ │ └── place_order_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── payment/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── payment.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── charge.go │ │ │ │ │ └── charge_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── product/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ └── product.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── get_product.go │ │ │ │ │ ├── get_product_test.go │ │ │ │ │ ├── list_products.go │ │ │ │ │ ├── list_products_test.go │ │ │ │ │ ├── search_products.go │ │ │ │ │ └── search_products_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ ├── bootstrap.sh │ │ │ │ │ └── product.sql │ │ │ │ └── utils/ │ │ │ │ └── constant.go │ │ │ └── user/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ └── user.go │ │ │ │ └── service/ │ │ │ │ ├── login.go │ │ │ │ ├── login_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── db/ │ │ │ └── sql/ │ │ │ └── ini/ │ │ │ ├── README.md │ │ │ └── databases.sql │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ └── client/ │ │ │ │ └── client.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── idl/ │ │ │ ├── api.proto │ │ │ ├── cart.proto │ │ │ ├── checkout.proto │ │ │ ├── echo.proto │ │ │ ├── echo.thrift │ │ │ ├── frontend/ │ │ │ │ ├── auth_page.proto │ │ │ │ ├── cart_page.proto │ │ │ │ ├── category_page.proto │ │ │ │ ├── checkout_page.proto │ │ │ │ ├── common.proto │ │ │ │ ├── home.proto │ │ │ │ ├── order_page.proto │ │ │ │ └── product_page.proto │ │ │ ├── order.proto │ │ │ ├── payment.proto │ │ │ ├── product.proto │ │ │ └── user.proto │ │ └── rpc_gen/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── kitex_gen/ │ │ │ ├── cart/ │ │ │ │ ├── cart.pb.fast.go │ │ │ │ ├── cart.pb.go │ │ │ │ └── cartservice/ │ │ │ │ ├── cartservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── checkout/ │ │ │ │ ├── checkout.pb.fast.go │ │ │ │ ├── checkout.pb.go │ │ │ │ └── checkoutservice/ │ │ │ │ ├── checkoutservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── order/ │ │ │ │ ├── order.pb.fast.go │ │ │ │ ├── order.pb.go │ │ │ │ └── orderservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── orderservice.go │ │ │ │ └── server.go │ │ │ ├── payment/ │ │ │ │ ├── payment.pb.fast.go │ │ │ │ ├── payment.pb.go │ │ │ │ └── paymentservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── paymentservice.go │ │ │ │ └── server.go │ │ │ ├── product/ │ │ │ │ ├── product.pb.fast.go │ │ │ │ ├── product.pb.go │ │ │ │ └── productcatalogservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── productcatalogservice.go │ │ │ │ └── server.go │ │ │ └── user/ │ │ │ ├── user.pb.fast.go │ │ │ ├── user.pb.go │ │ │ └── userservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── server.go │ │ │ └── userservice.go │ │ └── rpc/ │ │ ├── cart/ │ │ │ ├── cart_client.go │ │ │ ├── cart_default.go │ │ │ └── cart_init.go │ │ ├── checkout/ │ │ │ ├── checkout_client.go │ │ │ ├── checkout_default.go │ │ │ └── checkout_init.go │ │ ├── order/ │ │ │ ├── order_client.go │ │ │ ├── order_default.go │ │ │ └── order_init.go │ │ ├── payment/ │ │ │ ├── payment_client.go │ │ │ ├── payment_default.go │ │ │ └── payment_init.go │ │ ├── product/ │ │ │ ├── product_client.go │ │ │ ├── product_default.go │ │ │ └── product_init.go │ │ └── user/ │ │ ├── user_client.go │ │ ├── user_default.go │ │ └── user_init.go │ ├── ch14/ │ │ ├── Makefile │ │ ├── app/ │ │ │ ├── cart/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── cart.go │ │ │ │ │ │ └── cart_test.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── add_item.go │ │ │ │ │ ├── add_item_test.go │ │ │ │ │ ├── empty_cart.go │ │ │ │ │ ├── empty_cart_test.go │ │ │ │ │ ├── get_cart.go │ │ │ │ │ └── get_cart_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ ├── bootstrap.sh │ │ │ │ │ └── cart.sql │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ └── errors.go │ │ │ ├── checkout/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── checkout.go │ │ │ │ │ └── checkout_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ ├── mq/ │ │ │ │ │ │ └── nats.go │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ └── utils/ │ │ │ │ └── errors.go │ │ │ ├── email/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── consumer/ │ │ │ │ │ │ ├── consumer.go │ │ │ │ │ │ └── email/ │ │ │ │ │ │ ├── email.go │ │ │ │ │ │ └── email_test.go │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── send.go │ │ │ │ │ └── send_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ ├── mq/ │ │ │ │ │ │ └── nats.go │ │ │ │ │ └── notify/ │ │ │ │ │ └── email.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── frontend/ │ │ │ │ ├── .air.toml │ │ │ │ ├── .gitignore │ │ │ │ ├── .hz │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_service.go │ │ │ │ │ │ │ └── auth_service_test.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_service.go │ │ │ │ │ │ │ └── cart_service_test.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_service.go │ │ │ │ │ │ │ └── category_service_test.go │ │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ │ ├── checkout_service.go │ │ │ │ │ │ │ └── checkout_service_test.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home_service.go │ │ │ │ │ │ │ └── home_service_test.go │ │ │ │ │ │ ├── order/ │ │ │ │ │ │ │ ├── order_service.go │ │ │ │ │ │ │ └── order_service_test.go │ │ │ │ │ │ └── product/ │ │ │ │ │ │ ├── product_service.go │ │ │ │ │ │ └── product_service_test.go │ │ │ │ │ ├── router/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ │ ├── checkout_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── order/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── order_page.go │ │ │ │ │ │ ├── product/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── product_page.go │ │ │ │ │ │ └── register.go │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── add_cart_item.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ ├── checkout.go │ │ │ │ │ │ ├── checkout_result.go │ │ │ │ │ │ ├── checkout_waiting.go │ │ │ │ │ │ ├── get_cart.go │ │ │ │ │ │ ├── get_product.go │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ ├── login.go │ │ │ │ │ │ ├── logout.go │ │ │ │ │ │ ├── order_list.go │ │ │ │ │ │ └── register.go │ │ │ │ │ └── utils/ │ │ │ │ │ └── resp.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── hertz_gen/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── api.pb.go │ │ │ │ │ └── frontend/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── auth_page.pb.go │ │ │ │ │ ├── cart/ │ │ │ │ │ │ └── cart_page.pb.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── category_page.pb.go │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ └── checkout_page.pb.go │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── common.pb.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ └── home.pb.go │ │ │ │ │ ├── order/ │ │ │ │ │ │ └── order_page.pb.go │ │ │ │ │ └── product/ │ │ │ │ │ └── product_page.pb.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ ├── auth.go │ │ │ │ │ └── middleware.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ ├── template/ │ │ │ │ │ ├── cart-num.tmpl │ │ │ │ │ ├── cart.tmpl │ │ │ │ │ ├── category.tmpl │ │ │ │ │ ├── checkout.tmpl │ │ │ │ │ ├── footer.tmpl │ │ │ │ │ ├── header.tmpl │ │ │ │ │ ├── home.tmpl │ │ │ │ │ ├── order.tmpl │ │ │ │ │ ├── product.tmpl │ │ │ │ │ ├── result.tmpl │ │ │ │ │ ├── search.tmpl │ │ │ │ │ ├── sign-in.tmpl │ │ │ │ │ ├── sign-up.tmpl │ │ │ │ │ ├── utils.tmpl │ │ │ │ │ └── waiting.tmpl │ │ │ │ ├── types/ │ │ │ │ │ └── order.go │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ ├── errors.go │ │ │ │ ├── function.go │ │ │ │ ├── response.go │ │ │ │ ├── safe.go │ │ │ │ └── strings.go │ │ │ ├── order/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── order.go │ │ │ │ │ │ └── order_item.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── list_order.go │ │ │ │ │ ├── list_order_test.go │ │ │ │ │ ├── place_order.go │ │ │ │ │ └── place_order_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── payment/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ └── payment.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── charge.go │ │ │ │ │ └── charge_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ └── mw.go │ │ │ │ ├── payment.sql │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ └── utils/ │ │ │ │ └── errors.go │ │ │ ├── product/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ └── product.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── get_product.go │ │ │ │ │ ├── get_product_test.go │ │ │ │ │ ├── list_products.go │ │ │ │ │ ├── list_products_test.go │ │ │ │ │ ├── search_products.go │ │ │ │ │ └── search_products_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ ├── bootstrap.sh │ │ │ │ │ └── product.sql │ │ │ │ └── utils/ │ │ │ │ └── constant.go │ │ │ └── user/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ └── user.go │ │ │ │ └── service/ │ │ │ │ ├── login.go │ │ │ │ ├── login_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── db/ │ │ │ └── sql/ │ │ │ └── ini/ │ │ │ ├── README.md │ │ │ └── databases.sql │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ └── client/ │ │ │ │ └── client.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── idl/ │ │ │ ├── api.proto │ │ │ ├── cart.proto │ │ │ ├── checkout.proto │ │ │ ├── echo.proto │ │ │ ├── echo.thrift │ │ │ ├── email.proto │ │ │ ├── frontend/ │ │ │ │ ├── auth_page.proto │ │ │ │ ├── cart_page.proto │ │ │ │ ├── category_page.proto │ │ │ │ ├── checkout_page.proto │ │ │ │ ├── common.proto │ │ │ │ ├── home.proto │ │ │ │ ├── order_page.proto │ │ │ │ └── product_page.proto │ │ │ ├── order.proto │ │ │ ├── payment.proto │ │ │ ├── product.proto │ │ │ └── user.proto │ │ └── rpc_gen/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── kitex_gen/ │ │ │ ├── cart/ │ │ │ │ ├── cart.pb.fast.go │ │ │ │ ├── cart.pb.go │ │ │ │ └── cartservice/ │ │ │ │ ├── cartservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── checkout/ │ │ │ │ ├── checkout.pb.fast.go │ │ │ │ ├── checkout.pb.go │ │ │ │ └── checkoutservice/ │ │ │ │ ├── checkoutservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── email/ │ │ │ │ ├── email.pb.fast.go │ │ │ │ ├── email.pb.go │ │ │ │ └── emailservice/ │ │ │ │ ├── client.go │ │ │ │ ├── emailservice.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── order/ │ │ │ │ ├── order.pb.fast.go │ │ │ │ ├── order.pb.go │ │ │ │ └── orderservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── orderservice.go │ │ │ │ └── server.go │ │ │ ├── payment/ │ │ │ │ ├── payment.pb.fast.go │ │ │ │ ├── payment.pb.go │ │ │ │ └── paymentservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── paymentservice.go │ │ │ │ └── server.go │ │ │ ├── product/ │ │ │ │ ├── product.pb.fast.go │ │ │ │ ├── product.pb.go │ │ │ │ └── productcatalogservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── productcatalogservice.go │ │ │ │ └── server.go │ │ │ └── user/ │ │ │ ├── user.pb.fast.go │ │ │ ├── user.pb.go │ │ │ └── userservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── server.go │ │ │ └── userservice.go │ │ └── rpc/ │ │ ├── cart/ │ │ │ ├── cart_client.go │ │ │ ├── cart_default.go │ │ │ └── cart_init.go │ │ ├── checkout/ │ │ │ ├── checkout_client.go │ │ │ ├── checkout_default.go │ │ │ └── checkout_init.go │ │ ├── email/ │ │ │ ├── email_client.go │ │ │ ├── email_default.go │ │ │ └── email_init.go │ │ ├── order/ │ │ │ ├── order_client.go │ │ │ ├── order_default.go │ │ │ └── order_init.go │ │ ├── payment/ │ │ │ ├── payment_client.go │ │ │ ├── payment_default.go │ │ │ └── payment_init.go │ │ ├── product/ │ │ │ ├── product_client.go │ │ │ ├── product_default.go │ │ │ └── product_init.go │ │ └── user/ │ │ ├── user_client.go │ │ ├── user_default.go │ │ └── user_init.go │ ├── ch15/ │ │ ├── Makefile │ │ ├── app/ │ │ │ ├── cart/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── cart.go │ │ │ │ │ │ └── cart_test.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── add_item.go │ │ │ │ │ ├── add_item_test.go │ │ │ │ │ ├── empty_cart.go │ │ │ │ │ ├── empty_cart_test.go │ │ │ │ │ ├── get_cart.go │ │ │ │ │ └── get_cart_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ ├── bootstrap.sh │ │ │ │ │ └── cart.sql │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ └── errors.go │ │ │ ├── checkout/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── checkout.go │ │ │ │ │ └── checkout_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ ├── mq/ │ │ │ │ │ │ └── nats.go │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ └── utils/ │ │ │ │ └── errors.go │ │ │ ├── email/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── consumer/ │ │ │ │ │ │ ├── consumer.go │ │ │ │ │ │ └── email/ │ │ │ │ │ │ ├── email.go │ │ │ │ │ │ └── email_test.go │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── send.go │ │ │ │ │ └── send_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ ├── mq/ │ │ │ │ │ │ └── nats.go │ │ │ │ │ └── notify/ │ │ │ │ │ └── email.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── frontend/ │ │ │ │ ├── .air.toml │ │ │ │ ├── .gitignore │ │ │ │ ├── .hz │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_service.go │ │ │ │ │ │ │ └── auth_service_test.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_service.go │ │ │ │ │ │ │ └── cart_service_test.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_service.go │ │ │ │ │ │ │ └── category_service_test.go │ │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ │ ├── checkout_service.go │ │ │ │ │ │ │ └── checkout_service_test.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home_service.go │ │ │ │ │ │ │ └── home_service_test.go │ │ │ │ │ │ ├── order/ │ │ │ │ │ │ │ ├── order_service.go │ │ │ │ │ │ │ └── order_service_test.go │ │ │ │ │ │ └── product/ │ │ │ │ │ │ ├── product_service.go │ │ │ │ │ │ └── product_service_test.go │ │ │ │ │ ├── router/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ │ ├── checkout_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── order/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── order_page.go │ │ │ │ │ │ ├── product/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── product_page.go │ │ │ │ │ │ └── register.go │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── add_cart_item.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ ├── checkout.go │ │ │ │ │ │ ├── checkout_result.go │ │ │ │ │ │ ├── checkout_waiting.go │ │ │ │ │ │ ├── get_cart.go │ │ │ │ │ │ ├── get_product.go │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ ├── login.go │ │ │ │ │ │ ├── logout.go │ │ │ │ │ │ ├── order_list.go │ │ │ │ │ │ └── register.go │ │ │ │ │ └── utils/ │ │ │ │ │ └── resp.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── hertz_gen/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── api.pb.go │ │ │ │ │ └── frontend/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── auth_page.pb.go │ │ │ │ │ ├── cart/ │ │ │ │ │ │ └── cart_page.pb.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── category_page.pb.go │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ └── checkout_page.pb.go │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── common.pb.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ └── home.pb.go │ │ │ │ │ ├── order/ │ │ │ │ │ │ └── order_page.pb.go │ │ │ │ │ └── product/ │ │ │ │ │ └── product_page.pb.go │ │ │ │ ├── infra/ │ │ │ │ │ ├── mtl/ │ │ │ │ │ │ ├── log.go │ │ │ │ │ │ ├── metric.go │ │ │ │ │ │ ├── mtl.go │ │ │ │ │ │ └── tracing.go │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ ├── auth.go │ │ │ │ │ └── middleware.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ ├── template/ │ │ │ │ │ ├── cart-num.tmpl │ │ │ │ │ ├── cart.tmpl │ │ │ │ │ ├── category.tmpl │ │ │ │ │ ├── checkout.tmpl │ │ │ │ │ ├── footer.tmpl │ │ │ │ │ ├── header.tmpl │ │ │ │ │ ├── home.tmpl │ │ │ │ │ ├── order.tmpl │ │ │ │ │ ├── product.tmpl │ │ │ │ │ ├── result.tmpl │ │ │ │ │ ├── search.tmpl │ │ │ │ │ ├── sign-in.tmpl │ │ │ │ │ ├── sign-up.tmpl │ │ │ │ │ ├── utils.tmpl │ │ │ │ │ └── waiting.tmpl │ │ │ │ ├── types/ │ │ │ │ │ └── order.go │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ ├── errors.go │ │ │ │ ├── function.go │ │ │ │ ├── response.go │ │ │ │ ├── safe.go │ │ │ │ └── strings.go │ │ │ ├── order/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── order.go │ │ │ │ │ │ └── order_item.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── list_order.go │ │ │ │ │ ├── list_order_test.go │ │ │ │ │ ├── place_order.go │ │ │ │ │ └── place_order_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── payment/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ └── payment.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── charge.go │ │ │ │ │ └── charge_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ └── mw.go │ │ │ │ ├── payment.sql │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ └── utils/ │ │ │ │ └── errors.go │ │ │ ├── product/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ └── product.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── get_product.go │ │ │ │ │ ├── get_product_test.go │ │ │ │ │ ├── list_products.go │ │ │ │ │ ├── list_products_test.go │ │ │ │ │ ├── search_products.go │ │ │ │ │ └── search_products_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ ├── bootstrap.sh │ │ │ │ │ └── product.sql │ │ │ │ └── utils/ │ │ │ │ └── constant.go │ │ │ └── user/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ └── user.go │ │ │ │ └── service/ │ │ │ │ ├── login.go │ │ │ │ ├── login_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── common/ │ │ │ ├── clientsuite/ │ │ │ │ └── client.go │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── mtl/ │ │ │ │ ├── log.go │ │ │ │ ├── metrics.go │ │ │ │ └── tracing.go │ │ │ ├── serversuite/ │ │ │ │ └── server.go │ │ │ └── utils/ │ │ │ └── kitex.go │ │ ├── db/ │ │ │ └── sql/ │ │ │ └── ini/ │ │ │ ├── README.md │ │ │ └── databases.sql │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ └── client/ │ │ │ │ └── client.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── deploy/ │ │ │ └── config/ │ │ │ └── prometheus.yml │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── idl/ │ │ │ ├── api.proto │ │ │ ├── cart.proto │ │ │ ├── checkout.proto │ │ │ ├── echo.proto │ │ │ ├── echo.thrift │ │ │ ├── email.proto │ │ │ ├── frontend/ │ │ │ │ ├── auth_page.proto │ │ │ │ ├── cart_page.proto │ │ │ │ ├── category_page.proto │ │ │ │ ├── checkout_page.proto │ │ │ │ ├── common.proto │ │ │ │ ├── home.proto │ │ │ │ ├── order_page.proto │ │ │ │ └── product_page.proto │ │ │ ├── order.proto │ │ │ ├── payment.proto │ │ │ ├── product.proto │ │ │ └── user.proto │ │ └── rpc_gen/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── kitex_gen/ │ │ │ ├── cart/ │ │ │ │ ├── cart.pb.fast.go │ │ │ │ ├── cart.pb.go │ │ │ │ └── cartservice/ │ │ │ │ ├── cartservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── checkout/ │ │ │ │ ├── checkout.pb.fast.go │ │ │ │ ├── checkout.pb.go │ │ │ │ └── checkoutservice/ │ │ │ │ ├── checkoutservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── email/ │ │ │ │ ├── email.pb.fast.go │ │ │ │ ├── email.pb.go │ │ │ │ └── emailservice/ │ │ │ │ ├── client.go │ │ │ │ ├── emailservice.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── order/ │ │ │ │ ├── order.pb.fast.go │ │ │ │ ├── order.pb.go │ │ │ │ └── orderservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── orderservice.go │ │ │ │ └── server.go │ │ │ ├── payment/ │ │ │ │ ├── payment.pb.fast.go │ │ │ │ ├── payment.pb.go │ │ │ │ └── paymentservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── paymentservice.go │ │ │ │ └── server.go │ │ │ ├── product/ │ │ │ │ ├── product.pb.fast.go │ │ │ │ ├── product.pb.go │ │ │ │ └── productcatalogservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── productcatalogservice.go │ │ │ │ └── server.go │ │ │ └── user/ │ │ │ ├── user.pb.fast.go │ │ │ ├── user.pb.go │ │ │ └── userservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── server.go │ │ │ └── userservice.go │ │ └── rpc/ │ │ ├── cart/ │ │ │ ├── cart_client.go │ │ │ ├── cart_default.go │ │ │ └── cart_init.go │ │ ├── checkout/ │ │ │ ├── checkout_client.go │ │ │ ├── checkout_default.go │ │ │ └── checkout_init.go │ │ ├── email/ │ │ │ ├── email_client.go │ │ │ ├── email_default.go │ │ │ └── email_init.go │ │ ├── order/ │ │ │ ├── order_client.go │ │ │ ├── order_default.go │ │ │ └── order_init.go │ │ ├── payment/ │ │ │ ├── payment_client.go │ │ │ ├── payment_default.go │ │ │ └── payment_init.go │ │ ├── product/ │ │ │ ├── product_client.go │ │ │ ├── product_default.go │ │ │ └── product_init.go │ │ └── user/ │ │ ├── user_client.go │ │ ├── user_default.go │ │ └── user_init.go │ ├── ch16/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── app/ │ │ │ ├── cart/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── cart.go │ │ │ │ │ │ └── cart_test.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── add_item.go │ │ │ │ │ ├── add_item_test.go │ │ │ │ │ ├── empty_cart.go │ │ │ │ │ ├── empty_cart_test.go │ │ │ │ │ ├── get_cart.go │ │ │ │ │ └── get_cart_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ ├── bootstrap.sh │ │ │ │ │ └── cart.sql │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ └── errors.go │ │ │ ├── checkout/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── checkout.go │ │ │ │ │ └── checkout_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ ├── mq/ │ │ │ │ │ │ └── nats.go │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ └── utils/ │ │ │ │ └── errors.go │ │ │ ├── email/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── consumer/ │ │ │ │ │ │ ├── consumer.go │ │ │ │ │ │ └── email/ │ │ │ │ │ │ ├── email.go │ │ │ │ │ │ └── email_test.go │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── send.go │ │ │ │ │ └── send_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── infra/ │ │ │ │ │ ├── mq/ │ │ │ │ │ │ └── nats.go │ │ │ │ │ └── notify/ │ │ │ │ │ └── email.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── frontend/ │ │ │ │ ├── .air.toml │ │ │ │ ├── .gitignore │ │ │ │ ├── .hz │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── handler/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_service.go │ │ │ │ │ │ │ └── auth_service_test.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_service.go │ │ │ │ │ │ │ └── cart_service_test.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_service.go │ │ │ │ │ │ │ └── category_service_test.go │ │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ │ ├── checkout_service.go │ │ │ │ │ │ │ └── checkout_service_test.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home_service.go │ │ │ │ │ │ │ └── home_service_test.go │ │ │ │ │ │ ├── order/ │ │ │ │ │ │ │ ├── order_service.go │ │ │ │ │ │ │ └── order_service_test.go │ │ │ │ │ │ └── product/ │ │ │ │ │ │ ├── product_service.go │ │ │ │ │ │ └── product_service_test.go │ │ │ │ │ ├── router/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ ├── auth_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── cart/ │ │ │ │ │ │ │ ├── cart_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── category/ │ │ │ │ │ │ │ ├── category_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ │ ├── checkout_page.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── home/ │ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ │ └── middleware.go │ │ │ │ │ │ ├── order/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── order_page.go │ │ │ │ │ │ ├── product/ │ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ │ └── product_page.go │ │ │ │ │ │ └── register.go │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── add_cart_item.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ ├── checkout.go │ │ │ │ │ │ ├── checkout_result.go │ │ │ │ │ │ ├── checkout_waiting.go │ │ │ │ │ │ ├── get_cart.go │ │ │ │ │ │ ├── get_product.go │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ ├── login.go │ │ │ │ │ │ ├── logout.go │ │ │ │ │ │ ├── order_list.go │ │ │ │ │ │ └── register.go │ │ │ │ │ └── utils/ │ │ │ │ │ └── resp.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── hertz_gen/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── api.pb.go │ │ │ │ │ └── frontend/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ └── auth_page.pb.go │ │ │ │ │ ├── cart/ │ │ │ │ │ │ └── cart_page.pb.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ └── category_page.pb.go │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ └── checkout_page.pb.go │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── common.pb.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ └── home.pb.go │ │ │ │ │ ├── order/ │ │ │ │ │ │ └── order_page.pb.go │ │ │ │ │ └── product/ │ │ │ │ │ └── product_page.pb.go │ │ │ │ ├── infra/ │ │ │ │ │ ├── mtl/ │ │ │ │ │ │ ├── log.go │ │ │ │ │ │ ├── metric.go │ │ │ │ │ │ ├── mtl.go │ │ │ │ │ │ └── tracing.go │ │ │ │ │ └── rpc/ │ │ │ │ │ └── client.go │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ ├── auth.go │ │ │ │ │ └── middleware.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ ├── template/ │ │ │ │ │ ├── cart-num.tmpl │ │ │ │ │ ├── cart.tmpl │ │ │ │ │ ├── category.tmpl │ │ │ │ │ ├── checkout.tmpl │ │ │ │ │ ├── footer.tmpl │ │ │ │ │ ├── header.tmpl │ │ │ │ │ ├── home.tmpl │ │ │ │ │ ├── order.tmpl │ │ │ │ │ ├── product.tmpl │ │ │ │ │ ├── result.tmpl │ │ │ │ │ ├── search.tmpl │ │ │ │ │ ├── sign-in.tmpl │ │ │ │ │ ├── sign-up.tmpl │ │ │ │ │ ├── utils.tmpl │ │ │ │ │ └── waiting.tmpl │ │ │ │ ├── types/ │ │ │ │ │ └── order.go │ │ │ │ └── utils/ │ │ │ │ ├── constant.go │ │ │ │ ├── errors.go │ │ │ │ ├── function.go │ │ │ │ ├── response.go │ │ │ │ ├── safe.go │ │ │ │ └── strings.go │ │ │ ├── order/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── order.go │ │ │ │ │ │ └── order_item.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── list_order.go │ │ │ │ │ ├── list_order_test.go │ │ │ │ │ ├── place_order.go │ │ │ │ │ └── place_order_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── payment/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ └── payment.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── charge.go │ │ │ │ │ └── charge_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── middleware/ │ │ │ │ │ └── mw.go │ │ │ │ ├── payment.sql │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ └── bootstrap.sh │ │ │ │ └── utils/ │ │ │ │ └── errors.go │ │ │ ├── product/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ ├── base.go │ │ │ │ │ │ ├── category.go │ │ │ │ │ │ └── product.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── get_product.go │ │ │ │ │ ├── get_product_test.go │ │ │ │ │ ├── list_products.go │ │ │ │ │ ├── list_products_test.go │ │ │ │ │ ├── search_products.go │ │ │ │ │ └── search_products_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ ├── script/ │ │ │ │ │ ├── bootstrap.sh │ │ │ │ │ └── product.sql │ │ │ │ └── utils/ │ │ │ │ └── constant.go │ │ │ └── user/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ └── user.go │ │ │ │ └── service/ │ │ │ │ ├── login.go │ │ │ │ ├── login_test.go │ │ │ │ ├── register.go │ │ │ │ └── register_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── common/ │ │ │ ├── clientsuite/ │ │ │ │ └── client.go │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── mtl/ │ │ │ │ ├── log.go │ │ │ │ ├── metrics.go │ │ │ │ └── tracing.go │ │ │ ├── serversuite/ │ │ │ │ └── server.go │ │ │ └── utils/ │ │ │ └── kitex.go │ │ ├── db/ │ │ │ └── sql/ │ │ │ └── ini/ │ │ │ ├── README.md │ │ │ └── databases.sql │ │ ├── demo/ │ │ │ ├── demo_proto/ │ │ │ │ ├── .gitignore │ │ │ │ ├── biz/ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── init.go │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ └── init.go │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── init.go │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── user.go │ │ │ │ │ └── service/ │ │ │ │ │ ├── echo.go │ │ │ │ │ └── echo_test.go │ │ │ │ ├── build.sh │ │ │ │ ├── cmd/ │ │ │ │ │ ├── client/ │ │ │ │ │ │ └── client.go │ │ │ │ │ └── dbop/ │ │ │ │ │ └── db.go │ │ │ │ ├── conf/ │ │ │ │ │ ├── conf.go │ │ │ │ │ ├── dev/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ ├── online/ │ │ │ │ │ │ └── conf.yaml │ │ │ │ │ └── test/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── docker-compose.yaml │ │ │ │ ├── go.mod │ │ │ │ ├── go.sum │ │ │ │ ├── handler.go │ │ │ │ ├── kitex_gen/ │ │ │ │ │ └── pbapi/ │ │ │ │ │ ├── echo/ │ │ │ │ │ │ ├── client.go │ │ │ │ │ │ ├── echo.go │ │ │ │ │ │ ├── invoker.go │ │ │ │ │ │ └── server.go │ │ │ │ │ ├── echo.pb.fast.go │ │ │ │ │ └── echo.pb.go │ │ │ │ ├── kitex_info.yaml │ │ │ │ ├── main.go │ │ │ │ ├── readme.md │ │ │ │ └── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── demo_thrift/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ └── client/ │ │ │ │ └── client.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── api/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.go │ │ │ │ ├── k-consts.go │ │ │ │ └── k-echo.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── deploy/ │ │ │ ├── Dockerfile.frontend │ │ │ ├── Dockerfile.svc │ │ │ ├── config/ │ │ │ │ └── prometheus.yml │ │ │ ├── gomall-dev-app.yaml │ │ │ ├── gomall-dev-base.yaml │ │ │ └── gomall-dev-cluster.yaml │ │ ├── docker-compose.yaml │ │ ├── go.work │ │ ├── hello_world/ │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ └── main.go │ │ ├── idl/ │ │ │ ├── api.proto │ │ │ ├── cart.proto │ │ │ ├── checkout.proto │ │ │ ├── echo.proto │ │ │ ├── echo.thrift │ │ │ ├── email.proto │ │ │ ├── frontend/ │ │ │ │ ├── auth_page.proto │ │ │ │ ├── cart_page.proto │ │ │ │ ├── category_page.proto │ │ │ │ ├── checkout_page.proto │ │ │ │ ├── common.proto │ │ │ │ ├── home.proto │ │ │ │ ├── order_page.proto │ │ │ │ └── product_page.proto │ │ │ ├── order.proto │ │ │ ├── payment.proto │ │ │ ├── product.proto │ │ │ └── user.proto │ │ └── rpc_gen/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── kitex_gen/ │ │ │ ├── cart/ │ │ │ │ ├── cart.pb.fast.go │ │ │ │ ├── cart.pb.go │ │ │ │ └── cartservice/ │ │ │ │ ├── cartservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── checkout/ │ │ │ │ ├── checkout.pb.fast.go │ │ │ │ ├── checkout.pb.go │ │ │ │ └── checkoutservice/ │ │ │ │ ├── checkoutservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── email/ │ │ │ │ ├── email.pb.fast.go │ │ │ │ ├── email.pb.go │ │ │ │ └── emailservice/ │ │ │ │ ├── client.go │ │ │ │ ├── emailservice.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── order/ │ │ │ │ ├── order.pb.fast.go │ │ │ │ ├── order.pb.go │ │ │ │ └── orderservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── orderservice.go │ │ │ │ └── server.go │ │ │ ├── payment/ │ │ │ │ ├── payment.pb.fast.go │ │ │ │ ├── payment.pb.go │ │ │ │ └── paymentservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── paymentservice.go │ │ │ │ └── server.go │ │ │ ├── product/ │ │ │ │ ├── product.pb.fast.go │ │ │ │ ├── product.pb.go │ │ │ │ └── productcatalogservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── productcatalogservice.go │ │ │ │ └── server.go │ │ │ └── user/ │ │ │ ├── user.pb.fast.go │ │ │ ├── user.pb.go │ │ │ └── userservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── server.go │ │ │ └── userservice.go │ │ └── rpc/ │ │ ├── cart/ │ │ │ ├── cart_client.go │ │ │ ├── cart_default.go │ │ │ └── cart_init.go │ │ ├── checkout/ │ │ │ ├── checkout_client.go │ │ │ ├── checkout_default.go │ │ │ └── checkout_init.go │ │ ├── email/ │ │ │ ├── email_client.go │ │ │ ├── email_default.go │ │ │ └── email_init.go │ │ ├── order/ │ │ │ ├── order_client.go │ │ │ ├── order_default.go │ │ │ └── order_init.go │ │ ├── payment/ │ │ │ ├── payment_client.go │ │ │ ├── payment_default.go │ │ │ └── payment_init.go │ │ ├── product/ │ │ │ ├── product_client.go │ │ │ ├── product_default.go │ │ │ └── product_init.go │ │ └── user/ │ │ ├── user_client.go │ │ ├── user_default.go │ │ └── user_init.go │ └── ch17/ │ ├── Makefile │ ├── app/ │ │ ├── cart/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ ├── cart.go │ │ │ │ │ └── cart_test.go │ │ │ │ └── service/ │ │ │ │ ├── add_item.go │ │ │ │ ├── add_item_test.go │ │ │ │ ├── empty_cart.go │ │ │ │ ├── empty_cart_test.go │ │ │ │ ├── get_cart.go │ │ │ │ └── get_cart_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── infra/ │ │ │ │ └── rpc/ │ │ │ │ └── client.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ ├── bootstrap.sh │ │ │ │ └── cart.sql │ │ │ └── utils/ │ │ │ ├── constant.go │ │ │ └── errors.go │ │ ├── checkout/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── checkout.go │ │ │ │ └── checkout_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── infra/ │ │ │ │ ├── mq/ │ │ │ │ │ └── nats.go │ │ │ │ └── rpc/ │ │ │ │ └── client.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── utils/ │ │ │ └── errors.go │ │ ├── email/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── consumer/ │ │ │ │ │ ├── consumer.go │ │ │ │ │ └── email/ │ │ │ │ │ ├── email.go │ │ │ │ │ └── email_test.go │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ └── service/ │ │ │ │ ├── send.go │ │ │ │ └── send_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── infra/ │ │ │ │ ├── mq/ │ │ │ │ │ └── nats.go │ │ │ │ └── notify/ │ │ │ │ └── email.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── frontend/ │ │ │ ├── .air.toml │ │ │ ├── .gitignore │ │ │ ├── .hz │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── handler/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth_service.go │ │ │ │ │ │ └── auth_service_test.go │ │ │ │ │ ├── cart/ │ │ │ │ │ │ ├── cart_service.go │ │ │ │ │ │ └── cart_service_test.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ ├── category_service.go │ │ │ │ │ │ └── category_service_test.go │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ ├── checkout_service.go │ │ │ │ │ │ └── checkout_service_test.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── home_service.go │ │ │ │ │ │ └── home_service_test.go │ │ │ │ │ ├── order/ │ │ │ │ │ │ ├── order_service.go │ │ │ │ │ │ └── order_service_test.go │ │ │ │ │ └── product/ │ │ │ │ │ ├── product_service.go │ │ │ │ │ └── product_service_test.go │ │ │ │ ├── router/ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ ├── auth_page.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── cart/ │ │ │ │ │ │ ├── cart_page.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── category/ │ │ │ │ │ │ ├── category_page.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── checkout/ │ │ │ │ │ │ ├── checkout_page.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── home/ │ │ │ │ │ │ ├── home.go │ │ │ │ │ │ └── middleware.go │ │ │ │ │ ├── order/ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ └── order_page.go │ │ │ │ │ ├── product/ │ │ │ │ │ │ ├── middleware.go │ │ │ │ │ │ └── product_page.go │ │ │ │ │ └── register.go │ │ │ │ ├── service/ │ │ │ │ │ ├── add_cart_item.go │ │ │ │ │ ├── category.go │ │ │ │ │ ├── checkout.go │ │ │ │ │ ├── checkout_result.go │ │ │ │ │ ├── checkout_waiting.go │ │ │ │ │ ├── get_cart.go │ │ │ │ │ ├── get_product.go │ │ │ │ │ ├── home.go │ │ │ │ │ ├── login.go │ │ │ │ │ ├── logout.go │ │ │ │ │ ├── order_list.go │ │ │ │ │ └── register.go │ │ │ │ └── utils/ │ │ │ │ └── resp.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── hertz_gen/ │ │ │ │ ├── api/ │ │ │ │ │ └── api.pb.go │ │ │ │ └── frontend/ │ │ │ │ ├── auth/ │ │ │ │ │ └── auth_page.pb.go │ │ │ │ ├── cart/ │ │ │ │ │ └── cart_page.pb.go │ │ │ │ ├── category/ │ │ │ │ │ └── category_page.pb.go │ │ │ │ ├── checkout/ │ │ │ │ │ └── checkout_page.pb.go │ │ │ │ ├── common/ │ │ │ │ │ └── common.pb.go │ │ │ │ ├── home/ │ │ │ │ │ └── home.pb.go │ │ │ │ ├── order/ │ │ │ │ │ └── order_page.pb.go │ │ │ │ └── product/ │ │ │ │ └── product_page.pb.go │ │ │ ├── infra/ │ │ │ │ ├── mtl/ │ │ │ │ │ ├── log.go │ │ │ │ │ ├── metric.go │ │ │ │ │ ├── mtl.go │ │ │ │ │ └── tracing.go │ │ │ │ └── rpc/ │ │ │ │ └── client.go │ │ │ ├── main.go │ │ │ ├── middleware/ │ │ │ │ ├── auth.go │ │ │ │ └── middleware.go │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ └── bootstrap.sh │ │ │ ├── template/ │ │ │ │ ├── cart-num.tmpl │ │ │ │ ├── cart.tmpl │ │ │ │ ├── category.tmpl │ │ │ │ ├── checkout.tmpl │ │ │ │ ├── footer.tmpl │ │ │ │ ├── header.tmpl │ │ │ │ ├── home.tmpl │ │ │ │ ├── order.tmpl │ │ │ │ ├── product.tmpl │ │ │ │ ├── result.tmpl │ │ │ │ ├── search.tmpl │ │ │ │ ├── sign-in.tmpl │ │ │ │ ├── sign-up.tmpl │ │ │ │ ├── utils.tmpl │ │ │ │ └── waiting.tmpl │ │ │ ├── types/ │ │ │ │ └── order.go │ │ │ └── utils/ │ │ │ ├── constant.go │ │ │ ├── errors.go │ │ │ ├── function.go │ │ │ ├── response.go │ │ │ ├── safe.go │ │ │ └── strings.go │ │ ├── order/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ ├── order.go │ │ │ │ │ └── order_item.go │ │ │ │ └── service/ │ │ │ │ ├── list_order.go │ │ │ │ ├── list_order_test.go │ │ │ │ ├── place_order.go │ │ │ │ └── place_order_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ ├── payment/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ └── payment.go │ │ │ │ └── service/ │ │ │ │ ├── charge.go │ │ │ │ └── charge_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── middleware/ │ │ │ │ └── mw.go │ │ │ ├── payment.sql │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ └── bootstrap.sh │ │ │ └── utils/ │ │ │ └── errors.go │ │ ├── product/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ ├── base.go │ │ │ │ │ ├── category.go │ │ │ │ │ └── product.go │ │ │ │ └── service/ │ │ │ │ ├── get_product.go │ │ │ │ ├── get_product_test.go │ │ │ │ ├── list_products.go │ │ │ │ ├── list_products_test.go │ │ │ │ ├── search_products.go │ │ │ │ └── search_products_test.go │ │ │ ├── build.sh │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ ├── script/ │ │ │ │ ├── bootstrap.sh │ │ │ │ └── product.sql │ │ │ └── utils/ │ │ │ └── constant.go │ │ └── user/ │ │ ├── .gitignore │ │ ├── biz/ │ │ │ ├── dal/ │ │ │ │ ├── init.go │ │ │ │ ├── mysql/ │ │ │ │ │ └── init.go │ │ │ │ └── redis/ │ │ │ │ └── init.go │ │ │ ├── model/ │ │ │ │ ├── base.go │ │ │ │ └── user.go │ │ │ └── service/ │ │ │ ├── login.go │ │ │ ├── login_test.go │ │ │ ├── register.go │ │ │ └── register_test.go │ │ ├── build.sh │ │ ├── conf/ │ │ │ ├── conf.go │ │ │ ├── dev/ │ │ │ │ └── conf.yaml │ │ │ ├── online/ │ │ │ │ └── conf.yaml │ │ │ └── test/ │ │ │ └── conf.yaml │ │ ├── docker-compose.yaml │ │ ├── go.mod │ │ ├── go.sum │ │ ├── handler.go │ │ ├── kitex_info.yaml │ │ ├── main.go │ │ ├── readme.md │ │ └── script/ │ │ └── bootstrap.sh │ ├── common/ │ │ ├── clientsuite/ │ │ │ └── client.go │ │ ├── go.mod │ │ ├── go.sum │ │ ├── mtl/ │ │ │ ├── log.go │ │ │ ├── metrics.go │ │ │ └── tracing.go │ │ ├── serversuite/ │ │ │ └── server.go │ │ └── utils/ │ │ └── kitex.go │ ├── db/ │ │ └── sql/ │ │ └── ini/ │ │ ├── README.md │ │ └── databases.sql │ ├── demo/ │ │ ├── demo_proto/ │ │ │ ├── .gitignore │ │ │ ├── biz/ │ │ │ │ ├── dal/ │ │ │ │ │ ├── init.go │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ └── init.go │ │ │ │ │ └── redis/ │ │ │ │ │ └── init.go │ │ │ │ ├── model/ │ │ │ │ │ └── user.go │ │ │ │ └── service/ │ │ │ │ ├── echo.go │ │ │ │ └── echo_test.go │ │ │ ├── build.sh │ │ │ ├── cmd/ │ │ │ │ ├── client/ │ │ │ │ │ └── client.go │ │ │ │ └── dbop/ │ │ │ │ └── db.go │ │ │ ├── conf/ │ │ │ │ ├── conf.go │ │ │ │ ├── dev/ │ │ │ │ │ └── conf.yaml │ │ │ │ ├── online/ │ │ │ │ │ └── conf.yaml │ │ │ │ └── test/ │ │ │ │ └── conf.yaml │ │ │ ├── docker-compose.yaml │ │ │ ├── go.mod │ │ │ ├── go.sum │ │ │ ├── handler.go │ │ │ ├── kitex_gen/ │ │ │ │ └── pbapi/ │ │ │ │ ├── echo/ │ │ │ │ │ ├── client.go │ │ │ │ │ ├── echo.go │ │ │ │ │ ├── invoker.go │ │ │ │ │ └── server.go │ │ │ │ ├── echo.pb.fast.go │ │ │ │ └── echo.pb.go │ │ │ ├── kitex_info.yaml │ │ │ ├── main.go │ │ │ ├── readme.md │ │ │ └── script/ │ │ │ └── bootstrap.sh │ │ └── demo_thrift/ │ │ ├── .gitignore │ │ ├── biz/ │ │ │ ├── dal/ │ │ │ │ ├── init.go │ │ │ │ ├── mysql/ │ │ │ │ │ └── init.go │ │ │ │ └── redis/ │ │ │ │ └── init.go │ │ │ └── service/ │ │ │ ├── echo.go │ │ │ └── echo_test.go │ │ ├── build.sh │ │ ├── cmd/ │ │ │ └── client/ │ │ │ └── client.go │ │ ├── conf/ │ │ │ ├── conf.go │ │ │ ├── dev/ │ │ │ │ └── conf.yaml │ │ │ ├── online/ │ │ │ │ └── conf.yaml │ │ │ └── test/ │ │ │ └── conf.yaml │ │ ├── docker-compose.yaml │ │ ├── go.mod │ │ ├── go.sum │ │ ├── handler.go │ │ ├── kitex_gen/ │ │ │ └── api/ │ │ │ ├── echo/ │ │ │ │ ├── client.go │ │ │ │ ├── echo.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── echo.go │ │ │ ├── k-consts.go │ │ │ └── k-echo.go │ │ ├── kitex_info.yaml │ │ ├── main.go │ │ ├── readme.md │ │ └── script/ │ │ └── bootstrap.sh │ ├── deploy/ │ │ ├── Dockerfile │ │ └── config/ │ │ └── prometheus.yml │ ├── docker-compose.yaml │ ├── go.work │ ├── hello_world/ │ │ ├── go.mod │ │ ├── go.sum │ │ └── main.go │ ├── idl/ │ │ ├── api.proto │ │ ├── cart.proto │ │ ├── checkout.proto │ │ ├── echo.proto │ │ ├── echo.thrift │ │ ├── email.proto │ │ ├── frontend/ │ │ │ ├── auth_page.proto │ │ │ ├── cart_page.proto │ │ │ ├── category_page.proto │ │ │ ├── checkout_page.proto │ │ │ ├── common.proto │ │ │ ├── home.proto │ │ │ ├── order_page.proto │ │ │ └── product_page.proto │ │ ├── order.proto │ │ ├── payment.proto │ │ ├── product.proto │ │ └── user.proto │ ├── rpc_gen/ │ │ ├── go.mod │ │ ├── go.sum │ │ ├── kitex_gen/ │ │ │ ├── cart/ │ │ │ │ ├── cart.pb.fast.go │ │ │ │ ├── cart.pb.go │ │ │ │ └── cartservice/ │ │ │ │ ├── cartservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── checkout/ │ │ │ │ ├── checkout.pb.fast.go │ │ │ │ ├── checkout.pb.go │ │ │ │ └── checkoutservice/ │ │ │ │ ├── checkoutservice.go │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── email/ │ │ │ │ ├── email.pb.fast.go │ │ │ │ ├── email.pb.go │ │ │ │ └── emailservice/ │ │ │ │ ├── client.go │ │ │ │ ├── emailservice.go │ │ │ │ ├── invoker.go │ │ │ │ └── server.go │ │ │ ├── order/ │ │ │ │ ├── order.pb.fast.go │ │ │ │ ├── order.pb.go │ │ │ │ └── orderservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── orderservice.go │ │ │ │ └── server.go │ │ │ ├── payment/ │ │ │ │ ├── payment.pb.fast.go │ │ │ │ ├── payment.pb.go │ │ │ │ └── paymentservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── paymentservice.go │ │ │ │ └── server.go │ │ │ ├── product/ │ │ │ │ ├── product.pb.fast.go │ │ │ │ ├── product.pb.go │ │ │ │ └── productcatalogservice/ │ │ │ │ ├── client.go │ │ │ │ ├── invoker.go │ │ │ │ ├── productcatalogservice.go │ │ │ │ └── server.go │ │ │ └── user/ │ │ │ ├── user.pb.fast.go │ │ │ ├── user.pb.go │ │ │ └── userservice/ │ │ │ ├── client.go │ │ │ ├── invoker.go │ │ │ ├── server.go │ │ │ └── userservice.go │ │ └── rpc/ │ │ ├── cart/ │ │ │ ├── cart_client.go │ │ │ ├── cart_default.go │ │ │ └── cart_init.go │ │ ├── checkout/ │ │ │ ├── checkout_client.go │ │ │ ├── checkout_default.go │ │ │ └── checkout_init.go │ │ ├── email/ │ │ │ ├── email_client.go │ │ │ ├── email_default.go │ │ │ └── email_init.go │ │ ├── order/ │ │ │ ├── order_client.go │ │ │ ├── order_default.go │ │ │ └── order_init.go │ │ ├── payment/ │ │ │ ├── payment_client.go │ │ │ ├── payment_default.go │ │ │ └── payment_init.go │ │ ├── product/ │ │ │ ├── product_client.go │ │ │ ├── product_default.go │ │ │ └── product_init.go │ │ └── user/ │ │ ├── user_client.go │ │ ├── user_default.go │ │ └── user_init.go │ └── scripts/ │ ├── copy_env.sh │ ├── fix.sh │ ├── gen.sh │ ├── list_app.sh │ ├── run.sh │ ├── run_all.sh │ ├── tidy.sh │ └── vet.sh ├── hack/ │ ├── resolve-modules.sh │ ├── tools.sh │ └── util.sh └── open-payment-platform/ ├── .gitignore ├── Makefile ├── README.md ├── cmd/ │ └── payment/ │ ├── main.go │ ├── wire.go │ └── wire_gen.go ├── configs/ │ └── sql/ │ └── payment.sql ├── docker-compose.yaml ├── go.mod ├── go.sum ├── hertz-gateway/ │ ├── .gitignore │ ├── .hz │ ├── README.md │ ├── biz/ │ │ ├── errors/ │ │ │ └── errors.go │ │ ├── handler/ │ │ │ └── gateway.go │ │ ├── middleware/ │ │ │ └── gateway_auth.go │ │ ├── router/ │ │ │ └── register.go │ │ └── types/ │ │ └── response.go │ ├── main.go │ ├── router.go │ └── router_gen.go ├── idl/ │ ├── common.thrift │ └── payment.thrift ├── internal/ │ ├── README.md │ └── payment/ │ ├── Makefile │ ├── entity/ │ │ └── order.go │ ├── infrastructure/ │ │ ├── ent/ │ │ │ ├── client.go │ │ │ ├── config.go │ │ │ ├── context.go │ │ │ ├── ent.go │ │ │ ├── enttest/ │ │ │ │ └── enttest.go │ │ │ ├── generate.go │ │ │ ├── hook/ │ │ │ │ └── hook.go │ │ │ ├── migrate/ │ │ │ │ ├── migrate.go │ │ │ │ └── schema.go │ │ │ ├── mutation.go │ │ │ ├── order/ │ │ │ │ ├── order.go │ │ │ │ └── where.go │ │ │ ├── order.go │ │ │ ├── order_create.go │ │ │ ├── order_delete.go │ │ │ ├── order_query.go │ │ │ ├── order_update.go │ │ │ ├── predicate/ │ │ │ │ └── predicate.go │ │ │ ├── runtime/ │ │ │ │ └── runtime.go │ │ │ ├── runtime.go │ │ │ ├── schema/ │ │ │ │ └── order.go │ │ │ └── tx.go │ │ └── repository/ │ │ └── order_sql.go │ └── usecase/ │ ├── interface.go │ └── service.go ├── kitex_gen/ │ ├── common/ │ │ ├── common.go │ │ ├── k-common.go │ │ └── k-consts.go │ └── payment/ │ ├── k-consts.go │ ├── k-payment.go │ ├── payment.go │ └── paymentsvc/ │ ├── client.go │ ├── invoker.go │ ├── paymentsvc.go │ └── server.go ├── licenses/ │ ├── LICENSE-ent.txt │ ├── LICENSE-errors.txt │ ├── LICENSE-mysql.txt │ ├── LICENSE-thrift.txt │ └── LICENSE-wire.txt └── pkg/ └── auth/ └── auth.go