Я разрабатываю простой микросервис Spring Boot с помощью Cassandra db.
Основная сущность на моем сервере в Subscription
классе ниже:
public final class Subscription {
private String id;
private String firstUser;
private String secondUser;
private String firstUserStatus;
private String secondUserStatus;
}
Мой репозиторий использует объект подписки и сохраняет его.
Но прежде чем продолжать, я должен проверить наличие некоторых ограничений, и главное, что не должно быть другой подписки с такими же firstUser
и secondUser
.
Случай, когда он может потерпеть неудачу, довольно прост:
- одна подписка будет сохранена
- таблица проверяется на наличие другой подписки с
те же пользователи
- теперь можно сохранить еще одну подписку с теми же пользователями и
сделать предыдущую проверку устаревшей
- подписка сохраняется.
Как правильно ее решить?
Стоит упомянуть: порядок пользователей не имеет значения. Если подписка с пользователями «1» и «2» будет сохраняться, никакая другая подписка с пользователями «1» и «2» или «2» и «1» не должна существовать.
UPD: учитывая ответ @bhspencer, я мог бы предложить другой случай (мне также нужно, чтобы статусы были согласованными):
- одна подписка будет сохранена с
firstUserStatus="ISSUED"
и secondUserStatus="WAITING_ACTION"
- таблица проверяется на наличие другой подписки с теми же пользователями
- другая подписка с тем же идентификатором (пользователи) и
firstUserStatus="WAITING_ACTION"
и secondUserStatus="ISSUED"
может быть сохранена сейчас и сделает предыдущую проверку устаревшей
- первоначальная подписка сохраняется и переопределяет уже существующую ->
secondUserStatus="ISSUED"
потеряна