Model generator
This commit is contained in:
@@ -27,12 +27,6 @@ public class IntervalsActivityService extends AbstractService<IntervalsActivity,
|
||||
return intervalsActivityDAO;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public IntervalsActivity getById(final long id) {
|
||||
return super.getById(id);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public @Nullable IntervalsActivity getEarliestActivity(final Long athleteId) {
|
||||
return intervalsActivityDAO.getEarliestActivity(athleteId);
|
||||
@@ -86,18 +80,6 @@ public class IntervalsActivityService extends AbstractService<IntervalsActivity,
|
||||
return intervalsActivityDAO.findPendingStreamIds(athleteId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void insert(final IntervalsActivity activity) {
|
||||
super.insert(activity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void update(final IntervalsActivity activity) {
|
||||
super.update(activity);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public IntervalsActivity linkWorkout(final long activityId, final long workoutId) {
|
||||
final IntervalsActivity activity = intervalsActivityDAO.getById(activityId);
|
||||
|
||||
@@ -30,9 +30,4 @@ public class StravaActivityService extends AbstractService<StravaActivity, Strav
|
||||
return stravaActivityDAO.getLatestActivity(athleteId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void insert(final StravaActivity activity) {
|
||||
super.insert(activity);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,12 +20,6 @@ public class AthleteService extends AbstractService<Athlete, AthleteDAO> {
|
||||
return athleteDAO;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Athlete getById(final long id) {
|
||||
return super.getById(id);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public @Nullable Athlete getByLogin(final String login) {
|
||||
return athleteDAO.findByLogin(login);
|
||||
|
||||
@@ -2,29 +2,35 @@ package com.peakup.common.service;
|
||||
|
||||
import com.peakup.common.dao.AbstractDAO;
|
||||
import com.peakup.common.model.AbstractEntity;
|
||||
import jakarta.transaction.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public abstract class AbstractService<E extends AbstractEntity, D extends AbstractDAO<E>> {
|
||||
|
||||
protected E getById(final long id) {
|
||||
@Transactional
|
||||
public final E getById(final long id) {
|
||||
return getDAO().getById(id);
|
||||
}
|
||||
|
||||
protected List<E> getAll() {
|
||||
@Transactional
|
||||
public final List<E> getAll() {
|
||||
return getDAO().getAll();
|
||||
}
|
||||
|
||||
protected void insert(final E entity) {
|
||||
@Transactional
|
||||
public final void insert(final E entity) {
|
||||
getDAO().insert(entity);
|
||||
}
|
||||
|
||||
protected void update(final E entity) {
|
||||
@Transactional
|
||||
public final void update(final E entity) {
|
||||
getDAO().update(entity);
|
||||
}
|
||||
|
||||
protected void delete(final E entity) {
|
||||
@Transactional
|
||||
public final void delete(final E entity) {
|
||||
getDAO().delete(entity);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,24 +24,6 @@ public class GoalService extends AbstractService<Goal, GoalDAO> {
|
||||
return goalDAO;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Goal getById(final long id) {
|
||||
return super.getById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void insert(final Goal goal) {
|
||||
super.insert(goal);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void delete(final Goal goal) {
|
||||
super.delete(goal);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public List<Goal> getByAthleteId(final Long athleteId) {
|
||||
return goalDAO.getByAthleteId(athleteId);
|
||||
|
||||
@@ -49,12 +49,6 @@ public class WeekPlanService extends AbstractService<WeekPlan, WeekPlanDAO> {
|
||||
return weekPlanDAO;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public WeekPlan getById(final long id) {
|
||||
return super.getById(id);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public WeekPlan getByIdWithWorkouts(final long id) {
|
||||
final WeekPlan weekPlan = super.getById(id);
|
||||
@@ -130,12 +124,6 @@ public class WeekPlanService extends AbstractService<WeekPlan, WeekPlanDAO> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void delete(final WeekPlan entity) {
|
||||
super.delete(entity);
|
||||
}
|
||||
|
||||
public String generateImportSchema() {
|
||||
final JakartaValidationModule validationModule = new JakartaValidationModule(
|
||||
JakartaValidationOption.NOT_NULLABLE_FIELD_IS_REQUIRED,
|
||||
|
||||
@@ -20,12 +20,6 @@ public class WorkoutService extends AbstractService<Workout, WorkoutDAO> {
|
||||
return workoutDAO;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Workout getById(final long id) {
|
||||
return super.getById(id);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public @Nullable Workout updateWorkout(final long planId, final long workoutId, final Workout updated) {
|
||||
final Workout existing = workoutDAO.getById(workoutId);
|
||||
|
||||
@@ -52,7 +52,9 @@ public class ModelGeneratorTool {
|
||||
? Paths.get(args[1])
|
||||
: Paths.get(System.getProperty("user.dir")).resolve("peakup-backend/src/main/java");
|
||||
|
||||
final ModelDefinition def = new ObjectMapper().readValue(definitionPath.toFile(), ModelDefinition.class);
|
||||
final ModelDefinition def = new ObjectMapper()
|
||||
.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
|
||||
.readValue(definitionPath.toFile(), ModelDefinition.class);
|
||||
|
||||
System.out.println("Generating: " + def.modelName + " → " + outputDir.toAbsolutePath());
|
||||
|
||||
@@ -100,7 +102,7 @@ public class ModelGeneratorTool {
|
||||
enumBuilder.addField(FieldSpec.builder(TypeName.INT, "key", Modifier.PRIVATE, Modifier.FINAL).build());
|
||||
|
||||
enumBuilder.addMethod(MethodSpec.constructorBuilder()
|
||||
.addParameter(TypeName.INT, "key")
|
||||
.addParameter(ParameterSpec.builder(TypeName.INT, "key").addModifiers(Modifier.FINAL).build())
|
||||
.addStatement("this.key = key")
|
||||
.build());
|
||||
|
||||
@@ -128,7 +130,7 @@ public class ModelGeneratorTool {
|
||||
|
||||
enumBuilder.addType(converterClass);
|
||||
|
||||
return JavaFile.builder(modelPackage, enumBuilder.build()).skipJavaLangImports(true).build();
|
||||
return JavaFile.builder(modelPackage, enumBuilder.build()).indent(" ").skipJavaLangImports(true).build();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
@@ -147,7 +149,7 @@ public class ModelGeneratorTool {
|
||||
|
||||
classBuilder.addMethod(buildHibernateConstructor());
|
||||
|
||||
return JavaFile.builder(modelPackage, classBuilder.build()).skipJavaLangImports(true).build();
|
||||
return JavaFile.builder(modelPackage, classBuilder.build()).indent(" ").skipJavaLangImports(true).build();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
@@ -186,7 +188,7 @@ public class ModelGeneratorTool {
|
||||
classBuilder.addMethod(buildMergeFromMethod(def, modelClass));
|
||||
classBuilder.addMethod(buildHibernateConstructor());
|
||||
|
||||
return JavaFile.builder(modelPackage, classBuilder.build()).skipJavaLangImports(true).build();
|
||||
return JavaFile.builder(modelPackage, classBuilder.build()).indent(" ").skipJavaLangImports(true).build();
|
||||
}
|
||||
|
||||
private void addElementCollectionFields(final TypeSpec.Builder classBuilder,
|
||||
@@ -290,7 +292,7 @@ public class ModelGeneratorTool {
|
||||
classBuilder.addMethod(buildGetByAthleteIdDAO(modelClass));
|
||||
}
|
||||
|
||||
return JavaFile.builder(daoPackage, classBuilder.build()).skipJavaLangImports(true).build();
|
||||
return JavaFile.builder(daoPackage, classBuilder.build()).indent(" ").skipJavaLangImports(true).build();
|
||||
}
|
||||
|
||||
private MethodSpec buildGetByAthleteIdDAO(final ClassName modelClass) {
|
||||
@@ -319,9 +321,7 @@ public class ModelGeneratorTool {
|
||||
final String servicePackage = def.packageBase + ".service";
|
||||
final ClassName modelClass = ClassName.get(modelPackage, def.modelName);
|
||||
final ClassName daoClass = ClassName.get(daoPackage, def.modelName + "DAO");
|
||||
final ClassName transactional = ClassName.get("jakarta.transaction", "Transactional");
|
||||
final String daoFieldName = toLowerFirst(def.modelName) + "DAO";
|
||||
final String entityParam = toLowerFirst(def.modelName);
|
||||
|
||||
final TypeSpec.Builder classBuilder = TypeSpec.classBuilder(def.modelName + "Service")
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
@@ -341,53 +341,9 @@ public class ModelGeneratorTool {
|
||||
.addStatement("return $L", daoFieldName)
|
||||
.build());
|
||||
|
||||
classBuilder.addMethod(MethodSpec.methodBuilder("getById")
|
||||
.addAnnotation(Override.class)
|
||||
.addAnnotation(transactional)
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.returns(modelClass)
|
||||
.addParameter(ParameterSpec.builder(TypeName.LONG, "id").addModifiers(Modifier.FINAL).build())
|
||||
.addStatement("return super.getById(id)")
|
||||
.build());
|
||||
|
||||
classBuilder.addMethod(MethodSpec.methodBuilder("getAll")
|
||||
.addAnnotation(Override.class)
|
||||
.addAnnotation(transactional)
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.returns(ParameterizedTypeName.get(ClassName.get(List.class), modelClass))
|
||||
.addStatement("return super.getAll()")
|
||||
.build());
|
||||
|
||||
classBuilder.addMethod(MethodSpec.methodBuilder("insert")
|
||||
.addAnnotation(Override.class)
|
||||
.addAnnotation(transactional)
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addParameter(ParameterSpec.builder(modelClass, entityParam).addModifiers(Modifier.FINAL).build())
|
||||
.returns(TypeName.VOID)
|
||||
.addStatement("super.insert($L)", entityParam)
|
||||
.build());
|
||||
|
||||
classBuilder.addMethod(MethodSpec.methodBuilder("update")
|
||||
.addAnnotation(Override.class)
|
||||
.addAnnotation(transactional)
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addParameter(ParameterSpec.builder(modelClass, entityParam).addModifiers(Modifier.FINAL).build())
|
||||
.returns(TypeName.VOID)
|
||||
.addStatement("super.update($L)", entityParam)
|
||||
.build());
|
||||
|
||||
classBuilder.addMethod(MethodSpec.methodBuilder("delete")
|
||||
.addAnnotation(Override.class)
|
||||
.addAnnotation(transactional)
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.addParameter(ParameterSpec.builder(modelClass, entityParam).addModifiers(Modifier.FINAL).build())
|
||||
.returns(TypeName.VOID)
|
||||
.addStatement("super.delete($L)", entityParam)
|
||||
.build());
|
||||
|
||||
if (hasAthleteId(def)) {
|
||||
classBuilder.addMethod(MethodSpec.methodBuilder("getByAthleteId")
|
||||
.addAnnotation(transactional)
|
||||
.addAnnotation(ClassName.get("jakarta.transaction", "Transactional"))
|
||||
.addModifiers(Modifier.PUBLIC)
|
||||
.returns(ParameterizedTypeName.get(ClassName.get(List.class), modelClass))
|
||||
.addParameter(ParameterSpec.builder(TypeName.LONG, "athleteId").addModifiers(Modifier.FINAL).build())
|
||||
@@ -395,7 +351,7 @@ public class ModelGeneratorTool {
|
||||
.build());
|
||||
}
|
||||
|
||||
return JavaFile.builder(servicePackage, classBuilder.build()).skipJavaLangImports(true).build();
|
||||
return JavaFile.builder(servicePackage, classBuilder.build()).indent(" ").skipJavaLangImports(true).build();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
@@ -440,7 +396,7 @@ public class ModelGeneratorTool {
|
||||
classBuilder.addMethod(buildUpdateEndpoint(modelClass, serviceFieldName, entityParam, restResponse, noResultException));
|
||||
classBuilder.addMethod(buildDeleteEndpoint(modelClass, serviceFieldName, restResponse, noResultException));
|
||||
|
||||
return JavaFile.builder(def.packageBase, classBuilder.build()).skipJavaLangImports(true).build();
|
||||
return JavaFile.builder(def.packageBase, classBuilder.build()).indent(" ").skipJavaLangImports(true).build();
|
||||
}
|
||||
|
||||
private void addGetEndpoint(final TypeSpec.Builder classBuilder, final ModelDefinition def,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"_comment": "Example model definition for ModelGeneratorTool. Adjust and copy to define your own model.",
|
||||
"modelName": "TrainingNote",
|
||||
"packageBase": "com.peakup.trainingnote",
|
||||
"tableName": "training_note",
|
||||
@@ -38,10 +39,11 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"_oneToManyRelations_note": "entityClass can be a simple name (resolved to packageBase.model) or a fully-qualified class name.",
|
||||
"oneToManyRelations": [
|
||||
{
|
||||
"fieldName": "steps",
|
||||
"entityClass": "NoteStep",
|
||||
"entityClass": "com.peakup.workout.model.WorkoutStep",
|
||||
"joinColumn": "training_note_id",
|
||||
"orderBy": "sortIndex ASC",
|
||||
"fetchMode": "SUBSELECT"
|
||||
|
||||
Reference in New Issue
Block a user