diff --git a/internal/api/errors.go b/internal/api/errors.go index 045feae..6b19c36 100644 --- a/internal/api/errors.go +++ b/internal/api/errors.go @@ -1,6 +1,11 @@ package api -import "net/http" +import ( + "errors" + "net/http" +) + +var ErrDuplicateAPNSToken = errors.New("duplicate apns token") func (a *api) errorResponse(w http.ResponseWriter, _ *http.Request, status int, err error) { w.Header().Set("X-Apollo-Error", err.Error()) diff --git a/internal/api/live_activities.go b/internal/api/live_activities.go index ac509f4..fd8b0d1 100644 --- a/internal/api/live_activities.go +++ b/internal/api/live_activities.go @@ -13,7 +13,12 @@ func (a *api) createLiveActivityHandler(w http.ResponseWriter, r *http.Request) la := &domain.LiveActivity{} if err := json.NewDecoder(r.Body).Decode(la); err != nil { - a.errorResponse(w, r, 500, err) + a.errorResponse(w, r, 400, err) + return + } + + if _, err := a.liveActivityRepo.Get(ctx, la.APNSToken); err == nil { + a.errorResponse(w, r, 400, ErrDuplicateAPNSToken) return }