Вот про паттерн «Репозиторий» — правильная тема. Но у нас на Django-проекте репозитории не прижились, как раз из-за «толстых» моделей (вижу, Вы уже написали про это комментарий ниже).
Django ORM построен по принципу Active Record. Действия над базой могут производиться явно или еще хуже — неявно — в ответ на вызовы методов объектов-моделей.
Для правильного репозитория нужен Data Mapper, чтобы объекты, представляющие собой строки в БД или сущности бизнес логики, не содержали в себе методов изменения БД. Чтобы править базу можно было только через репозиторий, который бы обеспечивал соблюдение всех правил бизнес логики.
Как было у нас:
Чтобы избавиться от логики, размазанной по разным углам приложения, попытались писать репозитории, комбинирующие в себе методы, касающиеся отдельных смысловых аспектов работы системы.
И вот метод репозитория производит какие-то действия и должен вернуть нечто.
Половина системы заточена на работу с query_set, либо с моделями. Слой view ожидает Django-модели. Сериализаторы тоже ожидают кверисет или отдельные модели. Есть сигналы Django, обработчики методов save() моделей.
Вроде получается, из репозитория надо бы тоже вернуть кверисет или модель, чтобы дальше она была пригодна для обработки остальными компонентами Django-проекта.
Но они содержат методы, позволяющие модифицировать базу в обход логики репозитория. И эти методы используются.
Дальше либо делать, чтобы репозиторий возвращал какие-то DTO, но тогда теряем половину преимуществ (batteries included) Django по работе с моделями и кверисетами.
Либо договариваемся, что репозитории лишь группируют логику на смысловом уровне, но не изолируют ее полностью, и мы просто сами не будем обращаться к их методам, изменяющим состояние БД.
Договорились. Кто-то забыл, кто-то пропустил. Где-то стало не удобно. Стало казаться, что Django сопротивляется такому подходу. В коде пошла та же лапша но с репозиториями.
На новом проекте хотим попробовать отказаться от Django REST Framework и ее «как бы-сериализаторов» и использовать Django Ninja для АПИ (клон FastAPI под Django), и таким образом уменьшить количество неявных/спрятанных в абстракциях операций над кверисетами и моделями. Возможно получится более сильно изолировать бизнес-логику в сервисах, а в методах АПИ непосредственно вызывать действия сервисов/репозиториев в коде и возвращать DTO объекты, которые оно уже сериализует в JSON 1-в-1.
Еще есть забавная тема с владением файлами в волюмах, в т.ч. расшаренных между несколькими контейнерами или между контейнером и хост машиной. Пишу про Docker Swarm, но наверно аналогично работает и в различных других окружениях. Если внутри контейнера на базе какого-нибудь линукс работает программа от имени юзера User1 с id 12345, то она создает и редактирует файлы от имени этого id. Допустим в этом контейнере User1 специально сделан с минимумом привилегий, чтоб было безопасно. Допустим в контейнер подмонтирован волюм, который также подмонтирован в еще один контейнер. А в нем существует User2 с id = тоже 12345 и совершенно другими расширенными привилегиями и назначением. И вот оба юзера из разных контейнеров имеют одинаковый доступ к файлам в этом волюме. Если первый контейнер скомпрометирован — второй пострадал.
Это может быть одной из причин, почему так популярно стало запускать софт внутри контейнера от рута — тогда вообще не надо беспокоиться, чтобы совпадали айдишники юзеров внутри и снаружи контейнера, если требуется подсунуть какой-нибудь конфиг или другой файл через волюмы. Рут везде с одинаковым id, можно накопировать чего-нибудь из-под рута в волюм примонтированный к контейнеру, и все работает, проблему не видно.
Приходим к тому, что все врут и делать ничего не надо.
По статистике, Авито в большей степени молодцы, чем нет, и поэтому если кто-то пострадал, то это списываем?
Мой вопрос не решен, никто ничего не сделал. В последнем письме я спрашивал саппорт, что мне делать дальше. Из ответа я понял, что дальше последнего письма они не читали. Я пытался выяснить, стоит ли жене размещать те же объявления, и тогда мы уже по-настоящиму нарушим правила. Ответили, что может разместить, и если они устроят систему, бла бла бла и т.д. О нормальном рассмотрении проблемы речи не идет.
Выходит, да, для меня компания плохая. Забанили за то, чего я не делал. Переписывались со мной в таком тоне, который для меня оскорбителен.
Саппорт работает отвратно. Процессы не отлажены. Исходя из комментов в этой статье, там мошенников и кидал больше, чем нормальных продавцов и покупателей.
Мож оно и к лучшему, что я не успел ничего продать.
Теперь чтобы обойти незаслуженную блокировку мне придется присоединиться к числу нарушителей правил (я гангста!) и база данных Авито станет еще немного хуже.
Полного решения, конечно, нет. Но выше я там написал предложения.
Для начала — перепрограммировать саппорт на более нейтральные формулировки.
Про саппорт Гугла и тп только слышал — что с ним вообще нет смысла взаимодействовать. Но от Авито такого не ожидал. Наверно потому что они меньше и из России.
Будь я реально заинтересованным лицом, думаю, что особенности работы их антифрод системы вполне можно выявить после обработки подробной информации о нескольких забаненных реально своих аккаунтах. Зная емейлы, телефоны, текстовки объявлений и т.п. Думаю, чего-то сверх гениального там не придумаешь. Больше информации, чем есть, взяться неоткуда.
Можно еще предположить, что ценность несет техника автоматизированного выявления фрода. Но вот после того, как тебя «проверил» модератор и «подтвердил», что все верно, ты мошенник — вот здесь уже нет ничего секретного. Обычный человек нашел доказательства нарушения. Их вполне можно предъявить.
Причем модератор здесь — как раз слабое звено в цепи. На месте мошенников я бы устраивался модераторами в Авито.
Вообще, игра в одни ворота — это как раз общение с саппортом Авито по электронной почте. Там у них постоянно идет эта тема — что они ничего не могут раскрывать, но ты виноват. Но они ничего не могут раскрывать и объяснять.
У Вас бывало когда-нибудь, что Вам в течение нескольких дней говорят, что вы мошенник, Вы нарушили. А Вы этого не делали. Но Вам говорят — «нет, вы мошенник, вы нарушили». И ты ни доказать ничего не можешь, ни добиться результата.
Я лично инженер, привык к аргументированному общению, направленному на достижение наилучшего результата. А от такой переписки у меня за несколько дней развивается конкретный нервяк, что работать плохо получается.
Вот кстати, да. Фотка с паспортом на фоне продаваемого хлама меня бы вполне устроила. Видеозвонок тоже. На апворке вполне нормально осилили проверку личности через видеозвонок.
Без вменяемой возможности аппеляции вся эта борьба — какой-то сюр. Авито дефакто монополист в глубинке по части продаж всякой мелочевки. Просто так банить людей на всю жизнь без возможности оправдаться — неправильно.
Еще возможно дело в разделении категорий / масштабов торговли. Т.е. не перемешивать борьбу с мошенничеством при продаже авто и при продаже поношеных платьев. Как-то разнести это на разные уровни.
Может быть не смешивать «газету бесплатных объявлений» и «платформу-посредника» по типу тао-бао…
У меня сложилось впечатление, что им не понравился мой емейл, совпадающий с номером мобильного. Емейлы других «моих» аккаунтов, которые мне показали со звездочками, тоже заканчивались на 069, как и мой. Причем это еще и код Тверской области, и местные магазины вполне могут его использовать.
Такое чувство, что они задетектили похожие по символам адреса электронной почты + емейл из цифр + я индоутяка понизил в цене прилично ниже рынка.
Даже не знаю, что еще представить — может контрольный прозвон, а я был в подвале. Оповещений по смс вроде не приходило.
В любом случае все заканчивается на неких модераторах, которые истина в последней инстанции.
Я им писал, что они таким образом накапливают ошибку и вредят себе же — толку ноль.
А если такую проверенную базу успешно выявленных мошенников потом еще и для ML использовать…
А какой вообще на Авито процесс обработки ложно-положительных срабатываний антифрод блокировок?
Вот я тоже сейчас прохожу квест «Вы размещали объявления в одной категории с нескольких аккаунтов». Обращение 20320408
Меня заблокировали, в письме обвинили в том, что я мошенник, не привели никаких обоснований.
Я обыскался, что я сделал не так. Саппорт продолжает отписываться, что я мошенник, ни во что вникать не собирается. Прошу их эскалировать до специалистов — опять отписки.
У меня один активный аккаунт, на нем были размещены объявления о продаже колес от проданной машины, кое-каких запчастей и селезня индоутки. Всё, больше у меня ничего нигде не размещено.
Я не отрицаю, что мог в чем-то ошибиться, пытался выяснить, может у меня где-то есть еще размещенные объявления. Нашел еще один свой старый аккаунт, восстановил пароль — там одно единственное объявление о поиске участка за 2013й год (7 лет назад).
Никакой коммерцией у вас сроду не занимался, дохода от ИТ хватает на жизнь.
Ну вот заблокировали вы меня, написали гадостей, заставляете теперь тратить нервы и время на этот бред.
А выход из ситуации какой?
Мне размещать те же объявления со старого аккаунта? Создавать еще один дублируйщий аккаунт с новой симки? Такой процесс напрямую провоцирует либо на нарушение ваших же правил, либо на уход к конкурентам. А смысл?
Конструктивные предложения:
1. Разработать процесс обработки ложно-позитивных срабатываний антифрод системы.
Пол интернета сообщений о том, что Авито утверждает, что человеку принадлежит какой-то еще аккаунт, даже почту частично показывают. Но он ему не принадлежит. Объективно ясно, что Авито не может этого знать, а человек может.
2. Поменять формулировки писем при блокировании аккаунтов. Не писать людям клевету, не писать напрямую, что «Вы размещали...», «Вы нарушили...». Поменять на что-то более нейтральное, объективное: «Наша система обнаружила подозрительную активность...»
3. Исправить ситуацию с саппортом — они отвечают нелогично, уходят от ответа и т.п. Зачем вообще нужен такой саппорт — только побесить людей?
Т.е. саппорт разговаривает с позиции «Вы нарушили», «Вы виноваты», но обосновать ничего не может. При этом ясно, что они не могут этого утверждать точно, там внутри какая-то биг дата с машин лернингом на вероятностях или чьи-то недоработки. Почему бы не писать об этом честно: «Наша система выявила ....», «Мы не имеем право разглашать, не хотим тратить ресурсы на выяснение», «У нас и так слишком много пользователей...».
Django ORM построен по принципу Active Record. Действия над базой могут производиться явно или еще хуже — неявно — в ответ на вызовы методов объектов-моделей.
Для правильного репозитория нужен Data Mapper, чтобы объекты, представляющие собой строки в БД или сущности бизнес логики, не содержали в себе методов изменения БД. Чтобы править базу можно было только через репозиторий, который бы обеспечивал соблюдение всех правил бизнес логики.
Как было у нас:
Чтобы избавиться от логики, размазанной по разным углам приложения, попытались писать репозитории, комбинирующие в себе методы, касающиеся отдельных смысловых аспектов работы системы.
И вот метод репозитория производит какие-то действия и должен вернуть нечто.
Половина системы заточена на работу с query_set, либо с моделями. Слой view ожидает Django-модели. Сериализаторы тоже ожидают кверисет или отдельные модели. Есть сигналы Django, обработчики методов save() моделей.
Вроде получается, из репозитория надо бы тоже вернуть кверисет или модель, чтобы дальше она была пригодна для обработки остальными компонентами Django-проекта.
Но они содержат методы, позволяющие модифицировать базу в обход логики репозитория. И эти методы используются.
Дальше либо делать, чтобы репозиторий возвращал какие-то DTO, но тогда теряем половину преимуществ (batteries included) Django по работе с моделями и кверисетами.
Либо договариваемся, что репозитории лишь группируют логику на смысловом уровне, но не изолируют ее полностью, и мы просто сами не будем обращаться к их методам, изменяющим состояние БД.
Договорились. Кто-то забыл, кто-то пропустил. Где-то стало не удобно. Стало казаться, что Django сопротивляется такому подходу. В коде пошла та же лапша но с репозиториями.
На новом проекте хотим попробовать отказаться от Django REST Framework и ее «как бы-сериализаторов» и использовать Django Ninja для АПИ (клон FastAPI под Django), и таким образом уменьшить количество неявных/спрятанных в абстракциях операций над кверисетами и моделями. Возможно получится более сильно изолировать бизнес-логику в сервисах, а в методах АПИ непосредственно вызывать действия сервисов/репозиториев в коде и возвращать DTO объекты, которые оно уже сериализует в JSON 1-в-1.
Еще есть забавная тема с владением файлами в волюмах, в т.ч. расшаренных между несколькими контейнерами или между контейнером и хост машиной. Пишу про Docker Swarm, но наверно аналогично работает и в различных других окружениях. Если внутри контейнера на базе какого-нибудь линукс работает программа от имени юзера User1 с id 12345, то она создает и редактирует файлы от имени этого id. Допустим в этом контейнере User1 специально сделан с минимумом привилегий, чтоб было безопасно. Допустим в контейнер подмонтирован волюм, который также подмонтирован в еще один контейнер. А в нем существует User2 с id = тоже 12345 и совершенно другими расширенными привилегиями и назначением. И вот оба юзера из разных контейнеров имеют одинаковый доступ к файлам в этом волюме. Если первый контейнер скомпрометирован — второй пострадал.
Это может быть одной из причин, почему так популярно стало запускать софт внутри контейнера от рута — тогда вообще не надо беспокоиться, чтобы совпадали айдишники юзеров внутри и снаружи контейнера, если требуется подсунуть какой-нибудь конфиг или другой файл через волюмы. Рут везде с одинаковым id, можно накопировать чего-нибудь из-под рута в волюм примонтированный к контейнеру, и все работает, проблему не видно.
По статистике, Авито в большей степени молодцы, чем нет, и поэтому если кто-то пострадал, то это списываем?
Мой вопрос не решен, никто ничего не сделал. В последнем письме я спрашивал саппорт, что мне делать дальше. Из ответа я понял, что дальше последнего письма они не читали. Я пытался выяснить, стоит ли жене размещать те же объявления, и тогда мы уже по-настоящиму нарушим правила. Ответили, что может разместить, и если они устроят систему, бла бла бла и т.д. О нормальном рассмотрении проблемы речи не идет.
Выходит, да, для меня компания плохая. Забанили за то, чего я не делал. Переписывались со мной в таком тоне, который для меня оскорбителен.
Саппорт работает отвратно. Процессы не отлажены. Исходя из комментов в этой статье, там мошенников и кидал больше, чем нормальных продавцов и покупателей.
Мож оно и к лучшему, что я не успел ничего продать.
Теперь чтобы обойти незаслуженную блокировку мне придется присоединиться к числу нарушителей правил (я гангста!) и база данных Авито станет еще немного хуже.
Для начала — перепрограммировать саппорт на более нейтральные формулировки.
Про саппорт Гугла и тп только слышал — что с ним вообще нет смысла взаимодействовать. Но от Авито такого не ожидал. Наверно потому что они меньше и из России.
Будь я реально заинтересованным лицом, думаю, что особенности работы их антифрод системы вполне можно выявить после обработки подробной информации о нескольких забаненных реально своих аккаунтах. Зная емейлы, телефоны, текстовки объявлений и т.п. Думаю, чего-то сверх гениального там не придумаешь. Больше информации, чем есть, взяться неоткуда.
Можно еще предположить, что ценность несет техника автоматизированного выявления фрода. Но вот после того, как тебя «проверил» модератор и «подтвердил», что все верно, ты мошенник — вот здесь уже нет ничего секретного. Обычный человек нашел доказательства нарушения. Их вполне можно предъявить.
Причем модератор здесь — как раз слабое звено в цепи. На месте мошенников я бы устраивался модераторами в Авито.
У Вас бывало когда-нибудь, что Вам в течение нескольких дней говорят, что вы мошенник, Вы нарушили. А Вы этого не делали. Но Вам говорят — «нет, вы мошенник, вы нарушили». И ты ни доказать ничего не можешь, ни добиться результата.
Я лично инженер, привык к аргументированному общению, направленному на достижение наилучшего результата. А от такой переписки у меня за несколько дней развивается конкретный нервяк, что работать плохо получается.
Без вменяемой возможности аппеляции вся эта борьба — какой-то сюр. Авито дефакто монополист в глубинке по части продаж всякой мелочевки. Просто так банить людей на всю жизнь без возможности оправдаться — неправильно.
Еще возможно дело в разделении категорий / масштабов торговли. Т.е. не перемешивать борьбу с мошенничеством при продаже авто и при продаже поношеных платьев. Как-то разнести это на разные уровни.
Может быть не смешивать «газету бесплатных объявлений» и «платформу-посредника» по типу тао-бао…
Такое чувство, что они задетектили похожие по символам адреса электронной почты + емейл из цифр + я индоутяка понизил в цене прилично ниже рынка.
Даже не знаю, что еще представить — может контрольный прозвон, а я был в подвале. Оповещений по смс вроде не приходило.
В любом случае все заканчивается на неких модераторах, которые истина в последней инстанции.
Я им писал, что они таким образом накапливают ошибку и вредят себе же — толку ноль.
А если такую проверенную базу успешно выявленных мошенников потом еще и для ML использовать…
anti-fraud-team
А какой вообще на Авито процесс обработки ложно-положительных срабатываний антифрод блокировок?
Вот я тоже сейчас прохожу квест «Вы размещали объявления в одной категории с нескольких аккаунтов». Обращение 20320408
Меня заблокировали, в письме обвинили в том, что я мошенник, не привели никаких обоснований.
Я обыскался, что я сделал не так. Саппорт продолжает отписываться, что я мошенник, ни во что вникать не собирается. Прошу их эскалировать до специалистов — опять отписки.
У меня один активный аккаунт, на нем были размещены объявления о продаже колес от проданной машины, кое-каких запчастей и селезня индоутки. Всё, больше у меня ничего нигде не размещено.
Я не отрицаю, что мог в чем-то ошибиться, пытался выяснить, может у меня где-то есть еще размещенные объявления. Нашел еще один свой старый аккаунт, восстановил пароль — там одно единственное объявление о поиске участка за 2013й год (7 лет назад).
Никакой коммерцией у вас сроду не занимался, дохода от ИТ хватает на жизнь.
Ну вот заблокировали вы меня, написали гадостей, заставляете теперь тратить нервы и время на этот бред.
А выход из ситуации какой?
Мне размещать те же объявления со старого аккаунта? Создавать еще один дублируйщий аккаунт с новой симки? Такой процесс напрямую провоцирует либо на нарушение ваших же правил, либо на уход к конкурентам. А смысл?
Конструктивные предложения:
1. Разработать процесс обработки ложно-позитивных срабатываний антифрод системы.
Пол интернета сообщений о том, что Авито утверждает, что человеку принадлежит какой-то еще аккаунт, даже почту частично показывают. Но он ему не принадлежит. Объективно ясно, что Авито не может этого знать, а человек может.
2. Поменять формулировки писем при блокировании аккаунтов. Не писать людям клевету, не писать напрямую, что «Вы размещали...», «Вы нарушили...». Поменять на что-то более нейтральное, объективное: «Наша система обнаружила подозрительную активность...»
3. Исправить ситуацию с саппортом — они отвечают нелогично, уходят от ответа и т.п. Зачем вообще нужен такой саппорт — только побесить людей?
Т.е. саппорт разговаривает с позиции «Вы нарушили», «Вы виноваты», но обосновать ничего не может. При этом ясно, что они не могут этого утверждать точно, там внутри какая-то биг дата с машин лернингом на вероятностях или чьи-то недоработки. Почему бы не писать об этом честно: «Наша система выявила ....», «Мы не имеем право разглашать, не хотим тратить ресурсы на выяснение», «У нас и так слишком много пользователей...».