clojurecup2014-luduverse/src/luduverse/models/entry.clj
2014-09-28 20:59:27 +02:00

39 lines
1.3 KiB
Clojure

(ns luduverse.models.entry
(:require [korma.core :refer :all]
[luduverse.db :refer :all]
[luduverse.models.user :as user]
[luduverse.models.competition :as competition]
[luduverse.models.source :as source]))
(defn all []
(select entries))
(defn by-id [entry-id]
(first (select entries
(with competitions)
(with users)
(where {:id entry-id}))))
(defn by-ld-uid [ld-uid]
(first (select entries
(where {:ld_uid ld-uid}))))
(defn exists? [ld-uid]
(not (empty? (select entries
(fields :id)
(where {:ld_uid ld-uid})
(limit 1)))))
(defn create! [fields]
(let [username (user/unique-user (:username fields))
competition-id (:id (competition/latest))]
(if-not (exists? (:ld_uid fields))
(insert entries (values {:ld_uid (:ld_uid fields)
:title (:title fields)
:description (:description fields)
:type (:type fields)
:user_id (:id username)
:competition_id competition-id})))
(doseq [link (:links fields)]
(source/create! (:id (by-ld-uid (:ld_uid fields))) (:url link) (:title link)))))