[ Server ] [ Project ] - 完成project-Server的代码及测试部分

This commit is contained in:
zeaslity
2023-10-11 10:29:51 +08:00
parent 493741c2bc
commit 346512e770
13 changed files with 295 additions and 31 deletions

View File

@@ -3,7 +3,7 @@ package io.wdd.func.xray.persisit;
import io.wdd.func.xray.beans.node.ProxyNode;
import io.wdd.func.xray.beans.node.ProxyNodeType;
import io.wdd.func.xray.beans.node.XrayConfigInfo;
import io.wdd.server.beans.vo.ServerInfoVO;
import io.wdd.server.beans.po.ServerInfoPO;
import io.wdd.server.coreService.CoreServerService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@@ -43,13 +43,13 @@ public class XrayDBOperator {
*/
public void CacheAllProxyNodeInfo() {
List<ServerInfoVO> serverInfoVOList = coreServerService.serverGetAll();
List<ServerInfoPO> serverInfoPOList = coreServerService.serverGetAll();
transferServerInfoToProxyNode(serverInfoVOList);
transferServerInfoToProxyNode(serverInfoPOList);
}
private void transferServerInfoToProxyNode(List<ServerInfoVO> serverInfoVOList) {
private void transferServerInfoToProxyNode(List<ServerInfoPO> serverInfoVOList) {
// 临时内容
int[] bitmap = new int[ALL_SERVER_CITY_INDEX.size() * 10 + 10];
@@ -90,9 +90,6 @@ public class XrayDBOperator {
.publicIPv6(serverInfoVO.getServerIpPbV6())
.name(serverCity + serverGraphNum)
.agentName(serverInfoVO.getServerName())
.proxyNodeType(
convertNodeType(serverInfoVO.getProxyType())
)
.location(serverCity)
.xrayConfigInfo(new XrayConfigInfo())
.build();

View File

@@ -2,7 +2,7 @@ package io.wdd.rpc.status;
import io.wdd.common.utils.TimeUtils;
import io.wdd.server.beans.vo.ServerInfoVO;
import io.wdd.server.beans.po.ServerInfoPO;
import io.wdd.server.coreService.CoreServerService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
@@ -101,7 +101,7 @@ public class CommonAndStatusCache {
public void updateAllAgentTopicNameCache() {
//查询DB
List<ServerInfoVO> allAgentInfo = coreServerService.serverGetAll();
List<ServerInfoPO> allAgentInfo = coreServerService.serverGetAll();
if (CollectionUtils.isEmpty(allAgentInfo)) {
log.warn("[Serer Boot Up] Octopus Serer First Boot Up ! No Agent Registered Ever!");
@@ -113,7 +113,7 @@ public class CommonAndStatusCache {
List<String> collect = allAgentInfo
.stream()
.map(ServerInfoVO::getTopicName)
.map(ServerInfoPO::getTopicName)
.collect(Collectors.toList());
ALL_AGENT_TOPIC_NAME_LIST.addAll(collect);

View File

@@ -3,7 +3,10 @@ package io.wdd.server.beans.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
import java.time.LocalDateTime;
@@ -13,7 +16,11 @@ import java.time.LocalDateTime;
*/
@TableName(value = "project_info")
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder(toBuilder = true)
public class ProjectInfoPO implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
/**

View File

@@ -8,6 +8,7 @@ import lombok.Data;
import java.io.Serializable;
/**
*
* @TableName project_server_relation
*/
@TableName(value = "project_server_relation")

View File

@@ -2,20 +2,112 @@ package io.wdd.server.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.wdd.common.response.R;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.wdd.server.beans.request.ProjectQueryEntity;
import io.wdd.server.beans.vo.ProjectServerVO;
import io.wdd.server.coreService.CoreProjectServerService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/project-server")
@Api("Project-Server绑定")
public class ProjectServerController {
@Resource
CoreProjectServerService coreProjectServerService;
@GetMapping("/all")
@ApiOperation("Project-Server查询所有项目的服务器信息")
public R<String> projectServerAll() {
return null;
public R<List<ProjectServerVO>> projectServerAll() {
List<ProjectServerVO> projectServerVOS = coreProjectServerService.projectServerAll();
return R.ok(projectServerVOS);
}
@PostMapping("/one")
@ApiOperation("Project-Server查询单个项目的服务器信息")
public R<ProjectServerVO> projectServerOne(
@RequestParam(value = "projectId", name = "projectId")
@ApiParam(value = "projectId") Long projectId
) {
ProjectServerVO projectServerVO = coreProjectServerService.projectServerOne(projectId);
return R.ok(projectServerVO);
}
@PostMapping("/query/one")
@ApiOperation("Project-Server查询特定项目的服务器信息")
public R<ProjectServerVO> projectServerOne(
@RequestBody @Validated ProjectQueryEntity projectQueryEntity
) {
ProjectServerVO projectServerVO = coreProjectServerService.projectServerQuery(projectQueryEntity);
return R.ok(projectServerVO);
}
@PostMapping("/create")
@ApiOperation("Project-Server-创建一个Project-Server半丁关系")
public R<String> projectServerCreate(
@RequestParam(value = "projectId", name = "projectId")
@ApiParam(value = "projectId") Long projectId,
@RequestParam(value = "serverId", name = "serverId")
@ApiParam(value = "serverId") Long serverId
) {
String result = "创建Project-Server成功";
if (!coreProjectServerService.projectServerCreate(
projectId,
serverId
)) {
result = "创建Project-Server失败";
}
return R.ok(result);
}
@PostMapping("/update")
@ApiOperation("Project-Server-更新一个Project-Server")
public R<String> projectServerUpdate(
@RequestParam(value = "projectId", name = "projectId")
@ApiParam(value = "projectId") Long projectId,
@RequestParam(value = "serverId", name = "serverId")
@ApiParam(value = "serverId") Long serverId
) {
String result = "更新Project-Server成功";
if (!coreProjectServerService.projectServerUpdate(
projectId,
serverId
)) {
result = "更新Project-Server失败";
}
return R.ok(result);
}
@PostMapping("/delete")
@ApiOperation("Project-Server-删除一个Project-Server")
public R<String> projectServerDelete(
@RequestParam(value = "projectId", name = "projectId")
@ApiParam(value = "projectId") Long projectId,
@RequestParam(value = "serverId", name = "serverId")
@ApiParam(value = "serverId") Long serverId
) {
String result = "删除Project-Server成功";
if (!coreProjectServerService.projectServerDelete(
projectId,
serverId
)) {
result = "删除Project-Server失败";
}
return R.ok(result);
}

View File

@@ -14,7 +14,7 @@ public interface CoreServerService {
List<ServerInfoVO> serverGetSingle(String serverName, String ipv4, String serverLocation);
List<ServerInfoVO> serverGetAll();
List<ServerInfoPO> serverGetAll();
/**
* 查询主机信息,但是是条件查询

View File

@@ -33,9 +33,18 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService {
@Resource
ServerInfoService serverInfoService;
@Override
public List<ProjectServerVO> projectServerAll() {
return null;
return coreProjectService
.projectGetAll()
.stream()
.map(
projectInfoPO -> this.projectServerOne(projectInfoPO.getProjectId())
)
.collect(Collectors.toList());
}
@Override
@@ -54,12 +63,16 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService {
.get(0);
// 为了统一 再查一次
return this.projectServerOne(projectInfoPO.getProjectId());
}
@Override
public ProjectServerVO projectServerOne(Long projectId) {
// 首先查询projectId是否存在 pass
// 查询与之绑定的所有server
// serverId projectId
List<ProjectServerRelationPO> projectServerRelationPOList = new LambdaQueryChainWrapper<ProjectServerRelationPO>(projectServerRelationService.getBaseMapper())
@@ -94,7 +107,6 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService {
projectInfoPO,
projectServerVO
);
projectServerVO.setBindingServerList(serverInfoPOS);
return projectServerVO;
@@ -102,16 +114,48 @@ public class CoreProjectServerServiceImpl implements CoreProjectServerService {
@Override
public boolean projectServerCreate(Long projectId, Long serverId) {
ProjectServerRelationPO byId = projectServerRelationService.getById(serverId);
if (byId != null && byId
.getProjectId()
.equals(projectId)) {
log.debug("ProjectServer绑定关系已经存在");
return true;
}
// no exist then create
// 判定 serverId 和 projectId是否合规
if (coreProjectService.projectGetOne(projectId) == null || serverInfoService.getById(serverId) == null) {
log.warn("传入的 projectId 或者 serverId 有误!");
return false;
}
ProjectServerRelationPO projectServerRelationPO = new ProjectServerRelationPO();
projectServerRelationPO.setProjectId(projectId);
projectServerRelationPO.setServerId(serverId);
return projectServerRelationService.save(projectServerRelationPO);
}
@Override
public boolean projectServerUpdate(Long projectId, Long serverId) {
return false;
return this.projectServerCreate(projectId,
serverId);
}
@Override
public boolean projectServerDelete(Long projectId, Long serverId) {
return false;
ProjectServerRelationPO byId = projectServerRelationService.getById(serverId);
if (byId != null && byId
.getProjectId()
.equals(projectId)) {
return projectServerRelationService.removeById(serverId);
}
return true;
}
}

View File

@@ -76,15 +76,12 @@ public class CoreServerServiceImpl implements CoreServerService {
}
@Override
public List<ServerInfoVO> serverGetAll() {
public List<ServerInfoPO> serverGetAll() {
List<ServerInfoPO> serverInfoPOWithOutDelete = serverInfoService.list();
return covertServerPOtoVO(
serverInfoPOWithOutDelete,
0
);
return serverInfoPOWithOutDelete;
}
@Override

View File

@@ -6,7 +6,7 @@ import io.wdd.server.beans.po.ProjectServerRelationPO;
/**
* @author wdd
* @description 针对表【project_server_relation】的数据库操作Mapper
* @createDate 2023-10-09 16:11:10
* @createDate 2023-10-09 17:36:26
* @Entity io.wdd.server.beans.po.ProjectServerRelationPO
*/
public interface ProjectServerRelationMapper extends BaseMapper<ProjectServerRelationPO> {

View File

@@ -6,7 +6,7 @@ import io.wdd.server.beans.po.ProjectServerRelationPO;
/**
* @author wdd
* @description 针对表【project_server_relation】的数据库操作Service
* @createDate 2023-10-09 16:11:10
* @createDate 2023-10-09 17:36:26
*/
public interface ProjectServerRelationService extends IService<ProjectServerRelationPO> {

View File

@@ -1,7 +1,7 @@
package io.wdd.server.service;
import io.wdd.server.beans.po.ServerAppRelationPO;
import com.baomidou.mybatisplus.extension.service.IService;
import io.wdd.server.beans.po.ServerAppRelationPO;
/**
* @author wdd
@@ -9,5 +9,4 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @createDate 2022-11-27 13:53:22
*/
public interface ServerAppRelationService extends IService<ServerAppRelationPO> {
}

View File

@@ -9,7 +9,7 @@ import org.springframework.stereotype.Service;
/**
* @author wdd
* @description 针对表【project_server_relation】的数据库操作Service实现
* @createDate 2023-10-09 16:11:10
* @createDate 2023-10-09 17:36:26
*/
@Service
public class ProjectServerRelationServiceImpl extends ServiceImpl<ProjectServerRelationMapper, ProjectServerRelationPO>

View File

@@ -0,0 +1,127 @@
package io.wdd.server.controller;
import io.wdd.common.response.R;
import io.wdd.server.beans.po.ProjectInfoPO;
import io.wdd.server.beans.po.ServerInfoPO;
import io.wdd.server.beans.vo.ProjectServerVO;
import io.wdd.server.coreService.CoreProjectService;
import io.wdd.server.coreService.CoreServerService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@SpringBootTest
public class ProjectServerTest {
@Resource
ProjectServerController projectServerController;
@Resource
CoreProjectService coreProjectService;
@Resource
CoreServerService coreServerService;
@Test
public void test_create_valid_input_success() {
List<ProjectInfoPO> projectInfoPOS = coreProjectService.projectGetAll();
ProjectInfoPO projectInfoPO = projectInfoPOS
.stream()
.skip(new Random().nextInt(projectInfoPOS.size()))
.findFirst()
.get();
List<ServerInfoPO> serverInfoVOList = coreServerService.serverGetAll();
List<Long> serverIdList = serverInfoVOList
.stream()
.skip(new Random().nextInt(serverInfoVOList.size()))
.map(
serverInfoPO -> serverInfoPO.getServerId()
)
.collect(Collectors.toList());
serverIdList
.stream()
.forEach(
serverId -> {
R<String> result = projectServerController.projectServerCreate(
projectInfoPO.getProjectId(),
serverId
);
assertEquals(
"创建Project-Server成功",
result.getData()
);
}
);
}
@Test
public void test_query_all_project_servers() {
R<List<ProjectServerVO>> result = projectServerController.projectServerAll();
assertNotNull(result.getData());
}
@Test
public void test_query_nonexistent_project_server_error() {
Long nonexistentProjectId = -1L;
R<ProjectServerVO> result = projectServerController.projectServerOne(nonexistentProjectId);
assertEquals(
null,
result.getData()
);
}
@Test
public void test_create_invalid_project_id_error() {
Long invalidProjectId = -1L;
List<ServerInfoPO> serverInfoVOList = coreServerService.serverGetAll();
ServerInfoPO serverInfoPO = serverInfoVOList
.stream()
.skip(new Random().nextInt(serverInfoVOList.size()))
.findFirst()
.get();
R<String> result = projectServerController.projectServerCreate(
invalidProjectId,
serverInfoPO.getServerId()
);
assertEquals(
"创建Project-Server失败",
result.getData()
);
}
@Test
public void test_create_invalid_server_id_error() {
List<ProjectInfoPO> projectInfoPOS = coreProjectService.projectGetAll();
ProjectInfoPO projectInfoPO = projectInfoPOS
.stream()
.skip(new Random().nextInt(projectInfoPOS.size()))
.findFirst()
.get();
Long invalidServerId = -1L;
R<String> result = projectServerController.projectServerCreate(
projectInfoPO.getProjectId(),
invalidServerId
);
assertEquals(
"创建Project-Server失败",
result.getData()
);
}
}