163 lines
4.2 KiB
Markdown
163 lines
4.2 KiB
Markdown
# OpsMastery.v5
|
|
|
|
OpsMastery.v5 is a modular, production-ready platform for real-time chat, video/audio calling (WebRTC), and RESTful business operations. It is built in Go, uses JWT authentication, and is designed for easy integration with modern frontends (e.g., Next.js).
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
OpsMastery.v5/
|
|
├── cmd/
|
|
│ ├── api/ # Main REST API server (users, tickets, auth, etc.)
|
|
│ ├── chat-service/ # Real-time chat microservice (WebSocket)
|
|
│ └── webrtc-service/ # WebRTC signaling microservice (WebSocket)
|
|
├── internal/
|
|
│ ├── chat_service/ # Chat logic
|
|
│ ├── webrtc_service/ # WebRTC signaling logic
|
|
│ ├── handlers/ # REST API handlers
|
|
│ ├── models/ # Data models
|
|
│ ├── database/ # DB connection and migrations
|
|
│ ├── middleware/ # JWT and role middleware
|
|
│ ├── server/ # REST API server setup
|
|
│ └── utils/ # Utility functions (JWT, email, etc.)
|
|
├── docker-compose.yml # Multi-service orchestration
|
|
├── Dockerfile* # Dockerfiles for each service
|
|
├── go.mod, go.sum # Go module files
|
|
└── README.md
|
|
```
|
|
|
|
## Services Overview
|
|
|
|
### 1. REST API (`cmd/api`)
|
|
- Handles authentication, user management, tickets, and other business logic.
|
|
- JWT-secured endpoints.
|
|
- Integrates with PostgreSQL.
|
|
|
|
### 2. Chat Service (`cmd/chat-service`)
|
|
- Real-time chat via WebSocket.
|
|
- JWT authentication for all connections.
|
|
- Broadcasts messages to all connected clients.
|
|
- Persists chat messages in the database.
|
|
|
|
### 3. WebRTC Signaling Service (`cmd/webrtc-service`)
|
|
- Handles signaling for video/audio calls (SDP/ICE exchange).
|
|
- JWT authentication for all connections.
|
|
- Designed for integration with WebRTC clients (e.g., browser, mobile).
|
|
|
|
## Frontend Integration
|
|
|
|
- Designed to be consumed by any modern frontend (e.g., Next.js).
|
|
- REST API: Use `fetch`/`axios` with JWT in cookies or headers.
|
|
- Chat/WebRTC: Connect via WebSocket with JWT as a query param.
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
- [Go](https://golang.org/doc/install) >= 1.20
|
|
- [Docker](https://docs.docker.com/get-docker/)
|
|
- [Node.js](https://nodejs.org/) (for frontend, optional)
|
|
|
|
### Clone the Repository
|
|
|
|
```sh
|
|
git clone https://github.com/gibbyDev/OpsMastery.v5.git
|
|
cd OpsMastery.v5
|
|
```
|
|
|
|
### Running with Docker Compose
|
|
|
|
```sh
|
|
docker compose up --build
|
|
```
|
|
- This will start the REST API, chat service, WebRTC signaling service, and PostgreSQL database.
|
|
- Services are exposed on:
|
|
- REST API: `http://localhost:8080`
|
|
- Chat: `ws://localhost:5000/ws`
|
|
- WebRTC: `ws://localhost:4000/ws`
|
|
|
|
### Running Locally (without Docker)
|
|
|
|
1. Start PostgreSQL (see `docker-compose.yml` for env vars).
|
|
2. Run each service in a separate terminal:
|
|
```sh
|
|
go run cmd/api/main.go
|
|
go run cmd/chat-service/main.go
|
|
go run cmd/webrtc-service/main.go
|
|
```
|
|
|
|
### Environment Variables
|
|
- See `.env.example` or `docker-compose.yml` for required variables (DB connection, JWT secret, etc.).
|
|
|
|
## Development & Testing
|
|
|
|
- All code is in Go, organized for easy extension.
|
|
- Unit and integration tests are in `internal/*/tests`.
|
|
- Frontend integration examples available upon request.
|
|
|
|
## Contributing
|
|
|
|
Pull requests and issues are welcome! Please open an issue for major changes.
|
|
|
|
## License
|
|
|
|
MIT
|
|
|
|
## Getting Started
|
|
|
|
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
|
|
|
|
## MakeFile
|
|
|
|
Run build make command with tests
|
|
```bash
|
|
make all
|
|
```
|
|
|
|
Build the application
|
|
```bash
|
|
make build
|
|
```
|
|
|
|
Run the application
|
|
```bash
|
|
make run
|
|
```
|
|
Create DB container
|
|
```bash
|
|
make docker-run
|
|
```
|
|
|
|
Run API locally with live reload while only starting Postgres in Docker:
|
|
```bash
|
|
make dev-local
|
|
```
|
|
|
|
Shutdown DB Container
|
|
```bash
|
|
make docker-down
|
|
```
|
|
|
|
Stop only the Postgres container:
|
|
```bash
|
|
make db-down
|
|
```
|
|
|
|
DB Integrations Test:
|
|
```bash
|
|
make itest
|
|
```
|
|
|
|
Live reload the application:
|
|
```bash
|
|
make watch
|
|
```
|
|
|
|
Run the test suite:
|
|
```bash
|
|
make test
|
|
```
|
|
|
|
Clean up binary from the last build:
|
|
```bash
|
|
make clean
|
|
```
|