Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/opplieam/bb-core-api
https://github.com/opplieam/bb-core-api
Last synced: 14 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/opplieam/bb-core-api
- Owner: opplieam
- License: gpl-3.0
- Created: 2024-08-20T16:34:10.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2024-11-29T14:29:48.000Z (2 months ago)
- Last Synced: 2024-11-29T15:31:35.905Z (2 months ago)
- Language: Go
- Size: 261 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Buy-Better Core API
## Table of contents
- [Overview](#overview)
- [Project structure](#project-structure)
- [Dependencies](#dependencies)
- [Developer Setup](#developer-setup)
- [Running in local cluster minikube](#running-in-local-cluster-minikube)
- [Useful Command/Makefile](#useful-commandmakefile)
- [Database Schema](#database-schema)## Overview
Buy-Better Core API is the server that act like API gateway with additional logic. This service can
authenticate with `Oauth2` and authorization before calling other service. It's similar to `Orchestration design pattern``NOTE: This project is for learning purpose and not fully complete yet`
## Project structure
```
├── .gen # auto generated by jet-db
│ ├── buy-better-core
├── bin # go binary
├── cmd
│ ├── api # main package for core api server
│ └── dbhelper # a dev tool for database helper
├── deploy # helm chart
│ ├── bb-core-api # project helm chart
│ ├── secrets # bitnami secret
├── internal
│ ├── middleware # api middleware
│ ├── store # database logic
│ ├── utils # global utilities
│ └── v1
│ ├── auth # Oauth2 handler
│ ├── probe # liveness & readiness handler
│ └── product # product handler
│ └── dev
└── migrations # migration sql
```## Dependencies
#### Infrastructure
- docker / docker-compose
- minikube
- kubectl / kustomize
- helm
- kubeseal
#### Database tools
- CLI go [migrate](https://github.com/golang-migrate/migrate/tree/master/cmd/migrate)
- CLI [jet-db](https://github.com/go-jet/jet?tab=readme-ov-file#installation)## Developer Setup
1. Create environment variable store in `.env` file at root directory
```
WEB_SERVICE_ENV="dev"
WEB_ADDR=":3030"
WEB_READ_TIMEOUT=5
WEB_WRITE_TIMEOUT=40
WEB_IDLE_TIMEOUT=120
WEB_SHUTDOWN_TIMEOUT=20DB_DRIVER="postgres"
DB_DSN="postgresql://postgres:admin1234@localhost:5433/buy-better-core?sslmode=disable"
DB_MAX_OPEN_CONNS=25
DB_MAX_IDLE_CONNS=25
DB_MAX_IDLE_TIME="15m"TOKEN_ENCODED="1c0021bc344fa16c72fc522c53bfe9f77a2a597507374e56e3a275759c4c1562"
SESSION_SECRET="your goth session secret"
GOOGLE_CLIENT_ID="your google clientid"
GOOGLE_CLIENT_SECRET="your google secret"
GOOGLE_CALLBACK="http://127.0.0.1:3030/v1/auth/google/callback"PRODUCT_SERVICE_ADDR="localhost:3031"
```
> For `TOKEN_ENCODED`, you can random generate using [this](https://www.browserling.com/tools/random-hex) and use 64 digits2. Create postgres environment variable in `.postgres.env` file at root directory. This will be used by `docker-compose`.
```
POSTGRES_USER="postgres"
POSTGRES_PASSWORD="admin1234"
POSTGRES_DB="buy-better-core"
```
> postgres environment variables must be match with Makefile3. Visit `Makefile` There are 4 important variables for local development. Feel free to edit.
```
DB_DSN
DB_NAME
DB_USERNAME
CONTAINER_NAME
```4. Start the development postgres db `make dev-db-up` this command does follow
* docker-compose with postgres image
* sleep for 3 seconds
* migrate up
* seed the fake data with `dbhelper` tool5. `go run cmd/api` start the server with port `:3030`
## Running in local cluster minikube
1. create `encoded-secret.yaml` under k8s/secret/dev
```
apiVersion: v1
kind: Secret
metadata:
name: core-api-secret
namespace: buy-bettertype: Opaque
data:
TOKEN_ENCODED: "your base64 encode"
GOOGLE_CLIENT_ID: "your base64 encode"
GOOGLE_CLIENT_SECRET: "your base64 encode"
SESSION_SECRET: "your base64 encode"
```
2. `make dev-up-all`
* starting postgres db -> migration -> seed fake data
* starting minikube
* apply `bitnami-sealed-secrets` controller
3. `minikbue tunnel` to expose load balancer
4. `make dev-apply`
* go mod tidy
* building an image with docker
* kustomize apply resources
* generate and apply bitnami secret
* restart deployment (due to bitnami seal secret controller changing certificate everytime when starting a new cluster)## Useful Command/Makefile
Please visit `Makefile` for the full command.
- `make jet-gen` generate a type safe from database. run this command everytime there is a change in database schema.
- `make dev-db-reset` restart the postgres container. run when you want to reset the database## Database Schema
![db](https://github.com/opplieam/bb-core-api/blob/main/Buy-Better-Core.png?raw=true)