# Lockness Controllers & Routing Class-based controllers with decorators for routing. ## Basic Controller ```typescript import { Controller, Get, Post, Context } from '@lockness/core' @Controller('/api/users') export class UserController { @Get('/', { name: 'users.index' }) async index(c: Context) { return c.json({ users: [] }) } @Get('/:id', { name: 'users.show' }) async show(c: Context) { const id = c.req.param('id') return c.json({ id }) } @Post('/') async store(c: Context) { const body = await c.req.json() return c.json(body, 201) } } ``` ## HTTP Method Decorators - @Get, @Post, @Put, @Delete, @Patch, @Options, @Head ## Named Routes ```typescript @Controller('/users') export class UserController { @Get('/:id', { name: 'users.show' }) async show(c: Context) { ... } } // Generate URLs import { route } from '@lockness/core' const url = route('users.show', { id: 123 }) // "/users/123" return c.redirect(route('auth.login')) ``` ## CLI Commands ```bash # Create controller deno task cli make:controller User # JSON API deno task cli make:controller User --view # With JSX view # Add action to existing controller deno task cli make:action User show # GET method deno task cli make:action User store --method=post # POST method deno task cli make:action User create --view # With view ``` ## RESTful Conventions | Action | Method | Path | Route Name | |---------|--------|-----------|----------------| | index | GET | / | resource.index | | show | GET | /:id | resource.show | | create | GET | /create | resource.create| | store | POST | / | resource.store | | edit | GET | /:id/edit | resource.edit | | update | PUT | /:id | resource.update| | destroy | DELETE | /:id | resource.destroy|