39 lines
1.3 KiB
Clojure
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)))))
|