Skip to content

9ssi7/cillop

Repository files navigation

Cillop Architecture 🏗

Cillop is a scalable and modular application architecture designed for building robust and maintainable applications.

For detailed explanation on how things work, checkout the ssibrahimbas's Medium Text

The Architecture Overview

Directory Structure 📂

app

Contains core business logic components.

  • command: Houses command handlers, which handle command requests.
    • product_create.go: Defines the creation of a product.
  • query: Consists of query handlers, responsible for fetching data.
    • product_get.go: Defines how to get product information.

cmd

  • main.go: The entry point of the application.

config

  • config.go: Manages the application configuration files.

locales

  • en.toml: Contains localization files for supporting multiple languages.

pkg

  • cqrs: Contains components for the CQRS (Command Query Responsibility Segregation) pattern.
    • cqrs.go: CQRS related implementations.
  • domains: Encapsulates business logic into separate domain models.
    • product: Contains all the product related business logic.
  • mongodb: Contains everything related to MongoDB connectivity and operations.
  • server: Houses the HTTP server configuration and initialization logic.

server

Holds different types of server implementations.

  • event-stream: Event streaming related components.
  • http: HTTP server and related functionalities.
  • rpc: Remote Procedure Call (RPC) server and related functionalities.
    • protos: Contains Protocol Buffer files.
    • routes: Contains generated Protocol Buffer Go files.

service

  • application.go: Contains service application logic which binds everything together.

Building and Running 🚀

# Building the application
go build -o cillop ./cmd

# Running the application
./cillop

Docker Support 🐳

A Dockerfile is included to build a Docker image of the application.

# Build Docker Image for production
docker build -t cillop-app .

# Run Docker Container for development (hot reloading)
docker build -t cillop-app -f Dockerfile.dev .

# Copy env file from .env.example
cp .env.example .env

# Run Docker Container for production
docker run -p 8080:8080 --env-file .env --name cillop-app cillop-app

Nats and DB Setup 📦

Nats

  • Install Nats with jetstream locally using Docker
docker run -p 4222:4222 -p 8222:8222 -p 6222:6222 --name nats-cillop -ti nats:latest --js

MongoDB

  • Install MongoDB locally using Docker
docker run -d -p 27017:27017 --name mongo-cillop mongo:latest

Dependencies 📦

Go Modules are used for dependency management, which are listed in go.mod and go.sum.

Contributing 🤝

We welcome contributions! Please see CONTRIBUTING.md for details on how to contribute.

License 📄

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.