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:
Shrikant Sharat Kandula 2024-02-16 10:08:21 +05:30 committed by GitHub
parent 1cb53c4e8e
commit 91fea4fbe0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 2 additions and 74 deletions

View File

@ -8,7 +8,6 @@ import com.appsmith.server.constants.Constraint;
import com.appsmith.server.constants.FieldName;
import com.appsmith.server.domains.Asset;
import com.appsmith.server.domains.PermissionGroup;
import com.appsmith.server.domains.QWorkspace;
import com.appsmith.server.domains.User;
import com.appsmith.server.domains.Workspace;
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.PolicySolution;
import com.appsmith.server.solutions.WorkspacePermission;
import com.mongodb.DBObject;
import jakarta.validation.Validator;
import lombok.extern.slf4j.Slf4j;
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.mongodb.core.ReactiveMongoTemplate;
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.stereotype.Service;
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.helpers.PermissionUtils.collateAllPermissions;
import static com.appsmith.server.helpers.TextUtils.generateDefaultRoleNameForResource;
import static com.appsmith.server.repositories.ce.BaseAppsmithRepositoryCEImpl.fieldName;
import static java.lang.Boolean.TRUE;
@Slf4j
@ -459,23 +453,8 @@ public class WorkspaceServiceCEImpl extends BaseService<WorkspaceRepository, Wor
return workspaceFromDb;
})
.flatMap(this::validateObject)
.then(Mono.defer(() -> {
Query query = new Query(
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);
});
}));
.then(Mono.defer(() -> repository.updateById(id, resource, null)))
.flatMap(analyticsService::sendUpdateEvent);
}
@Override

View File

@ -13,7 +13,6 @@ import com.appsmith.server.domains.Application;
import com.appsmith.server.domains.Asset;
import com.appsmith.server.domains.PermissionGroup;
import com.appsmith.server.domains.Plugin;
import com.appsmith.server.domains.QWorkspace;
import com.appsmith.server.domains.User;
import com.appsmith.server.domains.Workspace;
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.solutions.EnvironmentPermission;
import com.appsmith.server.solutions.UserAndAccessManagementService;
import com.mongodb.client.result.UpdateResult;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.BeforeEach;
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.DataBufferUtils;
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.codec.multipart.FilePart;
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.VIEWER;
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.junit.jupiter.api.Assertions.assertEquals;
@ -125,9 +118,6 @@ public class WorkspaceServiceTest {
@Autowired
UserRepository userRepository;
@Autowired
MongoTemplate mongoTemplate;
Workspace workspace;
@Autowired
@ -1685,47 +1675,6 @@ public class WorkspaceServiceTest {
.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
@WithUserDetails(value = "api_user")
void testInviteDuplicateUsers_shouldReturnUniqueUsers() {