Skip to content
Back to skills

Controller Generation

ASecurity

Code generation for CRUD endpoints

  • 666 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added February 8, 2026
toolstypescriptgobash

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill controller-generation --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Controller Generation?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Controller Generation
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-controller-generation/badge)](https://www.skillsdirectory.com/skills/majiayu000-controller-generation)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: controller-generation
description: Code generation for CRUD endpoints
---

# Controller Code Generation

The system uses `core_generate` to automatically create standard CRUD operations for controllers.

## Code Generation Command

Add this directive to your `setup.go` file:

```go
//go:generate core_gen controller Account -modelPackage=account
```

**Parameters:**
- `controller` - Command type
- `Account` - Model name (PascalCase)
- `-modelPackage=account` - Package name containing the model
- `-options=admin` if its an admin only controller
- `-skip=xxxYYY,aaaBBB` skip generating this function because we need to customize it

## Generated Files

Running `go generate` creates two files:

**`x_gen_admin.go`** - Admin CRUD handlers:
- `adminIndex` - List all resources
- `adminGet` - Get single resource
- `adminCreate` - Create new resource
- `adminUpdate` - Update existing resource
- `adminCount` - Get total count

(optionally)
**`x_gen_auth.go`** - Public CRUD handlers:
- `authIndex` - List resources (filtered to user's data)
- `authGet` - Get single resource (with ownership check)
- `authCreate` - Create new resource
- `authUpdate` - Update resource (with ownership check)

## Generated Endpoints

| Method | Admin Route | Public Route | Function | Description |
|--------|-------------|--------------|----------|-------------|
| GET | `/admin/account` | `/account` | `adminIndex`, `authIndex` | List resources |
| GET | `/admin/account/{id}` | `/account/{id}` | `adminGet`, `authGet` | Get single resource |
| POST | `/admin/account` | `/account` | `adminCreate`, `authCreate` | Create new resource |
| PUT | `/admin/account/{id}` | `/account/{id}` | `adminUpdate`, `authUpdate` | Update resource |
| GET | `/admin/account/count` | - | `adminCount` | Get total count |
| GET | `/admin/account/_ts` | - | TypeScript | TS type generation |

## Skipping Endpoints

You can disable specific endpoints using the `-skip` parameter:

```go
//go:generate core_gen controller AiTool -modelPackage=ai_tool -skip=authCreate,authUpdate
```

This will generate all endpoints except `authCreate` and `authUpdate`.

**Available Skip Options:**
- `adminIndex` - Skip admin list endpoint
- `adminGet` - Skip admin get endpoint
- `adminCreate` - Skip admin create endpoint
- `adminUpdate` - Skip admin update endpoint
- `adminCount` - Skip admin count endpoint
- `authIndex` - Skip public list endpoint
- `authGet` - Skip public get endpoint
- `authCreate` - Skip public create endpoint
- `authUpdate` - Skip public update endpoint

### Common Skip Patterns

**Read-only public endpoint:**
```go
//go:generate core_gen controller Config -modelPackage=config -skip=authCreate,authUpdate
```

**Admin-only resource:**
```go
//go:generate core_gen controller SystemLog -modelPackage=system_log -options=admin
```


## Customizing Generated Code

**DO NOT edit generated files directly.** They will be overwritten on next generation.

Instead, create custom handlers in separate files, name them accordingly
auth.go
open.go
admin.go

if theres lots of functions, group them together by relation then use a prefix, auth_password.go auth_emails.go

**custom_handlers.go:**
```go
package account

func customSearch(_ http.ResponseWriter, req *http.Request) ([]*account.Account, int, error) {
    // Custom search logic here
    // ...
}
```

Then wire up in `setup.go`:

```go
r.Get("/search", helpers.RoleHandler(helpers.RoleHandlerMap{
    constants.ROLE_ANY_AUTHORIZED: helpers.StandardPublicRequestWrapper(customSearch),
}))
```

## Regenerating Code

Re-run generation after:
- Updating skip parameters

```bash
go generate path/to/file
```

## Related Skills

- [controller-handlers](../controller-handlers/SKILL.md) - Writing custom handlers
- [controller-roles](../controller-roles/SKILL.md) - Role-based access control

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.