Bug: Vaden não importa enums no código gerado pelo Build Runner
Descrição do Problema
O Vaden Framework, através do build runner, não importa os tipos de enum no arquivo vaden_application.dart gerado quando os enums estão em arquivos separados. Se os enums estiverem no mesmo arquivo das classes que os usam, o build acontece corretamente. Isso causa erros de compilação quando os enums estão organizados em diretórios separados como lib/src/enum/, pois o código gerado referencia tipos que não foram importados e obriga o desenvolvedor a mover os enums para os mesmos arquivos dos DTOs, controllers, etc.
Fluxo do Problema
- Enum definido com
@Component()
- DTO usa o enum como tipo de campo
- Controller usa o enum como parâmetro
- Build Runner gera código sem importar o enum
- Erro de compilação por tipo não encontrado
Código de Exemplo
1. Enum
// lib/src/enum/day_period_enum.dart
enum DayPeriod {
morning,
afternoon,
evening;
static DayPeriod fromString(String value) {
return DayPeriod.values.firstWhere(
(e) => e.name.toLowerCase() == value.toLowerCase(),
orElse: () => throw ArgumentError('Invalid DayPeriod: $value'),
);
}
}
2. DTO que usa o enum
// lib/src/dto/bus_stop_dto.dart
@DTO()
class BusStopDto {
final int id;
final List<RouteDto> routes;
final String busStopName;
final String time;
final DayPeriod dayPeriod; // ← Usa o enum
final bool isActive;
// ...
}
3. Controller com enum como parâmetro
// lib/src/controllers/bus_stop_controller.dart
@Get("/by-day-period/<dayPeriod>")
Future<List<BusStopDto>> getByDayPeriod(@Param() DayPeriod dayPeriod) async {
// ...
}
4. Código gerado pelo Vaden (COM BUG)
// lib/vaden_application.dart - GERADO AUTOMATICAMENTE
// ❌ IMPORTAÇÕES FALTANDO:
// import 'package:oxe_bus_api/src/enum/day_period_enum.dart';
// import 'package:oxe_bus_api/src/enum/all_bus_stops_filter_enum.dart';
import 'package:oxe_bus_api/config/app_configuration.dart';
import 'package:oxe_bus_api/config/app_controller_advice.dart';
// ... outras importações, mas NENHUM enum
final handlerBusStopControllergetAll = (Request request) async {
// ...
// ❌ ERRO: AllBusStopsFilterEnum não foi importado
final filter = _parse<AllBusStopsFilterEnum>(request.params['filter'])!;
// ...
};
final handlerBusStopControllergetByDayPeriod = (Request request) async {
// ...
// ❌ ERRO: DayPeriod não foi importado
final dayPeriod = _parse<DayPeriod>(request.params['dayPeriod'])!;
// ...
};
// ❌ ERRO: DayPeriod.values.byName não funciona sem import
#dayPeriod: DayPeriod.values.byName(json['dayPeriod'] as String),
Erros Específicos Encontrados
Linha 160: AllBusStopsFilterEnum não importado
final filter = _parse<AllBusStopsFilterEnum>(request.params['filter'])!;
// ❌ Error: Undefined name 'AllBusStopsFilterEnum'
Linha 246: DayPeriod não importado
final dayPeriod = _parse<DayPeriod>(request.params['dayPeriod'])!;
// ❌ Error: Undefined name 'DayPeriod'
Linha 331: DayPeriod.values.byName sem import
#dayPeriod: DayPeriod.values.byName(json['dayPeriod'] as String),
// ❌ Error: Undefined name 'DayPeriod'
Soluções Testadas
❌ 1. Adicionar @component() nos enums
@Component() // Não funciona
enum DayPeriod { ... }
✅ 2. Mover enums para mesmo arquivo dos DTOs
// Resolve o problema de import no código gerado
enum DayPeriod { ... } // Enum externo ao DTO, mas no mesmo arquivo
@DTO()
class BusStopDto {
}
Conclusão
Visando um código limpo e mais organizado, a melhor solução é poder ter a opção de usar enum externos aos arquivos em que eles são associados, sem precisar mover os enums para o mesmo arquivo dos DTOs, Controllers, etc. O que resolve o problema de importação no código gerado pelo Vaden.
Bug: Vaden não importa enums no código gerado pelo Build Runner
Descrição do Problema
O Vaden Framework, através do build runner, não importa os tipos de enum no arquivo
vaden_application.dartgerado quando os enums estão em arquivos separados. Se os enums estiverem no mesmo arquivo das classes que os usam, o build acontece corretamente. Isso causa erros de compilação quando os enums estão organizados em diretórios separados comolib/src/enum/, pois o código gerado referencia tipos que não foram importados e obriga o desenvolvedor a mover os enums para os mesmos arquivos dos DTOs, controllers, etc.Fluxo do Problema
@Component()Código de Exemplo
1. Enum
2. DTO que usa o enum
3. Controller com enum como parâmetro
4. Código gerado pelo Vaden (COM BUG)
Erros Específicos Encontrados
Linha 160:
AllBusStopsFilterEnumnão importadoLinha 246:
DayPeriodnão importadoLinha 331:
DayPeriod.values.byNamesem importSoluções Testadas
❌ 1. Adicionar @component() nos enums
✅ 2. Mover enums para mesmo arquivo dos DTOs
Conclusão
Visando um código limpo e mais organizado, a melhor solução é poder ter a opção de usar enum externos aos arquivos em que eles são associados, sem precisar mover os enums para o mesmo arquivo dos DTOs, Controllers, etc. O que resolve o problema de importação no código gerado pelo Vaden.