Commit | Line | Data |
---|---|---|
77e80966 JC |
1 | package genre |
2 | ||
3 | import ( | |
4 | "encoding/json" | |
5 | "git.jacobcasper.com/brackets/env" | |
6 | "git.jacobcasper.com/brackets/routes" | |
7 | "git.jacobcasper.com/brackets/types" | |
8 | "log" | |
9 | "net/http" | |
10 | ) | |
11 | ||
12 | func Index(env *env.Env) routes.Handler { | |
13 | return func(w http.ResponseWriter, r *http.Request) { | |
14 | if r.Method != "GET" { | |
15 | http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed) | |
16 | return | |
17 | } | |
18 | ||
fc4e3648 JC |
19 | w.Header().Set("Access-Control-Allow-Origin", env.CorsOrigin) |
20 | w.Header().Set("Vary", "Origin") | |
77e80966 JC |
21 | w.Header().Set("Content-Type", "application/json") |
22 | ||
23 | genreName := r.FormValue("name") | |
24 | if genreName != "" { | |
25 | genre := types.Genre{} | |
9a3c373c JC |
26 | row := env.Db.Db.QueryRow(` |
27 | SELECT ID, NAME | |
28 | FROM GENRE | |
29 | WHERE NAME = lower(?)`, | |
30 | genreName, | |
31 | ) | |
77e80966 JC |
32 | if err := row.Scan(&genre.ID, &genre.Name); err != nil { |
33 | http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) | |
34 | return | |
35 | } | |
36 | b, err := json.Marshal(genre) | |
37 | if err != nil { | |
38 | log.Print(err) | |
39 | http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) | |
40 | return | |
41 | } | |
42 | w.Write(b) | |
43 | return | |
44 | } | |
45 | ||
9a3c373c JC |
46 | rows, err := env.Db.Db.Query(` |
47 | SELECT ID, NAME | |
48 | FROM GENRE | |
49 | LIMIT 20`, | |
50 | ) | |
77e80966 JC |
51 | if err != nil { |
52 | http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) | |
53 | return | |
54 | } | |
55 | defer rows.Close() | |
56 | ||
57 | genres := make([]types.Genre, 0) | |
58 | for rows.Next() { | |
59 | genre := types.Genre{} | |
60 | if err := rows.Scan(&genre.ID, &genre.Name); err != nil { | |
61 | http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) | |
62 | return | |
63 | } | |
64 | genres = append(genres, genre) | |
65 | } | |
66 | if err = rows.Err(); err != nil { | |
67 | log.Print(err) | |
68 | http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) | |
69 | return | |
70 | } | |
71 | b, err := json.Marshal(genres) | |
72 | if err != nil { | |
73 | log.Print(err) | |
74 | http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) | |
75 | return | |
76 | } | |
77 | w.Write(b) | |
78 | } | |
79 | } |