diff --git a/app/server/src/main/java/com/appsmith/server/constants/Url.java b/app/server/src/main/java/com/appsmith/server/constants/Url.java index ae8842e9c5..1101c61f2f 100644 --- a/app/server/src/main/java/com/appsmith/server/constants/Url.java +++ b/app/server/src/main/java/com/appsmith/server/constants/Url.java @@ -10,4 +10,5 @@ public interface Url { String QUERY_URL = BASE_URL + VERSION + "/queries"; String SETTING_URL = BASE_URL + VERSION + "/settings"; String RESOURCE_URL = BASE_URL + VERSION + "/resources"; + String ACTION_URL = BASE_URL + VERSION + "/actions"; } diff --git a/app/server/src/main/java/com/appsmith/server/controllers/ActionController.java b/app/server/src/main/java/com/appsmith/server/controllers/ActionController.java new file mode 100644 index 0000000000..216dc32e99 --- /dev/null +++ b/app/server/src/main/java/com/appsmith/server/controllers/ActionController.java @@ -0,0 +1,16 @@ +package com.appsmith.server.controllers; + +import com.appsmith.server.constants.Url; +import com.appsmith.server.domains.Action; +import com.appsmith.server.services.ActionService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(Url.ACTION_URL) +public class ActionController extends BaseController { + + public ActionController(ActionService service) { + super(service); + } +} diff --git a/app/server/src/main/java/com/appsmith/server/repositories/ActionRepository.java b/app/server/src/main/java/com/appsmith/server/repositories/ActionRepository.java new file mode 100644 index 0000000000..1d8245abbc --- /dev/null +++ b/app/server/src/main/java/com/appsmith/server/repositories/ActionRepository.java @@ -0,0 +1,8 @@ +package com.appsmith.server.repositories; + +import com.appsmith.server.domains.Action; +import org.springframework.stereotype.Repository; + +@Repository +public interface ActionRepository extends BaseRepository { +} diff --git a/app/server/src/main/java/com/appsmith/server/repositories/ResourceRepository.java b/app/server/src/main/java/com/appsmith/server/repositories/ResourceRepository.java index e7830d5f03..9dba3f38bd 100644 --- a/app/server/src/main/java/com/appsmith/server/repositories/ResourceRepository.java +++ b/app/server/src/main/java/com/appsmith/server/repositories/ResourceRepository.java @@ -2,7 +2,9 @@ package com.appsmith.server.repositories; import com.appsmith.server.domains.Resource; import org.springframework.stereotype.Repository; +import reactor.core.publisher.Mono; @Repository -public interface ResourceRepository extends BaseRepository{ +public interface ResourceRepository extends BaseRepository { + Mono findByName(String name); } diff --git a/app/server/src/main/java/com/appsmith/server/services/ActionService.java b/app/server/src/main/java/com/appsmith/server/services/ActionService.java new file mode 100644 index 0000000000..3486ce5d54 --- /dev/null +++ b/app/server/src/main/java/com/appsmith/server/services/ActionService.java @@ -0,0 +1,6 @@ +package com.appsmith.server.services; + +import com.appsmith.server.domains.Action; + +public interface ActionService extends CrudService { +} diff --git a/app/server/src/main/java/com/appsmith/server/services/ActionServiceImpl.java b/app/server/src/main/java/com/appsmith/server/services/ActionServiceImpl.java new file mode 100644 index 0000000000..ba9a9dc2d4 --- /dev/null +++ b/app/server/src/main/java/com/appsmith/server/services/ActionServiceImpl.java @@ -0,0 +1,46 @@ +package com.appsmith.server.services; + +import com.appsmith.server.domains.Action; +import com.appsmith.server.domains.Resource; +import com.appsmith.server.exceptions.AppsmithException; +import com.appsmith.server.repositories.ActionRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.ReactiveMongoTemplate; +import org.springframework.data.mongodb.core.convert.MongoConverter; +import org.springframework.stereotype.Service; +import reactor.core.publisher.Mono; +import reactor.core.scheduler.Scheduler; + +import javax.validation.constraints.NotNull; + +@Slf4j +@Service +public class ActionServiceImpl extends BaseService implements ActionService { + + private final ActionRepository repository; + private final ResourceService resourceService; + + @Autowired + public ActionServiceImpl(Scheduler scheduler, MongoConverter mongoConverter, ReactiveMongoTemplate reactiveMongoTemplate, ActionRepository repository, ResourceService resourceService) { + super(scheduler, mongoConverter, reactiveMongoTemplate, repository); + this.repository = repository; + this.resourceService = resourceService; + } + + @Override + public Mono create(@NotNull Action action) throws AppsmithException { + if (action.getId() != null) { + throw new AppsmithException("During create action, Id is not null. Can't create new action."); + } + + Mono resourceMono = resourceService.findByName(action.getResource().getName()); + + return resourceMono + .map(resource -> { + action.setResource(resource); + return action; + }) + .flatMap(repository::save); + } +} diff --git a/app/server/src/main/java/com/appsmith/server/services/ResourceService.java b/app/server/src/main/java/com/appsmith/server/services/ResourceService.java index ed8d44619c..227f0e3164 100644 --- a/app/server/src/main/java/com/appsmith/server/services/ResourceService.java +++ b/app/server/src/main/java/com/appsmith/server/services/ResourceService.java @@ -1,6 +1,8 @@ package com.appsmith.server.services; import com.appsmith.server.domains.Resource; +import reactor.core.publisher.Mono; public interface ResourceService extends CrudService { + Mono findByName(String name); } diff --git a/app/server/src/main/java/com/appsmith/server/services/ResourceServiceImpl.java b/app/server/src/main/java/com/appsmith/server/services/ResourceServiceImpl.java index cc12391980..418a93fd8f 100644 --- a/app/server/src/main/java/com/appsmith/server/services/ResourceServiceImpl.java +++ b/app/server/src/main/java/com/appsmith/server/services/ResourceServiceImpl.java @@ -74,4 +74,9 @@ public class ResourceServiceImpl extends BaseService findByName(String name) { + return repository.findByName(name); + } }