const CollectionArgsTag = Context.Tag<CollectionArgs>();
export const findOne = <TSchema extends Document = Document>(
filter: Filter<TSchema>
) =>
Effect.flatMap(Database.DatabaseTag, (db) =>
Effect.flatMap(CollectionArgsTag, (collectionArgs) =>
Effect.tryCatchPromise(
() => db.collection<TSchema>(...collectionArgs).findOne(filter),
(error) => {
if (error instanceof MongoInvalidArgumentError) {
return new MongoInvalidArgumentTaggedError(error);
}
throw error;
}
)
)
);
const findOneConcreteDocument = flow(
findOne<ConcreteDocument>,
Effect.provideService(CollectionArgsTag, ["concretes"])
);
const program = pipe(
findOneConcreteDocument({ _id: "whatever" }),
Effect.provideSomeLayer(Database.MongoDbImpl),
Effect.runPromise
);
const CollectionArgsTag = Context.Tag<CollectionArgs>();
export const findOne = <TSchema extends Document = Document>(
filter: Filter<TSchema>
) =>
Effect.flatMap(Database.DatabaseTag, (db) =>
Effect.flatMap(CollectionArgsTag, (collectionArgs) =>
Effect.tryCatchPromise(
() => db.collection<TSchema>(...collectionArgs).findOne(filter),
(error) => {
if (error instanceof MongoInvalidArgumentError) {
return new MongoInvalidArgumentTaggedError(error);
}
throw error;
}
)
)
);
const findOneConcreteDocument = flow(
findOne<ConcreteDocument>,
Effect.provideService(CollectionArgsTag, ["concretes"])
);
const program = pipe(
findOneConcreteDocument({ _id: "whatever" }),
Effect.provideSomeLayer(Database.MongoDbImpl),
Effect.runPromise
);