Send CORS Header for app
[brackets.git] / backend / routes / genre / genre.go
CommitLineData
77e80966
JC
1package genre
2
3import (
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
12func 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(`
27SELECT ID, NAME
28FROM GENRE
29WHERE 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(`
47SELECT ID, NAME
48FROM GENRE
49LIMIT 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}