A Go-based support ticketing backend with gRPC services, HTTP APIs, Swagger docs, notification workflows, and multi-tenant project support.
01CLOUD-SUPPORT is designed for teams that need a backend service to manage support operations across organizations, projects, and applications. It exposes both gRPC and REST-style HTTP interfaces, includes generated API documentation, and integrates notification and email workflows for ticket activity.
- Dual API surface for internal service communication and external HTTP access
- Ticket lifecycle management for support teams and customer-facing workflows
- Multi-tenant domain model for organizations, projects, applications, and users
- Swagger documentation for HTTP consumers
- Email and notification hooks for operational updates
- Docker-friendly build flow and Make targets for local development
| Area | What it provides |
|---|---|
| Ticketing | Create, update, comment on, and track support tickets |
| APIs | gRPC services plus HTTP endpoints |
| Documentation | Swagger UI and generated OpenAPI artifacts |
| Data layer | GORM-based models and relational database support |
| Notifications | Internal notification flow and mailer integration |
| Operations | Local Make commands, Docker targets, and protobuf generation |
- Go
- gRPC and Protocol Buffers
- Gorilla Mux
- GORM
- Swagger / OpenAPI
- PostgreSQL-compatible relational databases
- Docker
- Go 1.13 or newer
- PostgreSQL or another compatible relational database
- Make
- Docker if you want to use container-based targets
cp .env.sample .envThe sample environment includes defaults for:
- gRPC server port
- HTTP server port
- Database connection settings
- Notification service endpoint
- SMTP configuration
- Support email recipients
Run the gRPC server:
make runRun the HTTP server:
make run-apiRun the sample gRPC client:
make run-clientRun tests:
make test-devRun lint checks:
make lintFormat Go files:
make format- Base URL:
http://localhost:5000 - Swagger UI:
http://localhost:5000/swagger/index.html - Specs:
docs/swagger.jsonanddocs/swagger.yaml
- Default listener:
localhost:50051 - Proto definitions:
pkg/proto/ - Handy local test client:
make run-client
If you prefer an interactive gRPC workflow, you can use Evans CLI:
evans -r repl| Task | Command |
|---|---|
| Start gRPC server | make run |
| Start HTTP server | make run-api |
| Run client | make run-client |
| Run tests | make test-dev |
| Run lint | make lint |
| Format code | make format |
| Generate protobuf code | make gen-proto |
| Build Docker image | make build |
The application reads runtime settings from .env. The most important variables are:
| Variable | Purpose |
|---|---|
GRPC_SERVER_PORT |
gRPC server port |
HTTP_SERVER_PORT |
HTTP server port |
DB_TYPE |
Database driver |
DB_HOST / DB_PORT |
Database host and port |
DB_USER / DB_PASSWORD |
Database credentials |
DB_NAME |
Primary database name |
GRPC_SUPPORT_SERVER |
HTTP layer connection to support gRPC |
GRPC_NOTIFICATION_SERVER |
Notification service endpoint |
TICKET_API |
Public HTTP URL used in docs/routes |
HOST_URL |
Base URL used in email links |
SUPPORT_EMAILS |
Comma-separated support recipients |
See .env.sample for the full template.
.
├── client/ # Example gRPC client
├── cmd/server/ # gRPC server entrypoint
├── docs/ # Swagger artifacts
├── http/ # HTTP server entrypoint and handlers
├── internal/mailer/ # Email delivery logic
├── internal/models/ # Domain and persistence models
├── internal/notifications/ # Notification workflow
├── internal/ticket/ # Ticket service logic
├── pkg/proto/ # Protocol buffer definitions and generated code
└── utils/ # Shared helpers and constants
Contributions are welcome. Start with CONTRIBUTING.md for setup, workflow, and pull request expectations.
Please also review:
This project is licensed under the Apache License 2.0. See LICENSE for details.