You've already forked golang-saas-starter-kit
mirror of
https://github.com/raseels-repos/golang-saas-starter-kit.git
synced 2025-08-08 22:36:41 +02:00
updated project readme
This commit is contained in:
42
README.md
42
README.md
@ -31,9 +31,8 @@ https://docs.google.com/presentation/d/1WGYqMZ-YUOaNxlZBfU4srpN8i86MU0ppWWSBb3pk
|
|||||||
When getting started building SaaS, we believe that is important for both the frontend web experience and the backend
|
When getting started building SaaS, we believe that is important for both the frontend web experience and the backend
|
||||||
business logic (business value) be developed in the same codebase - using the same language for the frontend and backend
|
business logic (business value) be developed in the same codebase - using the same language for the frontend and backend
|
||||||
development in the same single repository. We believe this for two main reasons:
|
development in the same single repository. We believe this for two main reasons:
|
||||||
1. Lower barrier for and accelerate onboarding of new engineers developing the SaaS by making it easy for them
|
1. Keeps the product codebase simple and thus easy to load complete mental model.
|
||||||
to load a complete mental model of the codebase.
|
2. Minimize cross project/team coordination
|
||||||
2. Minimize cross project/team coordination
|
|
||||||
|
|
||||||
Once the SaaS product has gained market traction and the core set of functionality has been identified to achieve
|
Once the SaaS product has gained market traction and the core set of functionality has been identified to achieve
|
||||||
product-market fit, the functionality could be re-written with a language that would improve user experience or
|
product-market fit, the functionality could be re-written with a language that would improve user experience or
|
||||||
@ -48,17 +47,17 @@ There are five areas of expertise that an engineer or engineering team must do f
|
|||||||
Based on our experience, a few core decisions were made for each of these areas that help you focus initially on
|
Based on our experience, a few core decisions were made for each of these areas that help you focus initially on
|
||||||
building the business logic.
|
building the business logic.
|
||||||
1. Micro level - The semantics that cover how data is defined, the relationships and how the data is being captured. This
|
1. Micro level - The semantics that cover how data is defined, the relationships and how the data is being captured. This
|
||||||
project tries to minimize the connection between packages on the same horizontally later. Data models should not be part
|
project aims for packages to be developed distinct levels that are loosely coupled and highly cohesive. Data models
|
||||||
of feature functionality. Hopefully these micro level decisions help prevent cases where 30K lines of code rely on a
|
should not be part of feature functionality. It's easy for early products to be overly dependent on single models that
|
||||||
single data model which makes simple one line changes potentially high risk.
|
starts to introduce significant risk to product stability and slows development considerably. We want to avoid
|
||||||
|
situations were a 1 change can affect 30k lines of code.
|
||||||
2. Macro level - The architecture and its design provides basic project structure and the foundation for development.
|
2. Macro level - The architecture and its design provides basic project structure and the foundation for development.
|
||||||
This project provides a good set of examples that demonstrate where different types of code can reside.
|
This project provides a good set of examples for a variety of common product needs.
|
||||||
3. Business logic - The code for the business logic facilitates value generating activities for the business. This
|
3. Business logic - The code for the business logic facilitates value generating activities for the business. This
|
||||||
project provides an example Golang package that helps illustrate the implementation of business logic and how it can be
|
project provides an example Golang package that helps illustrate how business logic can be implemented and delivered
|
||||||
delivered to clients.
|
delivered to clients.
|
||||||
4. Deployment and Operations - Get the code to production! This sometimes can be a challenging task as it requires
|
4. Deployment and Operations - Get the code to production! This usually requires an entirely separate expertise.
|
||||||
a knowledge of a completely different expertise - DevOps. This project provides a complete continuous build pipeline that
|
Instead a comprehensive CI pipeline is provided to create scaleable serverless infrastructure.
|
||||||
will push the code to production with minimal effort using serverless deployments to AWS Fargate with GitLab CI/CD.
|
|
||||||
5. Observability - Ensure the code is running as expected in a remote environment. This project implements Datadog to
|
5. Observability - Ensure the code is running as expected in a remote environment. This project implements Datadog to
|
||||||
facilitate exposing metrics, logs and request tracing to obverse and validate your services are stable and responsive
|
facilitate exposing metrics, logs and request tracing to obverse and validate your services are stable and responsive
|
||||||
for your clients (hopefully paying clients).
|
for your clients (hopefully paying clients).
|
||||||
@ -147,7 +146,7 @@ have created this diagram below. Since it is very detailed, you can click on the
|
|||||||
|
|
||||||
## Local Installation
|
## Local Installation
|
||||||
|
|
||||||
Docker is required to run this project on your local machine. This project uses multiple third-party services that will
|
Docker is required to run this project on your local machine. This project uses multiple open-source services that will
|
||||||
be hosted locally via Docker.
|
be hosted locally via Docker.
|
||||||
* Postgres - Transactional database to handle persistence of all data.
|
* Postgres - Transactional database to handle persistence of all data.
|
||||||
* Redis - Key / value storage for sessions and other data. Used only as ephemeral storage.
|
* Redis - Key / value storage for sessions and other data. Used only as ephemeral storage.
|
||||||
@ -211,7 +210,6 @@ following services will run:
|
|||||||
- web-api
|
- web-api
|
||||||
- web-app
|
- web-app
|
||||||
- postgres
|
- postgres
|
||||||
- mysql
|
|
||||||
|
|
||||||
|
|
||||||
### Running the project
|
### Running the project
|
||||||
@ -296,15 +294,15 @@ docker-compose up --build -d web-app
|
|||||||
2. Update references.
|
2. Update references.
|
||||||
```bash
|
```bash
|
||||||
flist=`grep -r "geeks-accelerator/oss/saas-starter-kit" * | awk -F ':' '{print $1}' | sort | uniq`
|
flist=`grep -r "geeks-accelerator/oss/saas-starter-kit" * | awk -F ':' '{print $1}' | sort | uniq`
|
||||||
for f in $flist; do echo $f; sed -i "" -e "s#geeks-accelerator/oss/saas-starter-kit#geeks-accelerator/oss/aurora-cam#g" $f; done
|
for f in $flist; do echo $f; sed -i "" -e "s|geeks-accelerator/oss/saas-starter-kit|geeks-accelerator/oss/aurora-cam|g" $f; done
|
||||||
|
|
||||||
|
|
||||||
flist=`grep -r "saas-starter-kit" * | awk -F ':' '{print $1}' | sort | uniq`
|
flist=`grep -r "saas-starter-kit" * | awk -F ':' '{print $1}' | sort | uniq`
|
||||||
for f in $flist; do echo $f; sed -i "" -e "s#saas-starter-kit#aurora-cam#g" $f; done
|
for f in $flist; do echo $f; sed -i "" -e "s|saas-starter-kit|aurora-cam|g" $f; done
|
||||||
|
|
||||||
|
|
||||||
flist=`grep -r "example-project" * | awk -F ':' '{print $1}' | sort | uniq`
|
flist=`grep -r "example-project" * | awk -F ':' '{print $1}' | sort | uniq`
|
||||||
for f in $flist; do echo $f; sed -i "" -e "s#example-project#aurora-cam#g" $f; done
|
for f in $flist; do echo $f; sed -i "" -e "s|example-project|aurora-cam|g" $f; done
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -546,7 +544,10 @@ shared=# \dt
|
|||||||
public | users | table | postgres
|
public | users | table | postgres
|
||||||
public | users_accounts | table | postgres
|
public | users_accounts | table | postgres
|
||||||
(5 rows)
|
(5 rows)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
An alternative option would be to install [pgcli](https://www.pgcli.com/) locally on your machine and connect to the
|
||||||
|
database running inside the docker container.
|
||||||
|
|
||||||
|
|
||||||
## Deployment
|
## Deployment
|
||||||
@ -607,11 +608,6 @@ can set a single env variable.
|
|||||||
DD_EXPVAR=service_name=web-app env=dev url=http://web-app:4000/debug/vars|service_name=web-api env=dev url=http://web-api:4001/debug/vars
|
DD_EXPVAR=service_name=web-app env=dev url=http://web-app:4000/debug/vars|service_name=web-api env=dev url=http://web-api:4001/debug/vars
|
||||||
```
|
```
|
||||||
|
|
||||||
### Postgres and future MySQL support
|
|
||||||
|
|
||||||
Postgres is only supported based on its dependency of sqlxmigrate. MySQL should be easy to add to sqlxmigrate after
|
|
||||||
determining a better method for abstracting the create table and other SQL statements from the main testing logic.
|
|
||||||
|
|
||||||
### SQLx bindvars
|
### SQLx bindvars
|
||||||
|
|
||||||
When making new packages that use sqlx, bind vars for mysql are `?` where as postgres is `$1`.
|
When making new packages that use sqlx, bind vars for mysql are `?` where as postgres is `$1`.
|
||||||
@ -629,7 +625,7 @@ For additional details refer to [bindvars](https://jmoiron.github.io/sqlx/#bindv
|
|||||||
## What's Next
|
## What's Next
|
||||||
|
|
||||||
We are in the process of writing more documentation about this code. We welcome you to make enhancements to this
|
We are in the process of writing more documentation about this code. We welcome you to make enhancements to this
|
||||||
documentation or just send us your feedback and suggestions ; )
|
documentation or just send us your feedback and suggestions :wink:
|
||||||
|
|
||||||
|
|
||||||
## Join us on Gopher Slack
|
## Join us on Gopher Slack
|
||||||
|
Reference in New Issue
Block a user