(
options: {
readonly Id: Id
readonly Result: Res
readonly ResultId: (result: Res["Type"], row: Types.NoInfer<Row>) => Id["Type"]
readonly execute: (
requests: Arr.NonEmptyArray<Id["Encoded"]>
) => Effect.Effect<ReadonlyArray<Row>, E, R>
}
)
| 216 | * |
| 217 | * @category resolvers |
| 218 | * @since 4.0.0 |
| 219 | */ |
| 220 | export const findById = <Id extends Schema.Constraint, Res extends Schema.Constraint, Row, E, R>( |
| 221 | options: { |
| 222 | readonly Id: Id |
| 223 | readonly Result: Res |
| 224 | readonly ResultId: (result: Res["Type"], row: Types.NoInfer<Row>) => Id["Type"] |
| 225 | readonly execute: ( |
| 226 | requests: Arr.NonEmptyArray<Id["Encoded"]> |
| 227 | ) => Effect.Effect<ReadonlyArray<Row>, E, R> |
| 228 | } |
| 229 | ): RequestResolver.RequestResolver< |
| 230 | SqlRequest< |
| 231 | Id["Type"], |
| 232 | Res["Type"], |
| 233 | E | Schema.SchemaError | Cause.NoSuchElementError, |
| 234 | Id["EncodingServices"] | Res["DecodingServices"] | R |
| 235 | > |
| 236 | > => { |
| 237 | const decodeResults = Schema.decodeUnknownEffect(Schema.Array(options.Result)) |
| 238 | |
| 239 | return RequestResolver.makeGrouped< |
| 240 | SqlRequest< |
| 241 | Id["Type"], |
| 242 | Res["Type"], |
| 243 | E | Schema.SchemaError | Cause.NoSuchElementError, |
| 244 | Id["EncodingServices"] | Res["DecodingServices"] | R |
| 245 | >, |
| 246 | SqlClient.TransactionConnection.Service | undefined |
| 247 | >({ |
| 248 | key: transactionKey, |
| 249 | resolver: Effect.fnUntraced(function*(entries) { |
| 250 | const [inputs, idMap] = yield* partitionRequestsById(entries, options.Id) |
| 251 | if (!Arr.isArrayNonEmpty(inputs)) return |
| 252 | const results = yield* options.execute(inputs).pipe( |
| 253 | Effect.provideContext(entries[0].context) |
| 254 | ) |
| 255 | const decodedResults = yield* decodeResults(results).pipe( |
| 256 | Effect.provideContext(entries[0].context) |
| 257 | ) |
| 258 | for (let i = 0; i < decodedResults.length; i++) { |
| 259 | const result = decodedResults[i] |
| 260 | const id = options.ResultId(result, results[i]) |
| 261 | const request = MutableHashMap.get(idMap, id) |
| 262 | if (request._tag === "None") { |
| 263 | continue |
| 264 | } |
| 265 | MutableHashMap.remove(idMap, id) |
| 266 | request.value.completeUnsafe(Exit.succeed(result)) |
| 267 | } |
| 268 | if (MutableHashMap.isEmpty(idMap)) { |
| 269 | return |
| 270 | } |
| 271 | MutableHashMap.forEach(idMap, (request) => { |
| 272 | request.completeUnsafe(constNoSuchElement) |
| 273 | }) |
| 274 | }) |
| 275 | }) |
nothing calls this directly
no test coverage detected
searching dependent graphs…