/
handlers.go
132 lines (105 loc) · 2.76 KB
/
handlers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Package handlers is used to separate the handlers from other functions of the API.
package handlers
import (
"log"
"net/http"
"strings"
"github.com/bruno-chavez/restedancestor/database"
"github.com/bruno-chavez/restedancestor/quotes"
"github.com/julienschmidt/httprouter"
)
var repo = quotes.NewRepository(database.NewDb())
// Random handles the '/random' endpoint
func Random(w http.ResponseWriter, _ *http.Request, _ httprouter.Params) {
q := repo.Random()
err := writeResponse(w, q)
if err != nil {
log.Fatal(err)
}
}
// All handles the '/all' endpoint
func All(w http.ResponseWriter, _ *http.Request, _ httprouter.Params) {
err := writeResponse(w, repo.All())
if err != nil {
log.Fatal(err)
}
}
// Search handles the '/search' endpoint
func Search(w http.ResponseWriter, _ *http.Request, p httprouter.Params) {
word := strings.ToLower(p.ByName("word"))
qs := repo.AllByWord(word)
if len(qs) != 0 {
err := writeResponse(w, qs)
if err != nil {
log.Fatal(err)
}
} else {
err := writeNotFound(w, word)
if err != nil {
log.Fatal(err)
}
}
}
// Senile handles the '/senile' endpoint
func Senile(w http.ResponseWriter, _ *http.Request, _ httprouter.Params) {
q1 := repo.Random()
q2 := repo.Random()
quoteArray := strings.Split(q1.Quote, " ")
quoteArray1 := strings.Split(q2.Quote, " ")
var quote string
if len(quoteArray) < len(quoteArray1) {
quote = stringModifier(quoteArray, quoteArray1)
} else {
quote = stringModifier(quoteArray1, quoteArray)
}
joinedQuote := quotes.Quote{Quote: quote}
err := writeResponse(w, joinedQuote)
if err != nil {
log.Fatal(err)
}
}
// Find handles the '/uuid/:uuid/find' endpoint
func Find(w http.ResponseWriter, _ *http.Request, p httprouter.Params) {
uuidToSearch := p.ByName("uuid")
q := repo.FindByUUID(uuidToSearch)
if q == nil {
err := writeNotFound(w, uuidToSearch)
if err != nil {
log.Fatal(err)
}
return
}
err := writeResponse(w, q)
if err != nil {
log.Fatal(err)
}
}
// Like handles the '/uuid/:uuid/like' endpoint
func Like(w http.ResponseWriter, _ *http.Request, p httprouter.Params) {
uuidToSearch := p.ByName("uuid")
if err := repo.IncrementsScore(uuidToSearch); err != nil {
err = writeNotFound(w, uuidToSearch)
if err != nil {
log.Fatal(err)
}
return
}
}
// Dislike handles the '/uuid/:uuid/dislike' endpoint
func Dislike(w http.ResponseWriter, _ *http.Request, p httprouter.Params) {
uuidToSearch := p.ByName("uuid")
if err := repo.DecrementsScore(uuidToSearch); err != nil {
err = writeNotFound(w, uuidToSearch)
if err != nil {
log.Fatal(err)
}
return
}
}
// Top handles the '/top' endpoint
func Top(w http.ResponseWriter, _ *http.Request, _ httprouter.Params) {
err := writeResponse(w, repo.Preferred())
if err != nil {
log.Fatal(err)
}
}