This application was generated using Golem.
The application is generated, but doesn't do much by default. To start getting things running, you'll need to enable some plugins. You can enable a plugin with a command like:
golem plugin enable [plugin]
Some suggestions to get started.
The HTTP
server
golem plugin enable routes
Routes are managed with groups
. You can add a group with the golem add group
command. Routes
are then added to the group with the golem add route
command. The example below adds a group
called releases
and implements a REST-like interface (Create, Update, etc). Route definitons
are stored in .golem/routes/
. You can manage them there or you can add addtional routes with
the golem add route
command.
golem add group releases --rest
This command generates wrappers (indexReleasesHandler
, createReleasesHandler
, etc) to
respond to the following routes. You will need to implement the handler functions
(ReleaseIndex
, ReleaseCreate
, etc) in the app/routes_releases.go
file.
You can always inspect the routes with:
golem routes
Which will output something like:
Releases
GET /releases/ ReleasesIndex (indexReleasesHandler)
POST /releases/ ReleasesCreate (createReleasesHandler)
GET /releases/:id ReleasesShow (showReleasesHandler)
PUT /releases/:id ReleasesUpdate (updateReleasesHandler)
PATCH /releases/:id ReleasesSettings (settingsReleasesHandler)
DELETE /releases/:id ReleasesDelete (deleteReleasesHandler)
The Database
access layer.
golem plugin enable models
Models are managed with the golem add model
command. The example below adds a model
called release
with a name
field. Model definitions are stored in .golem/models/
.
You can manage the models in the yaml files in this directory.
golem add model release name:string
All the generated models are in the app/app_models.go
file. A file is generated for each
model for customizing the functionality of the generated model. In the example above, this
creates a file called app/models_release.go
. You can add custom methods to the model in
this file.
Database access is enabled by the grimoire package.
It provides a simple interface to creating, saving, and querying data. You can find more
information at the link above. Grimoire
is a layer built on
kamva/mgm.
Event processing and handling. Manage channels and event handlers that interact with other services using event-based communications.
golem plugin enable events
Events are managed with the golem add event
command. The example below adds an event
called release
with a name
field. Event definitions are stored in .golem/events/
.
You can manage the events in the yaml files in this directory.
golem add event release name:string
All of the generated channels and events are in the app/app_events.go
file. A file is
generated for each event for implementing the handling functionality. In the example
above, this creates a file called app/events_release.go
.
There are ultimately three types of events:
Sender
- allows you to send a message to another serviceReceiver
- allows you to receive a message from another serviceReceiver
withProxy
enabled - this is a combination of the two. It allows you to receive a message, process it and pass it on to another.
Both Receeiver
types of events have generated handler
function called on[Name]
. The
Receiver
handler just allows you to process the message. The Receiver
with Proxy
enabled
handler allows you to process the message and then return a different type.
The Events
plugin automatically wires all of the encoding/decoding (JSON) and sending/receiving
functionality using a lightweight wrapper around the NATS messaging system.
This wrapper is Mercury
Background jobs
golem plugin enable workers
Workers are managed with the golem add worker
command. The example below adds a worker
called ReleaseProcess
. Worker definitions are stored in .golem/workers/
. You can manage
the workers in the yaml files in this directory.
golem add worker ReleaseProcess
All of the generated worker management code is in the app/app_workers.go
file. A file
is generated for each worker for implementing the work functionality. In the example above,
this creates a file called app/workers_release_process.go
.
The Workers
plugin automatically wires all of the worker management functionality using
the Minion package.
Cache management
golem plugin enable cache
Cache is a simple wrapper around the redis
implementation of
gokv.
The wrapper provides a Fetch
method that works similarly to the Rails.cache.fetch
method. It allows you to fetch a value from the cache and if it doesn't exist, it will
call a function to generate the value and store it in the cache.