Code Investigation Guide
Quick Start
Proto (API contract) -> Handler -> Usecase -> Repository -> DB
Use this flow to trace any feature. Start from what you know.
Key Locations
| What | Where |
|------|-------|
| API contracts | schema/proto/rapid/{admin_api,public_api,debug_api}/v1/ |
| Handlers | internal/infrastructure/grpc/internal/handler/{admin,public,debug}/ |
| Usecases | internal/usecase/*_impl.go |
| Domain models | internal/domain/model/ |
| Repository interfaces | internal/domain/repository/ |
| Repository implementations | internal/infrastructure/{mysql,postgresql,spanner}/repository/ |
| DI wiring | internal/infrastructure/dependency/dependency.go |
| Auth interceptors | internal/infrastructure/grpc/internal/interceptor/ |
Investigation Patterns
Find an API endpoint
# Find by HTTP path
grep "/admin/v1/tenants" schema/proto/rapid/
# Find by RPC name
grep "CreateTenant" internal/infrastructure/grpc/internal/handler/admin/
Trace request flow
- Find RPC in
schema/proto/rapid/**/api.proto - Find handler in
internal/infrastructure/grpc/internal/handler/{actor}/ - Find interactor in
internal/usecase/*_impl.go - Find repository in
internal/domain/repository/(interface) andinternal/infrastructure/*/repository/(impl)
Find all usages of a type
# Find usages of a domain model
grep "model.Staff" internal/
# Find usages of a repository method
grep "staffRepository.Get" internal/usecase/
Check authorization logic
- Session extraction:
internal/infrastructure/grpc/internal/interceptor/session_interceptor/ - Access control:
internal/infrastructure/grpc/internal/interceptor/authorization_interceptor/ - Role checks in usecase: look for
param.AdminRole.IsRoot()patterns
Impact analysis before changes
- Find interface definition in
internal/domain/repository/ - Find all implementations in
internal/infrastructure/*/repository/ - Find all callers in
internal/usecase/ - Check mock generation:
internal/domain/repository/mock/
Common Search Patterns
| Goal | Search |
|------|--------|
| Find entity by name | grep "type Staff struct" internal/domain/model/ |
| Find error definition | grep "StaffNotFoundErr" internal/domain/errors/ |
| Find input validation | grep "type AdminCreateStaff" internal/usecase/input/ |
| Find marshaller | grep "StaffToModel\|StaffToPb" internal/ |
| Find DI registration | grep "AdminStaffInteractor" internal/infrastructure/dependency/ |
Tips
- Start from proto for API-related investigation
- Start from domain model for business logic investigation
- Check
dependency.goto understand how components are wired - Marshallers exist in two places: repository (DB<->domain) and handler (domain<->proto)
微信扫一扫