chore: use repo method to update workspace (#30998)
Reducing our use of `mongoTemplate` and kind-of undoing https://github.com/appsmithorg/appsmith/pull/22549.
This commit is contained in:
parent
1cb53c4e8e
commit
91fea4fbe0
|
|
@ -8,7 +8,6 @@ import com.appsmith.server.constants.Constraint;
|
||||||
import com.appsmith.server.constants.FieldName;
|
import com.appsmith.server.constants.FieldName;
|
||||||
import com.appsmith.server.domains.Asset;
|
import com.appsmith.server.domains.Asset;
|
||||||
import com.appsmith.server.domains.PermissionGroup;
|
import com.appsmith.server.domains.PermissionGroup;
|
||||||
import com.appsmith.server.domains.QWorkspace;
|
|
||||||
import com.appsmith.server.domains.User;
|
import com.appsmith.server.domains.User;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.domains.WorkspacePlugin;
|
import com.appsmith.server.domains.WorkspacePlugin;
|
||||||
|
|
@ -31,7 +30,6 @@ import com.appsmith.server.services.SessionUserService;
|
||||||
import com.appsmith.server.solutions.PermissionGroupPermission;
|
import com.appsmith.server.solutions.PermissionGroupPermission;
|
||||||
import com.appsmith.server.solutions.PolicySolution;
|
import com.appsmith.server.solutions.PolicySolution;
|
||||||
import com.appsmith.server.solutions.WorkspacePermission;
|
import com.appsmith.server.solutions.WorkspacePermission;
|
||||||
import com.mongodb.DBObject;
|
|
||||||
import jakarta.validation.Validator;
|
import jakarta.validation.Validator;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.modelmapper.ModelMapper;
|
import org.modelmapper.ModelMapper;
|
||||||
|
|
@ -39,9 +37,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.domain.Sort;
|
import org.springframework.data.domain.Sort;
|
||||||
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
|
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
|
||||||
import org.springframework.data.mongodb.core.convert.MongoConverter;
|
import org.springframework.data.mongodb.core.convert.MongoConverter;
|
||||||
import org.springframework.data.mongodb.core.query.Criteria;
|
|
||||||
import org.springframework.data.mongodb.core.query.Query;
|
|
||||||
import org.springframework.data.mongodb.core.query.Update;
|
|
||||||
import org.springframework.http.codec.multipart.Part;
|
import org.springframework.http.codec.multipart.Part;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.util.MultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
||||||
|
|
@ -72,7 +67,6 @@ import static com.appsmith.server.constants.PatternConstants.EMAIL_PATTERN;
|
||||||
import static com.appsmith.server.constants.PatternConstants.WEBSITE_PATTERN;
|
import static com.appsmith.server.constants.PatternConstants.WEBSITE_PATTERN;
|
||||||
import static com.appsmith.server.helpers.PermissionUtils.collateAllPermissions;
|
import static com.appsmith.server.helpers.PermissionUtils.collateAllPermissions;
|
||||||
import static com.appsmith.server.helpers.TextUtils.generateDefaultRoleNameForResource;
|
import static com.appsmith.server.helpers.TextUtils.generateDefaultRoleNameForResource;
|
||||||
import static com.appsmith.server.repositories.ce.BaseAppsmithRepositoryCEImpl.fieldName;
|
|
||||||
import static java.lang.Boolean.TRUE;
|
import static java.lang.Boolean.TRUE;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
|
@ -459,23 +453,8 @@ public class WorkspaceServiceCEImpl extends BaseService<WorkspaceRepository, Wor
|
||||||
return workspaceFromDb;
|
return workspaceFromDb;
|
||||||
})
|
})
|
||||||
.flatMap(this::validateObject)
|
.flatMap(this::validateObject)
|
||||||
.then(Mono.defer(() -> {
|
.then(Mono.defer(() -> repository.updateById(id, resource, null)))
|
||||||
Query query = new Query(
|
.flatMap(analyticsService::sendUpdateEvent);
|
||||||
Criteria.where(fieldName(QWorkspace.workspace.id)).is(id));
|
|
||||||
DBObject update = getDbObject(resource);
|
|
||||||
Update updateObj = new Update();
|
|
||||||
Map<String, Object> updateMap = update.toMap();
|
|
||||||
updateMap.forEach(updateObj::set);
|
|
||||||
return mongoTemplate
|
|
||||||
.updateFirst(query, updateObj, resource.getClass())
|
|
||||||
.flatMap(updateResult -> {
|
|
||||||
if (updateResult.getMatchedCount() == 0) {
|
|
||||||
return Mono.error(new AppsmithException(
|
|
||||||
AppsmithError.NO_RESOURCE_FOUND, FieldName.WORKSPACE, id));
|
|
||||||
}
|
|
||||||
return repository.findById(id).flatMap(analyticsService::sendUpdateEvent);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import com.appsmith.server.domains.Application;
|
||||||
import com.appsmith.server.domains.Asset;
|
import com.appsmith.server.domains.Asset;
|
||||||
import com.appsmith.server.domains.PermissionGroup;
|
import com.appsmith.server.domains.PermissionGroup;
|
||||||
import com.appsmith.server.domains.Plugin;
|
import com.appsmith.server.domains.Plugin;
|
||||||
import com.appsmith.server.domains.QWorkspace;
|
|
||||||
import com.appsmith.server.domains.User;
|
import com.appsmith.server.domains.User;
|
||||||
import com.appsmith.server.domains.Workspace;
|
import com.appsmith.server.domains.Workspace;
|
||||||
import com.appsmith.server.dtos.InviteUsersDTO;
|
import com.appsmith.server.dtos.InviteUsersDTO;
|
||||||
|
|
@ -32,7 +31,6 @@ import com.appsmith.server.repositories.UserRepository;
|
||||||
import com.appsmith.server.repositories.WorkspaceRepository;
|
import com.appsmith.server.repositories.WorkspaceRepository;
|
||||||
import com.appsmith.server.solutions.EnvironmentPermission;
|
import com.appsmith.server.solutions.EnvironmentPermission;
|
||||||
import com.appsmith.server.solutions.UserAndAccessManagementService;
|
import com.appsmith.server.solutions.UserAndAccessManagementService;
|
||||||
import com.mongodb.client.result.UpdateResult;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
@ -45,10 +43,6 @@ import org.springframework.core.io.ClassPathResource;
|
||||||
import org.springframework.core.io.buffer.DataBuffer;
|
import org.springframework.core.io.buffer.DataBuffer;
|
||||||
import org.springframework.core.io.buffer.DataBufferUtils;
|
import org.springframework.core.io.buffer.DataBufferUtils;
|
||||||
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
|
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
|
||||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
|
||||||
import org.springframework.data.mongodb.core.query.Criteria;
|
|
||||||
import org.springframework.data.mongodb.core.query.Query;
|
|
||||||
import org.springframework.data.mongodb.core.query.Update;
|
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.codec.multipart.FilePart;
|
import org.springframework.http.codec.multipart.FilePart;
|
||||||
import org.springframework.security.test.context.support.WithUserDetails;
|
import org.springframework.security.test.context.support.WithUserDetails;
|
||||||
|
|
@ -86,7 +80,6 @@ import static com.appsmith.server.constants.FieldName.ADMINISTRATOR;
|
||||||
import static com.appsmith.server.constants.FieldName.DEVELOPER;
|
import static com.appsmith.server.constants.FieldName.DEVELOPER;
|
||||||
import static com.appsmith.server.constants.FieldName.VIEWER;
|
import static com.appsmith.server.constants.FieldName.VIEWER;
|
||||||
import static com.appsmith.server.helpers.TextUtils.generateDefaultRoleNameForResource;
|
import static com.appsmith.server.helpers.TextUtils.generateDefaultRoleNameForResource;
|
||||||
import static com.appsmith.server.repositories.ce.BaseAppsmithRepositoryCEImpl.fieldName;
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
|
|
@ -125,9 +118,6 @@ public class WorkspaceServiceTest {
|
||||||
@Autowired
|
@Autowired
|
||||||
UserRepository userRepository;
|
UserRepository userRepository;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
MongoTemplate mongoTemplate;
|
|
||||||
|
|
||||||
Workspace workspace;
|
Workspace workspace;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -1685,47 +1675,6 @@ public class WorkspaceServiceTest {
|
||||||
.verifyComplete();
|
.verifyComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@WithUserDetails(value = "api_user")
|
|
||||||
void testWorkspaceUpdate_checkAdditionalFieldsArePresentAfterUpdate() {
|
|
||||||
String testName = "testWorkspaceUpdate";
|
|
||||||
String additionalField = "testWorkspaceUpdate";
|
|
||||||
Workspace workspace = new Workspace();
|
|
||||||
workspace.setName(testName);
|
|
||||||
Workspace createdWorkspace = workspaceService.create(workspace).block();
|
|
||||||
|
|
||||||
Update updateAddAdditionalField = new Update().set(additionalField, true);
|
|
||||||
Query queryWorkspace =
|
|
||||||
new Query(Criteria.where(fieldName(QWorkspace.workspace.id)).is(createdWorkspace.getId()));
|
|
||||||
UpdateResult updateResult =
|
|
||||||
mongoTemplate.updateMulti(queryWorkspace, updateAddAdditionalField, Workspace.class);
|
|
||||||
|
|
||||||
assertThat(updateResult.wasAcknowledged()).isTrue();
|
|
||||||
assertThat(updateResult.getMatchedCount()).isEqualTo(1);
|
|
||||||
assertThat(updateResult.getModifiedCount()).isEqualTo(1);
|
|
||||||
|
|
||||||
Criteria criteriaAdditionalField = new Criteria()
|
|
||||||
.andOperator(
|
|
||||||
Criteria.where(fieldName(QWorkspace.workspace.id)).is(createdWorkspace.getId()),
|
|
||||||
Criteria.where(additionalField).exists(true));
|
|
||||||
Query queryWorkspaceWithAdditionalField = new Query(criteriaAdditionalField);
|
|
||||||
|
|
||||||
long countWorkspaceWithAdditionalField =
|
|
||||||
mongoTemplate.count(queryWorkspaceWithAdditionalField, Workspace.class);
|
|
||||||
assertThat(countWorkspaceWithAdditionalField).isEqualTo(1);
|
|
||||||
|
|
||||||
Workspace updateWorkspace = new Workspace();
|
|
||||||
updateWorkspace.setName(testName + " updated");
|
|
||||||
Workspace updatedWorkspace = workspaceService
|
|
||||||
.update(createdWorkspace.getId(), updateWorkspace)
|
|
||||||
.block();
|
|
||||||
assertThat(updatedWorkspace.getName()).isEqualTo(testName + " updated");
|
|
||||||
|
|
||||||
long countWorkspaceWithAdditionalFieldAfterUpdate =
|
|
||||||
mongoTemplate.count(queryWorkspaceWithAdditionalField, Workspace.class);
|
|
||||||
assertThat(countWorkspaceWithAdditionalFieldAfterUpdate).isEqualTo(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithUserDetails(value = "api_user")
|
@WithUserDetails(value = "api_user")
|
||||||
void testInviteDuplicateUsers_shouldReturnUniqueUsers() {
|
void testInviteDuplicateUsers_shouldReturnUniqueUsers() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user