Ventas adalah platform eCommerce WIP yang ditulis sepenuhnya di Clojure.
Dokumentasi
Tidak ada proyek e -commerce open source yang memuaskan saya. Saya telah bekerja dengan sebagian besar dari mereka selama bertahun -tahun dan saya pikir mereka payah. Saya tidak akan menyebutkan nama apa pun, tetapi ini kira -kira apa yang saya pikirkan tentang solusi yang tersedia:
Mereka cenderung sulit diperluas atau dimodifikasi . Mereka mencoba mengatasi masalah dengan sistem ekstensi, tetapi pada akhirnya Anda perlu memodifikasi kode inti untuk melakukan perubahan yang bermakna. Ini memaksa Anda untuk memilih antara tidak pernah memperbarui perangkat lunak atau melakukan upaya luar biasa untuk menjaga perubahan Anda diterapkan. Inilah sebabnya salah satu keputusan desain utama untuk proyek ini adalah membuatnya sangat mudah untuk diperluas dan dimodifikasi.
Mereka cenderung sulit untuk bernalar . Karena mereka dibangun di atas model yang dapat berubah secara fundamental, tidak mungkin untuk mengetahui bagaimana database dapat mencapai keadaan saat ini. Dalam kasus terbaik, sesuatu yang buruk terjadi dan saya tidak tahu mengapa. Dalam kasus terburuk, sesuatu yang buruk terjadi dan saya bahkan tidak memperhatikan (sampai terlambat). Memiliki benda yang bisa berubah di mana -mana juga tidak membantu.
Mereka cenderung memiliki kinerja yang buruk di luar kotak . Tentu saja semuanya dapat dibuat performant, tetapi saya tidak perlu melakukan upaya. Terutama ketika "upaya" berarti menulis ulang pertanyaan SQL, atau membuang -buang beberapa hari mencoba mencari tahu apa yang menyebabkan toko saya membutuhkan waktu 20 detik untuk memuat.
Mereka cenderung direkayasa berlebihan , atau memiliki "fitur" pengguna. Ini adalah masalah dalam banyak perangkat lunak, tapi tetap saja di sana.
Perhatikan bahwa poin -poin ini tidak berarti bahwa Ventas tidak atau tidak akan melakukan dosa yang sama. Saya hanya mencoba untuk tidak melakukannya.
Saat ini, Ventas tidak layak untuk tujuannya. Namun, jika Anda seorang pengembang dan hanya ingin melihat proyek yang sedang beraksi, baca terus.
Anda perlu menginstal git dan leiningen . Anda juga memerlukan akses ke database datomic dan instance Elasticsearch. (Lihat Menyiapkan Lingkungan Lokal dengan Kompose Docker Jika Anda merasa nyaman dengan Docker)
clone pertama proyek dan cd ke dalamnya:
$ git clone https://github.com/JoelSanchez/ventas
$ cd ventasSekarang Anda dapat memulai replikan:
$ lein repl Saat rept sudah siap, jalankan 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 Kemudian, jalankan setup! fungsi, yang akan memigrasi basis data, memasang perlengkapan, dll.:
( ventas.core/setup! ) Sekarang Anda dapat membuka localhost:3450/admin untuk melihat administrasi. Frontoffice tidak termasuk, tetapi Anda dapat memeriksa Ventas-Demo sebagai contoh.
Untuk memasuki backoffice, Anda harus membuat pengguna admin sendiri:
(entity/create :user {:first-name "Admin"
:email "[email protected]"
:password "yourpassword"}
Untuk melakukan pengembangan frontend di backoffice:
lein sass4clj auto
shadow-cljs watch :admin
Anda dapat terhubung ke server NREPL yang dibuat oleh Shadow-CLJS untuk mendapatkan CLJS RPEL:
lein repl :connect localhost:4002
user= > (shadow.cljs.devtools.api/nrepl-select :admin)File Docker-Compose.YAML disertakan:
docker-compose up -d
Ditulis dalam clojure.
Menggunakan Mount dan sangat menyukai pengembangan yang digerakkan oleh repl. Muat ulang kode dilakukan dengan menelepon repl/r . Inisialisasi APP dilakukan dengan menelepon 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
=> :doneDatabase adalah datomic. Sistem entitas basis data khusus, yang bergantung pada core.spec, abstrak database dan memungkinkan pengujian yang mudah dan menghasilkan data sampel.
; ; recreates the database, applies the schema, creates the fixtures and seeds the database with randomly generated entities
( seed/seed :recreate? true :generate? true )Banyak fungsi utilitas membuat penjelajahan database dan mendapatkan data darinya lebih interaktif dan cepat.
; ; 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 " }) Menambahkan entitas baru mudah dan penambahan skema ditangani di balik tirai (cari panggilan ke entity/register-type! Untuk mengetahui lebih banyak)
Server HTTP adalah HTTP-KIT. Routing ditangani oleh CompoJure, tetapi mereka hanya 4 penangan, karena komunikasi yang sebenarnya terjadi melalui websockets, dengan bantuan chord.
( register-endpoint!
:products/get
( fn [{ :keys [params]} state]
( entity/serialize ( entity/find ( :id params)))))Otentikasi dilakukan dengan token JWT (disediakan oleh Buddy).
Ditulis dalam clojurescript, dan menggunakan bingkai ulang.
Pengembangan dilakukan dengan Shadow-CLJS.
Komunikasi dengan server dilakukan dengan menggunakan efek frame-frame yang mengabstraksi permintaan Websocket. Semua permintaan dan tanggapan dicatat ke tingkat verbose konsol JS, sehingga Anda dapat melihat apa yang terjadi.
Perutean sisi klien ditangani oleh Bidi, tetapi ada pembungkus khusus untuk itu, yang membuat segalanya lebih mudah untuk ditangani.
( 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})Stylesheet ditulis dalam SCSS. Pengamat juga ditangani oleh repl server.
I18n selesai dengan lidah
Komponen UI semantik.
Saya menghargai bantuan di bagian mana pun dari proyek.
Harap baca Contributing.md