From 146f1bef376d9fc9fd216eb905340ea7c293b2a5 Mon Sep 17 00:00:00 2001 From: Aaron Mueller Date: Sun, 29 Sep 2013 01:08:25 +0200 Subject: [PATCH] More DB work ... --- src/ldview/models/competition.clj | 9 +++++++++ src/ldview/models/entity.clj | 22 +++++++++++++++++++--- src/ldview/models/schema.clj | 5 +++-- src/ldview/models/user.clj | 19 +++++++++++++++++++ src/ldview/tasks/scrape.clj | 4 ++-- 5 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 src/ldview/models/competition.clj create mode 100644 src/ldview/models/user.clj diff --git a/src/ldview/models/competition.clj b/src/ldview/models/competition.clj new file mode 100644 index 0000000..9ad9c51 --- /dev/null +++ b/src/ldview/models/competition.clj @@ -0,0 +1,9 @@ +(ns ldview.models.competition + (:use korma.core + [ldview.models.db] + [ldview.util])) + +(defn latest [] + (first (select competitions + (where {:number *competition*}) + (limit 1)))) diff --git a/src/ldview/models/entity.clj b/src/ldview/models/entity.clj index bf41d25..fc3d492 100644 --- a/src/ldview/models/entity.clj +++ b/src/ldview/models/entity.clj @@ -1,9 +1,25 @@ (ns ldview.models.entity (:use korma.core - [ldview.models.db])) + [ldview.models.db]) + (:require [ldview.models.user :as user])) (defn all [] (select entries)) -(defn insert [fields] - (insert entries (values fields))) +(defn exists? [ld-uid] + (not (empty? (select entities + (fields :id) + (where {:ld_uid ld-uid}) + (limit 1))))) + +(defn create! [fields] + (let [user (user/unique-user (:user fields)) + competition-id (competition/latest)] + (if-not (exists? (:ld_uid fields)) + (insert entries (values { + :ld_uid (:ld_uid fields) + :title (:title fields) + :description (:description fields) + :user_id (:id user) + :competition_id (:id competition)}))))) + diff --git a/src/ldview/models/schema.clj b/src/ldview/models/schema.clj index b63ed9f..3b3e0cc 100644 --- a/src/ldview/models/schema.clj +++ b/src/ldview/models/schema.clj @@ -24,14 +24,15 @@ [:title "VARCHAR(255)"] [:description "TEXT"] [:user_id "INT"] - [:contest_id "INT"]) + [:competition_id "INT"]) (sql/create-table :users [:id "INT PRIMARY KEY AUTO_INCREMENT"] [:name "VARCHAR(255)"]) - (sql/create-table :contests + (sql/create-table :competitions [:id "INT PRIMARY KEY AUTO_INCREMENT"] + [:number "INT"] [:name "VARCHAR(255)"]) (sql/create-table :sources diff --git a/src/ldview/models/user.clj b/src/ldview/models/user.clj new file mode 100644 index 0000000..2806998 --- /dev/null +++ b/src/ldview/models/user.clj @@ -0,0 +1,19 @@ +(ns ldview.models.user + (:use korma.core + [ldview.models.db])) + +(defn user-id [username] + (first (select users + (fields :id) + (where {:name username}) + (limit 1)))) + +(defn exists? [username] + (not (empty? (user-id username)))) + +(defn create! [username] + (insert users (values {:name username}))) + +(defn unique-user [username] + (if-not (exists? username) (create! username)) + (user-id username)) diff --git a/src/ldview/tasks/scrape.clj b/src/ldview/tasks/scrape.clj index b9a0aec..11b53c1 100644 --- a/src/ldview/tasks/scrape.clj +++ b/src/ldview/tasks/scrape.clj @@ -51,10 +51,10 @@ links (links-on-entry content) description (html/text (nth (html/select [content] [:p]) 2)) images (images-on-entry content)] - {:id entry-id + {:ld_uid entry-id :title title - :author author :description description + :author author :links links :images images}))