Поиск бабушек и дедушек в Vapor - PullRequest
2 голосов
/ 22 июня 2019

В настоящее время я использую Vapor для базы данных и наткнулся на контрольно-пропускной пункт, с которым я мог бы помочь.

В настоящее время у меня есть объект Business, у которого [AccessPoint] потомков.Каждый AccessPoint сам имеет номер [AccessPointContactMethod].

. AccessPointContactMethod может ссылаться на своего родителя AccessPoint, проверяя его свойство accessPointID, которое устанавливается Vapor при создании родительских дочерних отношений.

На самом деле, я использую это, чтобы убедиться, что при создании нового AccessPointContactMethod, если у родителя AccessPoint уже есть дочерний элемент с тем же адресом, мы отменяем запрос post:

return AccessPointContactMethod.query(on: req).group(.and) { and in
            and.filter(\.contactMethodAddress == contactMethod.contactMethodAddress)
            and.filter(\.accessPointID == contactMethod.accessPointID)
            }.all()
            .flatMap(to: AccessPointContactMethod.self) { methods in
                if methods.isEmpty {
                    return contactMethod.save(on: req)
                }
                else {
                    let duplicateContactMethodStatus = HTTPResponseStatus.custom(code: 600, reasonPhrase: "Duplicate Contact Method")
                    throw Abort(duplicateContactMethodStatus)
                }
        }

Итак, это приводит меня к проблеме, с которой я столкнулся.На данный момент я проверяю, есть ли в этом AccessPoint дублирующиеся адреса, но я хочу проверить все AccessPoint объекты, принадлежащие одному Business, и есть ли AccessPoint, которыесодержит AccessPointContactMethod с тем же адресом, тогда мы отменяем запрос.

Поэтому мне кажется, что мне нужен способ добраться до объекта Business grandparent и перебрать [AccessPoint]дети за любые дубликаты.

Vapor, реактивное программирование, базы данных - все это совершенно новое для меня, поэтому я уверен, что я не описал этот вопрос чудесным образом, но если кто-то может понять, что я пытаюсь сделать, иесть какие-либо идеи, я буду очень признателен!

...