aboutsummaryrefslogtreecommitdiffstats
path: root/api/handlers
diff options
context:
space:
mode:
Diffstat (limited to 'api/handlers')
-rw-r--r--api/handlers/auth.go11
-rw-r--r--api/handlers/conference.go103
-rw-r--r--api/handlers/favourites.go19
-rw-r--r--api/handlers/schedule.go26
4 files changed, 120 insertions, 39 deletions
diff --git a/api/handlers/auth.go b/api/handlers/auth.go
index c19fc3a..7b0a4c8 100644
--- a/api/handlers/auth.go
+++ b/api/handlers/auth.go
@@ -34,23 +34,18 @@ func Login(authService auth.Service, store session.Service) http.HandlerFunc {
}
// TODO X-Forwarded-For
- session, err := store.Create(user.ID, user.Username, r.RemoteAddr, r.UserAgent())
+ session, err := store.Create(user.ID, user.Username, r.RemoteAddr, r.UserAgent(), user.Admin)
if err != nil {
return err
}
- cookie := &http.Cookie{
- Name: "confplanner_session",
- Value: session.Token,
- Path: "/api",
- }
- http.SetCookie(w, cookie)
-
return &dto.OkResponse{
Code: http.StatusOK,
Data: &dto.LoginResponse{
ID: user.ID,
+ Token: session.Token,
Username: user.Username,
+ Admin: session.Admin,
},
}
})
diff --git a/api/handlers/conference.go b/api/handlers/conference.go
new file mode 100644
index 0000000..42cbfc1
--- /dev/null
+++ b/api/handlers/conference.go
@@ -0,0 +1,103 @@
+package handlers
+
+import (
+ "errors"
+ "net/http"
+ "strconv"
+
+ "github.com/LMBishop/confplanner/api/dto"
+ "github.com/LMBishop/confplanner/pkg/conference"
+ "github.com/golang-cz/nilslice"
+)
+
+func GetSchedule(service conference.Service) http.HandlerFunc {
+ return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error {
+ conferenceID, err := strconv.Atoi(r.PathValue("id"))
+ if err != nil {
+ return &dto.ErrorResponse{
+ Code: http.StatusBadRequest,
+ Message: "Bad conference ID",
+ }
+ }
+
+ schedule, lastUpdated, err := service.GetSchedule(int32(conferenceID))
+ if err != nil {
+ return err
+ }
+
+ return &dto.OkResponse{
+ Code: http.StatusOK,
+ Data: &dto.GetScheduleResponse{
+ Schedule: nilslice.Initialize(*schedule),
+ LastUpdated: lastUpdated,
+ },
+ }
+ })
+}
+
+func GetConferences(service conference.Service) http.HandlerFunc {
+ return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error {
+ conferences, err := service.GetConferences()
+ if err != nil {
+ return err
+ }
+
+ var conferencesResponse []*dto.ConferenceResponse
+ for _, c := range conferences {
+ conference := &dto.ConferenceResponse{}
+ conference.Scan(c)
+ conferencesResponse = append(conferencesResponse, conference)
+ }
+
+ return &dto.OkResponse{
+ Code: http.StatusOK,
+ Data: conferencesResponse,
+ }
+ })
+}
+
+func CreateConference(service conference.Service) http.HandlerFunc {
+ return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error {
+ var request dto.CreateConferenceRequest
+ if err := dto.ReadDto(r, &request); err != nil {
+ return err
+ }
+
+ createdConference, err := service.CreateConference(request.URL)
+ if err != nil {
+ if errors.Is(err, conference.ErrScheduleFetch) {
+ return &dto.ErrorResponse{
+ Code: http.StatusBadRequest,
+ Message: "Could not fetch schedule from URL (is it a valid pentabarf XML file?)",
+ }
+ }
+ return err
+ }
+
+ var response dto.ConferenceResponse
+ response.Scan(*createdConference)
+ return &dto.OkResponse{
+ Code: http.StatusCreated,
+ Data: response,
+ }
+ })
+}
+
+func DeleteConference(service conference.Service) http.HandlerFunc {
+ return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error {
+ var request dto.DeleteConferenceRequest
+ if err := dto.ReadDto(r, &request); err != nil {
+ return err
+ }
+
+ err := service.DeleteConference(request.ID)
+ if err != nil {
+ return err
+ }
+
+ return &dto.OkResponse{
+ Code: http.StatusOK,
+ Data: nil,
+ }
+ })
+}
diff --git a/api/handlers/favourites.go b/api/handlers/favourites.go
index 502cb43..d5fe8c3 100644
--- a/api/handlers/favourites.go
+++ b/api/handlers/favourites.go
@@ -2,6 +2,7 @@ package handlers
import (
"net/http"
+ "strconv"
"github.com/LMBishop/confplanner/api/dto"
"github.com/LMBishop/confplanner/pkg/favourites"
@@ -16,7 +17,7 @@ func CreateFavourite(service favourites.Service) http.HandlerFunc {
return err
}
- if request.GUID == nil && request.ID == nil {
+ if request.GUID == nil && request.EventID == nil {
return &dto.ErrorResponse{
Code: http.StatusBadRequest,
Message: "One of event GUID or event ID must be specified",
@@ -34,7 +35,7 @@ func CreateFavourite(service favourites.Service) http.HandlerFunc {
}
}
- createdFavourite, err := service.CreateFavouriteForUser(session.UserID, uuid, request.ID)
+ createdFavourite, err := service.CreateFavouriteForUser(session.UserID, uuid, request.EventID, request.ConferenceID)
if err != nil {
return err
}
@@ -50,9 +51,17 @@ func CreateFavourite(service favourites.Service) http.HandlerFunc {
func GetFavourites(service favourites.Service) http.HandlerFunc {
return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error {
+ conferenceID, err := strconv.Atoi(r.PathValue("id"))
+ if err != nil {
+ return &dto.ErrorResponse{
+ Code: http.StatusBadRequest,
+ Message: "Bad conference ID",
+ }
+ }
+
session := r.Context().Value("session").(*session.UserSession)
- favourites, err := service.GetFavouritesForUser(session.UserID)
+ favourites, err := service.GetFavouritesForUserConference(session.UserID, int32(conferenceID))
if err != nil {
return err
}
@@ -79,7 +88,7 @@ func DeleteFavourite(service favourites.Service) http.HandlerFunc {
return err
}
- if request.GUID == nil && request.ID == nil {
+ if request.GUID == nil && request.EventID == nil {
return &dto.ErrorResponse{
Code: http.StatusBadRequest,
Message: "One of event GUID or event ID must be specified",
@@ -96,7 +105,7 @@ func DeleteFavourite(service favourites.Service) http.HandlerFunc {
}
}
- err = service.DeleteFavouriteForUserByEventDetails(session.UserID, uuid, request.ID)
+ err = service.DeleteFavouriteForUserByEventDetails(session.UserID, uuid, request.EventID, request.ConferenceID)
if err != nil {
if err == favourites.ErrNotFound {
return &dto.ErrorResponse{
diff --git a/api/handlers/schedule.go b/api/handlers/schedule.go
deleted file mode 100644
index 061e6f9..0000000
--- a/api/handlers/schedule.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package handlers
-
-import (
- "net/http"
-
- "github.com/LMBishop/confplanner/api/dto"
- "github.com/LMBishop/confplanner/pkg/schedule"
- "github.com/golang-cz/nilslice"
-)
-
-func GetSchedule(service schedule.Service) http.HandlerFunc {
- return dto.WrapResponseFunc(func(w http.ResponseWriter, r *http.Request) error {
- schedule, lastUpdated, err := service.GetSchedule()
- if err != nil {
- return err
- }
-
- return &dto.OkResponse{
- Code: http.StatusOK,
- Data: &dto.GetScheduleResponse{
- Schedule: nilslice.Initialize(*schedule),
- LastUpdated: lastUpdated,
- },
- }
- })
-}