Skip to content

Commit bad479b

Browse files
committed
refactor(NODE-7083): index operations to modernized operation
1 parent a8338ad commit bad479b

File tree

2 files changed

+34
-27
lines changed

2 files changed

+34
-27
lines changed
Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import type { Document } from '../../bson';
1+
import { BSONType, type Document } from '../../bson';
2+
import { type Connection } from '../../cmap/connection';
3+
import { MongoDBResponse } from '../../cmap/wire_protocol/responses';
24
import type { Collection } from '../../collection';
3-
import type { Server } from '../../sdam/server';
5+
import type { ServerCommandOptions } from '../../sdam/server';
46
import type { ClientSession } from '../../sessions';
57
import { type TimeoutContext } from '../../timeout';
6-
import { AbstractOperation } from '../operation';
8+
import { ModernizedOperation } from '../operation';
79

810
/**
911
* @public
@@ -20,37 +22,37 @@ export interface SearchIndexDescription extends Document {
2022
}
2123

2224
/** @internal */
23-
export class CreateSearchIndexesOperation extends AbstractOperation<string[]> {
25+
export class CreateSearchIndexesOperation extends ModernizedOperation<string[]> {
26+
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
2427
private readonly collection: Collection;
2528
private readonly descriptions: ReadonlyArray<SearchIndexDescription>;
2629

2730
constructor(collection: Collection, descriptions: ReadonlyArray<SearchIndexDescription>) {
2831
super();
2932
this.collection = collection;
3033
this.descriptions = descriptions;
34+
this.ns = collection.fullNamespace;
3135
}
3236

3337
override get commandName() {
3438
return 'createSearchIndexes' as const;
3539
}
3640

37-
override async execute(
38-
server: Server,
39-
session: ClientSession | undefined,
40-
timeoutContext: TimeoutContext
41-
): Promise<string[]> {
41+
override buildCommand(_connection: Connection, _session?: ClientSession): Document {
4242
const namespace = this.collection.fullNamespace;
43-
const command = {
43+
return {
4444
createSearchIndexes: namespace.collection,
4545
indexes: this.descriptions
4646
};
47+
}
4748

48-
const res = await server.command(namespace, command, {
49-
session,
50-
timeoutContext
51-
});
49+
override handleOk(response: MongoDBResponse): string[] {
50+
const indexesCreated = response.get('indexesCreated', BSONType.array, true);
51+
console.log(indexesCreated, indexesCreated.toObject());
52+
return indexesCreated.toObject().map(({ name }: { name: string }) => name);
53+
}
5254

53-
const indexesCreated: Array<{ name: string }> = res?.indexesCreated ?? [];
54-
return indexesCreated.map(({ name }) => name);
55+
override buildOptions(timeoutContext: TimeoutContext): ServerCommandOptions {
56+
return { session: this.session, timeoutContext };
5557
}
5658
}
Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import type { Document } from '../../bson';
2+
import { type Connection } from '../../cmap/connection';
3+
import { MongoDBResponse } from '../../cmap/wire_protocol/responses';
24
import type { Collection } from '../../collection';
3-
import type { Server } from '../../sdam/server';
5+
import type { ServerCommandOptions } from '../../sdam/server';
46
import type { ClientSession } from '../../sessions';
57
import { type TimeoutContext } from '../../timeout';
6-
import { AbstractOperation } from '../operation';
8+
import { ModernizedOperation } from '../operation';
79

810
/** @internal */
9-
export class UpdateSearchIndexOperation extends AbstractOperation<void> {
11+
export class UpdateSearchIndexOperation extends ModernizedOperation<void> {
12+
override SERVER_COMMAND_RESPONSE_TYPE = MongoDBResponse;
1013
private readonly collection: Collection;
1114
private readonly name: string;
1215
private readonly definition: Document;
@@ -16,25 +19,27 @@ export class UpdateSearchIndexOperation extends AbstractOperation<void> {
1619
this.collection = collection;
1720
this.name = name;
1821
this.definition = definition;
22+
this.ns = collection.fullNamespace;
1923
}
2024

2125
override get commandName() {
2226
return 'updateSearchIndex' as const;
2327
}
2428

25-
override async execute(
26-
server: Server,
27-
session: ClientSession | undefined,
28-
timeoutContext: TimeoutContext
29-
): Promise<void> {
29+
override buildCommand(_connection: Connection, _session?: ClientSession): Document {
3030
const namespace = this.collection.fullNamespace;
31-
const command = {
31+
return {
3232
updateSearchIndex: namespace.collection,
3333
name: this.name,
3434
definition: this.definition
3535
};
36+
}
37+
38+
override handleOk(_response: MongoDBResponse): void {
39+
// no response.
40+
}
3641

37-
await server.command(namespace, command, { session, timeoutContext });
38-
return;
42+
override buildOptions(timeoutContext: TimeoutContext): ServerCommandOptions {
43+
return { session: this.session, timeoutContext };
3944
}
4045
}

0 commit comments

Comments
 (0)