Cześć, otóż mam metodę
@Override
@SneakyThrows
public Publisher<ContainsResult> contains(Path filePath)
{
return Mono.fromSupplier(() -> takeFilesByPath(filePath.toString()))
.filter(files -> !files.isEmpty())
.map(result -> ContainsResult.FILE_IS_NOT_PRESENT)
.defaultIfEmpty(ContainsResult.PRESENT)
.onErrorReturn(ContainsResult.COULD_NOT_CHECK_PRESENCE);
}
która zwraca 3 możliwe opcje, teraz mam metodę put, która ma uploadować plik w zależności od containsa:
@Override
public Publisher<PutResult> put(Path filePath, OutputStream outputStream) {
return Mono.from(contains(filePath))
...
}
i metodę
PutResult considerContainsResultForPut(ContainsResult containsResult, Path filePath, OutputStream outputStream)
{
switch(containsResult)
{
case FILE_IS_NOT_PRESENT:
uploadFile(filePath, outputStream);
return PutResult.SUCCESS;
case PRESENT:
uploadFile(filePath, outputStream);
return PutResult.FILE_OVERWRITTEN;
default:
return PutResult.COULD_NOT_CREATE_FILE;
}
}
No, ale z metody considerContainsResultForPut
wyszedł potwór, który w ogóle nijak się ma do SRP.. Więc jak to rozdzielić? Najlepiej jakoś streamami z reactora aby to zrobić funkcyjnie. Z góry dzięki!