GOODBOY008 commented on issue #4275:
URL: https://github.com/apache/streampark/issues/4275#issuecomment-3162869261
## ๐ Enum Refactoring Plan Discussion
Hi team! I've created a comprehensive refactoring plan for migrating to
MyBatis-Plus automatic enum conversion using `@EnumValue` annotations. This
will improve maintainability and consistency across the codebase.
### ๐ **Migration Overview**
**Goal:** Leverage MyBatis-Plus's automatic enum conversion by using
`@EnumValue` annotation for better maintainability and consistency.
### ๐ **Analysis Summary**
#### **Phase 1: Enums in streampark-common** (12 enums to refactor)
- `ApplicationType.java` โ Annotate `type` (int)
- `ClusterState.java` โ Annotate `state` (Integer)
- `FlinkDeployMode.java` โ Annotate `mode` (Integer)
- `FlinkJobType.java` โ Annotate `mode` (Integer)
- `FlinkK8sRestExposedType.java` โ Annotate `type` (Integer)
- `FlinkRestoreMode.java` โ Annotate `mode` (int)
- `FlinkSqlValidationFailedType.java` โ Annotate `failedType` (int)
- `ResolveOrder.java` โ Annotate `order` (Integer)
- `SparkDeployMode.java` โ Annotate `mode` (Integer)
- `SparkJobType.java` โ Annotate `mode` (Integer)
- `SparkSqlValidationFailedType.java` โ Annotate `failedType` (int)
- `StorageType.java` โ Annotate `type` (String)
#### **Phase 2: Enums in streampark-console** (~25 enums to refactor)
Including: `AccessTokenStateEnum`, `AlertTypeEnum`, `AppExistsStateEnum`,
`AuthenticationType`, `BuildStateEnum`, etc.
*Note: Some enums already have `@EnumValue` annotation and just need
verification.*
### ๐ฏ **Implementation Strategy**
1. **Apply `@EnumValue` annotations** to identified enum fields
2. **Refactor entity classes** to use enum types directly instead of
primitive values
3. **Update mapper interfaces** and remove manual conversion logic
4. **Configure Jackson globally** for consistent enum serialization to
frontend
### ๐งช **Testing & Verification Plan**
- Unit tests for enum value mapping
- Integration tests for database persistence
- Full build verification: `mvn clean install`
- Existing test suite validation
### ๐ง **Frontend Serialization (Bonus)**
Recommend global Jackson configuration:
```java
@Bean
public Jackson2ObjectMapperBuilderCustomizer customizer() {
return builder ->
builder.featuresToEnable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
}
```
### ๐ **Discussion Points**
1. **Priority**: Which modules should we tackle first? I suggest starting
with `streampark-common` as it's foundational.
2. **Backward Compatibility**: Should we maintain any compatibility layers
during migration?
3. **Timeline**: What's the preferred timeline for this refactoring?
4. **Review Process**: How should we structure the PRs? By module or by enum
type?
5. **Testing Coverage**: Are there specific integration test scenarios we
should prioritize?
### ๐ค **Next Steps**
I'm ready to begin implementation following community feedback. Please let
me know:
- Your thoughts on the approach
- Any concerns or suggestions
- Preferred implementation order
- Review preferences
Looking forward to your feedback! ๐
**Reference**: [MyBatis-Plus Official Docs - Auto Enum
Conversion](https://baomidou.com/guides/auto-convert-enum/)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]