Ventas была платформой электронной коммерции WIP, написанной полностью в Clojure.
Документация
Ни один проект электронной коммерции с открытым исходным кодом меня не удовлетворяет. Я работал с большинством из них годами, и я думаю, что они отстой. Я не назову, но это примерно то, что я думаю о доступных решениях:
Они, как правило, трудно расширить или изменить . Они пытаются решить проблему с помощью систем расширения, но, в конце концов, вам необходимо изменить код ядра, чтобы внести значимые изменения. Это заставляет вас выбирать между никогда не обновляя программное обеспечение или исключительные усилия, чтобы сохранить применение ваших изменений. Вот почему одно из основных дизайнерских решений для этого проекта - это облегчение расширения и модификации.
Они, как правило, трудно рассуждать . Поскольку они построены на принципиально изменчивой модели, невозможно узнать, как база данных попала в текущее состояние. В лучшем случае происходит что -то плохое, и я не знаю почему. В худшем случае происходит что -то плохое, и я даже не замечаю (пока не станет слишком поздно). Наличие изменяющихся объектов везде тоже не помогает.
У них, как правило, плохая производительность из коробки . Конечно, все может быть исполнено, но мне не нужно прилагать усилия. Особенно, когда «усилия» означает переписывание запросов SQL или тратить несколько дней, пытаясь выяснить, что заставляет мой магазин, чтобы занять 20 секунд для загрузки.
Они, как правило, чрезмерно инженеры или имеют пользовательские «функции». Это проблема во многих программных программ, но, тем не менее, оно там.
Обратите внимание, что эти моменты не означают, что Ventas не или не будет совершать те же грехи. Я просто стараюсь не делать.
На данный момент Ventas не подходит для своей цели. Однако, если вы разработчик и просто хотите увидеть проект в действии, читайте дальше.
Вам нужно установить git и leiningen . Вам также нужен доступ к датомической базе данных и экземпляру Elasticsearch. (См. Настройка локальной среды с докером, если вы чувствуете себя комфортно с Docker)
Сначала clone проект и cd в него:
$ git clone https://github.com/JoelSanchez/ventas
$ cd ventasТеперь вы можете начать реплику:
$ lein repl Когда реплика будет готова, выполните init :
user=> ( init )
:reloading (ventas.common.utils ventas.utils ventas.config ventas.database ventas.database.schema ventas.database.entity ventas.entities.product-variation ventas.database.generators ventas.entities.i18n ventas.entities.brand ventas.plugin ventas.database.seed ventas.entity-test ventas.events repl ventas.entities.image-size ventas.paths ventas.entities.file ventas.server.ws ventas.logging ventas.server ventas.server-test ventas.auth ventas.entities.user ventas.test-tools ventas.database-test ventas.entities.product-taxonomy ventas.server.pagination ventas.utils.images ventas.server.api ventas.entities.configuration ventas.entities.address ventas.entities.product-term client ventas.plugins.featured-categories.core ventas.plugins.slider.core ventas.entities.order-line ventas.entities.order ventas.common.utils-test ventas.entities.resource ventas.entities.category ventas.entities.product ventas.entities.country ventas.entities.tax ventas.entities.state ventas.plugins.blog.core ventas.plugins.featured-products.core user)
INFO [ventas.database:27] - Starting database, URL: datomic:dev://localhost:4334/ventas
INFO [ventas.server:99] - Starting server
INFO [ventas.server:102] - Starting server on 0.0 .0.0:3450
INFO [client:28] - Starting Figwheel
Figwheel: Starting server at http:// 0.0 .0.0:3449
Figwheel: Watching build - app
Compiling " resources/public/files/js/compiled/ventas.js " from [ " src/cljs " " src/cljc " " test/cljs " " test/cljc " ]...
Successfully compiled " resources/public/files/js/compiled/ventas.js " in 8.252 seconds.
Figwheel: Starting CSS Watcher for paths [ " resources/public/files/css " ]
INFO [client:42] - Starting SASS
:done Затем выполните setup! Функция, которая будет перенести в базу данных, установить светильники и т. Д.:
( ventas.core/setup! ) Теперь вы можете открыть localhost:3450/admin чтобы увидеть администрацию. Frontoffice не включен, но вы можете проверить Ventas-Demo для примера.
Для входа в BackOffice вам понадобится для создания пользователя администратора для себя:
(entity/create :user {:first-name "Admin"
:email "[email protected]"
:password "yourpassword"}
Для разработки фронта в отдаче:
lein sass4clj auto
shadow-cljs watch :admin
Вы можете подключиться к серверу NREPL, созданному Shadow-CLJS, чтобы получить RPEL CLJS:
lein repl :connect localhost:4002
user= > (shadow.cljs.devtools.api/nrepl-select :admin)Docker-Compose.yaml включен:
docker-compose up -d
Написано в Clojure.
Использует крепление и действительно любит разработку, управляемую Repl. Перезагрузка кода выполняется путем вызова repl/r . Инициализация приложения осуществляется путем вызова repl/init .
; ; (r) reloads changed namespaces, restarts defstates within them, and optionally
; ; restarts given defstates as keywords
( r :db )
INFO [ventas.database:34] - Stopping database
:reloading ()
INFO [ventas.database:27] - Starting database, URL: datomic:dev://localhost:4334/ventas
=> :doneБаза данных датомична. Пользовательская система сущности базы данных, которая опирается на core.spec, абстрагирует базу данных и позволяет легко тестировать и генерировать образцы данных.
; ; recreates the database, applies the schema, creates the fixtures and seeds the database with randomly generated entities
( seed/seed :recreate? true :generate? true )Многие функции утилиты делают изучение базы данных и получение данных из нее более интерактивными и быстрыми.
; ; returns a list of active users
( entity/query :user { :status :user.status/active })
; ; returns an entity by EID
( entity/find 17592186045760 )
; ; creates an user and returns the result
( entity/create :user { :email " test@email "
:first-name " Test "
:last-name " User " })
; ; generates three users
( entity/generate :user 3 )
; ; updates an user's company
( entity/update { :id 17592186045920
:company " Test " }) Добавить новые сущности легко, а схемы обрабатываются за шторами (поиск вызовов к entity/register-type! Чтобы узнать больше)
HTTP-сервер-http-kit. Маршрутизация обрабатывается Compojure, но они являются всего лишь 4 обработчиками, потому что фактическое общение происходит по веб -окетам, с помощью аккорда.
( register-endpoint!
:products/get
( fn [{ :keys [params]} state]
( entity/serialize ( entity/find ( :id params)))))Аутентификация выполняется с токенами JWT (предоставлена Бадди).
Написано в Clojurescript и использует повторную рамку.
Развитие осуществляется с Shadow-Cljs.
Связь с сервером выполняется с использованием эффекта повторного рамы, который абстрагирует запросы WebSocket. Все запросы и ответы регистрируются до verbose уровня консоли JS, так что вы можете увидеть, что происходит.
Маршрутизация на стороне клиента обрабатывается BIDI, но для нее существует пользовательская обертка, которая облегчает дело.
( routes/define-route!
:frontend.product ; ; this route is nested inside the :frontend route
{ :name ( i18n ::the-name-of-this-page )
:url [ " product/ " :id ]
:component a-re-frame-component-for-this-route})Таблицы стилей написаны в SCSS. Наблюдатель также обрабатывается репликой сервера.
i18n сделан с языком
Семантические компоненты пользовательского интерфейса.
Я бы признателен за помощь в любой части проекта.
Пожалуйста, прочитайте Anplying.md