diff --git a/.gitignore b/.gitignore index 5ff6309..8a9d8ad 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,6 @@ build/ .vscode/ ### Mac OS ### -.DS_Store \ No newline at end of file +.DS_Store + +.env \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 894ba69..ea9247b 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -27,6 +27,8 @@ + + diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..3018bff --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,36 @@ + + + + \ No newline at end of file diff --git a/README.md b/README.md index 8b2863e..f6ec5cf 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,9 @@ 应该是第三代后端了吧。 -新的重写过的后端,其实在这版正式出来之前已经有很多个实验性的原型版本了,但是都因为效果不如意胎死腹中给砍了,没有继续写下去(其实这个readme也是曾经最早的一个原型版本改来的) +新的重写过的后端,其实在这版正式出来之前已经有很多个实验性的原型版本了,用了各种不同的技术,包括grpc,dubbo等等,但是都因为效果不如意或者不合适胎死腹中给砍了,没有继续写下去(其实这个readme也是曾经最早的一个原型版本改来的) + +现在的这个版本应该差不多了,是时候放上来了。 这代后端结构与前面的有很大不同,使用了真·多模块的方式运行部署,部分独立模块以不同的程序运行,子模块部署在内网时,可以自动注册frpc进行服务远程转发,主服务和子服务通过http进行通信调用,各模块可以部署在不同的服务器或容器中,当然,也可以挤在一起跑。 @@ -22,8 +24,9 @@ ## 环境要求 包管理和构建: -Maven 3.8.2+ -- 后续可能会看情况转用Gradle +Maven 3.8.2+ + +- *后续可能会看情况转用Gradle* Java版本: Java 17+ @@ -32,7 +35,7 @@ Java 17+ ## 项目模块结构 -### agent-service +详见[doc](/doc) --- @@ -40,10 +43,18 @@ Java 17+ --- -## 文档 +## API文档 详见[doc](/doc) --- +## 构建 + +--- + +## 运行 + +--- + 就先这样吧,手累了 \ No newline at end of file diff --git a/backend-main/backend-data/src/main/java/cn/wustlinghang/data/Main.java b/backend-main/backend-data/src/main/java/cn/wustlinghang/main/data/Main.java similarity index 76% rename from backend-main/backend-data/src/main/java/cn/wustlinghang/data/Main.java rename to backend-main/backend-data/src/main/java/cn/wustlinghang/main/data/Main.java index 87fe5b7..f550351 100644 --- a/backend-main/backend-data/src/main/java/cn/wustlinghang/data/Main.java +++ b/backend-main/backend-data/src/main/java/cn/wustlinghang/main/data/Main.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.data; +package cn.wustlinghang.main.data; public class Main { public static void main(String[] args) { diff --git a/backend-main/backend-web/src/main/java/cn/wustlinghang/internal/api/v1/FrpPluginHandler.java b/backend-main/backend-web/src/main/java/cn/wustlinghang/internal/api/v1/FrpPluginHandler.java new file mode 100644 index 0000000..07cce3c --- /dev/null +++ b/backend-main/backend-web/src/main/java/cn/wustlinghang/internal/api/v1/FrpPluginHandler.java @@ -0,0 +1,20 @@ +package cn.wustlinghang.internal.api.v1; + +import cn.wustlinghang.internal.api.v1.response.FrpPluginResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping("/internal/frp") +public class FrpPluginHandler { + @RequestMapping("/handler") + public FrpPluginResponse handle(String request) { + log.info(request); + return FrpPluginResponse.builder() + .reject(false) + .unchange(true) + .build(); + } +} diff --git a/backend-main/backend-web/src/main/java/cn/wustlinghang/internal/api/v1/response/FrpPluginResponse.java b/backend-main/backend-web/src/main/java/cn/wustlinghang/internal/api/v1/response/FrpPluginResponse.java new file mode 100644 index 0000000..731ab2a --- /dev/null +++ b/backend-main/backend-web/src/main/java/cn/wustlinghang/internal/api/v1/response/FrpPluginResponse.java @@ -0,0 +1,14 @@ +package cn.wustlinghang.internal.api.v1.response; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class FrpPluginResponse { + private boolean reject; + + private boolean unchange; + +// private String rejectReason; +} diff --git a/backend-main/backend-web/src/main/java/cn/wustlinghang/main/web/Main.java b/backend-main/backend-web/src/main/java/cn/wustlinghang/main/web/Main.java new file mode 100644 index 0000000..27d10e0 --- /dev/null +++ b/backend-main/backend-web/src/main/java/cn/wustlinghang/main/web/Main.java @@ -0,0 +1,15 @@ +package cn.wustlinghang.main.web; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; + +@EnableAsync +@EnableScheduling +@SpringBootApplication +public class Main { + public static void main(String[] args) { + SpringApplication.run(Main.class); + } +} diff --git a/backend-main/backend-web/src/main/java/cn/wustlinghang/main/web/api/v2/undergrade/UndergradController.java b/backend-main/backend-web/src/main/java/cn/wustlinghang/main/web/api/v2/undergrade/UndergradController.java new file mode 100644 index 0000000..f151964 --- /dev/null +++ b/backend-main/backend-web/src/main/java/cn/wustlinghang/main/web/api/v2/undergrade/UndergradController.java @@ -0,0 +1,13 @@ +package cn.wustlinghang.main.web.api.v2.undergrade; + +import cn.wustlinghang.wusthelper.main.response.Response; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/jwc") +public class UndergradController { + public Response login() { + return Response.success(""); + } +} \ No newline at end of file diff --git a/backend-main/backend-web/src/main/resources/application.yml b/backend-main/backend-web/src/main/resources/application.yml new file mode 100644 index 0000000..6897622 --- /dev/null +++ b/backend-main/backend-web/src/main/resources/application.yml @@ -0,0 +1,10 @@ +# 服务端配置 +# 密码/密钥/内部地址『禁止』写在此处或其他git能检测到的地方 +# 具体数值由运维填写在.env文件中,不能添加到git仓库中 + +spring: + config: + import: optional:file:.env[.properties] + +server: + port: ${RUN_PORT} \ No newline at end of file diff --git a/backend-main/pom.xml b/backend-main/pom.xml index 2150a77..5433147 100644 --- a/backend-main/pom.xml +++ b/backend-main/pom.xml @@ -22,4 +22,17 @@ UTF-8 + + + cn.wustlinghang.wusthelper + common + ${revision} + + + + cn.wustlinghang.mywust + mywust-common + ${mywust.version} + + \ No newline at end of file diff --git a/common/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/response/ResponseCode.java b/common/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/response/RpcCommonResponseCode.java similarity index 56% rename from common/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/response/ResponseCode.java rename to common/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/response/RpcCommonResponseCode.java index d882257..45a9f4e 100644 --- a/common/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/response/ResponseCode.java +++ b/common/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/response/RpcCommonResponseCode.java @@ -4,7 +4,7 @@ package cn.wustlinghang.wusthelper.internal.rpc.response; -public enum ResponseCode { +public enum RpcCommonResponseCode { SUCCESS(20000, "成功"), REQUEST_TOO_FAST(20001, "技能冷却中..."), INVALID_REQUEST(30000, "非法请求"), @@ -13,22 +13,13 @@ public enum ResponseCode { TOKEN_EXPIRED(40001, "token过期"), TOKEN_INVALID(40002, "token无效"), SERVER_INTERNAL_ERROR(50000, "服务器内部错误"), - API_NOT_IMPLEMENT(0, "接口未实现"), - - STUDENT_ID_DOES_NOT_EXISTS(60001,"学生学号不存在"), - USER_WAS_BANNED_PUBLISH(60201, "用户被禁止发布告示信息"), - IMAGE_FORMAT_WORN(60202, "上传的图片格式有误"), - NOTICE_WAS_INTERCEPT(60203, "消息被系统拦截发布"), - - USER_DOES_NOT_MATCH_PUBLISHER(60301, "请求用户与告示发表者不匹配"), - - REQUEST_FILE_DOES_NOT_EXIST(60701, "请求的文件不存在"); + API_NOT_IMPLEMENT(0, "接口未实现"),; private final int code; private final String message; - ResponseCode(int code, String message) { + RpcCommonResponseCode(int code, String message) { this.code = code; this.message = message; } diff --git a/common/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/response/RpcResponse.java b/common/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/response/RpcResponse.java index bd394c8..d1406e9 100644 --- a/common/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/response/RpcResponse.java +++ b/common/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/response/RpcResponse.java @@ -2,7 +2,7 @@ package cn.wustlinghang.wusthelper.internal.rpc.response; public record RpcResponse(int code, String msg, T data) { public static RpcResponse success(T data) { - return new RpcResponse<>(ResponseCode.SUCCESS.getCode(), "ok", data); + return new RpcResponse<>(RpcCommonResponseCode.SUCCESS.getCode(), "ok", data); } public static RpcResponse success() { @@ -13,7 +13,7 @@ public record RpcResponse(int code, String msg, T data) { return new RpcResponse<>(code, message, null); } - public static RpcResponse error(ResponseCode code) { + public static RpcResponse error(RpcCommonResponseCode code) { return error(code.getCode(), code.getMessage()); } } \ No newline at end of file diff --git a/common/src/main/java/cn/wustlinghang/wusthelper/main/response/Response.java b/common/src/main/java/cn/wustlinghang/wusthelper/main/response/Response.java new file mode 100644 index 0000000..2518116 --- /dev/null +++ b/common/src/main/java/cn/wustlinghang/wusthelper/main/response/Response.java @@ -0,0 +1,28 @@ +package cn.wustlinghang.wusthelper.main.response; + + +/** + * 通用的响应 + * + * @param code 响应码 + * @param msg 响应信息 + * @param data 响应数据 + * @param data的类型 + */ +public record Response(int code, String msg, T data) { + public static Response success(T data) { + return new Response<>(ResponseCode.SUCCESS.getCode(), "ok", data); + } + + public static Response success() { + return success(null); + } + + public static Response error(int code, String message) { + return new Response<>(code, message, null); + } + + public static Response error(ResponseCode code) { + return error(code.getCode(), code.getMessage()); + } +} \ No newline at end of file diff --git a/common/src/main/java/cn/wustlinghang/wusthelper/main/response/ResponseCode.java b/common/src/main/java/cn/wustlinghang/wusthelper/main/response/ResponseCode.java new file mode 100644 index 0000000..9ad8f89 --- /dev/null +++ b/common/src/main/java/cn/wustlinghang/wusthelper/main/response/ResponseCode.java @@ -0,0 +1,28 @@ +/* + * Class created by lensfrex. + */ + +package cn.wustlinghang.wusthelper.main.response; + +public enum ResponseCode { + SUCCESS(0, "成功"), + SERVER_INTERNAL_ERROR(-2, "服务器内部错误"), + API_NOT_IMPLEMENT(-1, "接口未实现"); + + private final int code; + + private final String message; + + ResponseCode(int code, String message) { + this.code = code; + this.message = message; + } + + public int getCode() { + return code; + } + + public String getMessage() { + return message; + } +} \ No newline at end of file diff --git a/external-library/mywust b/external-library/mywust index 965562b..736dc78 160000 --- a/external-library/mywust +++ b/external-library/mywust @@ -1 +1 @@ -Subproject commit 965562b69e35d445fb5c58b2e2afd9cdf27d3146 +Subproject commit 736dc78d1b9e64124474cee98c5db6e8212fa096 diff --git a/external-library/pom.xml b/external-library/pom.xml index a926241..a21584b 100644 --- a/external-library/pom.xml +++ b/external-library/pom.xml @@ -14,5 +14,6 @@ pom mywust + rpc-frp-consul \ No newline at end of file diff --git a/external-library/rpc-frp-consul/.gitignore b/external-library/rpc-frp-consul/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/external-library/rpc-frp-consul/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/external-library/rpc-frp-consul/pom.xml b/external-library/rpc-frp-consul/pom.xml new file mode 100644 index 0000000..4428a92 --- /dev/null +++ b/external-library/rpc-frp-consul/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + cn.wustlinghang.wusthelper + external-library + 0.0.1-SNAPSHOT + + + rpc-frp-consul + + + 17 + 17 + UTF-8 + + 2.15.2 + 0.5.4 + + + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + compile + + + cn.wustlinghang.mywust + mywust-network-okhttp + ${mywust.version} + + + + org.ini4j + ini4j + ${ini4j.version} + + + \ No newline at end of file diff --git a/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/FrpConsulRegister.java b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/FrpConsulRegister.java new file mode 100644 index 0000000..0e69639 --- /dev/null +++ b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/FrpConsulRegister.java @@ -0,0 +1,92 @@ +package cn.wustlinghang.wusthelper.internal.rpc; + +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.RandomUtil; +import cn.wustlinghang.mywust.network.Requester; +import cn.wustlinghang.wusthelper.internal.rpc.client.ConsulClient; +import cn.wustlinghang.wusthelper.internal.rpc.client.FrpcClient; +import cn.wustlinghang.wusthelper.internal.rpc.config.FrpConfig; +import cn.wustlinghang.wusthelper.internal.rpc.config.RegisterConfig; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class FrpConsulRegister { + + private final String serviceId; + + private final RegisterConfig registerConfig; + + private final FrpcClient frpcClientClient; + + private final ConsulClient consulClient; + + private boolean registered = false; + + public FrpConsulRegister(RegisterConfig registerConfig, FrpConfig frpConfig, + Requester requester, ObjectMapper objectMapper) { + + this.serviceId = RandomUtil.randomString(8); + this.registerConfig = registerConfig; + + this.frpcClientClient = new FrpcClient(frpConfig, requester, objectMapper); + this.consulClient = new ConsulClient(this.serviceId, registerConfig, objectMapper, requester); + } + + public void register() { + ThreadUtil.execute(() -> { + try { + log.info("连接frp并注册consul..."); + this.doRegister(); + log.info("注册完毕"); + } catch (Exception e) { + log.warn("注册服务时发生异常:", e); + log.warn("不进行转发注册,直接服务"); + } + }); + + Runtime.getRuntime().addShutdownHook(new Thread(this::onShutdown, "ShutdownHookThread")); + } + + private void onShutdown() { + try { + if (this.registered) { + log.info("注销服务..."); + this.consulClient.deregister(); + this.frpcClientClient.removeProxy(); + this.registered = false; + log.info("服务注销完毕"); + } + } catch (Exception e) { + log.warn("注销服务时发生异常:", e); + } + } + + private void doRegister() throws Exception { + frpcClientClient.addFrpProxy( + registerConfig.getServiceName(), serviceId, + "127.0.0.1", registerConfig.getLocalServicePort() + ); + + String remoteAddress; + String[] remote; + int retry = 0; + do { + // 先睡个0.5秒等待连接成功再获取状态读端口 + ThreadUtil.sleep(500); + + JsonNode proxy = frpcClientClient.getProxyStatus(registerConfig.getServiceName(), serviceId); + remoteAddress = proxy.path("remote_addr") + .asText("127.0.0.1:" + registerConfig.getLocalServicePort()); + remote = remoteAddress.split(":"); + retry++; + } while (retry < 3 && remote.length < 2); + if (retry == 3) { + throw new Exception("获取frp隧道信息重试次数过多,请手动添加隧道和注册中心"); + } + + this.consulClient.register(remoteAddress, Integer.parseInt(remote[1])); + this.registered = true; + } +} \ No newline at end of file diff --git a/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/client/ConsulClient.java b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/client/ConsulClient.java new file mode 100644 index 0000000..e0aef38 --- /dev/null +++ b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/client/ConsulClient.java @@ -0,0 +1,63 @@ +package cn.wustlinghang.wusthelper.internal.rpc.client; + +import cn.wustlinghang.mywust.network.Requester; +import cn.wustlinghang.mywust.network.entitys.HttpResponse; +import cn.wustlinghang.mywust.network.request.RequestFactory; +import cn.wustlinghang.wusthelper.internal.rpc.config.RegisterConfig; +import cn.wustlinghang.wusthelper.internal.rpc.entity.RegisterRequestBody; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; + +@Slf4j +public class ConsulClient { + private final String serviceId; + private final String serviceName; + private final String consulAddress; + + private final ObjectMapper objectMapper; + private final Requester requester; + + public ConsulClient(String serviceId, RegisterConfig registerConfig, ObjectMapper objectMapper, Requester requester) { + this.serviceId = serviceId; + this.serviceName = registerConfig.getServiceName(); + this.consulAddress = registerConfig.getConsulAddress(); + + this.objectMapper = objectMapper; + this.requester = requester; + } + + public void register(String remoteAddress, int remotePort, + RegisterRequestBody.HealthCheckOption... healthCheckOption + ) throws IOException { + var registerRequestBody = RegisterRequestBody.builder() + .id(serviceId) + .name(serviceName) + .address(remoteAddress) + .port(remotePort) + .checks(Lists.newArrayList(healthCheckOption)) + .build(); + + byte[] registerRequestData = objectMapper.writeValueAsBytes(registerRequestBody); + var url = consulAddress + "/v1/agent/service/register"; + + var registerRequest = RequestFactory.makeHttpRequest(url, registerRequestData); + var registerResponse = requester.put(registerRequest); + + if (registerResponse.getStatusCode() != HttpResponse.HTTP_OK) { + log.warn("注册中心注册不成功,请手动注册"); + } + } + + public void deregister() throws IOException { + var url = String.format("%s/v1/agent/service/deregister/%s", consulAddress, serviceId); + var deregisterRequest = RequestFactory.makeHttpRequest(url); + var deregisterResponse = requester.put(deregisterRequest); + + if (deregisterResponse.getStatusCode() != HttpResponse.HTTP_OK) { + log.warn("服务注销不成功,请手动注册"); + } + } +} diff --git a/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/client/FrpcClient.java b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/client/FrpcClient.java new file mode 100644 index 0000000..7808530 --- /dev/null +++ b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/client/FrpcClient.java @@ -0,0 +1,96 @@ +package cn.wustlinghang.wusthelper.internal.rpc.client; + +import cn.hutool.core.codec.Base64; +import cn.wustlinghang.mywust.network.request.RequestFactory; +import cn.wustlinghang.mywust.network.Requester; +import cn.wustlinghang.wusthelper.internal.rpc.config.FrpConfig; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.MissingNode; +import org.ini4j.Ini; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +public class FrpcClient { + private final String frpcAdminAddress; + + private final String frpAuthHeaderValue; + + private final Requester requester; + + private final ObjectMapper objectMapper; + + public FrpcClient(FrpConfig config, Requester requester, ObjectMapper objectMapper) { + + this.frpcAdminAddress = config.getFrpcAdminAddress(); + + this.requester = requester; + this.objectMapper = objectMapper; + + String username = config.getFrpcAdminUsername(); + String password = config.getFrpcAdminPassword(); + this.frpAuthHeaderValue = "Basic " + Base64.encode(username + ":" + password); + } + + private String frpProxyName; + + public void addFrpProxy(String serviceName, String serviceId, String localAddress, String localPort) + throws IOException { + this.frpProxyName = String.format("%s-%s", serviceName, serviceId); + + Ini ini = this.getFrpConfig(); + ini.put(frpProxyName, "type", "tcp"); + ini.put(frpProxyName, "local_address", localAddress); + ini.put(frpProxyName, "local_port", localPort); + ini.put(frpProxyName, "use_compression", "true"); + + var output = new ByteArrayOutputStream(); + ini.store(output); + + this.reloadFrpConfig(ini); + } + + public void removeProxy() throws IOException { + Ini ini = this.getFrpConfig(); + ini.remove(this.frpProxyName); + + this.reloadFrpConfig(ini); + } + + public Ini getFrpConfig() throws IOException { + var frpConfigRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/config"); + frpConfigRequest.addHeaders("Authorization", frpAuthHeaderValue); + var response = requester.get(frpConfigRequest); + + return new Ini(new ByteArrayInputStream(response.getBody())); + } + + public void reloadFrpConfig(Ini ini) throws IOException { + var output = new ByteArrayOutputStream(); + ini.store(output); + + var uploadRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/config", output.toByteArray()); + uploadRequest.addHeaders("Authorization", frpAuthHeaderValue); + requester.put(uploadRequest); + var reloadRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/reload"); + reloadRequest.addHeaders("Authorization", frpAuthHeaderValue); + requester.get(reloadRequest); + } + + public JsonNode getProxyStatus(String serviceName, String serviceId) throws IOException { + var statusRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/status"); + statusRequest.addHeaders("Authorization", frpAuthHeaderValue); + var statusResponse = requester.get(statusRequest); + + JsonNode proxies = objectMapper.readTree(statusResponse.getBody()).path("tcp"); + for (JsonNode proxy : proxies) { + if (proxy.path("name").asText().equals(serviceName + "-" + serviceId)) { + return proxy; + } + } + + return MissingNode.getInstance(); + } +} diff --git a/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/config/FrpConfig.java b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/config/FrpConfig.java new file mode 100644 index 0000000..9fe9e73 --- /dev/null +++ b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/config/FrpConfig.java @@ -0,0 +1,12 @@ +package cn.wustlinghang.wusthelper.internal.rpc.config; + +import lombok.Data; + +@Data +public class FrpConfig { + private String frpcAdminAddress; + + private String frpcAdminUsername; + + private String frpcAdminPassword; +} diff --git a/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/config/RegisterConfig.java b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/config/RegisterConfig.java new file mode 100644 index 0000000..f706f0f --- /dev/null +++ b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/config/RegisterConfig.java @@ -0,0 +1,12 @@ +package cn.wustlinghang.wusthelper.internal.rpc.config; + +import lombok.Data; + +@Data +public class RegisterConfig { + private String localServicePort; + + private String serviceName; + + private String consulAddress; +} diff --git a/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/entity/RegisterRequestBody.java b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/entity/RegisterRequestBody.java new file mode 100644 index 0000000..94ee17f --- /dev/null +++ b/external-library/rpc-frp-consul/src/main/java/cn/wustlinghang/wusthelper/internal/rpc/entity/RegisterRequestBody.java @@ -0,0 +1,12 @@ +package cn.wustlinghang.wusthelper.internal.rpc.entity; + +import lombok.Builder; + +import java.util.List; + +@Builder +public record RegisterRequestBody(String address, int port, List checks, String name, String id) { + @Builder + public record HealthCheckOption(String http, String interval, String timeout) { + } +} \ No newline at end of file diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/CookieApi.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/CookieApi.java similarity index 93% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/CookieApi.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/CookieApi.java index cdf2f9b..2d064d8 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/CookieApi.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/CookieApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1; import cn.wustlinghang.wusthelper.internal.graduate.services.LoginService; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/CourseTableApi.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/CourseTableApi.java similarity index 94% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/CourseTableApi.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/CourseTableApi.java index 664b8c1..63eb736 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/CourseTableApi.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/CourseTableApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1; import cn.wustlinghang.mywust.data.global.Course; import cn.wustlinghang.wusthelper.internal.graduate.services.CourseTableService; diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/ScoreApi.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/ScoreApi.java similarity index 94% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/ScoreApi.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/ScoreApi.java index 8bc1095..f1e002c 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/ScoreApi.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/ScoreApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1; import cn.wustlinghang.mywust.data.global.Score; import cn.wustlinghang.wusthelper.internal.graduate.services.ScoreService; diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/StudentInfoApi.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/StudentInfoApi.java similarity index 94% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/StudentInfoApi.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/StudentInfoApi.java index 68512a9..83acf6b 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/StudentInfoApi.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/StudentInfoApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1; import cn.wustlinghang.mywust.data.global.StudentInfo; import cn.wustlinghang.wusthelper.internal.graduate.services.StudentInfoService; diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/TrainingPlanApi.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/TrainingPlanApi.java similarity index 94% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/TrainingPlanApi.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/TrainingPlanApi.java index e9247bc..aaa65c0 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/TrainingPlanApi.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/TrainingPlanApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1; import cn.wustlinghang.wusthelper.internal.graduate.services.TrainingPlanService; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/BaseExceptionHandler.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/BaseExceptionHandler.java similarity index 80% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/BaseExceptionHandler.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/BaseExceptionHandler.java index 98279aa..66fc0ce 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/BaseExceptionHandler.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/BaseExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http.handler; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import cn.wustlinghang.wusthelper.internal.rpc.response.RpcResponse; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -12,7 +12,7 @@ public abstract class BaseExceptionHandler { private static final ObjectMapper objectMapper = new ObjectMapper(); - public Response toResponse(ResponseCode code, String msg, String handlerName) { + public Response toResponse(RpcCommonResponseCode code, String msg, String handlerName) { return toResponse(code.getCode(), msg, handlerName); } @@ -29,7 +29,7 @@ public abstract class BaseExceptionHandler { try { response = objectMapper.writeValueAsString(RpcResponse.error(code, msg)); } catch (JsonProcessingException e) { - response = RpcResponse.error(ResponseCode.SERVER_INTERNAL_ERROR); + response = RpcResponse.error(RpcCommonResponseCode.SERVER_INTERNAL_ERROR); } return Response.status(status) diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/DefaultExceptionHandler.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/DefaultExceptionHandler.java similarity index 69% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/DefaultExceptionHandler.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/DefaultExceptionHandler.java index 22bfe4f..c667399 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/DefaultExceptionHandler.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/DefaultExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http.handler; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -13,7 +13,7 @@ public class DefaultExceptionHandler extends BaseExceptionHandler implements Exc public Response toResponse(Exception e) { log.error("未知异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "DefaultExceptionHandler" ); diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/IOExceptionHandler.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/IOExceptionHandler.java similarity index 70% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/IOExceptionHandler.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/IOExceptionHandler.java index 22887d6..97a22ba 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/IOExceptionHandler.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/IOExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http.handler; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -15,7 +15,7 @@ public class IOExceptionHandler extends BaseExceptionHandler implements Exceptio public Response toResponse(IOException e) { log.error("IO异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "IOExceptionHandler" ); diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/ParseExceptionHandler.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/ParseExceptionHandler.java similarity index 72% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/ParseExceptionHandler.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/ParseExceptionHandler.java index 5e3f95a..bfaaba5 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/ParseExceptionHandler.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/ParseExceptionHandler.java @@ -1,7 +1,7 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http.handler; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1.handler; import cn.wustlinghang.mywust.exception.ParseException; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -14,7 +14,7 @@ public class ParseExceptionHandler extends BaseExceptionHandler implements Excep public Response toResponse(ParseException e) { log.error("解析异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "ParseExceptionHandler" ); diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/RpcExceptionHandler.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/RpcExceptionHandler.java similarity index 87% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/RpcExceptionHandler.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/RpcExceptionHandler.java index 97f6ac6..0c7783c 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/RpcExceptionHandler.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/RpcExceptionHandler.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http.handler; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1.handler; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; import jakarta.ws.rs.core.Response; diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/ValidationExceptionHandler.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/ValidationExceptionHandler.java similarity index 73% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/ValidationExceptionHandler.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/ValidationExceptionHandler.java index f08ab67..70b1cbe 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/ValidationExceptionHandler.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/ValidationExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http.handler; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.validation.ValidationException; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; @@ -14,7 +14,7 @@ public class ValidationExceptionHandler extends BaseExceptionHandler @Override public Response toResponse(ValidationException e) { return super.toResponse( - ResponseCode.PARAM_WRONG, + RpcCommonResponseCode.PARAM_WRONG, "参数错误:" + e.toString(), "ValidationExceptionHandler" ); diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/WebApplicationExceptionHandler.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/WebApplicationExceptionHandler.java similarity index 93% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/WebApplicationExceptionHandler.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/WebApplicationExceptionHandler.java index 91482a3..1a21a32 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/WebApplicationExceptionHandler.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/handler/WebApplicationExceptionHandler.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http.handler; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1.handler; import cn.wustlinghang.wusthelper.internal.rpc.exception.GraduateRpcException; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/interceptor/ResponseWrapperInterceptor.java b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/interceptor/ResponseWrapperInterceptor.java similarity index 88% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/interceptor/ResponseWrapperInterceptor.java rename to sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/interceptor/ResponseWrapperInterceptor.java index cfa0fd6..3898001 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/interceptor/ResponseWrapperInterceptor.java +++ b/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/v1/interceptor/ResponseWrapperInterceptor.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http.interceptor; +package cn.wustlinghang.wusthelper.internal.graduate.api.http.v1.interceptor; -import cn.wustlinghang.wusthelper.internal.undergrad.api.http.handler.BaseExceptionHandler; +import cn.wustlinghang.wusthelper.internal.graduate.api.http.v1.handler.BaseExceptionHandler; import cn.wustlinghang.wusthelper.internal.rpc.response.RpcResponse; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.ws.rs.WebApplicationException; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/BookCoverImageApi.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/BookCoverImageApi.java similarity index 95% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/BookCoverImageApi.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/BookCoverImageApi.java index dfd95cd..05b7f13 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/BookCoverImageApi.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/BookCoverImageApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1; import cn.wustlinghang.wusthelper.internal.library.services.BookCoverImageUrlService; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/BookDetailApi.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/BookDetailApi.java similarity index 93% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/BookDetailApi.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/BookDetailApi.java index 554cf95..17e1ca8 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/BookDetailApi.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/BookDetailApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1; import cn.wustlinghang.mywust.data.library.parsed.BookDetail; import cn.wustlinghang.wusthelper.internal.library.services.BookDetailService; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/BookHoldingApi.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/BookHoldingApi.java similarity index 93% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/BookHoldingApi.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/BookHoldingApi.java index ef3ecd0..b80739e 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/BookHoldingApi.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/BookHoldingApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1; import cn.wustlinghang.mywust.data.library.parsed.BookHolding; import cn.wustlinghang.wusthelper.internal.library.services.BookHoldingService; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/CookieApi.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/CookieApi.java similarity index 93% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/CookieApi.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/CookieApi.java index 2e996c7..1cd512c 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/CookieApi.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/CookieApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1; import cn.wustlinghang.wusthelper.internal.library.services.LoginService; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/CurrentLoanApi.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/CurrentLoanApi.java similarity index 96% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/CurrentLoanApi.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/CurrentLoanApi.java index 33a75d1..b1f1481 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/CurrentLoanApi.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/CurrentLoanApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1; import cn.wustlinghang.mywust.data.library.PagingResult; import cn.wustlinghang.mywust.data.library.origin.CurrentLoanBook; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/LoanHistoryApi.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/LoanHistoryApi.java similarity index 96% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/LoanHistoryApi.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/LoanHistoryApi.java index 04dd283..abcd31f 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/LoanHistoryApi.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/LoanHistoryApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1; import cn.wustlinghang.mywust.data.library.PagingResult; import cn.wustlinghang.mywust.data.library.origin.HistoryLoanBook; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/OverdueSoonApi.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/OverdueSoonApi.java similarity index 96% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/OverdueSoonApi.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/OverdueSoonApi.java index 5d67f94..9b2eb34 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/OverdueSoonApi.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/OverdueSoonApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1; import cn.wustlinghang.mywust.data.library.PagingResult; import cn.wustlinghang.mywust.data.library.origin.BaseLoanBook; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/SearchApi.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/SearchApi.java similarity index 95% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/SearchApi.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/SearchApi.java index 125f0fa..b86104a 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/SearchApi.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/SearchApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1; import cn.wustlinghang.mywust.data.library.PagingResult; import cn.wustlinghang.mywust.data.library.origin.BookSearchResult; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/BaseExceptionHandler.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/BaseExceptionHandler.java similarity index 80% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/BaseExceptionHandler.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/BaseExceptionHandler.java index 45e8259..f5aeb27 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/BaseExceptionHandler.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/BaseExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http.handler; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import cn.wustlinghang.wusthelper.internal.rpc.response.RpcResponse; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -12,7 +12,7 @@ public abstract class BaseExceptionHandler { private static final ObjectMapper objectMapper = new ObjectMapper(); - public Response toResponse(ResponseCode code, String msg, String handlerName) { + public Response toResponse(RpcCommonResponseCode code, String msg, String handlerName) { return toResponse(code.getCode(), msg, handlerName); } @@ -29,7 +29,7 @@ public abstract class BaseExceptionHandler { try { response = objectMapper.writeValueAsString(RpcResponse.error(code, msg)); } catch (JsonProcessingException e) { - response = RpcResponse.error(ResponseCode.SERVER_INTERNAL_ERROR); + response = RpcResponse.error(RpcCommonResponseCode.SERVER_INTERNAL_ERROR); } return Response.status(status) diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/DefaultExceptionHandler.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/DefaultExceptionHandler.java similarity index 70% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/DefaultExceptionHandler.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/DefaultExceptionHandler.java index b13cdab..fda3bc2 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/DefaultExceptionHandler.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/DefaultExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http.handler; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -13,7 +13,7 @@ public class DefaultExceptionHandler extends BaseExceptionHandler implements Exc public Response toResponse(Exception e) { log.error("未知异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "DefaultExceptionHandler" ); diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/IOExceptionHandler.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/IOExceptionHandler.java similarity index 70% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/IOExceptionHandler.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/IOExceptionHandler.java index a4bc6c3..940d1ba 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/IOExceptionHandler.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/IOExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http.handler; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -15,7 +15,7 @@ public class IOExceptionHandler extends BaseExceptionHandler implements Exceptio public Response toResponse(IOException e) { log.error("IO异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "IOExceptionHandler" ); diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/ParseExceptionHandler.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/ParseExceptionHandler.java similarity index 72% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/ParseExceptionHandler.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/ParseExceptionHandler.java index 879292f..119bebd 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/ParseExceptionHandler.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/ParseExceptionHandler.java @@ -1,7 +1,7 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http.handler; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1.handler; import cn.wustlinghang.mywust.exception.ParseException; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -14,7 +14,7 @@ public class ParseExceptionHandler extends BaseExceptionHandler implements Excep public Response toResponse(ParseException e) { log.error("解析异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "ParseExceptionHandler" ); diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/RpcExceptionHandler.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/RpcExceptionHandler.java similarity index 87% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/RpcExceptionHandler.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/RpcExceptionHandler.java index 2693671..80f4da5 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/RpcExceptionHandler.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/RpcExceptionHandler.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http.handler; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1.handler; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; import jakarta.ws.rs.core.Response; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/ValidationExceptionHandler.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/ValidationExceptionHandler.java similarity index 73% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/ValidationExceptionHandler.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/ValidationExceptionHandler.java index 25f4fb7..b369ac8 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/ValidationExceptionHandler.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/ValidationExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http.handler; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.validation.ValidationException; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; @@ -14,7 +14,7 @@ public class ValidationExceptionHandler extends BaseExceptionHandler @Override public Response toResponse(ValidationException e) { return super.toResponse( - ResponseCode.PARAM_WRONG, + RpcCommonResponseCode.PARAM_WRONG, "参数错误:" + e.toString(), "ValidationExceptionHandler" ); diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/WebApplicationExceptionHandler.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/WebApplicationExceptionHandler.java similarity index 93% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/WebApplicationExceptionHandler.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/WebApplicationExceptionHandler.java index 9600689..f89b0a4 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/WebApplicationExceptionHandler.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/handler/WebApplicationExceptionHandler.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http.handler; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1.handler; import cn.wustlinghang.wusthelper.internal.rpc.exception.LibraryRpcException; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/interceptor/ResponseWrapperInterceptor.java b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/interceptor/ResponseWrapperInterceptor.java similarity index 88% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/interceptor/ResponseWrapperInterceptor.java rename to sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/interceptor/ResponseWrapperInterceptor.java index 5bf463c..5776a51 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/interceptor/ResponseWrapperInterceptor.java +++ b/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/v1/interceptor/ResponseWrapperInterceptor.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http.interceptor; +package cn.wustlinghang.wusthelper.internal.library.api.http.v1.interceptor; -import cn.wustlinghang.wusthelper.internal.physics.api.http.handler.BaseExceptionHandler; +import cn.wustlinghang.wusthelper.internal.library.api.http.v1.handler.BaseExceptionHandler; import cn.wustlinghang.wusthelper.internal.rpc.response.RpcResponse; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.ws.rs.WebApplicationException; diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/CookieApi.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/CookieApi.java similarity index 93% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/CookieApi.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/CookieApi.java index a651847..954d987 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/CookieApi.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/CookieApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1; import cn.wustlinghang.wusthelper.internal.physics.services.LoginService; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/CourseTableApi.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/CourseTableApi.java similarity index 94% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/CourseTableApi.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/CourseTableApi.java index dd26de8..d307055 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/CourseTableApi.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/CourseTableApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1; import cn.wustlinghang.mywust.data.physics.PhysicsCourse; import cn.wustlinghang.wusthelper.internal.physics.services.CourseTableService; diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/ScoreApi.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/ScoreApi.java similarity index 95% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/ScoreApi.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/ScoreApi.java index 6677f85..977625d 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/ScoreApi.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/ScoreApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1; import cn.wustlinghang.mywust.data.global.Score; import cn.wustlinghang.wusthelper.internal.physics.services.ScoreService; diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/BaseExceptionHandler.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/BaseExceptionHandler.java similarity index 80% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/BaseExceptionHandler.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/BaseExceptionHandler.java index 6ee8f5c..8fc6aab 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/BaseExceptionHandler.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/BaseExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http.handler; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import cn.wustlinghang.wusthelper.internal.rpc.response.RpcResponse; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -12,7 +12,7 @@ public abstract class BaseExceptionHandler { private static final ObjectMapper objectMapper = new ObjectMapper(); - public Response toResponse(ResponseCode code, String msg, String handlerName) { + public Response toResponse(RpcCommonResponseCode code, String msg, String handlerName) { return toResponse(code.getCode(), msg, handlerName); } @@ -29,7 +29,7 @@ public abstract class BaseExceptionHandler { try { response = objectMapper.writeValueAsString(RpcResponse.error(code, msg)); } catch (JsonProcessingException e) { - response = RpcResponse.error(ResponseCode.SERVER_INTERNAL_ERROR); + response = RpcResponse.error(RpcCommonResponseCode.SERVER_INTERNAL_ERROR); } return Response.status(status) diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/DefaultExceptionHandler.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/DefaultExceptionHandler.java similarity index 70% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/DefaultExceptionHandler.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/DefaultExceptionHandler.java index 3d30dd5..759bd61 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/DefaultExceptionHandler.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/DefaultExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http.handler; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -13,7 +13,7 @@ public class DefaultExceptionHandler extends BaseExceptionHandler implements Exc public Response toResponse(Exception e) { log.error("未知异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "DefaultExceptionHandler" ); diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/IOExceptionHandler.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/IOExceptionHandler.java similarity index 70% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/IOExceptionHandler.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/IOExceptionHandler.java index 18e3019..f7d7574 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/IOExceptionHandler.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/IOExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http.handler; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -15,7 +15,7 @@ public class IOExceptionHandler extends BaseExceptionHandler implements Exceptio public Response toResponse(IOException e) { log.error("IO异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "IOExceptionHandler" ); diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/ParseExceptionHandler.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/ParseExceptionHandler.java similarity index 72% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/ParseExceptionHandler.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/ParseExceptionHandler.java index ab65e80..90369a0 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/ParseExceptionHandler.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/ParseExceptionHandler.java @@ -1,7 +1,7 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http.handler; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1.handler; import cn.wustlinghang.mywust.exception.ParseException; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -14,7 +14,7 @@ public class ParseExceptionHandler extends BaseExceptionHandler implements Excep public Response toResponse(ParseException e) { log.error("解析异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "ParseExceptionHandler" ); diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/RpcExceptionHandler.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/RpcExceptionHandler.java similarity index 87% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/RpcExceptionHandler.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/RpcExceptionHandler.java index bd83eb4..50bc5ae 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/RpcExceptionHandler.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/RpcExceptionHandler.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http.handler; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1.handler; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; import jakarta.ws.rs.core.Response; diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/ValidationExceptionHandler.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/ValidationExceptionHandler.java similarity index 73% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/ValidationExceptionHandler.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/ValidationExceptionHandler.java index 4d89680..950be29 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/ValidationExceptionHandler.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/ValidationExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http.handler; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.validation.ValidationException; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; @@ -14,7 +14,7 @@ public class ValidationExceptionHandler extends BaseExceptionHandler @Override public Response toResponse(ValidationException e) { return super.toResponse( - ResponseCode.PARAM_WRONG, + RpcCommonResponseCode.PARAM_WRONG, "参数错误:" + e.toString(), "ValidationExceptionHandler" ); diff --git a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/WebApplicationExceptionHandler.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/WebApplicationExceptionHandler.java similarity index 93% rename from sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/WebApplicationExceptionHandler.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/WebApplicationExceptionHandler.java index 9ad609a..ca91465 100644 --- a/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/handler/WebApplicationExceptionHandler.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/handler/WebApplicationExceptionHandler.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.physics.api.http.handler; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1.handler; import cn.wustlinghang.wusthelper.internal.rpc.exception.PhysicsRpcException; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/interceptor/ResponseWrapperInterceptor.java b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/interceptor/ResponseWrapperInterceptor.java similarity index 88% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/interceptor/ResponseWrapperInterceptor.java rename to sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/interceptor/ResponseWrapperInterceptor.java index 4ecf0cd..d774eeb 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/interceptor/ResponseWrapperInterceptor.java +++ b/sub-services/physics/src/main/java/cn/wustlinghang/wusthelper/internal/physics/api/http/v1/interceptor/ResponseWrapperInterceptor.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http.interceptor; +package cn.wustlinghang.wusthelper.internal.physics.api.http.v1.interceptor; -import cn.wustlinghang.wusthelper.internal.graduate.api.http.handler.BaseExceptionHandler; +import cn.wustlinghang.wusthelper.internal.physics.api.http.v1.handler.BaseExceptionHandler; import cn.wustlinghang.wusthelper.internal.rpc.response.RpcResponse; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.ws.rs.WebApplicationException; diff --git a/sub-services/undergrad/.flattened-pom.xml b/sub-services/undergrad/.flattened-pom.xml index 0c24ec8..0de1689 100644 --- a/sub-services/undergrad/.flattened-pom.xml +++ b/sub-services/undergrad/.flattened-pom.xml @@ -30,16 +30,22 @@ 3.1.3.Final compile + + org.ini4j + ini4j + 0.5.4 + compile + cn.wustlinghang.mywust mywust-core - 0.0.2-SNAPSHOT + 0.0.2-beta compile cn.wustlinghang.mywust mywust-network-okhttp - 0.0.2-SNAPSHOT + 0.0.2-beta compile diff --git a/sub-services/undergrad/pom.xml b/sub-services/undergrad/pom.xml index cef6ac2..89d256b 100644 --- a/sub-services/undergrad/pom.xml +++ b/sub-services/undergrad/pom.xml @@ -29,6 +29,7 @@ 17 true UTF-8 + diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/Main.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/Main.java deleted file mode 100644 index edcd35f..0000000 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/Main.java +++ /dev/null @@ -1,16 +0,0 @@ -package cn.wustlinghang.wusthelper.internal.undergrad; - -import io.quarkus.runtime.Startup; -import jakarta.annotation.PostConstruct; -import jakarta.inject.Singleton; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@Startup -@Singleton -public class Main { - @PostConstruct - public void run() { - log.info("Undergrad service started."); - } -} diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/CookieApi.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/CookieApi.java similarity index 93% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/CookieApi.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/CookieApi.java index 235cf5d..2c85b5a 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/CookieApi.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/CookieApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1; import cn.wustlinghang.wusthelper.internal.undergrad.services.LoginService; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/CourseTableApi.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/CourseTableApi.java similarity index 95% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/CourseTableApi.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/CourseTableApi.java index ddcac9d..90cd196 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/CourseTableApi.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/CourseTableApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1; import cn.wustlinghang.mywust.data.global.Course; import cn.wustlinghang.wusthelper.internal.undergrad.services.CourseTableService; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/CreditStatusApi.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/CreditStatusApi.java similarity index 94% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/CreditStatusApi.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/CreditStatusApi.java index dffe812..64caabe 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/CreditStatusApi.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/CreditStatusApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1; import cn.wustlinghang.wusthelper.internal.undergrad.services.CreditStatusService; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/ExamActivitiesApi.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/ExamActivitiesApi.java similarity index 95% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/ExamActivitiesApi.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/ExamActivitiesApi.java index 1a695af..f27d585 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/ExamActivitiesApi.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/ExamActivitiesApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1; import cn.wustlinghang.mywust.core.request.service.undergraduate.UndergradExamDelayApiService; import cn.wustlinghang.mywust.data.global.Score; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/ExamDelayApplicationApi.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/ExamDelayApplicationApi.java similarity index 96% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/ExamDelayApplicationApi.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/ExamDelayApplicationApi.java index d9f5e95..e4aadb4 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/ExamDelayApplicationApi.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/ExamDelayApplicationApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1; import cn.wustlinghang.mywust.data.undergrad.ExamDelayApplication; import cn.wustlinghang.wusthelper.internal.undergrad.services.ExamDelayApplicationService; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/ScoreApi.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/ScoreApi.java similarity index 94% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/ScoreApi.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/ScoreApi.java index 8f5cbba..b90c812 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/ScoreApi.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/ScoreApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1; import cn.wustlinghang.mywust.data.global.Score; import cn.wustlinghang.wusthelper.internal.undergrad.services.ScoreService; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/StudentInfoApi.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/StudentInfoApi.java similarity index 94% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/StudentInfoApi.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/StudentInfoApi.java index 05c5ebf..a2df199 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/StudentInfoApi.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/StudentInfoApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1; import cn.wustlinghang.mywust.data.global.StudentInfo; import cn.wustlinghang.wusthelper.internal.undergrad.services.StudentInfoService; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/TrainingPlanApi.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/TrainingPlanApi.java similarity index 94% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/TrainingPlanApi.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/TrainingPlanApi.java index 26bee7b..2a26864 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/TrainingPlanApi.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/TrainingPlanApi.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1; import cn.wustlinghang.wusthelper.internal.undergrad.services.TrainingPlanService; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/BaseExceptionHandler.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/BaseExceptionHandler.java similarity index 80% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/BaseExceptionHandler.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/BaseExceptionHandler.java index f67a531..a77f71f 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/BaseExceptionHandler.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/BaseExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http.handler; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import cn.wustlinghang.wusthelper.internal.rpc.response.RpcResponse; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -12,7 +12,7 @@ public abstract class BaseExceptionHandler { private static final ObjectMapper objectMapper = new ObjectMapper(); - public Response toResponse(ResponseCode code, String msg, String handlerName) { + public Response toResponse(RpcCommonResponseCode code, String msg, String handlerName) { return toResponse(code.getCode(), msg, handlerName); } @@ -29,7 +29,7 @@ public abstract class BaseExceptionHandler { try { response = objectMapper.writeValueAsString(RpcResponse.error(code, msg)); } catch (JsonProcessingException e) { - response = RpcResponse.error(ResponseCode.SERVER_INTERNAL_ERROR); + response = RpcResponse.error(RpcCommonResponseCode.SERVER_INTERNAL_ERROR); } return Response.status(status) diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/DefaultExceptionHandler.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/DefaultExceptionHandler.java similarity index 69% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/DefaultExceptionHandler.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/DefaultExceptionHandler.java index e1ee003..e0fc42a 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/DefaultExceptionHandler.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/DefaultExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http.handler; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -13,7 +13,7 @@ public class DefaultExceptionHandler extends BaseExceptionHandler implements Exc public Response toResponse(Exception e) { log.error("未知异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "DefaultExceptionHandler" ); diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/IOExceptionHandler.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/IOExceptionHandler.java similarity index 70% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/IOExceptionHandler.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/IOExceptionHandler.java index e8444e9..e06d817 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/handler/IOExceptionHandler.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/IOExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http.handler; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -15,7 +15,7 @@ public class IOExceptionHandler extends BaseExceptionHandler implements Exceptio public Response toResponse(IOException e) { log.error("IO异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "IOExceptionHandler" ); diff --git a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/ParseExceptionHandler.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/ParseExceptionHandler.java similarity index 72% rename from sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/ParseExceptionHandler.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/ParseExceptionHandler.java index 3f7c90c..b503159 100644 --- a/sub-services/graduate/src/main/java/cn/wustlinghang/wusthelper/internal/graduate/api/http/handler/ParseExceptionHandler.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/ParseExceptionHandler.java @@ -1,7 +1,7 @@ -package cn.wustlinghang.wusthelper.internal.graduate.api.http.handler; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1.handler; import cn.wustlinghang.mywust.exception.ParseException; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @@ -14,7 +14,7 @@ public class ParseExceptionHandler extends BaseExceptionHandler implements Excep public Response toResponse(ParseException e) { log.error("解析异常:", e); return super.toResponse( - ResponseCode.SERVER_INTERNAL_ERROR, + RpcCommonResponseCode.SERVER_INTERNAL_ERROR, e.toString(), "ParseExceptionHandler" ); diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/RpcExceptionHandler.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/RpcExceptionHandler.java similarity index 87% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/RpcExceptionHandler.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/RpcExceptionHandler.java index 0de94db..995a542 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/RpcExceptionHandler.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/RpcExceptionHandler.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http.handler; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1.handler; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; import jakarta.ws.rs.core.Response; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/ValidationExceptionHandler.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/ValidationExceptionHandler.java similarity index 73% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/ValidationExceptionHandler.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/ValidationExceptionHandler.java index 5a67fcd..098707c 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/ValidationExceptionHandler.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/ValidationExceptionHandler.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http.handler; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1.handler; -import cn.wustlinghang.wusthelper.internal.rpc.response.ResponseCode; +import cn.wustlinghang.wusthelper.internal.rpc.response.RpcCommonResponseCode; import jakarta.validation.ValidationException; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; @@ -14,7 +14,7 @@ public class ValidationExceptionHandler extends BaseExceptionHandler @Override public Response toResponse(ValidationException e) { return super.toResponse( - ResponseCode.PARAM_WRONG, + RpcCommonResponseCode.PARAM_WRONG, "参数错误:" + e.toString(), "ValidationExceptionHandler" ); diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/WebApplicationExceptionHandler.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/WebApplicationExceptionHandler.java similarity index 93% rename from sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/WebApplicationExceptionHandler.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/WebApplicationExceptionHandler.java index 1f93418..7ace25e 100644 --- a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/handler/WebApplicationExceptionHandler.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/handler/WebApplicationExceptionHandler.java @@ -1,4 +1,4 @@ -package cn.wustlinghang.wusthelper.internal.undergrad.api.http.handler; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1.handler; import cn.wustlinghang.wusthelper.internal.rpc.exception.UndergradRpcException; import cn.wustlinghang.wusthelper.internal.rpc.exception.RpcException; diff --git a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/interceptor/ResponseWrapperInterceptor.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/interceptor/ResponseWrapperInterceptor.java similarity index 88% rename from sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/interceptor/ResponseWrapperInterceptor.java rename to sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/interceptor/ResponseWrapperInterceptor.java index 5ce4fcc..05f60d0 100644 --- a/sub-services/library/src/main/java/cn/wustlinghang/wusthelper/internal/library/api/http/interceptor/ResponseWrapperInterceptor.java +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/api/http/v1/interceptor/ResponseWrapperInterceptor.java @@ -1,6 +1,6 @@ -package cn.wustlinghang.wusthelper.internal.library.api.http.interceptor; +package cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1.interceptor; -import cn.wustlinghang.wusthelper.internal.library.api.http.handler.BaseExceptionHandler; +import cn.wustlinghang.wusthelper.internal.undergrad.api.http.v1.handler.BaseExceptionHandler; import cn.wustlinghang.wusthelper.internal.rpc.response.RpcResponse; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.ws.rs.WebApplicationException; diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/FrpConsulRegister.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/FrpConsulRegister.java new file mode 100644 index 0000000..b5273f2 --- /dev/null +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/FrpConsulRegister.java @@ -0,0 +1,107 @@ +package cn.wustlinghang.wusthelper.internal.undergrad.rpc; + +import cn.hutool.core.thread.ThreadUtil; +import cn.hutool.core.util.RandomUtil; +import cn.wustlinghang.mywust.network.Requester; +import cn.wustlinghang.wusthelper.internal.undergrad.rpc.client.ConsulClient; +import cn.wustlinghang.wusthelper.internal.undergrad.rpc.client.FrpcClient; +import cn.wustlinghang.wusthelper.internal.undergrad.rpc.config.RpcConfig; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.quarkus.runtime.Startup; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.enterprise.context.ApplicationScoped; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.microprofile.config.inject.ConfigProperty; + +@Slf4j +@Startup +@ApplicationScoped +public class FrpConsulRegister { + + @ConfigProperty(name = "quarkus.http.port") + String localServicePort; + + private final String serviceId; + + private final RpcConfig rpcConfig; + + private final FrpcClient frpcClientClient; + + private final ConsulClient consulClient; + + private boolean registered = false; + + public FrpConsulRegister(RpcConfig rpcConfig, FrpcClient frpcClientClient, Requester requester, + ObjectMapper objectMapper) { + this.rpcConfig = rpcConfig; + + this.frpcClientClient = frpcClientClient; + + this.serviceId = RandomUtil.randomString(8); + + this.consulClient = new ConsulClient( + rpcConfig.getServiceName(), this.serviceId, + rpcConfig.getConsulAddress(), + objectMapper, requester); + } + + @PostConstruct + public void onStartup() { + ThreadUtil.execute(() -> { + try { + log.info("连接frp并注册consul..."); + this.doRegister(); + log.info("注册完毕"); + } catch (Exception e) { + log.warn("注册服务时发生异常:", e); + log.warn("不进行转发注册,直接服务"); + } + }); + + Runtime.getRuntime().addShutdownHook(new Thread(this::onShutdown, "ShutdownHookThread")); + } + + @PreDestroy + public void onShutdown() { + try { + if (this.registered) { + log.info("注销服务..."); + this.consulClient.deregister(); + this.frpcClientClient.removeProxy(); + log.info("服务注销完毕"); + this.registered = false; + } + } catch (Exception e) { + log.warn("注销服务时发生异常:", e); + } + } + + private void doRegister() throws Exception { + frpcClientClient.addFrpProxy( + rpcConfig.getServiceName(), serviceId, + "127.0.0.1", localServicePort + ); + + String remoteAddress; + String[] remote; + int retry = 0; + do { + // 先睡个0.5秒等待连接成功再获取状态读端口 + ThreadUtil.sleep(500); + + JsonNode proxy = frpcClientClient.getProxyStatus(rpcConfig.getServiceName(), serviceId); + remoteAddress = proxy.path("remote_addr") + .asText("127.0.0.1:" + localServicePort); + remote = remoteAddress.split(":"); + retry++; + } while (retry < 3 && remote.length < 2); + if (retry == 3) { + throw new Exception("获取frp隧道信息重试次数过多,请手动添加隧道和注册中心"); + } + + this.consulClient.register(remoteAddress, Integer.parseInt(remote[1])); + this.registered = true; + } +} diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/client/ConsulClient.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/client/ConsulClient.java new file mode 100644 index 0000000..c33a913 --- /dev/null +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/client/ConsulClient.java @@ -0,0 +1,60 @@ +package cn.wustlinghang.wusthelper.internal.undergrad.rpc.client; + +import cn.wustlinghang.mywust.network.request.RequestFactory; +import cn.wustlinghang.mywust.network.Requester; +import cn.wustlinghang.mywust.network.entitys.HttpResponse; +import cn.wustlinghang.wusthelper.internal.undergrad.rpc.entity.RegisterRequestBody; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; + +@Slf4j +public class ConsulClient { + private final String serviceId; + private final String serviceName; + private final String consulAddress; + private final ObjectMapper objectMapper; + private final Requester requester; + + public ConsulClient(String serviceName, String serviceId, String consulAddress, + ObjectMapper objectMapper, Requester requester) { + this.serviceId = serviceId; + this.serviceName = serviceName; + this.consulAddress = consulAddress; + + this.objectMapper = objectMapper; + this.requester = requester; + } + + public void register(String remoteAddress, int remotePort) throws IOException { + var checksItem = RegisterRequestBody.ChecksItem.builder() + .http("http://" + remoteAddress + "/health") + .interval("3s") + .build(); + + var registerRequestBody = RegisterRequestBody.builder() + .id(serviceId) + .name(serviceName) + .address("127.0.0.1") + .port(remotePort) + .checks(Lists.newArrayList(checksItem)) + .build(); + + byte[] registerRequestData = objectMapper.writeValueAsBytes(registerRequestBody); + var registerRequest = RequestFactory.makeHttpRequest(consulAddress + "/v1/agent/service/register", registerRequestData); + var registerResponse = requester.put(registerRequest); + if (registerResponse.getStatusCode() != HttpResponse.HTTP_OK) { + log.warn("注册中心注册不成功,请手动注册"); + } + } + + public void deregister() throws IOException { + var deregisterRequest = RequestFactory.makeHttpRequest(consulAddress + "/v1/agent/service/deregister/" + serviceId); + var deregisterResponse = requester.put(deregisterRequest); + if (deregisterResponse.getStatusCode() != HttpResponse.HTTP_OK) { + log.warn("服务注销不成功,请手动注册"); + } + } +} diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/client/FrpcClient.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/client/FrpcClient.java new file mode 100644 index 0000000..a6a5f05 --- /dev/null +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/client/FrpcClient.java @@ -0,0 +1,100 @@ +package cn.wustlinghang.wusthelper.internal.undergrad.rpc.client; + +import cn.hutool.core.codec.Base64; +import cn.wustlinghang.mywust.network.request.RequestFactory; +import cn.wustlinghang.mywust.network.Requester; +import cn.wustlinghang.wusthelper.internal.undergrad.rpc.config.FrpConfig; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.MissingNode; +import jakarta.inject.Singleton; +import org.ini4j.Ini; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +@Singleton +public class FrpcClient { + + private final String frpcAdminAddress; + + private final String frpAuthHeaderValue; + + private final Requester requester; + + private final ObjectMapper objectMapper; + + private String frpProxyName; + + public FrpcClient(FrpConfig frpConfig, + Requester requester, ObjectMapper objectMapper) { + + this.frpcAdminAddress = frpConfig.getFrpcAdminAddress(); + + this.requester = requester; + this.objectMapper = objectMapper; + + String username = frpConfig.getFrpcAdminUsername(); + String password = frpConfig.getFrpcAdminPassword(); + this.frpAuthHeaderValue = "Basic " + Base64.encode(username + ":" + password); + } + + public void addFrpProxy(String serviceName, String serviceId, String localAddress, String localPort) + throws IOException { + this.frpProxyName = String.format("%s-%s", serviceName, serviceId); + + Ini ini = this.getFrpConfig(); + ini.put(frpProxyName, "type", "tcp"); + ini.put(frpProxyName, "local_address", localAddress); + ini.put(frpProxyName, "local_port", localPort); + ini.put(frpProxyName, "use_compression", "true"); + + var output = new ByteArrayOutputStream(); + ini.store(output); + + this.reloadFrpConfig(ini); + } + + public void removeProxy() throws IOException { + Ini ini = this.getFrpConfig(); + ini.remove(this.frpProxyName); + + this.reloadFrpConfig(ini); + } + + public Ini getFrpConfig() throws IOException { + var frpConfigRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/config"); + frpConfigRequest.addHeaders("Authorization", frpAuthHeaderValue); + var response = requester.get(frpConfigRequest); + + return new Ini(new ByteArrayInputStream(response.getBody())); + } + + public void reloadFrpConfig(Ini ini) throws IOException { + var output = new ByteArrayOutputStream(); + ini.store(output); + + var uploadRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/config", output.toByteArray()); + uploadRequest.addHeaders("Authorization", frpAuthHeaderValue); + requester.put(uploadRequest); + var reloadRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/reload"); + reloadRequest.addHeaders("Authorization", frpAuthHeaderValue); + requester.get(reloadRequest); + } + + public JsonNode getProxyStatus(String serviceName, String serviceId) throws IOException { + var statusRequest = RequestFactory.makeHttpRequest(frpcAdminAddress + "/api/status"); + statusRequest.addHeaders("Authorization", frpAuthHeaderValue); + var statusResponse = requester.get(statusRequest); + + JsonNode proxies = objectMapper.readTree(statusResponse.getBody()).path("tcp"); + for (JsonNode proxy : proxies) { + if (proxy.path("name").asText().equals(serviceName + "-" + serviceId)) { + return proxy; + } + } + + return MissingNode.getInstance(); + } +} diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/config/FrpConfig.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/config/FrpConfig.java new file mode 100644 index 0000000..b1cf86f --- /dev/null +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/config/FrpConfig.java @@ -0,0 +1,22 @@ +package cn.wustlinghang.wusthelper.internal.undergrad.rpc.config; + +import jakarta.inject.Singleton; +import jakarta.ws.rs.DefaultValue; +import lombok.Data; +import org.eclipse.microprofile.config.inject.ConfigProperty; + +@Data +@Singleton +public class FrpConfig { + @DefaultValue("http://127.0.0.1:7400") + @ConfigProperty(name = "frpc.admin-api.address") + String frpcAdminAddress; + + @DefaultValue("") + @ConfigProperty(name = "frpc.admin.username") + String frpcAdminUsername; + + @DefaultValue("") + @ConfigProperty(name = "frpc.admin.password") + String frpcAdminPassword; +} diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/config/RpcConfig.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/config/RpcConfig.java new file mode 100644 index 0000000..3c5beae --- /dev/null +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/config/RpcConfig.java @@ -0,0 +1,18 @@ +package cn.wustlinghang.wusthelper.internal.undergrad.rpc.config; + +import jakarta.inject.Singleton; +import jakarta.ws.rs.DefaultValue; +import lombok.Data; +import org.eclipse.microprofile.config.inject.ConfigProperty; + +@Data +@Singleton +public class RpcConfig { + @DefaultValue("default.service") + @ConfigProperty(name = "rpc.service.name") + String serviceName; + + @DefaultValue("http://127.0.0.1:8500") + @ConfigProperty(name = "rpc.register.consul-api.address") + String consulAddress; +} diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/entity/RegisterRequestBody.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/entity/RegisterRequestBody.java new file mode 100644 index 0000000..50573b9 --- /dev/null +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/entity/RegisterRequestBody.java @@ -0,0 +1,13 @@ +package cn.wustlinghang.wusthelper.internal.undergrad.rpc.entity; + +import lombok.Builder; + +import java.util.List; + +@Builder +public record RegisterRequestBody(String address, int port, List checks, String name, String id) { + + @Builder + public record ChecksItem(String http, String interval) { + } +} \ No newline at end of file diff --git a/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/health/HealthCheck.java b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/health/HealthCheck.java new file mode 100644 index 0000000..44eb0c1 --- /dev/null +++ b/sub-services/undergrad/src/main/java/cn/wustlinghang/wusthelper/internal/undergrad/rpc/health/HealthCheck.java @@ -0,0 +1,14 @@ +package cn.wustlinghang.wusthelper.internal.undergrad.rpc.health; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.Response; + +@Path("/health") +public class HealthCheck { + private static final Response successResponse = Response.accepted().status(200).build(); + + @GET + @Path("/") + public Response response() {return successResponse;} +} diff --git a/sub-services/undergrad/src/main/resources/application.properties b/sub-services/undergrad/src/main/resources/application.properties index c216edb..cbf13fc 100644 --- a/sub-services/undergrad/src/main/resources/application.properties +++ b/sub-services/undergrad/src/main/resources/application.properties @@ -1,4 +1,6 @@ quarkus.http.port=22800 +quarkus.http.enable-compression=true + #quarkus.log.level=DEBUG quarkus.log.file.encoding=UTF-8 @@ -8,4 +10,11 @@ quarkus.package.type=uber-jar # 原生镜像编译附加参数,去掉后编译会失败 # 但也只是能编译完成,目前的编译产物完全不可用,有非常多的严重bug # 现阶段使用jar运行,启动效率虽不如原生程序,但速度尚可 -quarkus.native.additional-build-args=--initialize-at-run-time=cn.wustlinghang.mywust,--initialize-at-run-time=cn.wustlinghang.wusthelper,--enable-url-protocols=https \ No newline at end of file +quarkus.native.additional-build-args=--initialize-at-run-time=cn.wustlinghang.mywust,--initialize-at-run-time=cn.wustlinghang.wusthelper,--enable-url-protocols=https + +rpc.service.name=wusthelper.undergrad +rpc.register.consul-api.address=http://127.0.0.1:8500 + +frpc.admin-api.address=http://127.0.0.1:7400 +frpc.admin.username=admin +frpc.admin.password=admin \ No newline at end of file