Hello from MCP server
package main
import (
"encoding/json"
"github.com/pocketbase/pocketbase"
"github.com/pocketbase/pocketbase/core"
)
func registerHookNewOrg(app *pocketbase.PocketBase) {
app.OnRecordAfterCreateSuccess("organizations").BindFunc(func(e *core.RecordEvent) error {
defaultRoles := []string{"admin", "author", "tech", "support"}
collection, err := app.FindCollectionByNameOrId("roles")
if err != nil {
return err
}
record, err := app.FindRecordById("organizations", e.Record.Id)
if err != nil {
return err
}
record.Set("org", e.Record.Id)
// Set default variables for pricing calculations (values in XAG - base currency)
defaultVariables := map[string]float64{
"hourlyFee": 5.262, // Default hourly rate in XAG
"saDiscount": 1.5, // Service agreement multiplier
"serviceCallFee": 2.0, // Service call fee in XAG
"salesTax": 1.08, // Sales tax multiplier (8%)
}
variablesJson, _ := json.Marshal(defaultVariables)
record.Set("variables", string(variablesJson))
err = app.Save(record)
if err != nil {
return err
}
roleIds := make(map[string]string)
for _, role := range defaultRoles {
roleRecord := core.NewRecord(collection)
roleRecord.Set("org", e.Record.Id)
roleRecord.Set("name", role)
if err := app.Save(roleRecord); err != nil {
return err
}
roleIds[role] = roleRecord.Id
}
resources, err := app.FindAllRecords("resources")
if err != nil {
return err
}
actions, err := app.FindAllRecords("permissionActions")
if err != nil {
return err
}
allow, err := app.FindFirstRecordByData("permissionTypes", "name", "allow")
if err != nil {
return err
}
permissions, err := app.FindCollectionByNameOrId("permissions")
if err != nil {
return err
}
defaultPermissions := map[string]map[string][]string{
"support": {
"list": []string{"profiles"},
"view": []string{"profiles", "organizations"},
},
"tech": {
"create": []string{"serviceCalls"},
"list": []string{"books", "menus", "offers", "profiles", "pricebookChanges", "serviceCalls"},
"view": []string{"books", "menus", "offers", "profiles", "organizations", "pricebookChanges", "serviceCalls"},
"update": []string{"serviceCalls"},
},
"author": {
"create": []string{"books", "menus", "offers", "pricebookChanges", "serviceCalls"},
"list": []string{"books", "menus", "offers", "profiles", "pricebookChanges", "serviceCalls"},
"view": []string{"books", "menus", "offers", "organizations", "pricebookChanges", "serviceCalls"},
"update": []string{"serviceCalls"},
},
}
for _, role := range defaultRoles {
for _, action := range actions {
for _, resource := range resources {
resourcesAllowed := defaultPermissions[role][action.GetString("name")]
for _, r := range resourcesAllowed {
if r == resource.GetString("name") {
record := core.NewRecord(permissions)
record.Set("org", e.Record.Id)
record.Set("role", roleIds[role])
record.Set("resource", resource.Id)
record.Set("action", action.Id)
record.Set("type", allow.Id)
err := app.Save(record)
if err != nil {
return err
}
}
}
}
}
}
profiles, err := app.FindCollectionByNameOrId("profiles")
if err != nil {
return err
}
userId := e.Record.GetString("owner")
profile := core.NewRecord(profiles)
profile.Set("org", e.Record.Id)
profile.Set("user", userId)
profile.Set("roles", []string{roleIds["admin"]})
err = app.Save(profile)
if err != nil {
return err
}
user, err := app.FindRecordById("users", userId)
if err != nil {
return err
}
user.Set("activeOrg", e.Record.Id)
err = app.Save(user)
if err != nil {
return err
}
return e.Next()
})
}