web-controllers-and-routinglisted
Install: claude install-skill dbtinoy-/lexigram-framework-skills
# Web Controllers and Routing
## Overview
Lexigram-web provides an async-first web layer on Starlette. Controllers group related routes via decorators, with full DI injection and middleware guards.
## Controller Pattern
```python
from lexigram.web import Controller, get, post, put, delete
from starlette.requests import Request # framework reuses Starlette's Request
class UserController(Controller):
def __init__(self, repo: UserRepositoryProtocol):
self.repo = repo
@get("/users")
async def list_all(self, request: Request):
result = await self.repo.find_all()
return {"users": [u.to_dict() for u in result]}
@get("/users/{user_id}")
async def get_one(self, request: Request, user_id: str):
result = await self.repo.find(user_id)
return result.match(
ok=lambda u: {"user": u.to_dict()},
err=lambda e: ({"error": str(e)}, 404),
)
@post("/users")
async def create(self, request: Request):
data = await request.json()
result = await self.repo.create(data)
return result.match(
ok=lambda u: ({"user": u.to_dict()}, 201),
err=lambda e: ({"error": str(e)}, 400),
)
@delete("/users/{user_id}")
async def delete(self, user_id: str):
await self.repo.delete(user_id)
return {"ok": True}
```
## Guards and Middleware
```python
from lexigram.web.security import use_guards, AuthGuard
from lexigram.contracts.web.guard