提交 5b7bcc20 编写于 作者: L lepdou

save appnamespace service

上级 633eb438
......@@ -40,6 +40,7 @@ public class AppController {
entity = appService.update(managedEntity);
} else {
entity.setDataChangeCreatedBy(user.getUsername());
entity.setDataChangeLastModifiedBy(user.getUsername());
entity = adminService.createNewApp(entity);
}
......
......@@ -2,12 +2,16 @@ package com.ctrip.apollo.adminservice.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.security.core.userdetails.UserDetails;
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.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.ctrip.apollo.biz.entity.AppNamespace;
import com.ctrip.apollo.biz.service.AppNamespaceService;
import com.ctrip.apollo.common.auth.ActiveUser;
import com.ctrip.apollo.common.utils.BeanUtils;
import com.ctrip.apollo.core.dto.AppNamespaceDTO;
......@@ -31,4 +35,25 @@ public class AppNamespaceController {
return BeanUtils.batchTransform(AppNamespaceDTO.class, appNamespaces);
}
@RequestMapping(value = "/apps/{appId}/appnamespaces", method = RequestMethod.POST)
public AppNamespaceDTO createOrUpdate( @RequestBody AppNamespaceDTO appNamespace, @ActiveUser UserDetails user){
AppNamespace entity = BeanUtils.transfrom(AppNamespace.class, appNamespace);
AppNamespace managedEntity = appNamespaceService.findOne(entity.getAppId(), entity.getName());
String userName = user.getUsername();
if (managedEntity != null){
managedEntity.setDataChangeLastModifiedBy(userName);
BeanUtils.copyEntityProperties(entity, managedEntity);
entity = appNamespaceService.update(managedEntity);
}else {
entity.setDataChangeLastModifiedBy(userName);
entity.setDataChangeCreatedBy(userName);
entity = appNamespaceService.createAppNamespace(entity, userName);
}
return BeanUtils.transfrom(AppNamespaceDTO.class, entity);
}
}
package com.ctrip.apollo.adminservice.controller;
import com.ctrip.apollo.biz.entity.AppNamespace;
import com.ctrip.apollo.biz.repository.AppNamespaceRepository;
import com.ctrip.apollo.core.dto.AppNamespaceDTO;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.jdbc.Sql;
public class AppNamespaceControllerTest extends AbstractControllerTest{
@Autowired
private AppNamespaceRepository namespaceRepository;
@Test
@Sql(scripts = "/controller/cleanup.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
public void testCreate(){
String appId = "6666";
String name = "testnamespace";
String comment = "comment";
AppNamespaceDTO dto = new AppNamespaceDTO();
dto.setAppId(appId);
dto.setName(name);
dto.setComment(comment);
AppNamespaceDTO resultDto = restTemplate.postForEntity(
String.format("http://localhost:%d/apps/%s/appnamespaces", port, appId),dto, AppNamespaceDTO.class).getBody();
Assert.assertEquals(appId, resultDto.getAppId());
Assert.assertTrue(resultDto.getId() > 0);
AppNamespace savedAppNs = namespaceRepository.findByAppIdAndName(appId, name);
Assert.assertNotNull(savedAppNs);
Assert.assertNotNull(savedAppNs.getDataChangeCreatedTime());
Assert.assertNotNull(savedAppNs.getDataChangeLastModifiedTime());
Assert.assertNotNull(savedAppNs.getDataChangeLastModifiedBy());
Assert.assertNotNull(savedAppNs.getDataChangeCreatedBy());
}
}
......@@ -14,8 +14,10 @@ import org.springframework.transaction.annotation.Transactional;
import com.ctrip.apollo.biz.entity.AppNamespace;
import com.ctrip.apollo.biz.entity.Audit;
import com.ctrip.apollo.biz.repository.AppNamespaceRepository;
import com.ctrip.apollo.common.utils.BeanUtils;
import com.ctrip.apollo.core.ConfigConsts;
import com.ctrip.apollo.core.exception.ServiceException;
import com.ctrip.apollo.core.utils.StringUtils;
@Service
public class AppNamespaceService {
......@@ -37,6 +39,11 @@ public class AppNamespaceService {
return appNamespaceRepository.findByName(namespaceName);
}
public AppNamespace findOne(String appId, String namespaceName){
Preconditions.checkArgument(!StringUtils.isContainEmpty(appId, namespaceName), "appId or Namespace must not be null");
return appNamespaceRepository.findByAppIdAndName(appId, namespaceName);
}
@Transactional
public void createDefaultAppNamespace(String appId, String createBy) {
if (!isAppNamespaceNameUnique(appId, appId)) {
......@@ -51,10 +58,34 @@ public class AppNamespaceService {
appNamespaceRepository.save(appNs);
auditService.audit(AppNamespace.class.getSimpleName(), appNs.getId(), Audit.OP.INSERT,
createBy);
createBy);
}
@Transactional
public AppNamespace createAppNamespace(AppNamespace appNamespace, String createBy){
if (!isAppNamespaceNameUnique(appNamespace.getAppId(), appNamespace.getName())) {
throw new ServiceException("appnamespace not unique");
}
appNamespace.setDataChangeCreatedBy(createBy);
appNamespace.setDataChangeLastModifiedBy(createBy);
appNamespace = appNamespaceRepository.save(appNamespace);
auditService.audit(AppNamespace.class.getSimpleName(), appNamespace.getId(), Audit.OP.INSERT,
createBy);
return appNamespace;
}
public List<AppNamespace> findPublicAppNamespaces(){
return appNamespaceRepository.findByNameNot(ConfigConsts.NAMESPACE_DEFAULT);
}
public AppNamespace update(AppNamespace appNamespace){
AppNamespace managedNs = appNamespaceRepository.findByAppIdAndName(appNamespace.getAppId(), appNamespace.getName());
BeanUtils.copyEntityProperties(appNamespace, managedNs);
managedNs = appNamespaceRepository.save(managedNs);
auditService.audit(AppNamespace.class.getSimpleName(), managedNs.getId(), Audit.OP.UPDATE, managedNs.getDataChangeLastModifiedBy());
return managedNs;
}
}
package com.ctrip.apollo.core.dto;
public class AppNamespaceDTO {
private long id;
private String name;
......@@ -8,6 +9,14 @@ public class AppNamespaceDTO {
private String comment;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
......
......@@ -70,13 +70,19 @@ public class AdminServiceAPI {
return Arrays.asList(appNamespaceDTOs);
}
public NamespaceDTO save(Env env, NamespaceDTO namespace) {
public NamespaceDTO saveNamespace(Env env, NamespaceDTO namespace) {
return restTemplate.postForEntity(getAdminServiceHost(env) +
String.format("/apps/%s/clusters/%s/namespaces", namespace.getAppId(),
namespace.getClusterName()), namespace, NamespaceDTO.class)
.getBody();
}
public AppNamespaceDTO saveAppNamespace(Env env, AppNamespaceDTO appNamespace) {
return restTemplate.postForEntity(getAdminServiceHost(env) +
String.format("/apps/%s/appnamespaces", appNamespace.getAppId()), appNamespace, AppNamespaceDTO.class)
.getBody();
}
}
@Service
......
......@@ -29,12 +29,20 @@ public class NamespaceController {
}
@RequestMapping(value = "/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces", method = RequestMethod.POST)
public NamespaceDTO save(@PathVariable String env, @RequestBody NamespaceDTO namespace){
public NamespaceDTO saveNamespace(@PathVariable String env, @RequestBody NamespaceDTO namespace){
if (StringUtils.isContainEmpty(env, namespace.getAppId(), namespace.getClusterName(), namespace.getNamespaceName())){
throw new BadRequestException("request payload contains empty");
}
return namespaceService.save(Env.valueOf(env), namespace);
return namespaceService.saveNamespace(Env.valueOf(env), namespace);
}
@RequestMapping(value = "/apps/{appId}/appnamespaces", method = RequestMethod.POST)
public void saveAppNamespace(@PathVariable String appId, @RequestBody AppNamespaceDTO appNamespace){
if (StringUtils.isContainEmpty(appId, appNamespace.getAppId(), appNamespace.getName())){
throw new BadRequestException("request payload contains empty");
}
namespaceService.saveAppNamespace(appNamespace);
}
@RequestMapping("/apps/{appId}/env/{env}/clusters/{clusterName}/namespaces")
......
......@@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.HttpStatusCodeException;
import java.util.Collections;
import java.util.HashMap;
......@@ -50,8 +51,19 @@ public class NamespaceService {
return namespaceAPI.findPublicAppNamespaces(portalSettings.getFirstEnv());
}
public NamespaceDTO save(Env env, NamespaceDTO namespace){
return namespaceAPI.save(env, namespace);
public NamespaceDTO saveNamespace(Env env, NamespaceDTO namespace){
return namespaceAPI.saveNamespace(env, namespace);
}
public void saveAppNamespace(AppNamespaceDTO appNamespace) {
for (Env env : portalSettings.getEnvs()) {
try {
namespaceAPI.saveAppNamespace(env, appNamespace);
} catch (HttpStatusCodeException e) {
logger.error(ExceptionUtils.toString(e));
throw e;
}
}
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册