diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/WebConfiguration.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/WebConfiguration.java deleted file mode 100644 index 910edb4ca6488f140ea7ad153c526d9de5fffc05..0000000000000000000000000000000000000000 --- a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/WebConfiguration.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.schbrain.archetype.initializer.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -/** - * @author liaozan - * @since 2022/3/20 - */ -@Configuration(proxyBeanMethods = false) -public class WebConfiguration implements WebMvcConfigurer { - - @Bean - public CorsFilter corsFilter() { - CorsConfiguration corsConfiguration = new CorsConfiguration(); - corsConfiguration.setAllowCredentials(true); - corsConfiguration.addAllowedOriginPattern("*"); - corsConfiguration.addAllowedHeader("*"); - corsConfiguration.addExposedHeader("*"); - corsConfiguration.addAllowedMethod("*"); - - UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource(); - configurationSource.registerCorsConfiguration("/**", corsConfiguration); - - return new CorsFilter(configurationSource); - } - -} \ No newline at end of file diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/ArchetypeProperties.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/ArchetypeProperties.java index b05abf90bc6620f7caa913f4c29f231444cb789d..4ae24a7ae4381ab1d6237caf40c799aaf153b2d0 100644 --- a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/ArchetypeProperties.java +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/ArchetypeProperties.java @@ -11,6 +11,9 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "archetype") public class ArchetypeProperties { + /** + * 骨架项目地址 + */ private String sourceUrl; -} \ No newline at end of file +} diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/GitProperties.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/GitProperties.java index 8005e0bde5bcbce262b9af8746789080b60545b0..710fcffabeceaf788bf93ba4f1803ee87ff19a7a 100644 --- a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/GitProperties.java +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/GitProperties.java @@ -11,8 +11,14 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "gitlab") public class GitProperties { + /** + * gitlab server + */ private String serverUrl; + /** + * 访问 token + */ private String personalAccessToken; -} \ No newline at end of file +} diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/ProjectGroupProperties.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/ProjectGroupProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..6ed6c7d77f8ad2c6805ce5dc2468938f3cb2efb0 --- /dev/null +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/config/properties/ProjectGroupProperties.java @@ -0,0 +1,21 @@ +package com.schbrain.archetype.initializer.config.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.List; + +/** + * @author liaozan + * @since 2023-05-29 + */ +@Data +@ConfigurationProperties(prefix = "project.group") +public class ProjectGroupProperties { + + /** + * 允许的项目命名空间 + */ + private List allowList; + +} diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/ArchetypeController.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/ArchetypeController.java index db216d072c8b24b3e24bd55043d70d0390ae8fbd..df4af326d7f7b92baa54fb68376248f7522e09fe 100644 --- a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/ArchetypeController.java +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/ArchetypeController.java @@ -1,10 +1,12 @@ package com.schbrain.archetype.initializer.controller; +import com.schbrain.archetype.initializer.config.properties.ProjectGroupProperties; import com.schbrain.archetype.initializer.param.ArchetypeGenerateParam; import com.schbrain.archetype.initializer.response.PreviewFileTree; import com.schbrain.archetype.initializer.service.ArchetypeService; import com.schbrain.common.web.result.ResponseDTO; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -17,29 +19,44 @@ import java.util.List; * @since 2022/3/20 */ @RestController +@EnableConfigurationProperties(ProjectGroupProperties.class) public class ArchetypeController { @Autowired private ArchetypeService archetypeService; - - @GetMapping("/archetype/update") - public ResponseDTO updateArchetype() { - return ResponseDTO.success(archetypeService.update()); + @Autowired + private ProjectGroupProperties projectGroupProperties; + + /** + * 获取允许的 group 列表 + */ + @GetMapping("/archetype/allowed_groups") + public ResponseDTO> getAllowedGroupList() { + return ResponseDTO.success(projectGroupProperties.getAllowList()); } + /** + * 生成项目 + */ @PostMapping("/archetype/generate") public ResponseDTO generateArchetype(@RequestBody @Validated ArchetypeGenerateParam param) { return ResponseDTO.success(archetypeService.generate(param)); } + /** + * 预览项目 + */ @GetMapping("/archetype/preview/{id}") public ResponseDTO> previewArchetype(@PathVariable String id) throws FileNotFoundException { return ResponseDTO.success(archetypeService.preview(id)); } + /** + * 下载项目 + */ @GetMapping("/archetype/download/{id}") public void downloadArchetype(@PathVariable String id) throws IOException { archetypeService.download(id); } -} \ No newline at end of file +} diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/GitlabController.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/GitlabController.java index aba0c9078a4a415a3e06e2f1ac85739d7866874d..fe0114c58dd406d8b93abb2f07af2d0133f8b44f 100644 --- a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/GitlabController.java +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/controller/GitlabController.java @@ -18,9 +18,12 @@ public class GitlabController { @Autowired private GitlabService gitlabService; + /** + * 获取 gitlab 群组 + */ @GetMapping("/gitlab/groups") public List> groupList() { return gitlabService.fetchGroups(); } -} \ No newline at end of file +} diff --git a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java index 27f7807501a46db18e978798f317c21031a2fde7..4e3c6aff722c6bc507799e1fb2bbebfff926ed6d 100644 --- a/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java +++ b/initializer-backend/src/main/java/com/schbrain/archetype/initializer/service/ArchetypeService.java @@ -6,9 +6,7 @@ import cn.hutool.core.util.ZipUtil; import com.schbrain.archetype.initializer.maven.MavenUtils; import com.schbrain.archetype.initializer.param.ArchetypeGenerateParam; import com.schbrain.archetype.initializer.response.PreviewFileTree; -import com.schbrain.archetype.initializer.runner.ArchetypePreparer; import com.schbrain.common.web.utils.ServletUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.util.StreamUtils; @@ -29,9 +27,6 @@ public class ArchetypeService { private final TimedCache archetypeNameCache = new TimedCache<>(Duration.ofHours(1).toMillis()); - @Autowired - private ArchetypePreparer archetypePreparer; - public String generate(ArchetypeGenerateParam param) { String generateId = MavenUtils.generate(param); archetypeNameCache.put(generateId, param.getArtifactId()); @@ -52,11 +47,6 @@ public class ArchetypeService { StreamUtils.copy(inputStream, response.getOutputStream()); } - public boolean update() { - archetypePreparer.installArchetype(); - return true; - } - private PreviewFileTree buildFileTree(File root) { File[] fileItems = root.listFiles(); if (ArrayUtil.isEmpty(fileItems)) { @@ -97,4 +87,4 @@ public class ArchetypeService { .toString(); } -} \ No newline at end of file +} diff --git a/initializer-ui/package.json b/initializer-ui/package.json index 104c04ec48794f65a220cf85f73be36ef597da8f..763bfabf31403aac70b97d40a948405c9ab5f00c 100644 --- a/initializer-ui/package.json +++ b/initializer-ui/package.json @@ -6,7 +6,7 @@ "build": "vite build --mode production" }, "dependencies": { - "vue": "^3.3.2", + "vue": "^3.3.4", "axios": "^1.4.0", "ant-design-vue": "^3.2.20", "highlight.js": "^11.8.0", @@ -15,7 +15,7 @@ "devDependencies": { "@vitejs/plugin-vue": "^4.2.3", "typescript": "^5.0.4", - "vite": "^4.3.5", - "vue-tsc": "^1.6.4" + "vite": "^4.3.9", + "vue-tsc": "^1.6.5" } } \ No newline at end of file diff --git a/initializer-ui/src/components/starter.vue b/initializer-ui/src/components/starter.vue index f40d62b9d21f21fd8edf2e3f37e7588e1f28836c..64ae39ec94be70711b3ca49ebd0e255bee6c7c2d 100644 --- a/initializer-ui/src/components/starter.vue +++ b/initializer-ui/src/components/starter.vue @@ -81,6 +81,7 @@ interface GroupNode { const fileNodeList = ref([]) const groupNodeList = ref([]) +const groupOptions = ref([]) const fileTreeData = ref([]) const gitlabGroupTreeData = ref([]) const id = ref(-1) @@ -92,25 +93,6 @@ const fileExtension = ref() const loading = computed(() => isLoading.value) const downloadForm = ref(); -const groupOptions = ref([ - { - "value": "com.schbrain.dg", - "label": "com.schbrain.dg" - }, - { - "value": "com.schbrain.kp", - "label": "com.schbrain.kp" - }, - { - "value": "com.schbrain.rs", - "label": "com.schbrain.rs" - }, - { - "value": "com.schbrain.xb", - "label": "com.schbrain.xb" - }, -]) - const formState = reactive({ groupId: '', artifactId: '', @@ -137,6 +119,19 @@ const fetchGroupTreeList = async (initGitRepo: boolean) => { } } +const fetchGroupOptions = async () => { + let data: BaseResponse = await request.get('/archetype/allowed_groups') + if (data.code === 0) { + groupOptions.value = data.data.map((group) => { + return { + value: group, + label: group + } + }) + } +} +fetchGroupOptions() + const onGenerate = async () => { let result = await downloadForm.value?.validate() if (result) { @@ -278,4 +273,4 @@ const createGroupTreeData = (groupNodeList: GroupNode[]): any => { .ant-select { text-align: left; } - \ No newline at end of file +