# README
dsserver
This is a Go boilerplate project using the Echo web framework with pre-configured middlewares, custom error handling, custom logging and commonly used utils for creating an API service in DS Platform.
Features
- Echo web framework: Fast and minimalist web framework for Go.
- Pre-configured middlewares:
- Auth middleware: JWT authentication middleware.
- Context middleware: Custom context middleware for handling request context.
- Usage middleware: Custom middleware for logging request and response.
- Audit middleware: Custom middleware for logging audit logs.
- Entitlement middleware: Custom middleware for checking entitlements.
- Custom error handling:
- UnauthorizedError: Custom error for unauthorized access.
- MissingTenantError: Custom error for missing tenant.
- ValidationError: Custom error for validation errors.
- ServerError: Custom error for server errors.
- EntitlementError: Custom error for entitlement errors.
- NotFoundError: Custom error for not found errors.
- Custom logging: customized zerolog logging.
- Commonly used utils:
- AWS dynamodb client: Custom dynamodb client for interacting with dynamodb.
- AWS parameter store client: Custom parameter store client for interacting with parameter store.
- AWS sqs client: Custom sqs client for interacting with sqs.
- Cache Manager: Custom cache manager using bigcache package.
Project Structure
Copy code
.
├── config/ # Configuration files (environment variables, etc.)
├── errors/ # Custom error handling (error response formatting)
├── middlewares/ # Predefined middleware functions
├── models/ # Data models and schemas
├── routes/ # Routing logic for Echo
├── server/ # Echo server with predefined health check routes
├── utils/ # Utility functions (AWS, etc.)
│ ├── aws/ # AWS-specific utilities (e.g., SQS, S3)
│ ├── cache_manager/ # Cache specific utilities (e.g., SQS, S3)
│ └── log/ # Custom logger setup (zerolog)
├── go.mod # Go module dependencies
└── main.go # Application entry point
Usage
-
Given that you have a Go project, you could get this package by running the following command:
go get github.com/grasp-labs/dsserver
-
Install dependencies:
go mod tidy
-
Create your own main.go file and import the package:
package main import ( "github.com/grasp-labs/dsserver" "github.com/grasp-labs/ds-boilerplate-api-go/utils/log" "github.com/creasty/defaults" ) func main() { cfg := config.Config{ AppRootPath: "/app", Port: ":8081", } log.InitLogger() logger := log.GetLogger() err := defaults.Set(&cfg) // Set default values logger.Info().Msgf("Config: %+v", cfg) if err != nil { return } if err := srv.Start(cfg.Port); !errors.Is(err, http.ErrServerClosed) { logger.Fatal().Err(err).Msg("Server stopped") } }
Then you get a basic server running on port 8081 with predefined health check routes.
- Add your own routes.
import "github.com/grasp-labs/ds-boilerplate-api-go/models"
type SampleController struct {
*models.DefaultController
}
func NewSampleController() models.Controller {
return &SampleController{}
}
func (c *SampleController) GetRoutes() models.Routes {
routes := models.Routes{
models.Route{
Path: "/test",
Method: "GET",
AllowUnauthenticatedUsers: false,
HandlerFunc: func(c echo.Context) error {
return c.JSON(http.StatusOK, "ok")
},
RequiredPermissions: []string{"service.log.admin"},
},
}
return routes
}
Then you can add the controller to the server.
// in main.go
sampleController := NewSampleController()
server.RegisterRoutes(&cfg, server.Protected, sampleController)
- Run the server
go run main.go
# Packages
No description provided by the author
No description provided by the author
Package middlewares.
Package models is a generated GoMock package.
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Functions
No description provided by the author
# Structs
No description provided by the author