/tutorial-dotslash

A clojure tutorial project

Primary LanguageClojureEclipse Public License 1.0EPL-1.0

clj.intro/dotslash

Let's create a toy API

DotSlash API

This service will offer a means for users to post "articles", and for other users to comment and vote on them. For the first iteration, there will be no persistence (the data will be held in memory), and all posts and comments will be anonymous (via the "anonymous coward" user).

We will have few endpoints for posting articles, posting comments (which will be all top-level, no replying to other comments will be allowed), fetching articles and their associated comments (as JSON or EDN, to taste), and also rendering an HTML views of the "front page", containing the latest 10 articles, and an HTML endpoint for rendering a pretty version of the article and its comments

It doesn't matter if you can't complete this now, the idea is to get you acquainted with working with the REPL, and thinking in Clojure.

In later sessions, we will gradually add more features, such as:

  • persistence (to a DB of your choice, maybe SQLITE, or XTDB?)
  • component management (e.g., Integrant)
  • users / auth (user creation, login, JWT)
  • comment replies / threads
  • a nice client made in Clojurescript
  • etc...

Instructions

We will create a "reference" branch for each tutorial session, and progressively add more features as we cover different topics.

Checkout the relevant session branch, and have a look under the doc directory

Practicalities

Run the project's tests (they'll fail until you edit them):

$ clojure -T:build test

Run the project's CI pipeline and build an uberjar (this will fail until you edit the tests to pass):

$ clojure -T:build ci

This will produce an updated pom.xml file with synchronized dependencies inside the META-INF directory inside target/classes and the uberjar in target. You can update the version (and SCM tag) information in generated pom.xml by updating build.clj.

If you don't want the pom.xml file in your project, you can remove it. The ci task will still generate a minimal pom.xml as part of the uber task, unless you remove version from build.clj.

Run that uberjar:

$ java -jar target/dotslash-0.1.0-SNAPSHOT.jar

If you remove version from build.clj, the uberjar will become target/dotslash-standalone.jar.

License

Copyright © 2023 Martín Varela

Distributed under the Eclipse Public License version 1.0.