Mgrdich / testGoApi

Creating Api with Golang
1 stars 0 forks source link
chi go golang-server postrgresql sql sqlc

Minor API project for Golang

Project demonstrates how to create Go Backend project using

Start the application

create .env file at root

PORT=8080
POSTGRESQL=postgres://username:password@localhost:5433/testGoApi
GOOSE_DRIVER=postgres
GOOSE_DBSTRING=${POSTGRESQL}
GOOSE_MIGRATION_DIR=./internal/db/migrations
ENVIRONMENT=dev
JWT_SECRET_KEY=SomeSecretKeyHere
TOKEN_EXPIRE=10 # in minutes
make run

Before Opening PR

For Migrations

For Linting on the local machine

Install golangci-lint Link recommended way is to put it in the golang binary directory

Testing

Everything should have corresponding test suites except the repository for now

curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin VERSION_NUMBER_HERE

add the $(go env GOPATH) to PATH

For Swagger

To generate Swagger documentation for the API, first, you need to install swaggo CLI:

go install github.com/swaggo/swag/cmd/swag@v1.16.3

Add annotations to the controllers. Here's an example:

// HandleCreateUser creates a new user.
// @Summary Create a new user
// @Description Creates a new user with the provided details.
// @Tags user
// @Param username query string true "Username of the new user"
// @Param email query string true "Email address of the new user"
// @Param password query string true "Password of the new user"
// @Success 201 {object} UserDTO "User created successfully"
// @Failure 400 {object} ErrorResponse "Invalid request format"
// @Failure 500 {object} ErrorResponse "Internal server error"
// @Router /api/v1/users [post]
func HandleCreateUser(w http.ResponseWriter, r *http.Request) {
    // Handler logic to create a new user
}

Once the annotations are added, you can generate Swagger documentation by running:

make gen-swagger

After running the command, you can access the documentation of your API by running the project and visiting: http://localhost:8080/swagger/index.html

For VsCode users

"go.lintTool" : "golangci-lint",
"go.lintFlags": [
"--fast"
]