class CassandraMailboxPathDAOImpl {

    public Mono<CassandraIdAndPath> retrieveId(MailboxPath mailboxPath) {
        return cassandraAsyncExecutor.executeSingleRow(
            select.bind()
                .setUDTValue(NAMESPACE_AND_USER, mailboxBaseTupleUtil.createMailboxBaseUDT(mailboxPath.getNamespace(), mailboxPath.getUser()))
                .setString(MAILBOX_NAME, mailboxPath.getName())
                .setConsistencyLevel(consistencyLevel))
            .map(this::fromRowToCassandraIdAndPath)
            .map(FunctionalUtils.toFunction(this::logGhostMailboxSuccess))
            .switchIfEmpty(ReactorUtils.executeAndEmpty(() -> logGhostMailboxFailure(mailboxPath)));
    }

    @Inject public  CassandraMailboxPathDAOImpl(Session session, CassandraTypesProvider typesProvider,
                                       CassandraUtils cassandraUtils,
                                       CassandraConsistenciesConfiguration consistenciesConfiguration);
    @VisibleForTesting public  CassandraMailboxPathDAOImpl(Session session, CassandraTypesProvider typesProvider,
                                       CassandraConsistenciesConfiguration consistenciesConfiguration);

}