init: Initial commit
This commit is contained in:
185
.docs/development.md
Normal file
185
.docs/development.md
Normal file
@@ -0,0 +1,185 @@
|
||||
# Development
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Go 1.25.5 or later
|
||||
- Git
|
||||
|
||||
## Setup
|
||||
|
||||
1. Clone the repository:
|
||||
```bash
|
||||
git clone git.secnex.io/secnex/gateway.git
|
||||
cd gateway
|
||||
```
|
||||
|
||||
2. Install dependencies:
|
||||
```bash
|
||||
cd app
|
||||
go mod download
|
||||
```
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
gateway/
|
||||
├── app/ # Application source code
|
||||
│ ├── main.go # Entry point
|
||||
│ ├── config/ # Configuration management
|
||||
│ ├── server/ # Core server components
|
||||
│ ├── middlewares/ # HTTP middleware
|
||||
│ ├── handlers/ # Request handlers
|
||||
│ └── res/ # Response utilities
|
||||
├── .docs/ # Documentation
|
||||
├── gateway.yaml # Configuration file
|
||||
├── Dockerfile # Docker image definition
|
||||
├── docker-compose.yml # Docker Compose configuration
|
||||
└── .gitignore # Git ignore rules
|
||||
```
|
||||
|
||||
## Running Locally
|
||||
|
||||
```bash
|
||||
cd app
|
||||
go run main.go
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
```bash
|
||||
# Run all tests
|
||||
go test ./...
|
||||
|
||||
# Run tests with coverage
|
||||
go test -cover ./...
|
||||
|
||||
# Run tests for specific package
|
||||
go test ./config
|
||||
go test ./server
|
||||
go test ./middlewares
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
```bash
|
||||
# Build binary
|
||||
cd app
|
||||
go build -o gateway main.go
|
||||
|
||||
# Build for Linux
|
||||
GOOS=linux go build -o gateway-linux main.go
|
||||
|
||||
# Build for macOS (ARM64)
|
||||
GOOS=darwin GOARCH=arm64 go build -o gateway-darwin-arm64 main.go
|
||||
```
|
||||
|
||||
## Code Style
|
||||
|
||||
- Follow standard Go conventions
|
||||
- Use `gofmt` for formatting
|
||||
- Keep functions focused and small
|
||||
- Add comments for exported types and functions
|
||||
- Use meaningful variable names
|
||||
|
||||
## Adding Features
|
||||
|
||||
### Adding a New Middleware
|
||||
|
||||
Create a new file in `app/middlewares/`:
|
||||
|
||||
```go
|
||||
package middlewares
|
||||
|
||||
import "net/http"
|
||||
|
||||
func MyMiddleware(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
// Your logic here
|
||||
next.ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
Then apply it in `server/routes.go`:
|
||||
|
||||
```go
|
||||
if route.Security.CustomMiddleware.Enabled {
|
||||
handlers[route.Path] = middlewares.MyMiddleware(handlers[route.Path])
|
||||
}
|
||||
```
|
||||
|
||||
### Adding a New Configuration Field
|
||||
|
||||
1. Update `config/types.go` to add the field to the struct
|
||||
2. Update `gateway.yaml` with the new configuration
|
||||
3. Update configuration documentation in `.docs/configuration.md`
|
||||
|
||||
### Adding a New Handler
|
||||
|
||||
Add your handler in `app/handlers/route.go`:
|
||||
|
||||
```go
|
||||
package handlers
|
||||
|
||||
import "net/http"
|
||||
|
||||
func MyCustomHandler(w http.ResponseWriter, r *http.Request) {
|
||||
// Your logic here
|
||||
}
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
When making changes to the codebase, update the relevant documentation:
|
||||
|
||||
- **Architecture changes** → `.docs/architecture.md`
|
||||
- **Configuration changes** → `.docs/configuration.md`
|
||||
- **New features or usage changes** → `.docs/usage.md`
|
||||
- **Deployment changes** → `.docs/deployment.md`
|
||||
|
||||
## Debugging
|
||||
|
||||
### Enable Debug Logging
|
||||
|
||||
Debug logging is enabled by default in `main.go`:
|
||||
|
||||
```go
|
||||
masterlog.SetLevel(masterlog.LevelDebug)
|
||||
```
|
||||
|
||||
### Using Delve
|
||||
|
||||
```bash
|
||||
# Install Delve
|
||||
go install github.com/go-delve/delve/cmd/dlv@latest
|
||||
|
||||
# Debug main.go
|
||||
cd app
|
||||
dlv debug main.go
|
||||
```
|
||||
|
||||
## Internal Module
|
||||
|
||||
The project uses an internal Go module:
|
||||
```
|
||||
git.secnex.io/secnex/gateway
|
||||
```
|
||||
|
||||
When importing packages within the project, use this path:
|
||||
```go
|
||||
import "git.secnex.io/secnex/gateway/config"
|
||||
```
|
||||
|
||||
## Release Process
|
||||
|
||||
1. Update version in documentation
|
||||
2. Tag the release:
|
||||
```bash
|
||||
git tag -a v1.0.0 -m "Release v1.0.0"
|
||||
git push origin v1.0.0
|
||||
```
|
||||
|
||||
3. Build Docker image:
|
||||
```bash
|
||||
docker build -t git.secnex.io/secnex/api-gateway:v1.0.0 .
|
||||
```
|
||||
Reference in New Issue
Block a user