Parcourir la source

【项目开发】

1.修改项目结构
2.Product Hunt部分开发
ChenYL il y a 11 mois
Parent
commit
64bdd81aa4
48 fichiers modifiés avec 722 ajouts et 225 suppressions
  1. 2 0
      .idea/encodings.xml
  2. 242 0
      data-easy/pom.xml
  3. 0 0
      data-easy/src/main/java/com/dataeasy/server/Application.java
  4. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/annotation/EnumValue.java
  5. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/annotation/IgnoreResponseWrapper.java
  6. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/constant/ResponseCodeEnum.java
  7. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/exception/BusinessException.java
  8. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/exception/LoginException.java
  9. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/exception/TokenException.java
  10. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/pojo/BaseEntity.java
  11. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/pojo/BaseQuery.java
  12. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/pojo/JsonResponse.java
  13. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/typehandler/EnumValueTypeHandler.java
  14. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/utils/Assert.java
  15. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/valid/Delete.java
  16. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/valid/Query.java
  17. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/valid/Save.java
  18. 0 0
      data-easy/src/main/java/com/dataeasy/server/common/valid/Update.java
  19. 0 0
      data-easy/src/main/java/com/dataeasy/server/core/aop/GlobalExceptionHandler.java
  20. 0 0
      data-easy/src/main/java/com/dataeasy/server/core/aop/ResponseControllerAdvice.java
  21. 0 0
      data-easy/src/main/java/com/dataeasy/server/core/aop/WebOperateLogAspect.java
  22. 0 0
      data-easy/src/main/java/com/dataeasy/server/core/config/BizConfig.java
  23. 0 0
      data-easy/src/main/java/com/dataeasy/server/core/config/FeignConfig.java
  24. 23 0
      data-easy/src/main/java/com/dataeasy/server/core/config/GraphQLClientConfig.java
  25. 0 0
      data-easy/src/main/java/com/dataeasy/server/core/config/MyBatisConfig.java
  26. 0 0
      data-easy/src/main/java/com/dataeasy/server/core/config/WebMvcConfig.java
  27. 0 0
      data-easy/src/main/java/com/dataeasy/server/core/interceptor/AuthInterceptor.java
  28. 0 0
      data-easy/src/main/java/com/dataeasy/server/core/interceptor/MybatisAuditDataInterceptor.java
  29. 0 0
      data-easy/src/main/java/com/dataeasy/server/utiis/CacheUtils.java
  30. 0 0
      data-easy/src/main/java/com/dataeasy/server/utiis/DateUtils.java
  31. 0 0
      data-easy/src/main/java/com/dataeasy/server/utiis/SpringUtils.java
  32. 0 0
      data-easy/src/main/java/com/dataeasy/server/utiis/TokenUtils.java
  33. 0 0
      data-easy/src/main/java/com/dataeasy/server/utiis/UserUtils.java
  34. 0 0
      data-easy/src/main/resources/application-dev.yaml
  35. 0 0
      data-easy/src/main/resources/application-prod.yaml
  36. 0 0
      data-easy/src/main/resources/application.yaml
  37. 5 225
      pom.xml
  38. 223 0
      product-hunt/pom.xml
  39. 26 0
      product-hunt/src/main/java/com/producthunt/server/Application.java
  40. 62 0
      product-hunt/src/main/java/com/producthunt/server/TestController.java
  41. 26 0
      product-hunt/src/main/java/com/producthunt/server/core/config/FeignConfig.java
  42. 22 0
      product-hunt/src/main/java/com/producthunt/server/core/config/GraphQLClientConfig.java
  43. 26 0
      product-hunt/src/main/java/com/producthunt/server/feign/ProductHuntFeign.java
  44. 32 0
      product-hunt/src/main/java/com/producthunt/server/feign/dto/OauthRequest.java
  45. 10 0
      product-hunt/src/main/java/com/producthunt/server/feign/dto/OauthResponse.java
  46. 8 0
      product-hunt/src/main/resources/application-dev.yaml
  47. 0 0
      product-hunt/src/main/resources/application-prod.yaml
  48. 15 0
      product-hunt/src/main/resources/application.yaml

+ 2 - 0
.idea/encodings.xml

@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/data-easy/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/product-hunt/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
   </component>

+ 242 - 0
data-easy/pom.xml

@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.dataeasy</groupId>
+        <artifactId>server</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>data-easy</artifactId>
+
+    <properties>
+        <maven.compiler.source>21</maven.compiler.source>
+        <maven.compiler.target>21</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <java.version>21</java.version>
+        <spring-cloud.version>2023.0.3</spring-cloud.version>
+        <jwt.version>4.4.0</jwt.version>
+        <tk-mybatis.version>5.0.1</tk-mybatis.version>
+        <jasypt.version>3.0.5</jasypt.version>
+        <wechatpay.version>0.2.16</wechatpay.version>
+    </properties>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>${spring-cloud.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-graphql</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-cache</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.ben-manes.caffeine</groupId>
+            <artifactId>caffeine</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>tk.mybatis</groupId>
+            <artifactId>mapper-spring-boot-starter</artifactId>
+            <version>${tk-mybatis.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>java-jwt</artifactId>
+            <version>${jwt.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.ulisesbocchio</groupId>
+            <artifactId>jasypt-spring-boot-starter</artifactId>
+            <version>${jasypt.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.wechatpay-apiv3</groupId>
+            <artifactId>wechatpay-java</artifactId>
+            <version>${wechatpay.version}</version>
+        </dependency>
+    </dependencies>
+
+    <!-- 配置阿里云仓库 -->
+    <repositories>
+        <repository>
+            <id>aliyun-repos</id>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+    <pluginRepositories>
+        <pluginRepository>
+            <id>aliyun-repos</id>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <!--引入第三方jar包时,不添加则引入的第三方jar不会被打入jar包中-->
+                    <includeSystemScope>true</includeSystemScope>
+                    <!--排除第三方jar文件-->
+                    <includes>
+                        <include>
+                            <groupId>nothing</groupId>
+                            <artifactId>nothing</artifactId>
+                        </include>
+                    </includes>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- 2、完成对Java代码的编译,可以指定项目源码的jdk版本,编译后的jdk版本,以及编码 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <!-- 源代码使用的JDK版本 -->
+                    <source>${java.version}</source>
+                    <!-- 需要生成的目标class文件的编译版本 -->
+                    <target>${java.version}</target>
+                    <!-- 字符集编码 -->
+                    <encoding>UTF-8</encoding>
+                    <!-- 用来传递编译器自身不包含但是却支持的参数选项 -->
+                    <!--                    <compilerArguments>-->
+                    <!--                        <verbose/>-->
+                    <!--                        &lt;!&ndash; windwos环境(二选一) &ndash;&gt;-->
+                    <!--                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>-->
+                    <!--                        &lt;!&ndash; Linux环境(二选一) &ndash;&gt;-->
+                    <!--                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>-->
+                    <!--                    </compilerArguments>-->
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${lombok.version}</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+
+            <!-- 3、将所有依赖的jar文件复制到target/lib目录 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <!--复制到哪个路径,${project.build.directory} 缺醒为 target,其他内置参数见下面解释-->
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <overWriteReleases>false</overWriteReleases>
+                            <overWriteSnapshots>false</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- 4、指定启动类,指定配置文件,将依赖打成外部jar包 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <!-- 是否要把第三方jar加入到类构建路径 -->
+                            <addClasspath>true</addClasspath>
+                            <!-- 外部依赖jar包的最终位置 -->
+                            <classpathPrefix>lib/</classpathPrefix>
+                            <!-- 项目启动类 -->
+                            <mainClass>com.punchsettle.server.Application</mainClass>
+                        </manifest>
+                    </archive>
+                    <!--资源文件不打进jar包中,做到配置跟项目分离的效果-->
+                    <!--                    <excludes>-->
+                    <!--                        &lt;!&ndash; 业务jar中过滤application.properties/yml文件,在jar包外控制 &ndash;&gt;-->
+                    <!--                        <exclude>*.properties</exclude>-->
+                    <!--                        <exclude>*.xml</exclude>-->
+                    <!--                        <exclude>*.yml</exclude>-->
+                    <!--                    </excludes>-->
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 0 - 0
src/main/java/com/dataeasy/server/Application.java → data-easy/src/main/java/com/dataeasy/server/Application.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/annotation/EnumValue.java → data-easy/src/main/java/com/dataeasy/server/common/annotation/EnumValue.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/annotation/IgnoreResponseWrapper.java → data-easy/src/main/java/com/dataeasy/server/common/annotation/IgnoreResponseWrapper.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/constant/ResponseCodeEnum.java → data-easy/src/main/java/com/dataeasy/server/common/constant/ResponseCodeEnum.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/exception/BusinessException.java → data-easy/src/main/java/com/dataeasy/server/common/exception/BusinessException.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/exception/LoginException.java → data-easy/src/main/java/com/dataeasy/server/common/exception/LoginException.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/exception/TokenException.java → data-easy/src/main/java/com/dataeasy/server/common/exception/TokenException.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/pojo/BaseEntity.java → data-easy/src/main/java/com/dataeasy/server/common/pojo/BaseEntity.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/pojo/BaseQuery.java → data-easy/src/main/java/com/dataeasy/server/common/pojo/BaseQuery.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/pojo/JsonResponse.java → data-easy/src/main/java/com/dataeasy/server/common/pojo/JsonResponse.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/typehandler/EnumValueTypeHandler.java → data-easy/src/main/java/com/dataeasy/server/common/typehandler/EnumValueTypeHandler.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/utils/Assert.java → data-easy/src/main/java/com/dataeasy/server/common/utils/Assert.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/valid/Delete.java → data-easy/src/main/java/com/dataeasy/server/common/valid/Delete.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/valid/Query.java → data-easy/src/main/java/com/dataeasy/server/common/valid/Query.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/valid/Save.java → data-easy/src/main/java/com/dataeasy/server/common/valid/Save.java


+ 0 - 0
src/main/java/com/dataeasy/server/common/valid/Update.java → data-easy/src/main/java/com/dataeasy/server/common/valid/Update.java


+ 0 - 0
src/main/java/com/dataeasy/server/core/aop/GlobalExceptionHandler.java → data-easy/src/main/java/com/dataeasy/server/core/aop/GlobalExceptionHandler.java


+ 0 - 0
src/main/java/com/dataeasy/server/core/aop/ResponseControllerAdvice.java → data-easy/src/main/java/com/dataeasy/server/core/aop/ResponseControllerAdvice.java


+ 0 - 0
src/main/java/com/dataeasy/server/core/aop/WebOperateLogAspect.java → data-easy/src/main/java/com/dataeasy/server/core/aop/WebOperateLogAspect.java


+ 0 - 0
src/main/java/com/dataeasy/server/core/config/BizConfig.java → data-easy/src/main/java/com/dataeasy/server/core/config/BizConfig.java


+ 0 - 0
src/main/java/com/dataeasy/server/core/config/FeignConfig.java → data-easy/src/main/java/com/dataeasy/server/core/config/FeignConfig.java


+ 23 - 0
data-easy/src/main/java/com/dataeasy/server/core/config/GraphQLClientConfig.java

@@ -0,0 +1,23 @@
+package com.dataeasy.server.core.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.graphql.client.GraphQlClient;
+import org.springframework.graphql.client.HttpGraphQlClient;
+import org.springframework.graphql.client.HttpSyncGraphQlClient;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description GraphQL客户端配置
+ * @date 2025/2/17 18:55
+ */
+@Configuration
+public class GraphQLClientConfig {
+
+    @Bean
+    public GraphQlClient graphQLClient() {
+        return HttpSyncGraphQlClient.builder().url("https://api.producthunt.com/v2/api/graphql")
+                .header("Authorization", "Bearer v3QzROqoB52Y7nf9DhX5-Vg_g_gRsoPtgFmM1lIZTRE").build();
+    }
+}

+ 0 - 0
src/main/java/com/dataeasy/server/core/config/MyBatisConfig.java → data-easy/src/main/java/com/dataeasy/server/core/config/MyBatisConfig.java


+ 0 - 0
src/main/java/com/dataeasy/server/core/config/WebMvcConfig.java → data-easy/src/main/java/com/dataeasy/server/core/config/WebMvcConfig.java


+ 0 - 0
src/main/java/com/dataeasy/server/core/interceptor/AuthInterceptor.java → data-easy/src/main/java/com/dataeasy/server/core/interceptor/AuthInterceptor.java


+ 0 - 0
src/main/java/com/dataeasy/server/core/interceptor/MybatisAuditDataInterceptor.java → data-easy/src/main/java/com/dataeasy/server/core/interceptor/MybatisAuditDataInterceptor.java


+ 0 - 0
src/main/java/com/dataeasy/server/utiis/CacheUtils.java → data-easy/src/main/java/com/dataeasy/server/utiis/CacheUtils.java


+ 0 - 0
src/main/java/com/dataeasy/server/utiis/DateUtils.java → data-easy/src/main/java/com/dataeasy/server/utiis/DateUtils.java


+ 0 - 0
src/main/java/com/dataeasy/server/utiis/SpringUtils.java → data-easy/src/main/java/com/dataeasy/server/utiis/SpringUtils.java


+ 0 - 0
src/main/java/com/dataeasy/server/utiis/TokenUtils.java → data-easy/src/main/java/com/dataeasy/server/utiis/TokenUtils.java


+ 0 - 0
src/main/java/com/dataeasy/server/utiis/UserUtils.java → data-easy/src/main/java/com/dataeasy/server/utiis/UserUtils.java


+ 0 - 0
src/main/resources/application-dev.yaml → data-easy/src/main/resources/application-dev.yaml


+ 0 - 0
src/main/resources/application-prod.yaml → data-easy/src/main/resources/application-prod.yaml


+ 0 - 0
src/main/resources/application.yaml → data-easy/src/main/resources/application.yaml


+ 5 - 225
pom.xml

@@ -14,230 +14,10 @@
     <groupId>com.dataeasy</groupId>
     <artifactId>server</artifactId>
     <version>1.0-SNAPSHOT</version>
+    <packaging>pom</packaging>
+    <modules>
+        <module>product-hunt</module>
+        <module>data-easy</module>
+    </modules>
 
-    <properties>
-        <maven.compiler.source>21</maven.compiler.source>
-        <maven.compiler.target>21</maven.compiler.target>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <maven.compiler.source>21</maven.compiler.source>
-        <maven.compiler.target>21</maven.compiler.target>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <java.version>21</java.version>
-        <spring-cloud.version>2023.0.3</spring-cloud.version>
-        <jwt.version>4.4.0</jwt.version>
-        <tk-mybatis.version>5.0.1</tk-mybatis.version>
-        <jasypt.version>3.0.5</jasypt.version>
-    </properties>
-
-    <dependencyManagement>
-        <dependencies>
-            <dependency>
-                <groupId>org.springframework.cloud</groupId>
-                <artifactId>spring-cloud-dependencies</artifactId>
-                <version>${spring-cloud.version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-openfeign</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-validation</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-aop</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-graphql</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-cache</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.github.ben-manes.caffeine</groupId>
-            <artifactId>caffeine</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-tx</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.mysql</groupId>
-            <artifactId>mysql-connector-j</artifactId>
-            <scope>runtime</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-            <optional>true</optional>
-        </dependency>
-        <dependency>
-            <groupId>tk.mybatis</groupId>
-            <artifactId>mapper-spring-boot-starter</artifactId>
-            <version>${tk-mybatis.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.auth0</groupId>
-            <artifactId>java-jwt</artifactId>
-            <version>${jwt.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>com.github.ulisesbocchio</groupId>
-            <artifactId>jasypt-spring-boot-starter</artifactId>
-            <version>${jasypt.version}</version>
-        </dependency>
-    </dependencies>
-
-    <!-- 配置阿里云仓库 -->
-    <repositories>
-        <repository>
-            <id>aliyun-repos</id>
-            <url>https://maven.aliyun.com/repository/public</url>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </repository>
-    </repositories>
-    <pluginRepositories>
-        <pluginRepository>
-            <id>aliyun-repos</id>
-            <url>https://maven.aliyun.com/repository/public</url>
-            <releases>
-                <enabled>true</enabled>
-            </releases>
-            <snapshots>
-                <enabled>false</enabled>
-            </snapshots>
-        </pluginRepository>
-    </pluginRepositories>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-                <configuration>
-                    <!--引入第三方jar包时,不添加则引入的第三方jar不会被打入jar包中-->
-                    <includeSystemScope>true</includeSystemScope>
-                    <!--排除第三方jar文件-->
-                    <includes>
-                        <include>
-                            <groupId>nothing</groupId>
-                            <artifactId>nothing</artifactId>
-                        </include>
-                    </includes>
-                    <excludes>
-                        <exclude>
-                            <groupId>org.projectlombok</groupId>
-                            <artifactId>lombok</artifactId>
-                        </exclude>
-                    </excludes>
-                </configuration>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>repackage</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <!-- 2、完成对Java代码的编译,可以指定项目源码的jdk版本,编译后的jdk版本,以及编码 -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <!-- 源代码使用的JDK版本 -->
-                    <source>${java.version}</source>
-                    <!-- 需要生成的目标class文件的编译版本 -->
-                    <target>${java.version}</target>
-                    <!-- 字符集编码 -->
-                    <encoding>UTF-8</encoding>
-                    <!-- 用来传递编译器自身不包含但是却支持的参数选项 -->
-                    <!--                    <compilerArguments>-->
-                    <!--                        <verbose/>-->
-                    <!--                        &lt;!&ndash; windwos环境(二选一) &ndash;&gt;-->
-                    <!--                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>-->
-                    <!--                        &lt;!&ndash; Linux环境(二选一) &ndash;&gt;-->
-                    <!--                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>-->
-                    <!--                    </compilerArguments>-->
-                    <annotationProcessorPaths>
-                        <path>
-                            <groupId>org.projectlombok</groupId>
-                            <artifactId>lombok</artifactId>
-                            <version>${lombok.version}</version>
-                        </path>
-                    </annotationProcessorPaths>
-                </configuration>
-            </plugin>
-
-            <!-- 3、将所有依赖的jar文件复制到target/lib目录 -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>copy-dependencies</id>
-                        <phase>prepare-package</phase>
-                        <goals>
-                            <goal>copy-dependencies</goal>
-                        </goals>
-                        <configuration>
-                            <!--复制到哪个路径,${project.build.directory} 缺醒为 target,其他内置参数见下面解释-->
-                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
-                            <overWriteReleases>false</overWriteReleases>
-                            <overWriteSnapshots>false</overWriteSnapshots>
-                            <overWriteIfNewer>true</overWriteIfNewer>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-
-            <!-- 4、指定启动类,指定配置文件,将依赖打成外部jar包 -->
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <configuration>
-                    <archive>
-                        <manifest>
-                            <!-- 是否要把第三方jar加入到类构建路径 -->
-                            <addClasspath>true</addClasspath>
-                            <!-- 外部依赖jar包的最终位置 -->
-                            <classpathPrefix>lib/</classpathPrefix>
-                            <!-- 项目启动类 -->
-                            <mainClass>com.punchsettle.server.Application</mainClass>
-                        </manifest>
-                    </archive>
-                    <!--资源文件不打进jar包中,做到配置跟项目分离的效果-->
-                    <!--                    <excludes>-->
-                    <!--                        &lt;!&ndash; 业务jar中过滤application.properties/yml文件,在jar包外控制 &ndash;&gt;-->
-                    <!--                        <exclude>*.properties</exclude>-->
-                    <!--                        <exclude>*.xml</exclude>-->
-                    <!--                        <exclude>*.yml</exclude>-->
-                    <!--                    </excludes>-->
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
 </project>

+ 223 - 0
product-hunt/pom.xml

@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.dataeasy</groupId>
+        <artifactId>server</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>product-hunt</artifactId>
+
+    <properties>
+        <maven.compiler.source>21</maven.compiler.source>
+        <maven.compiler.target>21</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <java.version>21</java.version>
+        <spring-cloud.version>2023.0.3</spring-cloud.version>
+        <jwt.version>4.4.0</jwt.version>
+        <tk-mybatis.version>5.0.1</tk-mybatis.version>
+        <jasypt.version>3.0.5</jasypt.version>
+    </properties>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-dependencies</artifactId>
+                <version>${spring-cloud.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-graphql</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-tx</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.mysql</groupId>
+            <artifactId>mysql-connector-j</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>tk.mybatis</groupId>
+            <artifactId>mapper-spring-boot-starter</artifactId>
+            <version>${tk-mybatis.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.ulisesbocchio</groupId>
+            <artifactId>jasypt-spring-boot-starter</artifactId>
+            <version>${jasypt.version}</version>
+        </dependency>
+    </dependencies>
+
+    <!-- 配置阿里云仓库 -->
+    <repositories>
+        <repository>
+            <id>aliyun-repos</id>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+    <pluginRepositories>
+        <pluginRepository>
+            <id>aliyun-repos</id>
+            <url>https://maven.aliyun.com/repository/public</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </pluginRepository>
+    </pluginRepositories>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <!--引入第三方jar包时,不添加则引入的第三方jar不会被打入jar包中-->
+                    <includeSystemScope>true</includeSystemScope>
+                    <!--排除第三方jar文件-->
+                    <includes>
+                        <include>
+                            <groupId>nothing</groupId>
+                            <artifactId>nothing</artifactId>
+                        </include>
+                    </includes>
+                    <excludes>
+                        <exclude>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                        </exclude>
+                    </excludes>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- 2、完成对Java代码的编译,可以指定项目源码的jdk版本,编译后的jdk版本,以及编码 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <!-- 源代码使用的JDK版本 -->
+                    <source>${java.version}</source>
+                    <!-- 需要生成的目标class文件的编译版本 -->
+                    <target>${java.version}</target>
+                    <!-- 字符集编码 -->
+                    <encoding>UTF-8</encoding>
+                    <!-- 用来传递编译器自身不包含但是却支持的参数选项 -->
+                    <!--                    <compilerArguments>-->
+                    <!--                        <verbose/>-->
+                    <!--                        &lt;!&ndash; windwos环境(二选一) &ndash;&gt;-->
+                    <!--                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>-->
+                    <!--                        &lt;!&ndash; Linux环境(二选一) &ndash;&gt;-->
+                    <!--                        <bootclasspath>${java.home}/lib/rt.jar:${java.home}/lib/jce.jar</bootclasspath>-->
+                    <!--                    </compilerArguments>-->
+                    <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.projectlombok</groupId>
+                            <artifactId>lombok</artifactId>
+                            <version>${lombok.version}</version>
+                        </path>
+                    </annotationProcessorPaths>
+                </configuration>
+            </plugin>
+
+            <!-- 3、将所有依赖的jar文件复制到target/lib目录 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <!--复制到哪个路径,${project.build.directory} 缺醒为 target,其他内置参数见下面解释-->
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                            <overWriteReleases>false</overWriteReleases>
+                            <overWriteSnapshots>false</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- 4、指定启动类,指定配置文件,将依赖打成外部jar包 -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <archive>
+                        <manifest>
+                            <!-- 是否要把第三方jar加入到类构建路径 -->
+                            <addClasspath>true</addClasspath>
+                            <!-- 外部依赖jar包的最终位置 -->
+                            <classpathPrefix>lib/</classpathPrefix>
+                            <!-- 项目启动类 -->
+                            <mainClass>com.punchsettle.server.Application</mainClass>
+                        </manifest>
+                    </archive>
+                    <!--资源文件不打进jar包中,做到配置跟项目分离的效果-->
+                    <!--                    <excludes>-->
+                    <!--                        &lt;!&ndash; 业务jar中过滤application.properties/yml文件,在jar包外控制 &ndash;&gt;-->
+                    <!--                        <exclude>*.properties</exclude>-->
+                    <!--                        <exclude>*.xml</exclude>-->
+                    <!--                        <exclude>*.yml</exclude>-->
+                    <!--                    </excludes>-->
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 26 - 0
product-hunt/src/main/java/com/producthunt/server/Application.java

@@ -0,0 +1,26 @@
+package com.producthunt.server;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 程序运行入口
+ * @date 2025/2/14 9:57
+ */
+@EnableScheduling
+@EnableFeignClients
+@SpringBootApplication
+public class Application {
+
+    public static void main(String[] args) {
+        System.setProperty("http.proxyHost", "127.0.0.1");
+        System.setProperty("http.proxyPort", "10809");
+        System.setProperty("https.proxyHost", "127.0.0.1");
+        System.setProperty("https.proxyPort", "10809");
+        SpringApplication.run(Application.class, args);
+    }
+}

+ 62 - 0
product-hunt/src/main/java/com/producthunt/server/TestController.java

@@ -0,0 +1,62 @@
+package com.producthunt.server;
+
+import com.producthunt.server.feign.ProductHuntFeign;
+import com.producthunt.server.feign.dto.OauthRequest;
+import com.producthunt.server.feign.dto.OauthResponse;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.graphql.client.GraphQlClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description TODO
+ * @date 2025/2/17 19:17
+ */
+@RestController
+@RequestMapping("/test")
+public class TestController {
+
+    @Autowired
+    private ProductHuntFeign productHuntFeign;
+
+    @GetMapping("/t1")
+    public OauthResponse t1() {
+        OauthRequest oauthRequest = new OauthRequest();
+        oauthRequest.setClientId("W-ZZ-mP7LBniA_X6IrFxOt1Vss0XN633-6cQW8ztols");
+        oauthRequest.setClientSecret("XD80iNZ0vYuET5vNqzgInu8I-fFJO-vjZpL4AhlWPf4");
+        return productHuntFeign.getOauthToken(oauthRequest);
+    }
+
+//    @Autowired
+//    private GraphQlClient graphQlClient;
+//
+//    @GetMapping("/t2")
+//    public String t2() {
+//        String document = """
+//    {
+//      posts(order: VOTES) {
+//        nodes {
+//          id
+//          name
+//          tagline
+//          description
+//          votesCount
+//          createdAt
+//          featuredAt
+//          website
+//          url
+//        }
+//        pageInfo {
+//          hasNextPage
+//          endCursor
+//        }
+//      }
+//    }
+//    """;
+//        return graphQlClient.document(document).retrieveSync("posts").toString();
+//
+//    }
+}

+ 26 - 0
product-hunt/src/main/java/com/producthunt/server/core/config/FeignConfig.java

@@ -0,0 +1,26 @@
+package com.producthunt.server.core.config;
+
+import feign.Logger;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @className FeignConfig
+ * @description Feign配置
+ * @author ChenYL
+ * @date 2023/07/23 20:55
+ * @version V1.0
+ **/
+@Configuration
+public class FeignConfig {
+
+    /**
+     * 调整Feign日志输出 注:FeignClient只能输出debug等级的日志
+     * 
+     * @return
+     */
+    @Bean
+    public Logger.Level devLogLevel() {
+        return Logger.Level.FULL;
+    }
+}

+ 22 - 0
product-hunt/src/main/java/com/producthunt/server/core/config/GraphQLClientConfig.java

@@ -0,0 +1,22 @@
+package com.producthunt.server.core.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.graphql.client.GraphQlClient;
+import org.springframework.graphql.client.HttpSyncGraphQlClient;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description GraphQL客户端配置
+ * @date 2025/2/17 18:55
+ */
+@Configuration
+public class GraphQLClientConfig {
+
+    @Bean
+    public GraphQlClient graphQLClient() {
+        return HttpSyncGraphQlClient.builder().url("https://api.producthunt.com/v2/api/graphql")
+                .header("Authorization", "Bearer v3QzROqoB52Y7nf9DhX5-Vg_g_gRsoPtgFmM1lIZTRE").build();
+    }
+}

+ 26 - 0
product-hunt/src/main/java/com/producthunt/server/feign/ProductHuntFeign.java

@@ -0,0 +1,26 @@
+package com.producthunt.server.feign;
+
+import com.producthunt.server.feign.dto.OauthRequest;
+import com.producthunt.server.feign.dto.OauthResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description ProductHunt服务接口
+ * @date 2025/2/17 18:58
+ */
+@FeignClient(name = "product-hunt-service", url = "https://api.producthunt.com")
+public interface ProductHuntFeign {
+
+    /**
+     * 获取token
+     * @param request
+     * @return
+     */
+    @PostMapping("/v2/oauth/token")
+    OauthResponse getOauthToken(@SpringQueryMap OauthRequest request);
+}

+ 32 - 0
product-hunt/src/main/java/com/producthunt/server/feign/dto/OauthRequest.java

@@ -0,0 +1,32 @@
+package com.producthunt.server.feign.dto;
+
+import feign.Param;
+import lombok.Data;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description ProductHunt鉴权请求
+ * @date 2025/2/17 19:13
+ */
+@Data
+public class OauthRequest {
+
+    /**
+     * 应用id
+     */
+    @Param("client_id")
+    private String clientId;
+
+    /**
+     * 应用密钥
+     */
+    @Param("client_secret")
+    private String clientSecret;
+
+    /**
+     * 授权类型
+     */
+    @Param("grant_type")
+    private String grantType = "client_credentials";
+}

+ 10 - 0
product-hunt/src/main/java/com/producthunt/server/feign/dto/OauthResponse.java

@@ -0,0 +1,10 @@
+package com.producthunt.server.feign.dto;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description ProductHunt鉴权响应
+ * @date 2025/2/17 19:13
+ */
+public class OauthResponse {
+}

+ 8 - 0
product-hunt/src/main/resources/application-dev.yaml

@@ -0,0 +1,8 @@
+spring:
+  datasource:
+    username: root
+    url: jdbc:mysql://localhost:3306/data_easy?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
+
+logging:
+  level:
+    com.producthunt.server: debug

+ 0 - 0
product-hunt/src/main/resources/application-prod.yaml


+ 15 - 0
product-hunt/src/main/resources/application.yaml

@@ -0,0 +1,15 @@
+server:
+  port: 8081
+spring:
+  profiles:
+    active: prod
+  application:
+    name: product-hunt-server
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+
+jasypt:
+  encryptor:
+    algorithm: PBEWithMD5AndDES
+    salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
+    iv-generator-classname: org.jasypt.iv.RandomIvGenerator