Skip to content

Commit fa7055e

Browse files
authored
pause endpoint framework added (#10)
backend functionality set up pause functionality set up cleaned up pause session function unpause architecture set up restart functionality finished test: 💍 handlePause and handleUnpause
1 parent 4591dc1 commit fa7055e

File tree

6 files changed

+266
-83
lines changed

6 files changed

+266
-83
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ To run the server locally
3838
* `scripts/deploy.sh $VERSION_NUMBER` - Deploys any changes to kubernetes manifests, builds a new docker image, pushes it to docker hub and finally scales the deployment to pull the newly created image.
3939
* `scripts/deploy_kubernetes_config.sh` - Deploys just kubernetes manifest changes (kubernetes secret is excluded from the script).
4040
* `scripts/push_docker.sh $VERSION_NUMBER` - Builds and pushes the code to dockerhub with a $VERSION_NUMBER as a tag.
41+
* `go test -v ./...` - Runs all tests
4142

4243
## Deployment
4344

http-routes/http-routes.go

+46-12
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
package httproutes
22

33
import (
4-
"log"
54
"encoding/json"
5+
"log"
66
"net/http"
7+
78
"github.com/gorilla/websocket"
8-
"github.com/jaskaransarkaria/programming-timer-server/session"
99
"github.com/jaskaransarkaria/programming-timer-server/readers"
10+
"github.com/jaskaransarkaria/programming-timer-server/session"
1011
"github.com/jaskaransarkaria/programming-timer-server/utils"
1112
)
1213

1314
var upgrader = websocket.Upgrader{
1415
// empty struct means use defaults
15-
ReadBufferSize: 1024,
16+
ReadBufferSize: 1024,
1617
WriteBufferSize: 1024,
1718
}
1819

19-
func enableCors(w *http.ResponseWriter) {(*w).Header().Set("Access-Control-Allow-Origin", "*")}
20+
func enableCors(w *http.ResponseWriter) { (*w).Header().Set("Access-Control-Allow-Origin", "*") }
2021

2122
func wsEndpoint(w http.ResponseWriter, r *http.Request) {
2223
// this is for CORS - allow all origin
@@ -42,24 +43,53 @@ func updateSessionEndpoint(w http.ResponseWriter, r *http.Request) {
4243
session.UpdateTimerChannel <- sessionToUpdate
4344
}
4445

46+
func pauseSessionEndpoint(w http.ResponseWriter, r *http.Request) {
47+
var sessionToPause session.PauseRequest
48+
var requestBody = r.Body
49+
log.Println("request body", requestBody)
50+
enableCors(&w)
51+
err := json.NewDecoder(requestBody).Decode(&sessionToPause)
52+
log.Println("pause session endpoint reached", sessionToPause)
53+
if err != nil {
54+
log.Println(err)
55+
}
56+
defer r.Body.Close()
57+
session.PauseTimerChannel <- sessionToPause
58+
}
59+
60+
func unpauseSessionEndpoint(w http.ResponseWriter, r *http.Request) {
61+
var sessionToUnpause session.UnpauseRequest
62+
var requestBody = r.Body
63+
log.Println("request body", requestBody)
64+
enableCors(&w)
65+
err := json.NewDecoder(requestBody).Decode(&sessionToUnpause)
66+
log.Println("unpause session endpoint reached", sessionToUnpause)
67+
if err != nil {
68+
log.Println(err)
69+
}
70+
defer r.Body.Close()
71+
session.UnpauseTimerChannel <- sessionToUnpause
72+
}
73+
4574
func newSessionEndpoint(w http.ResponseWriter, r *http.Request) {
4675
var timerRequest session.StartTimerReq
4776
var requestBody = r.Body
77+
log.Println(requestBody)
4878
enableCors(&w)
4979
err := json.NewDecoder(requestBody).Decode(&timerRequest)
5080
if err != nil {
5181
log.Println(err)
5282
}
5383
defer r.Body.Close()
54-
newUser := session.User{ UUID: utils.GenerateRandomID("user") }
84+
newUser := session.User{UUID: utils.GenerateRandomID("user")}
5585
newSession := session.CreateNewUserAndSession(
5686
timerRequest,
57-
newUser,
87+
newUser,
5888
utils.GenerateRandomID,
5989
)
6090
resp := session.InitSessionResponse{
61-
Session: newSession,
62-
User: newUser,
91+
Session: newSession,
92+
User: newUser,
6393
}
6494
newSessionRes, _ := json.Marshal(resp)
6595
w.Write(newSessionRes)
@@ -74,22 +104,22 @@ func joinSessionEndpoint(w http.ResponseWriter, r *http.Request) {
74104
log.Println(err)
75105
}
76106
defer r.Body.Close()
77-
var newUser = session.User{ UUID: utils.GenerateRandomID("user") }
107+
var newUser = session.User{UUID: utils.GenerateRandomID("user")}
78108
matchedSession, err := session.JoinExistingSession(sessionRequest, newUser)
79109
if err != nil {
80110
bufferedErr, _ := json.Marshal(err)
81111
w.Write(bufferedErr)
82112
}
83113
resp := session.InitSessionResponse{
84-
Session: matchedSession,
85-
User: newUser,
114+
Session: matchedSession,
115+
User: newUser,
86116
}
87117
bufferedExistingSession, _ := json.Marshal(resp)
88118
w.Write(bufferedExistingSession)
89119
}
90120

91121
func SetupRoutes() {
92-
http.HandleFunc("/healthz", func (w http.ResponseWriter, r *http.Request) {
122+
http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
93123
w.WriteHeader(200)
94124
w.Write([]byte("ok"))
95125
})
@@ -98,4 +128,8 @@ func SetupRoutes() {
98128
http.HandleFunc("/session/join", joinSessionEndpoint)
99129
http.HandleFunc("/session/update", updateSessionEndpoint)
100130
go readers.UpdateChannelReader()
131+
http.HandleFunc("/session/pause", pauseSessionEndpoint)
132+
go readers.PauseChannelReader()
133+
http.HandleFunc("/session/unpause", unpauseSessionEndpoint)
134+
go readers.UnpauseChannelReader()
101135
}

main.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package main
22

33
import (
4-
"github.com/jaskaransarkaria/programming-timer-server/http-routes"
4+
"flag"
55
"fmt"
6-
"net/http"
76
"log"
8-
"flag"
7+
"net/http"
8+
9+
httproutes "github.com/jaskaransarkaria/programming-timer-server/http-routes"
910
)
11+
1012
// flag allows you to create cli flags and assign a default
1113
var addr = flag.String("addr", "0.0.0.0:8080", "http service address")
1214

readers/readers.go

+19-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package readers
22

33
import (
44
"log"
5+
56
"github.com/gorilla/websocket"
67
"github.com/jaskaransarkaria/programming-timer-server/session"
78
)
@@ -18,7 +19,7 @@ func ConnReader(conn *websocket.Conn) {
1819
}
1920
conn.Close()
2021
break
21-
} else {
22+
} else {
2223
log.Println(string(p))
2324
addToSessionErr := session.AddUserConnToSession(string(p), conn)
2425
if addToSessionErr != nil {
@@ -31,7 +32,23 @@ func ConnReader(conn *websocket.Conn) {
3132
// UpdateChannelReader handle updates to sessions
3233
func UpdateChannelReader() {
3334
for {
34-
recievedUpdate := <- session.UpdateTimerChannel
35+
recievedUpdate := <-session.UpdateTimerChannel
3536
session.HandleUpdateSession(recievedUpdate)
3637
}
3738
}
39+
40+
//PauseChannelReader handles pause requests
41+
func PauseChannelReader() {
42+
for {
43+
pauseRequest := <-session.PauseTimerChannel
44+
session.HandlePauseSession(pauseRequest)
45+
}
46+
}
47+
48+
//UnpauseChannelReader handles restart requests
49+
func UnpauseChannelReader() {
50+
for {
51+
unpauseRequest := <-session.UnpauseTimerChannel
52+
session.HandleUnpauseSession(unpauseRequest)
53+
}
54+
}

0 commit comments

Comments
 (0)