A bare-bones gRPC service that shares the ORM with HTTP
The pattern
Every example follows the same shape:
1. Define models (embed orm.Model)
2. Register migrations in init()
3. Apply migrations at startup
4. Build a *Service struct that takes a *database.Connection
5. Wrap the service in framework-specific handlers
The *Service layer is the integration point — it returns plain Go
values and errors. That's why swapping Gin → Fiber → Echo means changing
only the HTTP wiring, never the business logic.