From 06dadf257f176bd086b45ef7f6ccce04ae74b228 Mon Sep 17 00:00:00 2001 From: florian Date: Mon, 2 Sep 2019 22:46:56 +0200 Subject: [PATCH] Add control to avoid multiple application with same name. --- .../org/cerberus/repositories/ApplicationRepository.java | 4 ++++ .../java/org/cerberus/services/ApplicationService.java | 9 ++++++--- src/main/sql/1.0.0-SNAPSHOT | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/cerberus/repositories/ApplicationRepository.java b/src/main/java/org/cerberus/repositories/ApplicationRepository.java index 25b7b09..1ea2f64 100644 --- a/src/main/java/org/cerberus/repositories/ApplicationRepository.java +++ b/src/main/java/org/cerberus/repositories/ApplicationRepository.java @@ -2,8 +2,12 @@ package org.cerberus.repositories; import org.cerberus.entities.persistence.Application; 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; public interface ApplicationRepository extends JpaRepository { + @Query(value = "SELECT EXISTS(SELECT id FROM application WHERE name = :name)", nativeQuery = true) + Boolean alreadyExists(@Param("name") String name); } diff --git a/src/main/java/org/cerberus/services/ApplicationService.java b/src/main/java/org/cerberus/services/ApplicationService.java index d2a5414..ffc5301 100644 --- a/src/main/java/org/cerberus/services/ApplicationService.java +++ b/src/main/java/org/cerberus/services/ApplicationService.java @@ -1,9 +1,7 @@ package org.cerberus.services; -import org.cerberus.core.constant.Role; -import org.cerberus.core.exceptions.InternalServerErrorException; +import org.cerberus.core.exceptions.BadRequestException; import org.cerberus.entities.persistence.Application; -import org.cerberus.entities.persistence.ApplicationRole; import org.cerberus.entities.persistence.User; import org.cerberus.repositories.ApplicationRepository; import org.cerberus.validators.ApplicationValidator; @@ -11,6 +9,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import static org.cerberus.core.constant.Role.MAINTAINER; +import static org.cerberus.core.utils.StringUtils.concat; @Service public class ApplicationService { @@ -31,6 +30,10 @@ public class ApplicationService { public Application create(Application application, User user) { applicationValidator.checkAllAttributsConstraints(application); + if(applicationRepository.alreadyExists(application.getName())) { + throw new BadRequestException(concat("The application ", application.getName(), " already exists.")); + } + applicationRepository.save(application); // Application creator is by default a maintainer applicationRoleService.create(application, user, MAINTAINER); diff --git a/src/main/sql/1.0.0-SNAPSHOT b/src/main/sql/1.0.0-SNAPSHOT index db4d86f..aa16ca2 100644 --- a/src/main/sql/1.0.0-SNAPSHOT +++ b/src/main/sql/1.0.0-SNAPSHOT @@ -10,7 +10,7 @@ CREATE TABLE "user" ( CREATE TABLE application ( id uuid DEFAULT uuid_generate_v4(), - name VARCHAR NOT NULL, + name VARCHAR NOT NULL UNIQUE, service_name VARCHAR NOT NULL, CONSTRAINT application_pk PRIMARY KEY (id) );