Schema Array in paralell?

Hi, I have this code for converting a column in a database to a file model.

export const FileDatabase = Schema.Struct({
  id: FileId,
  name: Schema.String,
  size: Schema.Number,
  hashed_key: Schema.String,
  visibility: Schema.Literal("private", "public"),
  content_type: Schema.String,
}).pipe(
  Schema.rename({
    hashed_key: "hashedKey",
    content_type: "contentType",
  })
)

export const FileDomainWithUrl = Schema.Struct({
  id: FileId,
  size: Schema.Number,
  contentType: Schema.String,
  name: Schema.String,
  hashedKey: Schema.String,
  url: Schema.String,
  visibility: Schema.Literal("private", "public"),
})

const InitialSchema = Schema.Union(Schema.parseJson(FileDatabase), FileDatabase)

export const FileFromDatabaseToFileDomain = Schema.transformOrFail(InitialSchema, FileDomainWithUrl, {
  strict: true,
  decode: Effect.fn("files.from-database-to-domain")(function* (file) {
    const fileService = yield* FilesDataAccessLayer
    return {
      id: file.id,
      size: file.size,
      contentType: file.contentType,
      name: file.name.split("/").at(-1) ?? "no-name",
      hashedKey: file.hashedKey,
      visibility: file.visibility,
      url: yield* fileService.getUploadUrl({
        hashedKey: file.hashedKey,
        visibility: file.visibility,
        duration: Duration.hours(1),
      }),
    }
  }),
  encode: Effect.fn("files.from-domain-to-database")(function* (file) {
    yield* Effect.log("Transforming file from domain to database")
    return {
      id: FileId.make(file.id),
      size: file.size,
      contentType: file.contentType,
      name: file.name,
      hashedKey: file.hashedKey,
      visibility: file.visibility,
    }
  }),
})
Was this page helpful?