📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Next Generation Commerce as Code: Storecraft

MongoDB1:01:15

Transcription

И мы в эфире! Добро пожаловать на подкаст MongoDB TV Live. Мы снова здесь. Я ваш сегодняшний ведущий, Джесси Холл, я ведущий разработчик-адвокат в MongoDB. И если вы еще не знаете, мы ведем прямые трансляции дважды в неделю: каждый вторник у нас подкаст Live, а каждый четверг — сессии прямого кодирования, посвященные миру ИИ. Так вы знали, что MongoDB можно использовать как векторную базу данных? Если нет, обязательно возвращайтесь в четверг, чтобы узнать об этом. Опять же, каждый четверг — прямое кодирование, каждый вторник — подкаст Live.

Итак, сегодня у нас особый гость. Мы собираемся исследовать действительно креативную коммерцию следующего поколения как код, и эта платформа называется Storecraft. Так что, не теряя времени, я хотел бы поприветствовать нашего гостя. Как дела? Добро пожаловать! Спасибо, что пришли на шоу. Привет, Джесси! Спасибо, что пригласили. Я рад быть здесь. Я так счастлив и хотел бы рассказать о Storecraft.

Отлично, отлично. Спасибо. Откуда вы? Откуда вы нам звоните? О, да, я с Ближнего Востока, из страны под названием Израиль, где я родился и живу. Мой опыт — я инженер-программист. Я создавал код и писал код с тех пор, как был маленьким ребенком. У меня большой опыт работы с C++ и компьютерной графикой, а также с разработкой под Android, вы знаете, инженерные приложения. А в последние несколько лет я в основном занимаюсь глубоким обучением. Веб-разработка — это одна из моих страстей. Так что я очень хочу показать вам Storecraft. Да, то, что вы создали, потрясающе.

Итак, и я подключаюсь из Техаса. Аудитория, дайте нам знать. Используйте чат, дайте нам знать, откуда вы подключаетесь. Что вас сегодня волнует? И тогда то, о чем мы собираемся поговорить здесь, это действительно классная вещь под названием Storecraft. Мне очень нравится эстетика этой целевой страницы. Она потрясающая. Так расскажите нам о Storecraft. На высоком уровне, что это такое?

Хорошо, так Storecraft — это, хорошо, это способ, это JavaScript-фреймворк для создания бэкендов для коммерции. Бэкенды для коммерции. Это похоже на CMS, систему управления контентом, где вы можете загружать продукты, объединять их в коллекции, определять скидки и создавать процесс оформления заказа. В дополнение к этому, он поставляется с панелью управления, и вы можете программировать все, что с ней связано. Большинство коммерческих систем, как мы знаем сегодня, таких как Shopify и WooCommerce, которые являются системой на основе PHP, которые потрясающие, но они больше основаны на конфигурации. Storecraft использует другой подход. Все — это код, который вы фиксируете в GitHub, и, надеюсь, процесс CI/CD и отправляет ваш код, развертывает ваш код в облаке. Так что, если вам нужны какие-либо изменения в вашем магазине, вы можете просто открыть IDE, написать немного кода, скрипты, вы знаете, надеюсь, это будет не очень много, и это будет в прямом эфире.

Итак, Storecraft может работать везде. Он может работать на любом JavaScript-рантайме. Вы можете фактически поместить Storecraft в браузер. Вы можете запускать его даже в браузере. Вау. Он не зависит от платформы. У него есть каждая платформа, которая может использовать Storecraft. Вам нужно реализовать какой-либо адаптер, как это делают другие фреймворки, такие как Svelte и Remix, например. Вы можете подключить свою собственную платформу. В дополнение к этому, Storecraft может подключаться к большинству устройств хранения для хранения изображений и медиа из вашего онлайн-магазина, а также к базам данных. Основная — это MongoDB, но вы можете подключить любую SQL-базу данных, даже облачные.

Отлично. Я вижу, «Начать». `npx storecraft create`. Это так просто, да? Да, это потрясающе. Это так просто. Я хотел бы сказать несколько слов о том, почему я создал Storecraft. Да, да, я хотел бы знать, как это произошло? Как вам вообще пришла идея?

Около двух лет назад мой сын, который любит ретро-игры, вы знаете, он торгует видеоиграми, очень старыми видеоиграми, такими как 20-летней давности, и он создал сообщество вокруг этого хобби. И сообщество, как взорвалось множеством участников, и он продавал видеоигры, торговал видеоиграми и покупал видеоигры. И вот однажды он подошел ко мне и сказал: «Папа, ты инженер-программист, давай создадим онлайн-магазин». Конечно, я сказал ему: «Иди, используй Shopify и другие готовые решения». Но он решил, что ему нужно что-то более экономичное для его нужд. Так что я люблю React, я люблю JavaScript, и я решил принять вызов. Вот так и появился Storecraft.

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

Хороший вопрос. Для меня, я думаю, это потому, кто я как инженер-программист. Когда я пишу программное обеспечение, я люблю создавать вокруг него много библиотек. Я больше заинтересован в создании технологии, повторно используемой технологии, которая может принести пользу другим пользователям. Это моя страсть. Я занимаюсь открытым исходным кодом более 10 лет. Так что, когда я начал писать этот онлайн-магазин для него, я подумал: «А что, если я смогу подключиться ко всему, что захочу? Если я смогу оптимизировать платформу или оптимизировать тип базы данных, который подходит для моего варианта использования?» Вы знаете, нет двух одинаковых магазинов. Если у вас очень простой магазин, вы можете использовать простые решения. Если у вас более требовательный магазин, который требует производительной базы данных, тогда я хочу иметь возможность подключиться к этой базе данных. И все другие решения, которые я видел, предлагают только одну базу данных, одно хранилище или одну платформу для запуска. Так что я решил начать строить на этом, и, к счастью, это имело смысл для меня, и это сработало. Я имею в виду, это сработало, потому что у меня есть друзья и другие люди по всему миру, которые используют его для создания сумасшедших вещей. Даже, вы знаете, интернет-магазины. Это не обязательно должен быть веб-сайт. Это может быть бот в Telegram или WhatsApp, и это может быть мобильный опыт. Это не обязательно должен быть полноценный веб-магазин. Так что варианты использования разнообразны.

Это интересно. Очень. Позвольте мне быстро спросить: сколько стоит использовать Storecraft?

Хорошо, это зависит. Это зависит от того, как вы его оптимизируете. Так, например, если вы можете получить хорошую сделку, например, на Atlas, и вы можете подключить устройство хранения, такое как совместимый с Cloudflare S3, тогда вы достигнете очень низкой стоимости. Знаете, низкая стоимость ниже, чем у Shopify. И магазин моего сына стоил ему почти ничего. Знаете, многие онлайн-базы данных предлагают бесплатный уровень, и если вашим магазином пользуются время от времени, вы можете фактически запускать его примерно за 5 долларов в месяц. Вау. Это очень круто.

Но это потрясающе. Но, чтобы быть ясным, вы сами не взимаете плату за использование Storecraft? Этот проект на самом деле является открытым исходным кодом, верно?

Да, это открытый исходный код. Вы можете размещать его самостоятельно, как хотите. Вы можете поместить все это в Cloudflare Worker или на бессерверный сервис на Vercel. Кстати, коннекторы появятся в ближайшие недели, я имею в виду интеграции с Vercel. Или вы можете, вы знаете, запустить сервер EC2 и позволить ему работать 24/7, подключенный к MongoDB, например. Варианты использования разнообразны. И да, это бесплатно.

Отлично, отлично. Это действительно потрясающе. В MongoDB мы любим поддерживать проекты с открытым исходным кодом, и это потрясающий проект. Мы говорили о том, что можно запускать где угодно, что у вас есть разные варианты хранения и разные варианты баз данных. Давайте поговорим о том, почему вы решили использовать MongoDB в качестве одного из вариантов.

Хорошо, магазин моего сына работает на MongoDB. Я большой поклонник MongoDB, и не только я, большинство моих друзей. И с ним легче всего начать, особенно для разработчиков JavaScript. Вы знаете, он фактически дополняет опыт разработки. И что я обнаружил, так это то, что я могу зайти в Atlas, начать свою базу данных и просто получить этот URL из базы данных и просто подключить его к драйверу MongoDB. Это было супер быстро. Есть большая экосистема и инструменты для разработчиков. Все. Если вам нужен ORM, вы можете использовать что-то вроде Mongoose. Вы знаете, я просто использую обычный драйвер, который для меня является лучшим решением. Так что я думаю, что я доверяю MongoDB, поэтому я начал с MongoDB. И большая часть разработки Storecraft была с MongoDB.

Отлично, отлично. Это потрясающе. Давайте перейдем к действию. Давайте посмотрим быструю демонстрацию и посмотрим, как это на самом деле настроить и запустить. И я думаю, у вас есть кое-что интересное для нас в этой демонстрации. Готовы поделиться своим экраном, и давайте приступим к коду.

Да, конечно. Я скажу зрителям, что мы подготовили для них кое-что интересное. Я покажу, как использовать Storecraft, вы знаете, бэкенд, панель управления и все остальное. А затем в конце, надеюсь, у нас будет время, я покажу вам расширение, которое я написал, которое использует возможности векторного поиска ИИ с Storecraft.

Мы еще не говорили об этом. Это совершенно новая вещь для Storecraft, верно? Да, да, да. Это еще одна потрясающая вещь в открытом исходном коде: он постоянно дорабатывается. Если кто-то хочет помочь Тому, я уверен, он будет рад некоторым PR или предложениям, верно? Так работает сообщество открытого исходного кода. Но потрясающе видеть, как эти проекты продолжают развиваться.

Определенно. Я ищу участников. Есть большая дорожная карта, и много всего связано с ИИ, и грядет много классных вещей. Итак, я в терминале, и все, что мне нужно сделать, это использовать команду `npx storecraft create`. Так что я запускаю ее. Как только я это сделаю, вы знаете, есть своего рода мастер, который задает мне несколько вопросов, чтобы помочь мне создать приложение Storecraft. Давайте посмотрим.

Хорошо, электронная почта администратора — очень важно. Ввожу свой собственный адрес электронной почты. Адрес электронной почты поддержки, который очень важен, если вы хотите отправлять транзакционные электронные письма. Платформа для запуска магазина: у вас есть Node, а не Bano, Cloudflare Workers, AWS Lambda, даже Google Functions. Я выберу Node, потому что я запускаюсь локально. И теперь вы можете выбрать базу данных. Мы собираемся использовать базу данных MongoDB. Теперь для URL-адреса подключения, что вы обычно делаете, вы просто заходите в MongoDB Atlas. Вторую я здесь. И вы смотрите другое видео. Да. И узнаете его. Вы просто нажимаете кнопку «Подключиться». Я не буду показывать свой URL-адрес из-за проблем с конфиденциальностью, но оттуда вы получите URL-адрес, и вы можете его использовать. Пока я не буду вводить свой ключ, но я покажу вам через минуту. Имя базы данных, которую я собираюсь использовать, называется `test`. Теперь я выберу устройство хранения для Storecraft. Я выберу локальное хранилище Node.js. Да. Хорошо. Теперь для поставщика электронной почты я выберу Resend. Опять же, я не буду делиться своим API-ключом. И теперь вы можете выбрать платежный шлюз. Это может быть Stripe или PayPal. Честно говоря, мы не будем вдаваться в платежные шлюзы прямо сейчас. Так что я просто продолжу. И как только мы это сделаем, он фактически установит все пакеты. Он создаст скелет для вашего проекта. И теперь давайте посмотрим. Хорошо, так что теперь мы перейдем в папку, и то, что нам нужно сделать прямо сейчас, это запустить `npm run migrate`.

Хорошо, для меня база данных уже была мигрирована. Но я запущу ее. Но прежде чем я запущу ее, я кое-что сделаю. Я покажу вам, что было создано. Хорошо. Хорошо. Итак, что сделал Storecraft, так это создал один файл, я имею в виду кучу файлов, и один из них — это файл `app.js`. Вы можете видеть структуру каталогов. Это слева. Хорошо. Теперь, если вы видите, что здесь происходит, у нас есть приложение Storecraft. Есть некоторые секретные токены доступа. Они не имеют значения. Вы можете поместить их в файл среды. Просто для демонстрации. Они будут здесь для демонстрации, но как только они будут созданы, сохраните их где-нибудь в безопасном месте. Это специфично для бэкенд-среды Storecraft. Да, секретные токены доступа и токены обновления используются для аутентификации и авторизации. Понял. Вам не обязательно их использовать. Вы можете подключить свои собственные, если хотите. Так что, если аудитория попытается их использовать, они не смогут, потому что они не на вашем локальном компьютере. Точно.

Итак, отсюда, когда у нас есть экземпляр приложения и куча конфигурации, кстати, есть гораздо больше конфигураций, которые вы можете настроить. Вы также можете настроить параметры CORS, если хотите, и многое другое. Например, если у вас есть CDN, подключенный к вашему S3-бакету, вы можете потребовать перезаписи URL-адресов при возврате из бэкенда в медиапродукте. Итак, когда мы спустимся немного ниже, мы увидим платформу. Мы видим базу данных. Теперь база данных, у нас есть URL-адрес здесь, но коннектор Storecraft для MongoDB может фактически вывести URL-адрес MongoDB из файла среды. Ах, приятно. Да, да. И помимо этого, если вам нужно настроить вещи, у вас есть параметры. Клиентские параметры. Так что, если вам нужны вещи для аутентификации и тому подобное, вы можете использовать это. Отлично.

Что касается Storecraft, он очень непредвзятый. Так что еще здесь, у нас есть Resend. Resend — это поставщик электронной почты. Я буду использовать ключ Resend, который у меня уже есть в файле среды. Хорошо. Хорошо. С платежными шлюзами. Здесь у вас есть обработчик и сам платежный шлюз. Может быть, вы знаете, что у нас также есть концепция фиктивного платежного шлюза. Я импортирую его. Хорошо. Для тестирования. Это потрясающе. Да, определенно. Это для тестирования. Так что у нас есть платежи, и затем у нас есть фиктивный. Давайте посмотрим. Да, вот он, фиктивные платежи. Так что здесь, с платежными шлюзами, это, по сути, объект, который я могу сделать что-то вроде этого. Вы знаете, я дам ему ключ. Теперь ключи важны, потому что с ключами вы можете использовать API, REST API, используя ключ. Так что, например, если вы хотите создать оформление заказа, используя один из платежных шлюзов, вы должны помнить эти обработчики, которые являются ключами. Хорошо, хорошо, хорошо.

У нас также есть куча расширений. Расширение Postman — это классное расширение. И, кстати, дальше мы собираемся создать расширение. Я покажу, что означает расширение, я имею в виду, что означает его создание. Но расширение Postman — это просто простое расширение, которое слушает события Storecraft. Так что оно слушает, например, когда оформление заказа завершено, и как только оно завершено, оно извлекает шаблон электронной почты из бэкенда и помещает информацию о клиенте, а затем отправляет ему транзакционное электронное письмо, используя почтовый сервис, который мы видели здесь, например, Resend.

Так что, когда вы сказали Postman, я подумал о Postman, клиент для тестирования. Да, да, определенно. Может быть, это не очень хорошее название. Это нормально. Хорошо уточнить это. Да, да. Так что, кстати, если мы вернемся сюда, если вам нужно настроить что-либо, связанное с событиями в Storecraft, все, что вам нужно сделать, это сохранить это, а затем у вас есть события. Хорошо. Например, если вы хотите отправить электронное письмо при запросе смены пароля, вы можете это сделать. Кстати, расширение Postman делает то же самое. Но давайте посмотрим на это. Давайте сделаем что-то вроде этого. Это будет событие. Теперь каждый объект события вы можете остановить распространение, что означает, что вы можете украсть обработку событий у других расширений, что очень приятно. А затем у вас есть полезная нагрузка события. И в этом примере полезная нагрузка события — это то, что называется типом пользователя OAuth, что важно для создания реакции на это событие. В любом случае, много, много настраиваемости. Да.

Итак, прежде чем мы начнем все, я хочу показать вам, как выглядят файлы index. Storecraft, когда мы ввели его с платформой Node, имеет что-то под названием обработчик. Обработчик преобразует входящие сообщения из узла. Входящее сообщение, я имею в виду, это HTTP-драйвер Node. Он преобразует его в стандартный веб-запрос. А затем отправляет его в контроллер виртуального REST API, который знает только о веб-запросах и веб-ответах. А затем веб-ответ возвращается, а затем он передает его обратно в ответ сервера Node. Так что давайте.

Хорошо, давайте сделаем это. Я запускаю скрипт миграции. По сути, это успех, потому что я уже мигрировал. Миграция MongoDB, миграция MongoDB, по сути, означает заполнение некоторых шаблонов, а также создание индексов для MongoDB. Ого. Так что, так что, хорошо, вы можете показать в Atlas, что это сделало?

Да, определенно, определенно. Мне любопытно. Я хочу действительно понять. Так что это добавило данные в вашу базу данных. Если вы посмотрите на `test`, что он сделал, по сути, если мы перейдем, например, к шаблонам, он заполнил базу данных шаблонами. И также создал индексы почти для всего. Например, я покажу вам здесь, если я перейду к продуктам, а затем вставлю в индексы, тогда да, кажется, загружается. Это просто радости прямого кодирования. Я имею в виду, когда вы пытаетесь провести демонстрацию, ничего никогда не работает так, как должно. Это нормально. Но это действительно интересно. Так что эта миграция добавила данные в вашу базу данных, некоторые шаблоны и некоторые другие вещи, а затем она автоматически создала эти индексы для вас. Так что это быстрый и простой способ настроить это и запустить.

Да, и если вам нужно больше индексов, вы можете просто зайти в Atlas и сделать все, что вам нужно, что-то конкретное. Да. Так что давайте посмотрим. Хорошо, круто. Так что, если мы перейдем к индексам, надеюсь, загрузится. Возможно, это все еще происходит, потому что вы только что запустили это, так что на самом деле это может создавать эти индексы. Потому что это обычно занимает несколько секунд, но я не знаю, сколько индексов он создает, так что это может занять некоторое время.

Да, определенно, определенно. Но это круто. Мы можем продолжить демонстрацию. Я уверен, что они появятся через минуту. Но это очень здорово понимать, что именно делает команда `migrate`. Потому что это важно. В Storecraft я реализую очень надежный язык запросов, такой как булев язык запросов, где вы можете искать что-то, что имеет это свойство или это свойство, но не это свойство. Он также имеет курсор, который требует индексов. В любом случае, давайте начнем. Давайте.

Хорошо, так что, когда мы нажимаем `npm start`, мы видим этот экран. Этот экран даст вам всю информацию о запросах. HTTP-запрос, и я покажу вам через секунду. И одна вещь, которую стоит отметить, это то, что у нас есть ссылка на API, которая поддерживается мной, и я использую отличный проект Swagger.com. Отлично. Это очень круто. Это как Postman, по сути. Так что вы можете использовать его для тестирования запросов и просмотра того, что происходит. И мы, вероятно, вернемся к этому, когда будем заниматься расширениями. Но давайте посмотрим. Давайте перейдем к продуктам. Давайте посмотрим, есть ли у нас список и фильтр товаров.

Так что вы можете сделать что-то вроде этого. Теперь вы можете видеть возвращенные продукты. Отлично. Да, я никогда не видел этого раньше. Это довольно крутой продукт, или что это такое? Пакет? Я полагаю, пакет JavaScript. Вау. Это на самом деле довольно удивительно. Что вы делаете, так это то, что вы пишете файл Open API, который перечисляет всю функциональность вашего бэкенда с примерами и всем остальным, и конечной точкой. А затем я использую инструмент, который фактически читает этот файл Open API и вставляет его в свое приложение. Это приложение, это веб-приложение, и тогда вы видите все. Это очень круто. Я могу обслуживать его из самого бэкенда, и это мне очень помогает. Теперь, если вы видите, Storecraft, кстати, вы можете видеть, что происходит под капотом. Вы увидите HTTP-метод, путь и время, которое потребовалось. И если у вас есть запросы, вы увидите их тоже.

Теперь я перейду к панели управления. Хорошо. Хорошо. Позвольте мне просто. Хорошо, в первый раз, когда вы подключаетесь к Storecraft с аутентификацией, адреса электронной почты администратора, указанные в качестве первого пароля, — это `admin`. Вы можете изменить его позже через панель управления, через страницу настроек. Хорошо. Хорошо. И тогда здесь, если вы могли бы, может быть, просто сделать Command + 1 один раз, может быть, нет, два. Это немного лучше. Может быть, еще один. На самом деле, панель управления Storecraft удобна для мобильных устройств. Хорошо. Хорошо. Как вы видите, все встает на свои места. Хорошо, хорошо. Но я могу сделать это. Видите эту боковую панель? Я могу закрыть и открыть ее. Хорошо.

Так что, если мы перейдем, например, к продуктам, вы знаете, давайте создадим продукт. Давайте создадим простой продукт. Так что мы дадим ему заголовок. Скажем, мы хотим иметь два продукта, связанных с Nintendo. Я люблю Nintendo. И первый будет Nintendo Switch, консоль для домашних игр. Консоль для игр. Обработчик. Обработчик — это как ID. Обработчики должны быть уникальными. Я не могу предложить это по заголовку. Теперь я дам ему описание. У меня есть вымышленное описание для этого. У меня есть файл Markdown с контентом, который я создал. Вы были готовы. На самом деле, это важно для меня, потому что это для семантического поиска. Я хочу, чтобы он был богатым. Понял. Так что мы помещаем его сюда. У вас есть богатый редактор. Теперь медиа. Медиа — это очень круто. Что мы делаем, так это то, что у меня есть изображение здесь, которое я могу перетащить. Хорошо. Хорошо. И у вас есть очень хороший редактор. Вы можете обрезать, масштабировать вверх, масштабировать вниз и переводить. И вы также можете решить формат и качество. Я сделаю это так. Я помещу это. И следующее, что я дам ему цену 100. Хотя я хотел бы, чтобы это была цена. Это довольно дешево. Скажем, у нас есть два из них. Активно. Ах, я покажу вам кое-что крутое. Так что, когда мы создаем продукт, мы видим доступные скидки, на которые имеет право этот продукт. Но что-то еще, что более важно для меня, Storecraft — это фреймворк, ориентированный на разработчиков. Так что у вас всегда есть JSON. Вверху карточек вы можете видеть скидки и все остальное. И что вы должны ожидать от этого. Вы также можете делать такие вещи, как связанные продукты и теги, которые очень важны для запросов и фильтрации. И вы также можете подключить его к коллекции. Но сейчас мы этого не будем делать. Что мы собираемся сделать, так это создать еще один продукт.

Так что мы добавим еще один. И второй будет называться футболкой Super Mario. Хорошо. Хорошо. Кто не любит футболку Mario? Вот она. Отлично. И у меня также есть описание. На самом деле, я придумал это описание. Я, вероятно, можете угадать, я не маркетолог. Очень короткое и описательное. Точно. Так что мы берем изображение здесь. Отлично. Оно тоже выглядит нормально. И просто. И затем мы даем ему 100. Это дорогая футболка. Да, это дорогая. Вы платите премию за Mario. Хорошо, круто. Так что теперь у нас есть футболка Super Mario и Nintendo Switch. Что мы можем с этим сделать? Давайте создадим скидку для этого типа продукта. Так что мы перейдем к скидкам и сделаем что-то крутое. Мы сделаем что-то вроде: если вы купите Nintendo Switch, то получите футболку Super Mario за 50%. Звучит круто. Это звучит лучше. 50%. Да, 50 долларов лучше, чем 100 долларов за футболку. Switch с рубашкой Mario. Как мы ее называем? Код скидки — это обработчик. И способ сделать это — использовать детали скидки. Тип скидки «купи X, получи Y». Теперь, что касается покупки X, что вам нужно сделать, это просто определить фильтры того, что такое X. В нашем случае, просто этот Switch. Так что мы делаем продукт, принадлежащий фильтру, а затем мы будем искать. О, вот он. Так что, если вы купите Switch, сохраним его. Затем, если мы спустимся немного ниже, у вас есть, если клиент покупает X из вещей, которые были отфильтрованы выше, тогда клиент получает Y, количество чего-то с следующим фильтром. Теперь, что мы сделаем здесь, мы возьмем футболку Super Mario. Это имеет смысл. Круто. И теперь вы решаете, сколько процентов скидки. Так что мы сделали 50% скидку. Вы можете видеть объяснение ценообразования прямо здесь. Потому что, знаете, ценообразование — это немного математики, и, знаете, люди путаются и все такое. Так что да. Какую математику вы используете за кулисами? И это очень простая математика. Но для меня было важнее тщательно протестировать. Теперь есть большой набор тестов для Storecraft. Порядок скидок очень важен, потому что, если вы что-то скинули, это не может быть скинуто снова другой скидкой. Так что способ работы движка скидок заключается в том, что есть стек скидок, которые идут одна за другой, и вы можете указать приоритет этой скидки. Так что эта скидка всегда будет иметь наивысший приоритет. Хорошо, хорошо. Я думаю, на этом все. Хорошо. Да. Хорошо. Так что все создано. Все выглядит хорошо. У нас также есть JSON, очень важно для разработчиков, которые разрабатывают свои собственные бэкенды, они хотят видеть, что происходит. Мы также видим, что эта скидка доступна для одного продукта, который является Nintendo Switch, и она была применена ноль раз. Так что вы можете отслеживать, сколько раз она была использована. Да.

Подумайте об этом так: если бы у вас был какой-то бот, у вас был бы скрипт, который каждый раз, когда пользователь регистрируется, вы создаете купон, который является ручной скидкой для него. Вы можете сделать это в коде Storecraft, индивидуальную скидку для каждого человека. Да. Отлично.

Итак, это страница заказов. Для этого я надеюсь, что это нормально. Да, это хорошо. Это хорошо. Да, да, это хорошо. Хорошо, круто. Итак, во-первых, давайте скажем, что мы покупаем Nintendo Switch и футболку Super Mario. Так что сразу же мы видим, что их общая сумма составляет 200. Мы выберем способ доставки, что-то случайное, что я выбрал, а затем рассчитаем цену. Теперь мы видим, что у нас есть скидка. Switch с рубашкой Mario. Рубашка Mario стоит 100, и она была скинута до «купи». Вы также можете установить движок налогов, но это не входит в объем. Так что скидка была применена автоматически на основе количества и типа продукта. Так что клиент фактически не должен был вводить код скидки. Точно. Так что скидки. У вас есть два типа скидок: автоматические и ручные. Ручные скидки — это фактически ваши промокоды, знаете, те, которые кто-то вам дает и говорит: «Используйте этот промокод». В Storecraft вы можете ограничить промокоды, чтобы они были специфичны для пользователя, например. Это очень приятно.

Хорошо, вот и все. Этого достаточно. Хорошо. Во-первых, мы создадим заказ. Кстати, большинство заказов не создаются вручную таким образом, верно? Да, мы обычно создаем их с помощью веб-сайта или с помощью вызова API. Точно. И то, что вы нам показали, это вся панель управления бэкенда Storecraft. Так что вы обычно подключаетесь к этому с какого-либо фронтенда. Точно. Точно.

Так что, да. И документация на моем веб-сайте точно указывает, как оформлять заказы. Когда я начинал с коммерции, оформление заказов казалось мне самой сложной частью. Так что вы можете выбрать платежный шлюз. Так что у вас есть PayPal и фиктивные платежи. Мы сейчас выберем фиктивные платежи и создадим оформление заказа. Так что произошло за кулисами, так это то, что вы видите этот POST-запрос. API `checkout.create` был создан с шлюзом с обработчиком `dummy`, тем же `dummy`, который мы определили ранее в коде. Хорошо. И вернемся к нему. Хорошо. Что-то крутое, потому что это фиктивный платежный шлюз. Вы можете аннулировать, вы можете захватить сумму денег, например, если это был PayPal или Stripe, вы можете фактически захватить заказ отсюда или аннулировать его или вернуть, что круто. Так что давайте сделаем что-то очень быстрое, прежде чем что-то еще. Прежде чем мы. Нет, на самом деле, знаете что, я покажу это здесь. Хорошо. Так что оформление заказа может быть в нескольких состояниях. Одно из них, наиболее важное, — это состояние «создано» и состояние «завершено». Так что, если это был веб-сайт, он завершил бы оформление заказа. Давайте сохраним его. И как только это произойдет, я должен получить электронное письмо, транзакционное электронное письмо от Storecraft. Ого. Вот оно. Отлично. Привет, Том, спасибо за вашу покупку. Есть приятная таблица, которая говорит мне, что я купил, доставку, сумму, скидки и общую сумму. Да.

И это снова используется. Это используется через Resend, и у вас был ваш API-ключ в переменных среды, и это прошло через Resend, и все было автоматически настроено для вас. Точно. Теперь важно для меня показать, что люди, когда я показывал это людям, они говорили: «Да, но как я могу настроить шаблоны и все такое?» Так что это легко. Вы просто спускаетесь немного ниже к шаблонам, и здесь вы ищете. Давайте. Это ваши шаблоны электронной почты. Точно. У вас есть «оформление заказа завершено». Закройте это. Хорошо. Здесь у нас «оформление заказа завершено». Расширение Postman использует шаблон «оформление заказа завершено» для отправки электронного письма. И прямо здесь, в Storecraft, у вас есть редактор. Отлично. Полный редактор кода, где вы можете кодировать весь шаблон с помощью языка Handlebars. Это распространенный язык шаблонов. Это очень круто. Да, это очень полезно, знаете ли. Да. Если вы спуститесь вниз, у вас также есть шаблон для текста. Вы знаете, некоторые люди не могут получать что-то вроде HTML. И у вас также есть пример ввода для шаблонов, так что вы можете отлаживать свой шаблон и делать это. И также в дополнение к этому, Storecraft будет поставляться в ближайшие несколько недель с, я бы сказал, маркетинговой функциональностью, где вы можете подключить один шаблон и отправить огромное количество персонализированных электронных писем одновременно. И это будет через панель управления, и это также будет доступно через REST API. Так что вы можете настроить маркетинговые кампании, которые отправляют серию электронных писем, возможно, в течение некоторого периода времени. Да. Отлично.

И здесь вы также можете видеть расширения. Вы видите, у вас есть два расширения. Одно из них — расширение уведомлений, которое, кстати, если вы посмотрите в правый угол, у нас есть уведомления. Даже эти уведомления. Это фактически расширение, которое слушает ключевые события в Storecraft и отправляет их. Отлично. И затем они появляются там, в правом верхнем углу. Точно. Отлично.

Потрясающе. Мы подошли к моменту, когда у вас есть часть вашей демонстрации, где мы будем получать доступ к бэкенду из фронтенда? Как вы собираетесь? Как вы собираетесь подключить все к фронтенду?

Хорошо, по сути, по сути, Storecraft — это headless-система коммерции. Headless-системы не поставляются с фронтендом. Да, в этом вся суть. Я имею в виду, они стали очень популярны за последние пять лет, после того как люди устали видеть одни и те же старые шаблоны для таких вещей, как WordPress. Так что, так что Storecraft, извините, я собирался сказать, что здесь Postman пригодится, где вы можете увидеть все эти различные маршруты, протестировать их там, а затем реализовать эти маршруты в вашем фронтенде.

Да. Так что, по сути, это бэкенд. Вы можете использовать Storecraft для запроса ваших продуктов. У нас есть очень надежный движок запросов. Вы можете создавать оформления заказов и полный опыт. Я ищу участников, чтобы фактически создать набор, возможно, инструментов React, чтобы помочь веб-разработчикам начать разработку и подключение к Storecraft. А также Storecraft поставляется с универсальным JavaScript API. Отлично. Он фактически находится здесь, в SDK Tools. И я полагаю, что зрители, которые захотят углубиться, посмотрят на него. Но это полный SDK. Вы можете запускать его из бэкенда. Вы можете запускать его даже из браузера, чтобы создавать свои собственные коммерческие возможности.

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

Я не знаю, есть ли у нас. Думаете, у нас есть время? У нас есть около 15 минут. Так что давайте начнем с расширения. Хорошо, давайте сделаем это. Да, это самая захватывающая часть для меня. Я хочу увидеть это. Хорошо, круто, круто. Так что, хорошо, давайте посмотрим, как я. Способ запуска этого расширения — фактически перейти в Atlas. Хорошо. Так что в Atlas у меня есть база данных, тестовая база данных. Хорошо. И под ней у нас есть вкладка под названием Atlas Search. Хорошо. Так что в Atlas Search вы хотите создать поисковый индекс. И в Atlas Vector Search, я надеюсь, все видят это. Да, выглядит хорошо. Следующая кнопка. Хорошо. Под векторным индексом я взял, кстати, большую часть этой информации из ваших видео. Так что первое, что нужно сделать, это выбрать базу данных. Для меня это `test`. И что я хочу сделать, может быть, сначала я скажу, что будет делать расширение. Расширение поможет нам семантически искать продукты по их описанию и заголовкам. Мы собираемся использовать ИИ для поиска продуктов. И также, чтобы сделать шаг назад, этот Storecraft настолько настраиваемый. Мы создаем пользовательское расширение для конкретного варианта использования. Так что любой разработчик может создать любое расширение в Storecraft, чтобы делать ряд вещей, верно?

Да, и определенно, я думаю, я слышу это. Хорошо, хорошо. Так что вам нужно сделать, это просто перейти, взять коллекцию продуктов и просто создать индекс со следующей конфигурацией. Используемые вами измерения — 1956. На самом деле, давайте посмотрим. Я скажу вам точно, потому что у меня это есть здесь. Хорошо, идеально. У меня это есть. Редактировать определение индекса векторного индекса. Ах, извините. Да, хорошо. Просто убедитесь. 1536. Да, точно. Так что я думаю, что это фактически из ваших отношений с разработчиками и статей с сайта MongoDB. Я думаю, я даже видел одно из ваших видео об этом. Да, так что это зависит от того, какую модель встраивания вы используете. Модель встраивания OpenAI, которую мы в основном используем, имеет 1536 измерений. Так что вы просто хотите указать это, чтобы векторный поиск искал в правильной области должным образом, по сути. Да, да. Так что, когда я закончу, просто скажите зрителям, что это сделает. Это создаст индекс, который поможет MongoDB быстрее искать эти встраивания. Так что, когда у нас есть это, мы можем перейти к написанию нашего расширения. Давайте посмотрим.

Хорошо, заранее я сделал утилиту OpenAI, которая называется `embed_text`. Это очень просто. Если вы ничего не знаете о встраиваниях, просто зайдите в справку OpenAI и создайте встраивания. Я просто скопировал и вставил. curl и создал этот HTTP-запрос. Я вернусь к редактору. Так что это просто POST-запрос, и он получает текст и использует модель `text-embedding-3-small`, и у нее точные размеры нашего индекса. Когда он это сделает, он передаст его как JSON, а затем мы возьмем встраивание из JSON. Так что это все. Вам не нужно ничего устанавливать, чтобы это расширение работало. Так что мы создадим расширение. Мы назовем его, скажем, MongoDB Vector Search. Хорошо. Хорошо. Интеллект. Мы используем TypeScript для интеллекта. Он действительно говорит, что нам чего-то не хватает. Давайте посмотрим, чего нам не хватает. Так что нам нужно несколько вещей. Одна из них — `info`, которая является именем. Я называю это Vector Search. И ему также не хватает чего-то под названием `on_init`. Каждый расширение имеет фазу инициализации, которую нам нужно реализовать. И все, что мне нужно, это просто следующая вещь. Это что-то, что вводится с помощью `app`. Текущее приложение Storecraft, которое вы используете. Что мы собираемся сделать, так это поместить обработчик событий. И вот что я хочу сделать, по сути: каждый раз, когда продукт обновляется и поступает в бэкенд, я хочу вычислить его встраивание. Отлично. И вставить его. Давайте посмотрим. У нас есть. Да, каждый раз, когда вы добавляете новый продукт, он будет брать описание этого продукта, я полагаю, и создавать встраивание для него и сохранять его обратно в базу данных. Точно.

Так что каждый раз, полезная нагрузка. Полезная нагрузка, я имею в виду, tops. Storecraft полностью типизирован для событий, так что вы точно знаете, что получаете. Вы получаете предыдущий, текущий, который является обновлением. Так что мы фактически перехватываем полезную нагрузку продукта перед тем, как она будет обновлена в базе данных, что является хорошей возможностью для нас. Итак, что я собираюсь сделать, я назову это `product`. И затем то, что мы хотим сделать, это сделать что-то вроде `embed_text`. И затем мы создаем текст. Так что этот продукт называется, и мы используем заголовок продукта. Отлично. Имеет цену, скажем, цену и описание. И следующее я разобью строку. И следующее описание. И затем я проверю описание. Хорошо.

Так что то, что мы хотим сделать прямо сейчас, это следующее. То, что мы хотим сделать, это это. Мы хотим взять продукт, и мы указали в Atlas, если вы помните, мы указали, что путь называется `embedding`, который является полем, которое мы хотим. Да, мы хотим индексировать это поле. Отлично. Точно. Тип TypeScript. Я могу игнорировать это сообщение. Хорошо. Так что это все, что нам нужно сделать на этапе инициализации. Итак, каждый новый продукт будет встраиваться и индексироваться MongoDB. И теперь другая вещь, которую мы хотим иметь возможность общаться с этим расширением, чтобы отправлять ему запросы, верно?

Хорошо, другая вещь, которую нам нужно реализовать, — это что-то под названием `invoke_action`. То же самое. Каждое расширение в Storecraft фактически монтируется как HTTP REST API. Так что, например, имя этого расширения — MongoDB Vector Search. Так что я покажу, как вы можете фактически использовать путь, такой как `/api/extension/mongodb-vector-search/`, и операцию или действие, которое вы хотите вызвать. Так что мы делаем что-то вроде этого. Если `action_handle` равно `search`. Хорошо. Хорошо. Так что, на самом деле, давайте быстро выйдем и сделаем что-то вроде этого. Хорошо. Теперь интересная часть. Хорошо, хорошо. Так что, если у нас есть поиск, что нам нужно вернуть, это следующее. Нам нужно вернуть функцию, которая возвращает Promise. Теперь аргументы — это аргументы, которые мы будем получать из POST-запроса. Так что это будет его определение. Оно будет выглядеть так. Потому что я спроектировал это таким образом. Отлично. Так что это может быть асинхронным. Хорошо.

Так что то, что мы хотим сделать сейчас, на самом деле, это что-то очень простое. Мы хотим фактически запросить базу данных. Теперь, если мы посмотрим на документацию MongoDB, нам нужно использовать что-то под названием агрегации. И в агрегациях у нас есть конвейер векторного поиска. Да. Отлично. Так что мы можем сделать что-то вроде этого. У нас есть приложение, благодаря горячему хостингу JavaScript. У нас есть `db`, который является MongoDB. Хорошо, просто секунду. И теперь мы можем сделать что-то вроде этого. Мы можем перейти в коллекцию, коллекцию продуктов. И затем агрегировать. Отлично.

Итак, давайте посмотрим. Это было. Скопируем все это. Вот оно. Сделайте это проще для себя, да? Сделайте это проще для себя, копируя и вставляя. Это много печатать. Да, да. На самом деле у меня есть что-то готовое. О, отлично. Да, да, да. Но у меня в руке. Я имею в виду. Нет, вы делаете потрясающе. Это много кода наизусть. Спасибо. Хорошо, хорошо.

Хорошо, так что у нас есть агрегация. Также сделайте проект, чтобы удалить поле встраивания и затем преобразовать в массив. И то, что я делаю, это просто возвращаю его. Это расширение. И теперь я покажу, как оно работает. Если пользователи хотят увидеть, как быстро это было. Да, мы все хотим увидеть, как это работает. Да. Так что теперь, так как это работает. Но если бы я сделал это, я бы, вероятно, сделал класс из этого, как большинство расширений. Но я просто хотел показать зрителям шаблон встроенного расширения, насколько быстро и легко это может быть. Да, да.

Так что, хорошо, давайте посмотрим. Хорошо, здесь у нас есть приятное приложение, которое я сделал с React и Vite. Давайте попробуем что-то вроде. Я ищу консоль, связанную с Nintendo. Давайте посмотрим. Расширение. Ах, хорошо, хорошо, хорошо. Просто небольшая вещь. Без проблем. Мне нужно изменить имя с этого на это. Ах, без проблем. Теперь, вот оно. Давайте посмотрим, что происходит. Ничего. Ну, секунду. Это нормально. Давайте посмотрим. Давайте посмотрим. Давайте посмотрим. Fetch. Давайте посмотрим на бэкенд. Похоже, мы попадаем в конечную точку. Да, выглядит хорошо. Да, это радость. Да, конечно, конечно, конечно, конечно. Извините, извините, извините, извините.

Так что я забыл одну вещь. Очень, очень важную вещь. Так что, были ли встраивания созданы для фактического индексирования? Получить индекс. О. Хорошо. Давайте сохраним их. Так что теперь, когда мы их сохранили, обработчик событий для обновления продуктов был вызван, был запущен, и теперь мы можем фактически использовать наш. Давайте посмотрим. Отлично. Надеюсь, yay, это работает. Связанная консоль. Теперь давайте изменим ее на связанную одежду. Отлично. Это тоже довольно быстро. Это приятно. У нас получилось. У нас получилось. У нас получилось. Отлично. И это приложение React. Я поделюсь кодом на. Я сделаю репозиторий для этого на GitHub. Отлично. Для пользы большего числа разработчиков.

Это потрясающе. Знаете, демонстрации не всегда идут так, как вы планируете. Но обычно это что-то очень простое. Так что я рад, что мы разобрались, и это действительно потрясающий продукт. Мне также нравится, как легко его расширять и добавлять дополнительную функциональность. Мы как раз уложились во время. Так что я хочу напомнить всем проверить Storecraft. storecraft.app. Есть ссылка в описании. Если вы в LinkedIn, есть ссылка там. Если вы на YouTube, есть ссылка в описании. Так что зайдите на storecraft.app. И если вы хотите внести свой вклад в сообщество открытого исходного кода, проверьте его на GitHub и посмотрите, где вы можете внести свой вклад. И мы действительно ценим это.

Так что, прежде чем мы уйдем, я снова хочу поблагодарить вас. Потрясающий продукт. Потрясающая демонстрация. Прошла очень хорошо. Есть ли последние слова для аудитории?

Да, для Storecraft есть большая дорожная карта. Мы никуда не уходим. Я действительно удваиваю усилия по Storecraft, потому что это действительно страсть для меня и моего сына. И мы добавим ИИ и конечную точку чата, где вы можете общаться с вашим магазином. И мы ищем участников. Пожалуйста, распространите информацию.

Отлично. Это то, о чем я не думал. Общение или взаимодействие с интернет-магазином через чат. Это довольно круто. Да, это было, по сути, то, что вы только что показали. Мы верим, что это будущее, потому что мой сын всегда говорит, что он хотел бы иметь агента, который будет говорить с клиентами. С большинством из них. Это действительно круто. С нетерпением жду этого и с нетерпением жду дорожной карты и более классных вещей от Storecraft.

Итак, снова Том, спасибо, что присоединились ко мне. И аудитория, спасибо за просмотр. И до следующего раза.

Спасибо, Джесси.

Всего доброго.