Ventas war eine WIP -E -Commerce -Plattform, die vollständig in Clojure geschrieben wurde.
Dokumentation
Kein Open -Source -E -Commerce -Projekt befriedigt mich. Ich arbeite seit Jahren mit den meisten von ihnen und ich denke, sie saugen. Ich werde keine benennen, aber das ist ungefähr das, was ich über die verfügbaren Lösungen denke:
Sie sind in der Regel schwer zu erweitern oder zu ändern . Sie versuchen, das Problem mit Erweiterungssystemen anzugehen, aber am Ende müssen Sie den Code des Kerns so ändern, dass sie sinnvolle Änderungen vornehmen. Dies zwingt Sie, die Software nie zu aktualisieren oder außergewöhnliche Anstrengungen zu unternehmen, um Ihre Änderungen angewendet zu halten. Aus diesem Grund ist es eine der Hauptentwurfsentscheidungen für dieses Projekt, es sehr einfach zu erweitern und zu ändern.
Sie sind in der Regel schwer zu argumentieren . Da sie auf einem grundlegend veränderlichen Modell aufgebaut sind, ist es unmöglich zu wissen, wie die Datenbank in den aktuellen Zustand gekommen ist. Im besten Fall passiert etwas Schlimmes und ich weiß nicht warum. Im schlimmsten Fall passiert etwas Schlimmes und ich bemerke nicht einmal (bis es zu spät ist). Überall veränderliche Objekte zu haben, hilft auch nicht.
Sie neigen dazu, eine schlechte Leistung zu haben. Natürlich kann alles leistungsfähig gemacht werden, aber ich sollte mich nicht bemühen. Besonders wenn "Anstrengung" SQL -Abfragen umschreiben oder mehrere Tage verschwendet, um herauszufinden, was mein Geschäft dazu bringt, 20 Sekunden zu laden.
Sie neigen dazu, überbetont zu werden oder benutzerfreundliche "Funktionen" zu veranstalten. Dies ist ein Problem in einer Menge Software, aber dennoch ist es da.
Beachten Sie, dass diese Punkte nicht bedeuten, dass Ventas nicht die gleichen Sünden begehen oder nicht. Ich versuche es einfach nicht.
Im Moment ist Ventas für seinen Zweck nicht geeignet. Wenn Sie jedoch Entwickler sind und das Projekt nur in Aktion sehen möchten, lesen Sie weiter.
Sie müssen git und leiningen installieren lassen. Sie benötigen auch Zugriff auf eine Datomische Datenbank und eine Elasticsarch -Instanz. (Siehe Einrichtung einer lokalen Umgebung mit Docker-Compose, wenn Sie sich mit Docker wohl fühlen.)
clone zuerst das Projekt und cd hinein:
$ git clone https://github.com/JoelSanchez/ventas
$ cd ventasJetzt können Sie die Wiederholung starten:
$ lein repl Wenn die Wiederholung fertig ist, führen Sie init : Führen Sie aus:
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 Führen Sie dann das setup! Funktion, mit der die Datenbank migriert, Feortures usw. installiert wird.
( ventas.core/setup! ) Jetzt können Sie localhost:3450/admin eröffnen, um die Verwaltung zu sehen. Eine Frontoffice ist nicht enthalten, aber Sie können sich Ventas-Demo für ein Beispiel ansehen.
Um den Backoffice einzugeben, müssen Sie sich selbst einen Administratorbenutzer erstellen:
(entity/create :user {:first-name "Admin"
:email "[email protected]"
:password "yourpassword"}
Frontendentwicklung im Backoffice durchführen:
lein sass4clj auto
shadow-cljs watch :admin
Sie können eine Verbindung zum NREPL-Server herstellen, das von Shadow-CLJS erstellt wurde, um ein CLJS-RPEL zu erhalten:
lein repl :connect localhost:4002
user= > (shadow.cljs.devtools.api/nrepl-select :admin)Eine Docker-compose.yaml-Datei ist enthalten:
docker-compose up -d
Geschrieben in Clojure.
Verwendet den Mount und mag die repl-gesteuerte Entwicklung sehr. Die Code -Reload erfolgt durch Aufrufen von repl/r . Die App -Initialisierung erfolgt durch Aufrufen von 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
=> :doneDie Datenbank ist datomic. Ein benutzerdefiniertes Datenbankentitätssystem, das auf Core beruht.
; ; recreates the database, applies the schema, creates the fixtures and seeds the database with randomly generated entities
( seed/seed :recreate? true :generate? true )Viele Nutzfunktionen machen die Erkundung der Datenbank und das Erhalten von Daten interaktiver und schneller.
; ; 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 " }) Das Hinzufügen neuer Entitäten ist einfach und die Ergänzungen des Schemas werden hinter den Vorhängen behandelt (suchen Sie nach Anrufen bei entity/register-type! Um mehr zu erfahren)
Der HTTP-Server ist HTTP-KIT. Routing wird von Compojure behandelt, aber es sind nur 4 Handler, da die tatsächliche Kommunikation mit Hilfe von Akkord über Websockets stattfindet.
( register-endpoint!
:products/get
( fn [{ :keys [params]} state]
( entity/serialize ( entity/find ( :id params)))))Die Authentifizierung erfolgt mit JWT -Token (bereitgestellt von Buddy).
Geschrieben in ClojureScript und verwendet Re-Frame.
Die Entwicklung erfolgt mit Schatten-ClJs.
Die Kommunikation mit dem Server erfolgt mit einem Re-Frame-Effekt, der WebSocket-Anforderungen abstrahiert. Alle Anfragen und Antworten werden auf der verbose Ebene der JS -Konsole angemeldet, sodass Sie sehen können, was los ist.
Das Kunden-Seiten-Routing wird von BIDI behandelt, aber es gibt eine benutzerdefinierte Wrapper, die es viel einfacher macht, damit umzugehen.
( 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})Stylesheets sind in SCSS geschrieben. Der Beobachter wird auch durch die Reply des Servers behandelt.
i18n ist mit der Zunge fertig
Semantische UI -Komponenten.
Ich würde mich in einem Teil des Projekts helfen.
Bitte lesen Sie mitwirkend.md