diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/bean/ServerStatus.java b/src/main/java/com/imyeyu/api/modules/forevermc/bean/ServerStatus.java index 50d29b7..f5107ed 100644 --- a/src/main/java/com/imyeyu/api/modules/forevermc/bean/ServerStatus.java +++ b/src/main/java/com/imyeyu/api/modules/forevermc/bean/ServerStatus.java @@ -1,7 +1,9 @@ package com.imyeyu.api.modules.forevermc.bean; import com.imyeyu.api.modules.forevermc.entity.Server; +import jakarta.validation.Valid; import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.EqualsAndHashCode; @@ -17,6 +19,8 @@ import java.util.List; @Data public class ServerStatus implements Cloneable { + @Valid + @NotBlank private String id; /** true 为维护中 */ @@ -60,7 +64,7 @@ public class ServerStatus implements Cloneable { */ @Data @EqualsAndHashCode(callSuper = true) - public static class BaseInfo extends Server implements Cloneable { + public static class BaseInfo extends Server { /** 核心 */ private String core; @@ -76,14 +80,6 @@ public class ServerStatus implements Cloneable { /** 游戏版本 */ private String version; - - // @Override -// protected BaseInfo clone() throws CloneNotSupportedException { -// BaseInfo clone = (BaseInfo) super.clone(); -// clone.core = core; -// clone.bootAt = bootAt; -// } - } /** diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/controller/ClientPackController.java b/src/main/java/com/imyeyu/api/modules/forevermc/controller/ClientPackController.java new file mode 100644 index 0000000..ef0b7b7 --- /dev/null +++ b/src/main/java/com/imyeyu/api/modules/forevermc/controller/ClientPackController.java @@ -0,0 +1,42 @@ +package com.imyeyu.api.modules.forevermc.controller; + +import com.imyeyu.api.modules.forevermc.entity.ClientPack; +import com.imyeyu.api.modules.forevermc.entity.ClientPackSrc; +import com.imyeyu.api.modules.forevermc.service.ClientPackService; +import com.imyeyu.spring.annotation.AOPLog; +import com.imyeyu.spring.annotation.RequestRateLimit; +import com.imyeyu.spring.bean.Page; +import com.imyeyu.spring.bean.PageResult; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author 夜雨 + * @since 2025-07-24 21:43 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/fmc/client") +public class ClientPackController { + + private final ClientPackService service; + + @AOPLog + @RequestRateLimit + @RequestMapping("/list") + public PageResult listClientPack(@RequestBody Page page) { + return service.page(page); + } + + @AOPLog + @RequestRateLimit + @RequestMapping("/src/{clientId}") + public List listClientPackSrc(@PathVariable("clientId") long clientId) { + return service.listClientPackSrc(clientId); + } +} diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/controller/ServerController.java b/src/main/java/com/imyeyu/api/modules/forevermc/controller/ServerController.java index 2d4e81f..1783be5 100644 --- a/src/main/java/com/imyeyu/api/modules/forevermc/controller/ServerController.java +++ b/src/main/java/com/imyeyu/api/modules/forevermc/controller/ServerController.java @@ -1,15 +1,19 @@ package com.imyeyu.api.modules.forevermc.controller; -import com.imyeyu.java.TimiJava; -import com.imyeyu.java.bean.timi.TimiCode; -import com.imyeyu.java.bean.timi.TimiException; import com.imyeyu.api.modules.forevermc.bean.ServerStatus; +import com.imyeyu.api.modules.forevermc.entity.ClientPack; +import com.imyeyu.api.modules.forevermc.service.ClientPackService; import com.imyeyu.api.modules.forevermc.service.ServerService; import com.imyeyu.api.modules.minecraft.annotation.RequiredFMCServerToken; import com.imyeyu.api.modules.minecraft.vo.server.ReportRequest; +import com.imyeyu.java.TimiJava; +import com.imyeyu.java.bean.timi.TimiCode; +import com.imyeyu.java.bean.timi.TimiException; import com.imyeyu.spring.annotation.AOPLog; import com.imyeyu.spring.annotation.IgnoreGlobalReturn; import com.imyeyu.spring.annotation.RequestRateLimit; +import com.imyeyu.spring.bean.Page; +import com.imyeyu.spring.bean.PageResult; import com.imyeyu.utils.Decoder; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.NotNull; @@ -44,6 +48,7 @@ import java.util.List; public class ServerController { private final ServerService service; + private final ClientPackService clientService; /** * 服务器状态报告,由 FMCServer 服务端插件发送 @@ -88,6 +93,13 @@ public class ServerController { } } + @AOPLog + @RequestRateLimit + @GetMapping("/client/{serverId}") + public List listClientPack(@PathVariable("serverId") String serverId) { + return service.listClientPack(serverId); + } + /** * 获取服务器状态列表 * @@ -112,4 +124,10 @@ public class ServerController { result.sort(Comparator.comparingInt(o -> o.getBaseInfo().getOrder())); return result; } + + @RequestRateLimit + @PostMapping("/client/list") + public PageResult listClient(@RequestBody Page page) { + return clientService.page(page); + } } diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/entity/ClientPack.java b/src/main/java/com/imyeyu/api/modules/forevermc/entity/ClientPack.java new file mode 100644 index 0000000..755cc8e --- /dev/null +++ b/src/main/java/com/imyeyu/api/modules/forevermc/entity/ClientPack.java @@ -0,0 +1,45 @@ +package com.imyeyu.api.modules.forevermc.entity; + +import com.imyeyu.spring.annotation.table.Column; +import com.imyeyu.spring.entity.Entity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 服务器客户端 + * + * @author 夜雨 + * @since 2025-01-27 20:40 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ClientPack extends Entity { + + /** 名称 */ + private String name; + + /** 说明 */ + private String description; + + /** 游戏 ID */ + private String gameId; + + /** 游戏版本 */ + private String gameVersion; + + /** 客户端版本 */ + private String version; + + /** 需要运行时版本 */ + private String runtimeVersion; + + /** 文件大小 */ + private Long size; + + /** true 为支持 FMC 授权验证 */ + @Column("can_fmc_auth") + private Boolean canFMCAuth; + + /** true 为已过时 */ + private boolean isDeprecated; +} diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/entity/ServerClientSrc.java b/src/main/java/com/imyeyu/api/modules/forevermc/entity/ClientPackSrc.java similarity index 79% rename from src/main/java/com/imyeyu/api/modules/forevermc/entity/ServerClientSrc.java rename to src/main/java/com/imyeyu/api/modules/forevermc/entity/ClientPackSrc.java index 768620a..92193ab 100644 --- a/src/main/java/com/imyeyu/api/modules/forevermc/entity/ServerClientSrc.java +++ b/src/main/java/com/imyeyu/api/modules/forevermc/entity/ClientPackSrc.java @@ -1,8 +1,8 @@ package com.imyeyu.api.modules.forevermc.entity; +import com.imyeyu.spring.entity.Entity; import lombok.Data; import lombok.EqualsAndHashCode; -import com.imyeyu.spring.entity.Entity; /** * 服务器客户端下载源 @@ -12,7 +12,7 @@ import com.imyeyu.spring.entity.Entity; */ @Data @EqualsAndHashCode(callSuper = true) -public class ServerClientSrc extends Entity { +public class ClientPackSrc extends Entity { /** * 下载源类型 @@ -32,12 +32,9 @@ public class ServerClientSrc extends Entity { URL } - /** 客户端 ID,关联 {@link ServerClient#getId()} */ + /** 客户端 ID,关联 {@link ClientPack#getId()} */ private Long clientId; - /** 服务器 ID,关联 {@link Server#getId()} */ - private String serverId; - /** 下载源类型 */ private BizType bizType; diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/entity/Server.java b/src/main/java/com/imyeyu/api/modules/forevermc/entity/Server.java index 9b9ca4c..47e6542 100644 --- a/src/main/java/com/imyeyu/api/modules/forevermc/entity/Server.java +++ b/src/main/java/com/imyeyu/api/modules/forevermc/entity/Server.java @@ -1,13 +1,10 @@ package com.imyeyu.api.modules.forevermc.entity; -import com.imyeyu.spring.annotation.table.Transient; import com.imyeyu.spring.entity.Destroyable; import com.imyeyu.spring.entity.UUIDEntity; import lombok.Data; import lombok.EqualsAndHashCode; -import java.util.List; - /** * 服务器 * @@ -36,6 +33,9 @@ public class Server extends UUIDEntity implements Destroyable { /** 上级服务器 ID */ protected String pid; + /** 类型 */ + protected Type type; + /** 标题 */ protected String title; @@ -45,13 +45,6 @@ public class Server extends UUIDEntity implements Destroyable { /** 地址 */ protected String host; - /** 类型 */ - protected Type type; - /** 排序 */ protected int order; - - /** 客户端列表 */ - @Transient - protected List clientList; } diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/entity/ServerClient.java b/src/main/java/com/imyeyu/api/modules/forevermc/entity/ServerClient.java index 442bcfa..9be05d3 100644 --- a/src/main/java/com/imyeyu/api/modules/forevermc/entity/ServerClient.java +++ b/src/main/java/com/imyeyu/api/modules/forevermc/entity/ServerClient.java @@ -1,40 +1,15 @@ package com.imyeyu.api.modules.forevermc.entity; import lombok.Data; -import lombok.EqualsAndHashCode; -import com.imyeyu.spring.annotation.table.Transient; -import com.imyeyu.spring.entity.Entity; - -import java.util.List; /** - * 服务器客户端 - * * @author 夜雨 - * @since 2025-01-27 20:40 + * @since 2025-07-23 21:54 */ @Data -@EqualsAndHashCode(callSuper = true) -public class ServerClient extends Entity { +public class ServerClient { - /** 服务器 ID,关联 {@link Server#getId()} */ private String serverId; - /** 文件名 */ - private String fileName; - - /** 客户端版本 */ - private String version; - - /** 默认配置 */ - private String defOption; - - /** 文件大小 */ - private Long size; - - /** true 为已过时 */ - private boolean isDeprecated; - - @Transient - private List srcList; + private Long clientId; } diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ClientPackMapper.java b/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ClientPackMapper.java new file mode 100644 index 0000000..7504769 --- /dev/null +++ b/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ClientPackMapper.java @@ -0,0 +1,12 @@ +package com.imyeyu.api.modules.forevermc.mapper; + +import com.imyeyu.api.modules.forevermc.entity.ClientPack; +import com.imyeyu.spring.mapper.BaseMapper; + +/** + * @author 夜雨 + * @since 2025-02-07 17:03 + */ +public interface ClientPackMapper extends BaseMapper { + +} diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ClientPackSrcMapper.java b/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ClientPackSrcMapper.java new file mode 100644 index 0000000..d3a0f0c --- /dev/null +++ b/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ClientPackSrcMapper.java @@ -0,0 +1,17 @@ +package com.imyeyu.api.modules.forevermc.mapper; + +import com.imyeyu.api.modules.forevermc.entity.ClientPackSrc; +import com.imyeyu.spring.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +/** + * @author 夜雨 + * @since 2025-02-07 17:20 + */ +public interface ClientPackSrcMapper extends BaseMapper { + + @Select("SELECT * FROM client_pack_src WHERE client_id = #{clientId}" + NOT_DELETE + " ORDER BY `order` ASC") + List selectByClientId(long clientId); +} diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ServerClientMapper.java b/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ServerClientMapper.java index 459c20d..2613d8d 100644 --- a/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ServerClientMapper.java +++ b/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ServerClientMapper.java @@ -1,17 +1,14 @@ package com.imyeyu.api.modules.forevermc.mapper; -import com.imyeyu.api.modules.forevermc.entity.ServerClient; -import com.imyeyu.spring.mapper.BaseMapper; -import org.apache.ibatis.annotations.Select; +import com.imyeyu.api.modules.forevermc.entity.ClientPack; import java.util.List; /** * @author 夜雨 - * @since 2025-02-07 17:03 + * @since 2025-07-23 22:03 */ -public interface ServerClientMapper extends BaseMapper { +public interface ServerClientMapper { - @Select("SELECT * FROM server_client WHERE server_id = #{serverId}" + NOT_DELETE) - List selectByServerId(String serverId); + List selectByServerId(String serverId); } diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ServerClientSrcMapper.java b/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ServerClientSrcMapper.java deleted file mode 100644 index fd9d276..0000000 --- a/src/main/java/com/imyeyu/api/modules/forevermc/mapper/ServerClientSrcMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.imyeyu.api.modules.forevermc.mapper; - -import com.imyeyu.api.modules.forevermc.entity.ServerClientSrc; -import com.imyeyu.spring.mapper.BaseMapper; -import org.apache.ibatis.annotations.Select; - -import java.util.List; - -/** - * @author 夜雨 - * @since 2025-02-07 17:20 - */ -public interface ServerClientSrcMapper extends BaseMapper { - - @Select("SELECT * FROM server_client_src WHERE client_id = #{clientId}" + NOT_DELETE + " ORDER BY order ASC") - List selectByClientId(Long clientId); -} diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/service/ClientPackService.java b/src/main/java/com/imyeyu/api/modules/forevermc/service/ClientPackService.java new file mode 100644 index 0000000..8eb4bb6 --- /dev/null +++ b/src/main/java/com/imyeyu/api/modules/forevermc/service/ClientPackService.java @@ -0,0 +1,19 @@ +package com.imyeyu.api.modules.forevermc.service; + +import com.imyeyu.api.modules.forevermc.entity.ClientPack; +import com.imyeyu.api.modules.forevermc.entity.ClientPackSrc; +import com.imyeyu.spring.service.DeletableService; +import com.imyeyu.spring.service.GettableService; +import com.imyeyu.spring.service.PageableService; +import com.imyeyu.spring.service.UpdatableService; + +import java.util.List; + +/** + * @author 夜雨 + * @since 2025-07-23 16:59 + */ +public interface ClientPackService extends PageableService, GettableService, UpdatableService, DeletableService { + + List listClientPackSrc(long clientId); +} diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/service/ServerService.java b/src/main/java/com/imyeyu/api/modules/forevermc/service/ServerService.java index d9e5f65..805ccca 100644 --- a/src/main/java/com/imyeyu/api/modules/forevermc/service/ServerService.java +++ b/src/main/java/com/imyeyu/api/modules/forevermc/service/ServerService.java @@ -1,9 +1,10 @@ package com.imyeyu.api.modules.forevermc.service; +import com.imyeyu.api.modules.forevermc.bean.ServerStatus; +import com.imyeyu.api.modules.forevermc.entity.ClientPack; +import com.imyeyu.api.modules.minecraft.vo.server.ReportRequest; import com.imyeyu.java.TimiJava; import com.imyeyu.java.bean.timi.TimiException; -import com.imyeyu.api.modules.forevermc.bean.ServerStatus; -import com.imyeyu.api.modules.minecraft.vo.server.ReportRequest; import java.util.List; @@ -23,6 +24,8 @@ public interface ServerService extends TimiJava { */ void report(ReportRequest request); + List listClientPack(String serverId); + String getIcon(String serverId); /** diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/service/implement/ClientPackServiceImplement.java b/src/main/java/com/imyeyu/api/modules/forevermc/service/implement/ClientPackServiceImplement.java new file mode 100644 index 0000000..76b8d85 --- /dev/null +++ b/src/main/java/com/imyeyu/api/modules/forevermc/service/implement/ClientPackServiceImplement.java @@ -0,0 +1,35 @@ +package com.imyeyu.api.modules.forevermc.service.implement; + +import com.imyeyu.api.modules.forevermc.entity.ClientPack; +import com.imyeyu.api.modules.forevermc.entity.ClientPackSrc; +import com.imyeyu.api.modules.forevermc.mapper.ClientPackMapper; +import com.imyeyu.api.modules.forevermc.mapper.ClientPackSrcMapper; +import com.imyeyu.api.modules.forevermc.service.ClientPackService; +import com.imyeyu.spring.mapper.BaseMapper; +import com.imyeyu.spring.service.AbstractEntityService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author 夜雨 + * @since 2025-07-23 16:59 + */ +@Service +@RequiredArgsConstructor +public class ClientPackServiceImplement extends AbstractEntityService implements ClientPackService { + + private final ClientPackMapper mapper; + private final ClientPackSrcMapper srcMapper; + + @Override + protected BaseMapper mapper() { + return mapper; + } + + @Override + public List listClientPackSrc(long clientId) { + return srcMapper.selectByClientId(clientId); + } +} diff --git a/src/main/java/com/imyeyu/api/modules/forevermc/service/implement/ServerServiceImplement.java b/src/main/java/com/imyeyu/api/modules/forevermc/service/implement/ServerServiceImplement.java index 9adff49..3c51741 100644 --- a/src/main/java/com/imyeyu/api/modules/forevermc/service/implement/ServerServiceImplement.java +++ b/src/main/java/com/imyeyu/api/modules/forevermc/service/implement/ServerServiceImplement.java @@ -1,16 +1,15 @@ package com.imyeyu.api.modules.forevermc.service.implement; -import com.imyeyu.java.TimiJava; -import com.imyeyu.java.bean.timi.TimiCode; -import com.imyeyu.java.bean.timi.TimiException; import com.imyeyu.api.modules.forevermc.bean.ServerStatus; +import com.imyeyu.api.modules.forevermc.entity.ClientPack; import com.imyeyu.api.modules.forevermc.entity.Server; -import com.imyeyu.api.modules.forevermc.entity.ServerClient; import com.imyeyu.api.modules.forevermc.mapper.ServerClientMapper; -import com.imyeyu.api.modules.forevermc.mapper.ServerClientSrcMapper; import com.imyeyu.api.modules.forevermc.mapper.ServerMapper; import com.imyeyu.api.modules.forevermc.service.ServerService; import com.imyeyu.api.modules.minecraft.vo.server.ReportRequest; +import com.imyeyu.java.TimiJava; +import com.imyeyu.java.bean.timi.TimiCode; +import com.imyeyu.java.bean.timi.TimiException; import com.imyeyu.utils.Time; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; @@ -36,7 +35,6 @@ public class ServerServiceImplement implements ServerService { private final ServerMapper serverMapper; private final ServerClientMapper serverClientMapper; - private final ServerClientSrcMapper serverClientSrcMapper; private final Map serverMap = new HashMap<>(); @@ -50,13 +48,6 @@ public class ServerServiceImplement implements ServerService { } Server server = serverMapper.select(item.getKey()); TimiException.required(server, "not found server"); - - List clientList = serverClientMapper.selectByServerId(server.getId()); - for (int i = 0; i < clientList.size(); i++) { - ServerClient client = clientList.get(i); - client.setSrcList(serverClientSrcMapper.selectByClientId(client.getId())); - } - server.setClientList(clientList); BeanUtils.copyProperties(server, item.getValue().getBaseInfo()); } } @@ -74,6 +65,11 @@ public class ServerServiceImplement implements ServerService { serverMap.put(request.getId(), request); } + @Override + public List listClientPack(String serverId) { + return serverClientMapper.selectByServerId(serverId); + } + @Override public String getIcon(String serverId) { ServerStatus status = serverMap.get(serverId);