Events
In Goffee defining events is straightforward, first you need to add the event name as a constant to the file events\event-names.go
#file: events\event-names.go
package events
const PASSWORD_CHANGED = "password-changed"
const PROCESS_COMPLETED = "process-completed"
Next, you need to create the event job
Event Job
the event job is simply a function that gets executed every time the event is triggered, here is an example of one
#file: events\jobs
package eventjobs
import (
    "fmt"
    "git.smarteching.com/goffee/core"
    "git.smarteching.com/goffee/goffee/models"
)
var SendPasswordChangedNotificationEmail core.EventJob = func(event *core.Event, c *core.Context) {
    go func() {
        // logic to send the email goes here
    }()
}
Next, you have to register the event job using the events manager so it can be executed when the event is triggered, you can simply do that in the file register-events.go
package main
import (
    "git.smarteching.com/goffee/core"
    "git.smarteching.com/goffee/goffee/events"
    eventjobs "git.smarteching.com/goffee/goffee/events/jobs"
)
// Register events
func registerEvents() {
    eventsManager := core.ResolveEventsManager()
    //########################################
    //#      events registration         #####
    //########################################
    // register your event here...
    eventsManager.Register(events.PASSWORD_CHANGED, eventjobs.SendPasswordChangedNotificationEmail)
}
Triggering an event
Events can be triggered using the events manager, here is how
package controllers
import (
    "git.smarteching.com/goffee/core"
    "git.smarteching.com/goffee/goffee/events"
    "git.smarteching.com/goffee/goffee/models"
)
func Signup(c *core.Context) *core.Response {
    var user models.User
    err = c.GetEventsManager().Fire(
        &core.Event{
            Name: events.PASSWORD_CHANGED, 
            Payload: map[string]interface{}{
                "user": user,
            }
    })
}