Skip to content

Commit

Permalink
Merge pull request #10971 from renanfranca/10651-move-preset-logic-to…
Browse files Browse the repository at this point in the history
…-module-bounded-context

move preset logic to "module" bounded context
  • Loading branch information
murdos committed Sep 25, 2024
2 parents 4e36b0e + 789394b commit e2f8d0d
Show file tree
Hide file tree
Showing 27 changed files with 292 additions and 280 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,13 @@

import java.util.Collection;
import org.springframework.stereotype.Service;
import tech.jhipster.lite.module.domain.GeneratedProjectRepository;
import tech.jhipster.lite.module.domain.JHipsterModuleApplied;
import tech.jhipster.lite.module.domain.JHipsterModuleEvents;
import tech.jhipster.lite.module.domain.JHipsterModuleToApply;
import tech.jhipster.lite.module.domain.JHipsterModulesApplyer;
import tech.jhipster.lite.module.domain.JHipsterModulesRepository;
import tech.jhipster.lite.module.domain.JHipsterModulesToApply;
import tech.jhipster.lite.module.domain.*;
import tech.jhipster.lite.module.domain.git.GitRepository;
import tech.jhipster.lite.module.domain.javabuild.ProjectJavaBuildToolRepository;
import tech.jhipster.lite.module.domain.javadependency.JavaDependenciesVersionsRepository;
import tech.jhipster.lite.module.domain.javadependency.ProjectJavaDependenciesRepository;
import tech.jhipster.lite.module.domain.landscape.JHipsterLandscape;
import tech.jhipster.lite.module.domain.preset.Preset;
import tech.jhipster.lite.module.domain.resource.JHipsterModulesResources;

@Service
Expand All @@ -22,6 +17,7 @@ public class JHipsterModulesApplicationService {
private final JHipsterModuleEvents events;
private final JHipsterModulesRepository modules;
private final JHipsterModulesApplyer applyer;
private final JHipsterPresetRepository preset;

public JHipsterModulesApplicationService(
JHipsterModuleEvents events,
Expand All @@ -30,10 +26,12 @@ public JHipsterModulesApplicationService(
ProjectJavaDependenciesRepository projectDependencies,
ProjectJavaBuildToolRepository javaBuildTools,
GitRepository git,
GeneratedProjectRepository generatedProject
GeneratedProjectRepository generatedProject,
JHipsterPresetRepository preset
) {
this.events = events;
this.modules = modules;
this.preset = preset;

applyer = new JHipsterModulesApplyer(modules, currentVersions, projectDependencies, javaBuildTools, git, generatedProject);
}
Expand All @@ -57,4 +55,8 @@ public JHipsterModulesResources resources() {
public JHipsterLandscape landscape() {
return modules.landscape();
}

public Collection<Preset> getPresets() {
return preset.getPresets();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package tech.jhipster.lite.module.domain;

import java.util.Collection;
import tech.jhipster.lite.shared.error.domain.Assert;

public record JHipsterModuleSlugs(Collection<JHipsterModuleSlug> modules) {
public JHipsterModuleSlugs {
Assert.notEmpty("modules", modules);
}

public static JHipsterModuleSlugs from(Collection<String> modules) {
return new JHipsterModuleSlugs(modules.stream().map(JHipsterModuleSlug::new).toList());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package tech.jhipster.lite.module.domain;

import java.util.Collection;
import tech.jhipster.lite.module.domain.preset.Preset;

public interface JHipsterPresetRepository {
Collection<Preset> getPresets();
}
11 changes: 11 additions & 0 deletions src/main/java/tech/jhipster/lite/module/domain/preset/Preset.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package tech.jhipster.lite.module.domain.preset;

import tech.jhipster.lite.module.domain.JHipsterModuleSlugs;
import tech.jhipster.lite.shared.error.domain.Assert;

public record Preset(PresetName name, JHipsterModuleSlugs modules) {
public Preset {
Assert.notNull("name", name);
Assert.notNull("modules", modules);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package tech.jhipster.lite.project.domain.preset;
package tech.jhipster.lite.module.domain.preset;

import tech.jhipster.lite.shared.error.domain.Assert;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,10 @@
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import tech.jhipster.lite.module.application.JHipsterModulesApplicationService;
import tech.jhipster.lite.module.domain.JHipsterModuleSlug;
import tech.jhipster.lite.module.domain.JHipsterModuleToApply;
Expand Down Expand Up @@ -68,4 +64,10 @@ public RestJHipsterModulePropertiesDefinition propertiesDefinition(@PathVariable
JHipsterModuleResource module = modules.resources().get(new JHipsterModuleSlug(slug));
return RestJHipsterModulePropertiesDefinition.from(module.propertiesDefinition());
}

@Operation(summary = "Get presets configuration")
@GetMapping(path = "/presets", produces = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<RestPresets> getPresets() {
return ResponseEntity.ok(RestPresets.from(modules.getPresets()));
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package tech.jhipster.lite.project.infrastructure.primary;
package tech.jhipster.lite.module.infrastructure.primary;

import io.swagger.v3.oas.annotations.media.Schema;
import tech.jhipster.lite.project.domain.ModuleSlug;
import tech.jhipster.lite.module.domain.JHipsterModuleSlug;

@Schema(name = "ModuleToApply", description = "Information for a module to apply")
record RestModuleToApply(@Schema(description = "Slug of the module to apply") String slug) {
public static RestModuleToApply from(ModuleSlug moduleSlug) {
public static RestModuleToApply from(JHipsterModuleSlug moduleSlug) {
return new RestModuleToApply(moduleSlug.get());
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package tech.jhipster.lite.project.infrastructure.primary;
package tech.jhipster.lite.module.infrastructure.primary;

import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Collection;
import tech.jhipster.lite.project.domain.preset.Preset;
import tech.jhipster.lite.module.domain.preset.Preset;

@Schema(name = "Preset", description = "Information on specific configuration")
record RestPreset(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package tech.jhipster.lite.project.infrastructure.primary;
package tech.jhipster.lite.module.infrastructure.primary;

import io.swagger.v3.oas.annotations.media.Schema;
import java.util.Collection;
import tech.jhipster.lite.project.domain.preset.Preset;
import tech.jhipster.lite.module.domain.preset.Preset;

@Schema(name = "Presets", description = "Information on the predefined configurations")
record RestPresets(Collection<RestPreset> presets) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package tech.jhipster.lite.module.infrastructure.secondary;

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Collection;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import tech.jhipster.lite.module.domain.JHipsterPresetRepository;
import tech.jhipster.lite.module.domain.ProjectFiles;
import tech.jhipster.lite.module.domain.preset.Preset;
import tech.jhipster.lite.module.domain.preset.PresetName;
import tech.jhipster.lite.shared.error.domain.GeneratorException;

@Repository
class FileSystemJHipsterPresetRepository implements JHipsterPresetRepository {

private static final String PRESET_FOLDER = "/";

private final ObjectMapper json;
private final ProjectFiles projectFiles;
private final PresetName presetName;

public FileSystemJHipsterPresetRepository(
ObjectMapper json,
ProjectFiles projectFiles,
@Value("${jhlite-preset-file.name:preset.json}") String presetFileName
) {
this.json = json;
this.projectFiles = projectFiles;
this.presetName = PresetName.from(presetFileName);
}

@Override
public Collection<Preset> getPresets() {
try {
return json.readValue(projectFiles.readBytes(presetFilePath()), PersistedPresets.class).toDomain();
} catch (IOException e) {
throw GeneratorException.technicalError("Can't read presets: " + e.getMessage(), e);
}
}

private String presetFilePath() {
return PRESET_FOLDER + presetName.name();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package tech.jhipster.lite.module.infrastructure.secondary;

import java.util.Collection;
import tech.jhipster.lite.module.domain.JHipsterModuleSlugs;
import tech.jhipster.lite.module.domain.preset.Preset;
import tech.jhipster.lite.module.domain.preset.PresetName;

record PersistedPreset(String name, Collection<String> modules) {
public Preset toDomain() {
return new Preset(PresetName.from(name), JHipsterModuleSlugs.from(modules));
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package tech.jhipster.lite.project.infrastructure.secondary;
package tech.jhipster.lite.module.infrastructure.secondary;

import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.Collection;
import tech.jhipster.lite.project.domain.preset.Preset;
import tech.jhipster.lite.module.domain.preset.Preset;

record PersistedPresets(@JsonProperty("presets") Collection<PersistedPreset> presets) {
public Collection<Preset> toDomain() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package tech.jhipster.lite.project.application;

import java.util.Collection;
import org.springframework.stereotype.Service;
import tech.jhipster.lite.project.domain.ProjectPath;
import tech.jhipster.lite.project.domain.ProjectsRepository;
Expand All @@ -9,7 +8,6 @@
import tech.jhipster.lite.project.domain.history.ProjectActionToAppend;
import tech.jhipster.lite.project.domain.history.ProjectActionsAppender;
import tech.jhipster.lite.project.domain.history.ProjectHistory;
import tech.jhipster.lite.project.domain.preset.Preset;
import tech.jhipster.lite.shared.projectfolder.domain.ProjectFolder;

@Service
Expand Down Expand Up @@ -41,8 +39,4 @@ public void append(ProjectActionToAppend actionToAppend) {
public ProjectHistory getHistory(ProjectPath path) {
return projects.getHistory(path);
}

public Collection<Preset> getPresets() {
return projects.getPresets();
}
}
14 changes: 0 additions & 14 deletions src/main/java/tech/jhipster/lite/project/domain/ModulesSlugs.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package tech.jhipster.lite.project.domain;

import java.util.Collection;
import java.util.Optional;
import tech.jhipster.lite.project.domain.download.Project;
import tech.jhipster.lite.project.domain.history.ProjectHistory;
import tech.jhipster.lite.project.domain.preset.Preset;

public interface ProjectsRepository {
void format(ProjectPath path);
Expand All @@ -14,6 +12,4 @@ public interface ProjectsRepository {
void save(ProjectHistory history);

ProjectHistory getHistory(ProjectPath path);

Collection<Preset> getPresets();
}
11 changes: 0 additions & 11 deletions src/main/java/tech/jhipster/lite/project/domain/preset/Preset.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,4 @@ ResponseEntity<RestProjectHistory> getProjectHistory(
) {
return ResponseEntity.ok(RestProjectHistory.from(projects.getHistory(new ProjectPath(path))));
}

@Operation(summary = "Get presets configuration")
@GetMapping(path = "/presets", produces = MediaType.APPLICATION_JSON_VALUE)
ResponseEntity<RestPresets> getPresets() {
return ResponseEntity.ok(RestPresets.from(projects.getPresets()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,12 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
import tech.jhipster.lite.module.domain.ProjectFiles;
import tech.jhipster.lite.project.domain.ProjectPath;
import tech.jhipster.lite.project.domain.ProjectsRepository;
import tech.jhipster.lite.project.domain.download.Project;
import tech.jhipster.lite.project.domain.history.ProjectHistory;
import tech.jhipster.lite.project.domain.preset.Preset;
import tech.jhipster.lite.project.domain.preset.PresetName;
import tech.jhipster.lite.shared.error.domain.Assert;
import tech.jhipster.lite.shared.error.domain.GeneratorException;

Expand All @@ -27,25 +22,15 @@ class FileSystemProjectsRepository implements ProjectsRepository {

private static final String HISTORY_FOLDER = ".jhipster/modules";
private static final String HISTORY_FILE = "history.json";
private static final String PRESET_FOLDER = "/";

private final ObjectMapper json;
private final ProjectFormatter formatter;
private final ProjectFiles projectFiles;
private final ObjectWriter writer;
private final FileSystemProjectDownloader downloader;
private final PresetName presetName;

public FileSystemProjectsRepository(
ObjectMapper json,
ProjectFormatter formatter,
ProjectFiles projectFiles,
@Value("${jhlite-preset-file.name:preset.json}") String presetFileName
) {

public FileSystemProjectsRepository(ObjectMapper json, ProjectFormatter formatter) {
this.json = json;
this.formatter = formatter;
this.projectFiles = projectFiles;
this.presetName = PresetName.from(presetFileName);

writer = json.writerWithDefaultPrettyPrinter();
downloader = new FileSystemProjectDownloader();
Expand Down Expand Up @@ -99,17 +84,4 @@ public ProjectHistory getHistory(ProjectPath path) {
private Path historyFilePath(ProjectPath path) {
return Paths.get(path.get(), HISTORY_FOLDER, HISTORY_FILE);
}

@Override
public Collection<Preset> getPresets() {
try {
return json.readValue(projectFiles.readBytes(presetFilePath()), PersistedPresets.class).toDomain();
} catch (IOException e) {
throw GeneratorException.technicalError("Can't read presets: " + e.getMessage(), e);
}
}

private String presetFilePath() {
return PRESET_FOLDER + presetName.name();
}
}

This file was deleted.

Loading

0 comments on commit e2f8d0d

Please sign in to comment.