Na przykład mam zestaw zapytań:

for {
  entity <- sql"<select some optional entity from db>".query[Entity].option
  result <- sql"<insert some data using entity>".update.run
} yield result

Jak nie wstawić niektórych danych, gdy podmiot nie zostanie znaleziony i podniesienie błędu "Jednostka nie istnieje"?

Coś jak:

for {
  entity <- sql"<select some optional entity from db>".query[Entity].option
  result <- entity  // Option[Entity]
    .fold(ConnectionIO.raiseError("entity does not exists"))  // ConnectionIO.raiseError does not compile
    (e => sql"<insert some data using entity>".update.run)
} yield result
1
Oleg 18 marzec 2020, 16:18

1 odpowiedź

Najlepsza odpowiedź

Zgodnie z Doc's in https://tpolecat.github.io/doobie/docs/ 04-selecting.html możesz użyć

.unique, który zwraca jedną wartość, podnosząc wyjątek, jeśli wracam do powrotu do końca jednego rzędu.

Więc w twoim przypadku rozwiązanie wyglądałoby:

for {
  entity <- sql"<select some optional entity from db>".query[Entity].unique
  result <- sql"<insert some data using entity>".update.run
} yield result

Mam nadzieję że to pomoże!

4
Ivan Kurchenko 18 marzec 2020, 13:29