• Stars
    star
    5,176
  • Rank 8,009 (Top 0.2 %)
  • Language
    Go
  • License
    MIT License
  • Created over 4 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Go DDD example application. Complete project to show how to apply DDD, Clean Architecture, and CQRS by practical refactoring.

Wild Workouts

Wild Workouts is an example Go DDD project that we created to show how to build Go applications that areΒ easy to develop, maintain, and fun to work with, especially in the long term!

The idea for this series, is to apply DDD by refactoring. This process is in progress! Please check articles, to know the current progress.

No application is perfect from the beginning. With over a dozen coming articles, we will uncover what issues you can find in the current implementation. We will also show how to fix these issues and achieve clean implementation by refactoring.

Articles

"Too modern" application

  1. Too modern Go application? Building a serverless application with Google Cloud Run and Firebase [v1.0]
  2. A complete Terraform setup of a serverless application on Google Cloud Run and Firebase [v1.1]
  3. Robust gRPC communication on Google Cloud Run (but not only!) [v1.2]
  4. You should not build your own authentication. Let Firebase do it for you. [v1.3]

Refactoring

  1. Business Applications in Go: Things to know about DRY [v2.0]
  2. When microservices in Go are not enough: introduction to DDD Lite [v2.1]
  3. Repository pattern: painless way to simplify your Go service logic [v2.2]
  4. 4 practical principles of high-quality database integration tests in Go [v2.3]
  5. Introducing Clean Architecture by refactoring a Go project [v2.4]
  6. Introducing basic CQRS by refactoring [v2.5]
  7. Combining DDD, CQRS, and Clean Architecture
  8. Microservices test architecture. Can you sleep well without end-to-end tests? [v2.6]
  9. Repository secure by design: how to sleep better without fear of security vulnerabilities
  10. Running integration tests on Google Cloud Build using docker-compose [v2.7]
  11. More articles are on the way!

Community

We're building a Discord community focused on modern business applications. It's the place to discuss hard topics, request a review, or ask if something's not clear. Come join us!

Directories

  • api OpenAPI and gRPC definitions
  • docker Dockerfiles
  • internal application code
  • scripts deployment and development scripts
  • terraform - infrastructure definition
  • web - frontend JavaScript code

Live Demo

The example application is available at https://threedotslabs-wildworkouts.web.app/.

Running locally

> docker-compose up

# ...

web_1             |  INFO  Starting development server...
web_1             |  DONE  Compiled successfully in 6315ms11:18:26 AM
web_1             |
web_1             |
web_1             |   App running at:
web_1             |   - Local:   http://localhost:8080/
web_1             |
web_1             |   It seems you are running Vue CLI inside a container.
web_1             |   Access the dev server via http://localhost:<your container's external mapped port>/
web_1             |
web_1             |   Note that the development build is not optimized.
web_1             |   To create a production build, run yarn build.

Google Cloud Deployment

> cd terraform/
> make

Fill all required parameters:
	project [current: wild-workouts project]:       # <----- put your Wild Workouts Google Cloud project name here (it will be created) 
	user [current: email@gmail.com]:                # <----- put your Google (Gmail, G-suite etc.) e-mail here
	billing_account [current: My billing account]:  # <----- your billing account name, can be found here https://console.cloud.google.com/billing
	region [current: europe-west1]: 
	firebase_location [current: europe-west]: 

# it may take a couple of minutes...

The setup is almost done!

Now you need to enable Email/Password provider in the Firebase console.
To do this, visit https://console.firebase.google.com/u/0/project/[your-project]/authentication/providers

You can also downgrade the subscription plan to Spark (it's set to Blaze by default).
The Spark plan is completely free and has all features needed for running this project.

Congratulations! Your project should be available at: https://[your-project].web.app

If it's not, check if the build finished successfully: https://console.cloud.google.com/cloud-build/builds?project=[your-project]

If you need help, feel free to contact us at https://threedots.tech

Screenshots

Wild Workouts login Wild Workouts trainer's schedule Wild Workouts schedule training

More Repositories

1

watermill

Building event-driven applications the easy way in Go.
Go
7,251
star
2

go-web-app-antipatterns

Short examples of common anti-patterns in Go Web Applications.
Go
338
star
3

monolith-microservice-shop

Source code for https://threedots.tech/post/microservices-or-monolith-its-detail/ article.
Go
247
star
4

event-driven-example

An example Event-Driven application in Go built with Watermill library.
Go
131
star
5

nats-example

An example Go project for running local development environment, with hot code reloading.
Go
100
star
6

watermill-sql

SQL (Postgres/MySQL) Pub/Sub for the Watermill project.
Go
61
star
7

watermill-kafka

Kafka Pub/Sub for the Watermill project.
Go
57
star
8

watermill-amqp

AMQP Pub/Sub for the Watermill project.
Go
54
star
9

watermill-nats

NATS Pub/Sub for the Watermill project.
Go
50
star
10

meteors

An example 2D game made with Go and Ebitengine.
Go
43
star
11

watermill-redisstream

Redis Pub/Sub for the Watermill project.
Go
30
star
12

watermill-http

HTTP Pub/Sub for the Watermill project.
Go
27
star
13

go-event-driven

Materials for https://threedots.tech/event-driven/
Go
26
star
14

esja

Event Sourcing library in Go.
Go
19
star
15

watermill-benchmark

Benchmarking tools for Watermill.
Go
18
star
16

watermill-googlecloud

Google Cloud Pub/Sub Pub/Sub for the Watermill project.
Go
17
star
17

watermill-aws

Amazon SQS/SNS Pub/Sub for the Watermill project.
Go
16
star
18

cli

Go
10
star
19

watermill-jetstream

Go
9
star
20

watermill-io

IO Pub/Sub for the Watermill project.
Go
8
star
21

watermill-bolt

Bolt Pub/Sub for the Watermill project.
Go
6
star
22

pii

Go
5
star
23

github-releases-dashboard

A simple dashboard to keep track of GitHub releases.
Go
1
star
24

wait-for

A simple "wait for port" utility.
Go
1
star
25

watermill-terraform

Terraform definitions for Watermill-related repositories and infrastructure.
HCL
1
star