Skip to content

Commit 5237d7e

Browse files
committed
let frontend show movie genre aloneside with movie name
1 parent 626cc0e commit 5237d7e

File tree

8 files changed

+70
-14
lines changed

8 files changed

+70
-14
lines changed

Diff for: resources/sql/queries.sql

-5
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,6 @@ WHERE sess = :sess
2525
DELETE FROM users
2626
WHERE id = :id
2727

28-
-- :name create-genres! :! :n
29-
-- :doc create multiple genres with :tuple* parameter type
30-
INSERT INTO genres (id, unkonwn, action, animation, children, comedy, crime, documentary, drama, fantasy, film_noir, horror, musical, mystery, romance, sci_fi, thriller, war, western)
31-
VALUES :tuple*:genres
32-
3328
-- :name create-ratings! :! :n
3429
-- :doc create multiple rating records with :tuple* parameter type
3530
INSERT INTO ratings (user_id, item_id, rating)

Diff for: resources/templates/rated.html

+10
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ <h2>
1717
<th>
1818
movie name
1919
</th>
20+
<th>
21+
movie genre
22+
</th>
2023
<th>
2124
my rating
2225
</th>
@@ -31,6 +34,13 @@ <h2>
3134
<td>
3235
{{movie.name}}
3336
</td>
37+
<td>
38+
<ul>
39+
{% for genre in movie.genre %}
40+
<li>{{genre}}</li>
41+
{% endfor %}
42+
</ul>
43+
</td>
3444
<td>
3545
{{movie.r}}
3646
</td>

Diff for: resources/templates/root.html

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ <h2>
1717
<th>
1818
movie name
1919
</th>
20+
<th>
21+
movie genre
22+
</th>
2023
<th>
2124
average rating
2225
</th>

Diff for: resources/templates/user.html

+3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ <h2>
1717
<th>
1818
movie name
1919
</th>
20+
<th>
21+
movie genre
22+
</th>
2023
<th>
2124
guessing rating
2225
</th>

Diff for: resources/u.genre

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
unknown|0
2+
Action|1
3+
Adventure|2
4+
Animation|3
5+
Children's|4
6+
Comedy|5
7+
Crime|6
8+
Documentary|7
9+
Drama|8
10+
Fantasy|9
11+
Film-Noir|10
12+
Horror|11
13+
Musical|12
14+
Mystery|13
15+
Romance|14
16+
Sci-Fi|15
17+
Thriller|16
18+
War|17
19+
Western|18
20+

Diff for: src/clj/intowow/core.clj

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
(ns intowow.core
2-
(:require [intowow.handler :as handler]
2+
(:require [intowow.data :as data]
3+
[intowow.handler :as handler]
34
[luminus.repl-server :as repl]
45
[luminus.http-server :as http]
56
[luminus-migrations.core :as migrations]
@@ -41,8 +42,8 @@
4142
(log/info "model training starts at" (time/now))
4243
(try
4344
(spark/re-train)
44-
(catch Exception e
45-
(log/error "Error in model training :" e)))
45+
(catch Exception e
46+
(log/error "Error in model training :" e)))
4647
(log/info "model training ends at" (time/now))))
4748

4849
(defn init-spark
@@ -66,6 +67,7 @@
6667
:started)]
6768
(log/info component "started"))
6869
(init-spark)
70+
(data/init-genre!)
6971
(.addShutdownHook (Runtime/getRuntime) (Thread. stop-app)))
7072

7173
(defn -main [& args]

Diff for: src/clj/intowow/data.clj

+18-1
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,22 @@
2626
(map line->item-tuple)
2727
(into {}))))
2828

29+
(def genre-data (atom []))
30+
31+
(defn get-genre-by-id
32+
"for every id, return the genre as
33+
the form [children horror]"
34+
[id]
35+
(let [index (dec id)]
36+
(mapv name (map key (filter #(= (val %) 1) (remove #(= (key %) :id) (get @genre-data index)))))))
37+
2938
(defn line->genre-tuple [line]
3039
(let [line-list (s/split line #"\|")
3140
genre (drop 5 line-list)
3241
id (first line-list)]
3342
(->> (cons id genre)
3443
(map to-long)
35-
(zipmap [:id :unknown :action :animation :children :comedy :crime :documentary :drama :fantasy :film_noir :horror :musical :mystery :romance :sci_fi :thriller :war :western]))))
44+
(zipmap [:id :unknown :action :adventure :animation :children :comedy :crime :documentary :drama :fantasy :film_noir :horror :musical :mystery :romance :sci_fi :thriller :war :western]))))
3645

3746
(defn load-genres
3847
"return vector as:
@@ -43,6 +52,14 @@
4352
(map line->genre-tuple)
4453
(into []))))
4554

55+
(defn init-genre!
56+
"initialize the genre-data as an array of map.
57+
movie item id 1 ---> array index 0
58+
movie item id 1682 ---> array index 1681
59+
"
60+
[]
61+
(reset! genre-data (load-genres "u.item")))
62+
4663
(defn item->name [file]
4764
(let [items (load-items file)]
4865
(fn [{:keys [id]}]

Diff for: src/clj/intowow/routes/home.clj

+11-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
(ns intowow.routes.home
2-
(:require [intowow.sparkling :as spk]
2+
(:require [intowow.data :as data]
3+
[intowow.sparkling :as spk]
34
[intowow.layout :as layout]
45
[compojure.core :refer [defroutes GET POST]]
56
[ring.util.http-response :as response]
@@ -20,7 +21,7 @@
2021
(let [raw-data (try
2122
(spk/recommend uid number)
2223
(catch Exception e nil))]
23-
(log/info "recommend raw data with data type as: " (class raw-data) )
24+
(log/info "recommend raw data with data type as: " (class raw-data))
2425
(if (nil? raw-data)
2526
(db/get-movie-average)
2627
(map #(zipmap [:item_id :name :r] %) raw-data))))
@@ -50,13 +51,18 @@
5051
[:input {:type "hidden" :name "itemid" :value (str iid)}]
5152
[:input {:type "submit" :value "Submit"}]]))
5253

54+
(defn get-genre-by-id [id]
55+
(html [:ul
56+
(for [x (data/get-genre-by-id id)]
57+
[:li x])]))
58+
5359
(defn guest-data-page [{{start "start" length "length" draw "draw"}
5460
:form-params :as req}]
5561
(let [s (Integer/parseInt start)
5662
len (Integer/parseInt length)
5763
d (Integer/parseInt draw)
5864
data (db/get-movie-average)
59-
page (mapv #(vector (:item_id %) (:name %) (:r %))
65+
page (mapv #(vector (:item_id %) (:name %) (get-genre-by-id (:item_id %)) (:r %))
6066
(drop s (take (+ s len) data)))]
6167
(generate-string
6268
{:draw d
@@ -73,7 +79,7 @@
7379
len (Integer/parseInt length)
7480
d (Integer/parseInt draw)
7581
data (recommend-movies u)
76-
page (mapv #(vector (:item_id %) (:name %) (:r %) (user-submit-form (:item_id %)))
82+
page (mapv #(vector (:item_id %) (:name %) (get-genre-by-id (:item_id %)) (:r %) (user-submit-form (:item_id %)))
7783
(drop s (take (+ s len) data)))]
7884
(log/info (take 2 data))
7985
(generate-string
@@ -93,7 +99,7 @@
9399
(defn rated-page [{{user-sess-id :identity} :session :as req}]
94100
(let [{id :id :as user} (db/get-user-by-sess {:sess user-sess-id})]
95101
(layout/render "rated.html"
96-
{:movies (db/get-movie-rating-by-id {:id id}) :h2 (:email user)})))
102+
{:movies (map #(assoc % :genre (data/get-genre-by-id (:item_id %))) (db/get-movie-rating-by-id {:id id})) :h2 (:email user)})))
97103

98104
(defn get-login []
99105
(layout/render "login.html"))

0 commit comments

Comments
 (0)