From c95e8a924596b22a07acf2cff133049725515725 Mon Sep 17 00:00:00 2001 From: JACS Date: Fri, 1 May 2026 11:53:21 -0500 Subject: [PATCH] first commit --- .gitignore | 11 +++++++ README.md | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..90a928b --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +.air.toml +.env +tmp/* +logs/* +!logs/.gitkeep +tls/* +!tls/.gitkeep +.DS_Store +storage/sqlite/* +.idea +cup diff --git a/README.md b/README.md new file mode 100644 index 0000000..4ae95df --- /dev/null +++ b/README.md @@ -0,0 +1,92 @@ +![goffee logo](https://git.smarteching.com/avatars/cd7cd5b690adc8e5ec6d6cdb117f1bf5a9e9353dae111bfbb394d2c3d4497537?size=200) +# Cup of Goffee + +## What is Goffee? +Cup is a skeleton project for the Goffee [Go](https://go.dev) framework made for building web APIs, suitable for small, medium size and microservices projects. With it's simple structure, and developer friendly experience it helps with increasing the productivity. + +## Main Features +- Routing +- Hooks +- Data Validation +- Databases ORM ([GORM](https://gorm.io/) integrated) +- Emails +- JWT tokens +- Cache (Redis) +- HTTPS (TLS) + +## Installation +To create a new `cup` project you need to install the `Goffee's cli` first + +##### Install Goffee [cli] tool +To install the `goffee` globally open up your terminal and run the following command: +```bash +go install git.smarteching.com/goffee/goffee@latest +``` + + +##### Create new project using a Cup of Goffee +Here is how you can create new `Goffee` projects +```bash +goffee new [project-name] [project-remote-repository] +``` +Example +```bash +goffee new myapp git.smarteching.com/goffee/myapp +``` +where: +`project-name` is the name of your project +`remote-repository` is the remote repository that will host the project. + +## Getting started +First make sure you have [Goffee](https://git.smarteching.com/goffee/goffee) installed, then use it to create a new project, [here is how](https://git.smarteching.com/goffee/goffee/docs/gaffer#create-new-project-using-gaffer) + +Let's create a route that returns `hello world` + +Open up the file `routes.go` in the root directory of your project and add the following code: +```go "defining a route" + router.Get("/greeting", func(c *core.Context) *core.Response { + JsonString := `{"message": "hello world"}` + + return c.Response.Json(JsonString) + }) +``` +Next, in your terminal navigate to the project dir and run the following command to start the `live reloading`: +```go +goffee run:dev +``` +Finally, open up your browser and navigate to `http://localhost/greeting` + +To learn more check the [routing docs section](https://git.smarteching.com/goffee/goffee/docs/routing) + + +## Architecture +The architecture is similar to `MVC`, where there is a routes file `./routes.go` in which you can map all your app routes to their controllers which resides in the directory `./controllers`. Controllers are simply methods that handles requests (GET, POST, ... etch) to the given routes. + +## The request journey: +The first component that receive's the request in `Cup` is the `Router`, +then `Goffee` locates the matching [handler](https://git.smarteching.com/goffee/docs/handlers) of the request and it check's if there are any [hooks](https://git.smarteching.com/goffee/docs/hooks) to be executed either before or after the [controller](https://git.smarteching.com/goffee/controllers), if so, it executes them in the right order, then at the final stage it returns the response to the user. +`Request -> Router -> Optional Hooks -> Controller -> Optional Hooks -> Response` + +## Folder structure +```bash +├── cup +│ ├── config/ --------------------------> main configs +│ ├── events/ --------------------------> contains events +│ │ ├── jobs/ ------------------------> contains the event jobs +│ ├── controllers/ ---------------------> route's controllers +│ ├── logs/ ----------------------------> app log files +│ ├── hooks/ ---------------------------> app hooks +│ ├── models/ --------------------------> database models +│ ├── storage/ -------------------------> a place to store files +│ ├── tls/ -----------------------------> tls certificates +│ ├── .env -----------------------------> environment variables +│ ├── .gitignore -----------------------> .gitignore +│ ├── go.mod ---------------------------> Go modules +│ ├── LICENSE --------------------------> license +│ ├── main.go --------------------------> go main file +│ ├── README.md ------------------------> readme file +│ ├── register-events.go ---------------> register events and jobs +│ ├── register-global-hooks.go ---------> register global middlewares +│ ├── routes.go ------------------------> app routes +│ ├── run-auto-migrations.go -----------> database migrations +``` \ No newline at end of file