🛠️Speed up "shared with me" query (#381)
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
<env name="DB_MONGO_URI" value="mongodb://localhost:27017" />
|
<env name="DB_MONGO_URI" value="mongodb://localhost:27017" />
|
||||||
<env name="PUBSUB_TYPE" value="local" />
|
<env name="PUBSUB_TYPE" value="local" />
|
||||||
<env name="SEARCH_DRIVER" value="mongodb" />
|
<env name="SEARCH_DRIVER" value="mongodb" />
|
||||||
<env name="STORAGE_LOCAL_PATH" value="$USER_HOME$/dev/linagora/TDrive/tdrive/docker-data" />
|
<env name="STORAGE_LOCAL_PATH" value="/tmp" />
|
||||||
</envs>
|
</envs>
|
||||||
<scope-kind value="DIRECTORY" />
|
<scope-kind value="DIRECTORY" />
|
||||||
<test-directory value="$PROJECT_DIR$/tdrive/backend/node/test/e2e" />
|
<test-directory value="$PROJECT_DIR$/tdrive/backend/node/test/e2e" />
|
||||||
|
|||||||
+12
@@ -40,6 +40,7 @@ export function buildSelectQuery<Entity>(
|
|||||||
findOptions = secureOperators(transformValueToDbString, findOptions, entityType, options);
|
findOptions = secureOperators(transformValueToDbString, findOptions, entityType, options);
|
||||||
where = buildComparison(where, findOptions);
|
where = buildComparison(where, findOptions);
|
||||||
where = buildIn(where, findOptions);
|
where = buildIn(where, findOptions);
|
||||||
|
where = buildNin(where, findOptions);
|
||||||
|
|
||||||
return where;
|
return where;
|
||||||
}
|
}
|
||||||
@@ -67,3 +68,14 @@ export function buildIn(where: any, options: FindOptions = {}): any {
|
|||||||
|
|
||||||
return where;
|
return where;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function buildNin(where: any, options: FindOptions = {}): any {
|
||||||
|
if (options.$nin) {
|
||||||
|
options.$nin.forEach(element => {
|
||||||
|
if (!where[element[0]]) where[element[0]] = {};
|
||||||
|
where[element[0]]["$nin"] = element[1];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return where;
|
||||||
|
}
|
||||||
|
|||||||
+1
@@ -32,6 +32,7 @@ export type FindOptions = {
|
|||||||
* The $in operator selects the documents where the value of a field equals any value in the specified array
|
* The $in operator selects the documents where the value of a field equals any value in the specified array
|
||||||
*/
|
*/
|
||||||
$in?: inType[];
|
$in?: inType[];
|
||||||
|
$nin?: inType[];
|
||||||
$like?: likeType[];
|
$like?: likeType[];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ export default class StorageService extends TdriveService<StorageAPI> implements
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
logger.info("Using 'local' connector for storage.");
|
logger.info("Using 'local' connector for storage.");
|
||||||
const defaultHomeDir = this.configuration.get<string>("local.path");
|
// const defaultHomeDir = this.configuration.get<string>("local.path");
|
||||||
if (defaultHomeDir) this.homeDir = `${defaultHomeDir}`;
|
// if (defaultHomeDir) this.homeDir = `${defaultHomeDir}`;
|
||||||
logger.trace(`Home directory for the storage: ${this.homeDir}`);
|
logger.trace(`Home directory for the storage: ${this.homeDir}`);
|
||||||
}
|
}
|
||||||
logger.info(
|
logger.info(
|
||||||
|
|||||||
@@ -986,6 +986,7 @@ export class DocumentsService {
|
|||||||
]
|
]
|
||||||
: []),
|
: []),
|
||||||
],
|
],
|
||||||
|
$nin: [...(options.onlyDirectlyShared ? [["creator", [context.user.id]] as inType] : [])],
|
||||||
$lte: [
|
$lte: [
|
||||||
...(options.last_modified_lt
|
...(options.last_modified_lt
|
||||||
? [["last_modified", options.last_modified_lt] as comparisonType]
|
? [["last_modified", options.last_modified_lt] as comparisonType]
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ describe("The Documents Browser Window and API", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("Shared With Me", () => {
|
describe("Shared With Me", () => {
|
||||||
it("Shouldn't contain files uploaded to the user folder", async () => {
|
it("Shouldn't contain user personal files", async () => {
|
||||||
const sharedWIthMeFolder = "shared_with_me";
|
const sharedWIthMeFolder = "shared_with_me";
|
||||||
await currentUser.uploadAllFilesOneByOne("user_" + currentUser.user.id);
|
await currentUser.uploadAllFilesOneByOne("user_" + currentUser.user.id);
|
||||||
await new Promise(r => setTimeout(r, 5000));
|
await new Promise(r => setTimeout(r, 5000));
|
||||||
@@ -129,7 +129,7 @@ describe("The Documents Browser Window and API", () => {
|
|||||||
expect((await anotherUser.browseDocuments("shared_with_me", {pageSize: 1})).children).toHaveLength(1);
|
expect((await anotherUser.browseDocuments("shared_with_me", {pageSize: 1})).children).toHaveLength(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Share With Me should return all the files that was share by user at one", async () => {
|
it("Should return ALL the files that was share by user at one", async () => {
|
||||||
const sharedWIthMeFolder = "shared_with_me";
|
const sharedWIthMeFolder = "shared_with_me";
|
||||||
const oneUser = await UserApi.getInstance(platform, true, {companyRole: "admin"});
|
const oneUser = await UserApi.getInstance(platform, true, {companyRole: "admin"});
|
||||||
const anotherUser = await UserApi.getInstance(platform, true, {companyRole: "admin"});
|
const anotherUser = await UserApi.getInstance(platform, true, {companyRole: "admin"});
|
||||||
|
|||||||
Reference in New Issue
Block a user