From 4d62ffb7529f341c0633dddd231658d7cc7412a1 Mon Sep 17 00:00:00 2001 From: Mukesh Kumar Chaudhary Date: Mon, 8 Jul 2024 20:47:33 +0545 Subject: [PATCH] feat: add docs of project scaffold --- docs/.vitepress/config.mts | 11 ++- docs/enter-author-detail.png | Bin 0 -> 10083 bytes docs/enter-go-module-name.png | Bin 0 -> 7385 bytes docs/enter-go-version.png | Bin 0 -> 9169 bytes docs/enter-project-description.png | Bin 0 -> 7838 bytes docs/enter-project-directory.png | Bin 0 -> 9951 bytes docs/enter-project-name.png | Bin 0 -> 7200 bytes docs/folder-structure.md | 109 +++++++++++++++++++++++++++++ docs/generate-project-config.md | 77 ++++++++++++++++++++ docs/generate-project.md | 86 +++++++++++++++++++++++ docs/how-to-use.md | 41 ++++++++++- docs/index.md | 12 ++-- docs/module-name.png | Bin 0 -> 6322 bytes docs/project-name.png | Bin 0 -> 6131 bytes docs/select-infrastructure.png | Bin 0 -> 13363 bytes docs/start-project.md | 77 ++++++++++++++++++++ 16 files changed, 405 insertions(+), 8 deletions(-) create mode 100644 docs/enter-author-detail.png create mode 100644 docs/enter-go-module-name.png create mode 100644 docs/enter-go-version.png create mode 100644 docs/enter-project-description.png create mode 100644 docs/enter-project-directory.png create mode 100644 docs/enter-project-name.png create mode 100644 docs/folder-structure.md create mode 100644 docs/generate-project-config.md create mode 100644 docs/generate-project.md create mode 100644 docs/module-name.png create mode 100644 docs/project-name.png create mode 100644 docs/select-infrastructure.png create mode 100644 docs/start-project.md diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index a3d77f0..4106a9d 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -2,6 +2,7 @@ import { defineConfig, HeadConfig } from "vitepress"; // https://vitepress.dev/reference/site-config export default defineConfig({ + title: "GENG", description: "A tool to generate golang web project.", themeConfig: { @@ -25,7 +26,15 @@ export default defineConfig({ collapsed: false, items: [ { text: "How to use?", link: "/how-to-use" }, - // { text: "Getting Started", link: "/getting-started" }, + { text: "Generate a project", link: "/generate-project" }, + { text: "Generate a project using config", link: "/generate-project-config" }, + { text: "Start the project", link: "/start-project" }, + { text: "Project Folder structure", link: "/folder-structure" }, + { text: "Generate a module", link: "/generate-module" }, + { + text: "Generate a infrastructure", + link: "/generate-infrastructure", + }, ], }, { diff --git a/docs/enter-author-detail.png b/docs/enter-author-detail.png new file mode 100644 index 0000000000000000000000000000000000000000..c5925e28e40dfc7721cf3037ffbbbe0dedda0ed5 GIT binary patch literal 10083 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 KRHD18v=AP|xe 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 P{#VOT&lpjn;}r8hqmk;B literal 0 HcmV?d00001 diff --git a/docs/enter-go-version.png b/docs/enter-go-version.png new file mode 100644 index 0000000000000000000000000000000000000000..24763a492a50d3fa8b9e868f9fb7151b41a001c5 GIT binary patch literal 9169 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 Ac>n+a literal 0 HcmV?d00001 diff --git a/docs/enter-project-description.png b/docs/enter-project-description.png new file mode 100644 index 0000000000000000000000000000000000000000..2b570762c27d9d6cf41481fd3b8f34e5d7b7783b GIT binary patch literal 7838 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 aGokCQX literal 0 HcmV?d00001 diff --git a/docs/folder-structure.md b/docs/folder-structure.md new file mode 100644 index 0000000..7505f1c --- /dev/null +++ b/docs/folder-structure.md @@ -0,0 +1,109 @@ +--- +outline: deep +title: Start a project +description: Let's learn how to execute a project using Gen-G +--- + +# How to use? + +## Folder Structure of the project + +```bash +. +├── README.md +├── bootstrap +│   ├── app.go +│   └── module.go +├── console +│   ├── commands +│   │   ├── migration.go +│   │   ├── random.go +│   │   ├── seed.go +│   │   └── serve.go +│   └── console.go +├── docker +│   ├── custom.cnf +│   ├── db.Dockerfile +│   ├── run.sh +│   └── web.Dockerfile +├── docker-compose.yml +├── domain +│   ├── dtos +│   │   └── hello.dto.go +│   ├── hello +│   │   ├── hello.controller.go +│   │   ├── hello.module.go +│   │   ├── hello.repository.go +│   │   ├── hello.route.go +│   │   └── hello.service.go +│   ├── middlewares +│   │   └── module.go +│   ├── models +│   │   └── hello.model.go +│   └── module.go +├── go.mod +├── go.sum +├── main.go +├── migrations +│   ├── hello.go +│   ├── migrator.go +│   └── module.go +├── pkg +│   ├── framework +│   │   ├── command.go +│   │   ├── constants.go +│   │   ├── env.go +│   │   ├── logger.go +│   │   ├── migration.go +│   │   ├── module.go +│   │   └── seed.go +│   ├── infrastructure +│   │   ├── module.go +│   │   └── router.go +│   ├── middlewares +│   │   ├── command.go +│   │   ├── module.go +│   │   └── rate_limitter.go +│   ├── module.go +│   ├── responses +│   │   └── response.go +│   ├── services +│   │   └── module.go +│   └── utils +│   ├── aws_error.go +│   └── functional_programming.go +└── seeds + ├── hello.go + ├── module.go + └── seeder.go + +19 directories, 48 files +``` + +## Folder Structure :file_folder: + +| Folder Path | Description | +| -------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| `/bootstrap` | contains modules required to start the application | +| `/console` | server commands, run `go run main.go -help` for all the available server commands | +| `/docker` | `docker` files required for `docker compose` | +| `/domain` | contains dtos, models, constants and folder for each domain with controller, repository, routes and services | +| `/domain/constants` | global application constants | +| `/domain/models` | ORM models | +| `/domain/` | controller, repository, routes and service for a `domain`. In this template `user` is a domain | +| `/pkg` | contains setup for api_errors, infrastructure, middlewares, external services, utils | +| `/pkg/api-errors` | server error handlers | +| `/pkg/framework` | contains env parser, logger... | +| `/pkg/infrastructure` | third-party services connections like `gmail`, `firebase`, `s3-bucket`, ... | +| `/pkg/middlewares` | all middlewares used in the app | +| `/pkg/responses` | different types of http responses are defined here | +| `/pkg/services` | service layers, contains the functionality that compounds the core of the application | +| `/pkg/types` | data types used throught the application | +| `/pkg/utils` | global utility/helper functions | +| `/seeds` | seeds for already migrated tables | +| `/tests` | includes application tests | +| `.env.example` | sample environment variables | +| `dbconfig.yml` | database configuration file for `sql-migrate` command | +| `docker-compose.yml` | `docker compose` file for service application via `Docker` | +| `main.go` | entry-point of the server | +| `Makefile` | stores frequently used commands; can be invoked using `make` command | \ No newline at end of file diff --git a/docs/generate-project-config.md b/docs/generate-project-config.md new file mode 100644 index 0000000..d0fad3f --- /dev/null +++ b/docs/generate-project-config.md @@ -0,0 +1,77 @@ +--- +outline: deep +title: Scaffold a project +description: Let's learn how to generate a project using Gen-G +--- + +# How to use? + +## Generate a project using config + +Instead of using the following command. +```bash +geng new +``` + +- Create a `geng.json` file which can contain following value: +```jsonc +{ + "projectName": "todo app", + "projectModuleName": "github.com/mukezhz/todo", + "author": "Mukesh Kumar Chaudhary ", + "projectDescription": "A simple todo project", + "goVersion": "1.21" + // "directory": ".", + // "infrastructureName": [], + // "serviceName": [] +} +``` + +Now enter the project generation command. +```bash +geng new +``` + +You will get the similar output: +```bash + + GENG: GENERATE GOLANG PROJECT + + ██████╗ ███████╗███╗ ██╗ ██████╗ + ██╔════╝ ██╔════╝████╗ ██║ ██╔════╝ + ██║ ███╗█████╗ ██╔██╗ ██║█████╗██║ ███╗ + ██║ ██║██╔══╝ ██║╚██╗██║╚════╝██║ ██║ + ╚██████╔╝███████╗██║ ╚████║ ╚██████╔╝ + ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═════╝ + + + + The information you have provided: + + Project Name 💻: Todo App + Project Module 📂: github.com/mukezhz/todo + Project Description 📚: A simple todo project + Go Version 🆚: 1.21 + Author Detail 🤓: Mukesh Kumar Chaudhary + + 💻 Change directory to project: + cd todo_app + + 💾 Initalize git repository: + git init + + 📚 Sync dependencies: + go mod tidy + + 🕵 Copy .env.example to .env: + cp .env.example .env + + 🏃 Start Project 🏃: + go run main.go app:serve + + Thank You For using 🙏🇳🇵🙏: +``` + +**Note:** I have filled the project description, author name and go version. + +:tada: Now follow the instruction and run the project \ No newline at end of file diff --git a/docs/generate-project.md b/docs/generate-project.md new file mode 100644 index 0000000..69bc838 --- /dev/null +++ b/docs/generate-project.md @@ -0,0 +1,86 @@ +--- +outline: deep +title: Scaffold a project +description: Let's learn how to generate a project using Gen-G +--- + +# How to use? + +## Generate a project + +In order to generate a project you need to enter the following command: +```bash +geng new +``` + +Once you enter the command it will ask you bunch of questions. + +- To enter Project Name * +![enter project name](./enter-project-name.png) +- To enter Project Module * +![enter go module name](./enter-go-module-name.png) +- To enter Author Detail [Optional] +![author detail](./enter-author-detail.png) +- To enter Project Description [Optional] +![project description](./enter-project-description.png) +- To enter Go Version [Optional] +![go version](./enter-go-version.png) +- To enter Project Directory [Optional] +![project directory](./enter-project-directory.png) +- To Select the infrastructure? **Use Space key to Select** [Optional] +![select infrastructure](./select-infrastructure.png) + +### After filling all question you will get following output +```bash + + GENG: GENERATE GOLANG PROJECT + + ██████╗ ███████╗███╗ ██╗ ██████╗ + ██╔════╝ ██╔════╝████╗ ██║ ██╔════╝ + ██║ ███╗█████╗ ██╔██╗ ██║█████╗██║ ███╗ + ██║ ██║██╔══╝ ██║╚██╗██║╚════╝██║ ██║ + ╚██████╔╝███████╗██║ ╚████║ ╚██████╔╝ + ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═════╝ + + + + The information you have provided: + + Project Name 💻: Todo App + Project Module 📂: github.com/mukezhz/todo + Project Description 📚: + Go Version 🆚: 1.20 + Author Detail 🤓: + + 💻 Change directory to project: + cd todo_app + + 💾 Initalize git repository: + git init + + 📚 Sync dependencies: + go mod tidy + + 🕵 Copy .env.example to .env: + cp .env.example .env + + 🏃 Start Project 🏃: + go run main.go app:serve + + Thank You For using 🙏🇳🇵🙏: +``` + +### Entered value + +Here I have entered the following value: +1. project name: todo app +2. go module name: github.com/mukezhz/todo +3. author detail: [just pressed enter ie. empty] +4. project description: [just pressed enter ie. empty] +5. go version: [just pressed enter ie. empty] +6. project directory: [just pressed enter ie. empty] +7. select infrastructure: [just pressed enter ie. empty] + +**Note:** You can fill the optional value + +:tada: Now follow the instruction and run the project \ No newline at end of file diff --git a/docs/how-to-use.md b/docs/how-to-use.md index 4ad752f..9d46cc4 100644 --- a/docs/how-to-use.md +++ b/docs/how-to-use.md @@ -4,4 +4,43 @@ outline: deep # How to Use -# \ No newline at end of file +## Guide + +Gen-G is designed with user-friendliness as a priority, making it straightforward to use. Like most command-line interface (CLI) tools, it follows a specific pattern: + +```bash +geng command [flag] +``` + +You can get the list of command using: + +```bash +geng help +``` + +### Output +```bash +geng is a CLI library for Go that empowers applications. + +Usage: + geng [command] + +Available Commands: + completion Generate the autocompletion script for the specified shell + gen Create a new domain + help Help about any command + infra Add a new infrastructure + migrate migrate the project + new Create a new project + run Run the project + seed Seed the project + service Add a new Service + start Execute the project + +Flags: + -h, --help help for geng + +Use "geng [command] --help" for more information about a command. +``` + +Please refer to the dedicated section of each command. \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 9497e31..2f468d6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -15,11 +15,11 @@ hero: link: /roadmap features: - - title: Feature A - details: Lorem ipsum dolor sit amet, consectetur adipiscing elit - - title: Feature B - details: Lorem ipsum dolor sit amet, consectetur adipiscing elit - - title: Feature C - details: Lorem ipsum dolor sit amet, consectetur adipiscing elit + - title: Generate Go Project + details: Gen-G will help you to generate a starter for go gin project + - title: Generate a module + details: Gen-G will help you to generate module which will setup DI + - title: Generate from bru file + details: Gen-G will help you to generate module from Bru file --- diff --git a/docs/module-name.png b/docs/module-name.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4d342f40890201665fd68197fa6345fd197a43 GIT binary patch literal 6322 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 U7tk(ptiP+_24?z27q8vpjQ{`u literal 0 HcmV?d00001 diff --git a/docs/project-name.png b/docs/project-name.png new file mode 100644 index 0000000000000000000000000000000000000000..8e92015b02186be6e72ed6a58deb7f8685de026d GIT binary patch literal 6131 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 OqOPo?RCveo>Hh+2`Uw;O literal 0 HcmV?d00001 diff --git a/docs/start-project.md b/docs/start-project.md new file mode 100644 index 0000000..310f9f7 --- /dev/null +++ b/docs/start-project.md @@ -0,0 +1,77 @@ +--- +outline: deep +title: Start a project +description: Let's learn how to execute a project using Gen-G +--- + +# How to use? + +## Start the project + +In order to start a project just follow the given instruction which has been printed on project generation step. + +1. change the directory if you haven't specified project directory to . (ie. current directory) +```bash +cd [your project name] +``` +2. initialize the git +```bash +git init +``` +3. install the dependency using +```bash +go mod tidy +``` +4. copy the .env.example to .env +```bash +cp .env.example .env +``` +5. run the project +``` +geng run app:serve +//or +go run . app:serve +``` + +### Output +```bash +➜ geng git:(main) ✗ cd todo_app +➜ todo_app git:(main) ✗ go mod tidy +go: finding module for package github.com/aws/smithy-go +go: found github.com/aws/smithy-go in github.com/aws/smithy-go v1.20.3 +... +➜ todo_app git:(main) ✗ git init +Initialized empty Git repository in /Users/mukesh.chaudhary/GolandProjects/geng/todo_app/.git/ +➜ todo_app git:(main) ✗ cp .env.example .env +➜ todo_app git:(main) ✗ geng run app:serve +2024-07-08T20:27:08.001+0545 INFO [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached. + + +2024-07-08T20:27:08.002+0545 INFO [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production. + - using env: export GIN_MODE=release + - using code: gin.SetMode(gin.ReleaseMode) + + +2024-07-08T20:27:08.002+0545 INFO [GIN-debug] GET /health-check --> github.com/mukezhz/todo/pkg/infrastructure.NewRouter.func1 (5 handlers) + +2024-07-08T20:27:08.002+0545 INFO [GIN-debug] GET /api/hello --> github.com/mukezhz/todo/domain/hello.(*Controller).HandleRoot-fm (5 handlers) + +2024-07-08T20:27:08.002+0545 INFO commands/serve.go:29 +-----------------------+ +2024-07-08T20:27:08.002+0545 INFO commands/serve.go:30 | GO CLEAN ARCHITECTURE | +2024-07-08T20:27:08.002+0545 INFO commands/serve.go:31 +-----------------------+ +2024-07-08T14:42:08.002Z INFO commands/serve.go:49 Running server +2024-07-08T14:42:08.002Z INFO [GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value. +Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details. + +2024-07-08T14:42:08.002Z INFO [GIN-debug] Listening and serving HTTP on :5000 +``` + +### Info + +Once you follow all the step correctly you can see your app running at port **:5000** + +you can verify it using curl: +```bash +curl http://localhost:5000/health-check +# or simply enter the uri in browser +``` \ No newline at end of file