Add control to avoid multiple application with same name.

This commit is contained in:
2019-09-02 22:46:56 +02:00
parent 5ab829ff64
commit 06dadf257f
3 changed files with 11 additions and 4 deletions

View File

@@ -2,8 +2,12 @@ package org.cerberus.repositories;
import org.cerberus.entities.persistence.Application; import org.cerberus.entities.persistence.Application;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.UUID; import java.util.UUID;
public interface ApplicationRepository extends JpaRepository<Application, UUID> { public interface ApplicationRepository extends JpaRepository<Application, UUID> {
@Query(value = "SELECT EXISTS(SELECT id FROM application WHERE name = :name)", nativeQuery = true)
Boolean alreadyExists(@Param("name") String name);
} }

View File

@@ -1,9 +1,7 @@
package org.cerberus.services; package org.cerberus.services;
import org.cerberus.core.constant.Role; import org.cerberus.core.exceptions.BadRequestException;
import org.cerberus.core.exceptions.InternalServerErrorException;
import org.cerberus.entities.persistence.Application; import org.cerberus.entities.persistence.Application;
import org.cerberus.entities.persistence.ApplicationRole;
import org.cerberus.entities.persistence.User; import org.cerberus.entities.persistence.User;
import org.cerberus.repositories.ApplicationRepository; import org.cerberus.repositories.ApplicationRepository;
import org.cerberus.validators.ApplicationValidator; import org.cerberus.validators.ApplicationValidator;
@@ -11,6 +9,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import static org.cerberus.core.constant.Role.MAINTAINER; import static org.cerberus.core.constant.Role.MAINTAINER;
import static org.cerberus.core.utils.StringUtils.concat;
@Service @Service
public class ApplicationService { public class ApplicationService {
@@ -31,6 +30,10 @@ public class ApplicationService {
public Application create(Application application, User user) { public Application create(Application application, User user) {
applicationValidator.checkAllAttributsConstraints(application); applicationValidator.checkAllAttributsConstraints(application);
if(applicationRepository.alreadyExists(application.getName())) {
throw new BadRequestException(concat("The application ", application.getName(), " already exists."));
}
applicationRepository.save(application); applicationRepository.save(application);
// Application creator is by default a maintainer // Application creator is by default a maintainer
applicationRoleService.create(application, user, MAINTAINER); applicationRoleService.create(application, user, MAINTAINER);

View File

@@ -10,7 +10,7 @@ CREATE TABLE "user" (
CREATE TABLE application ( CREATE TABLE application (
id uuid DEFAULT uuid_generate_v4(), id uuid DEFAULT uuid_generate_v4(),
name VARCHAR NOT NULL, name VARCHAR NOT NULL UNIQUE,
service_name VARCHAR NOT NULL, service_name VARCHAR NOT NULL,
CONSTRAINT application_pk PRIMARY KEY (id) CONSTRAINT application_pk PRIMARY KEY (id)
); );