diff --git a/src/api/data/data.go b/src/api/data/data.go index ed752c3..abc44eb 100644 --- a/src/api/data/data.go +++ b/src/api/data/data.go @@ -232,7 +232,11 @@ func FullByID(userID, reqID string) (*JournalRequest, bool) { log.Print(hRows.Err()) return nil, false } - req.Notes = NotesByID(userID, reqID) + req.Notes, err = NotesByID(userID, reqID) + if err != nil { + log.Print(err) + return nil, false + } return req, true } @@ -248,9 +252,9 @@ func Journal(userID string) []JournalRequest { } // NotesByID retrieves the notes for a given prayer request -func NotesByID(userID, reqID string) []Note { +func NotesByID(userID, reqID string) ([]Note, error) { if _, ok := retrieveRequest(reqID, userID); !ok { - return nil + return nil, sql.ErrNoRows } rows, err := db.Query(` SELECT "asOf", "notes" @@ -260,7 +264,7 @@ func NotesByID(userID, reqID string) []Note { reqID) if err != nil { log.Print(err) - return nil + return nil, err } defer rows.Close() var notes []Note @@ -275,9 +279,9 @@ func NotesByID(userID, reqID string) []Note { } if rows.Err() != nil { log.Print(rows.Err()) - return nil + return nil, err } - return notes + return notes, nil } /* DDL */ diff --git a/src/api/routes/handlers.go b/src/api/routes/handlers.go index 2b18aac..ef97190 100644 --- a/src/api/routes/handlers.go +++ b/src/api/routes/handlers.go @@ -1,6 +1,7 @@ package routes import ( + "database/sql" "encoding/json" "errors" "log" @@ -36,6 +37,12 @@ func sendJSON(c *routing.Context, result interface{}) error { return nil } +// Send an HTTP 404 response. +func notFound(c *routing.Context) error { + c.Response.WriteHeader(404) + return nil +} + // Parse the request body as JSON. func parseJSON(c *routing.Context) (map[string]interface{}, error) { payload := make(map[string]interface{}) @@ -84,8 +91,7 @@ func requestGet(c *routing.Context) error { return sendError(c, errors.New("error retrieving request")) } if request == nil { - c.Response.WriteHeader(404) - return nil + return notFound(c) } return sendJSON(c, request) } @@ -96,7 +102,11 @@ func requestGetComplete(c *routing.Context) error { if !ok { return sendError(c, errors.New("error retrieving request")) } - request.Notes = data.NotesByID(userID(c), c.Param("id")) + var err error + request.Notes, err = data.NotesByID(userID(c), c.Param("id")) + if err != nil { + return sendError(c, err) + } return sendJSON(c, request) } @@ -132,10 +142,15 @@ func requestAddNote(c *routing.Context) error { // GET: /api/request//notes func requestGetNotes(c *routing.Context) error { - notes := data.NotesByID(userID(c), c.Param("id")) + notes, err := data.NotesByID(userID(c), c.Param("id")) + if err != nil { + if err == sql.ErrNoRows { + return notFound(c) + } + return sendError(c, err) + } if notes == nil { - c.Response.WriteHeader(http.StatusNotFound) - return errors.New("Not Found") + notes = []data.Note{} } return sendJSON(c, notes) } diff --git a/src/app/src/components/Answered.vue b/src/app/src/components/Answered.vue index af9da50..b7342d6 100644 --- a/src/app/src/components/Answered.vue +++ b/src/app/src/components/Answered.vue @@ -3,6 +3,8 @@ article page-title(title='Answered Requests') p(v-if='!loaded') Loading answered requests... div(v-if='loaded').mpj-answered-list + p.text-center(v-if='requests.length === 0'): em. + No answered requests found; once you have marked one as “Answered”, it will appear here p.mpj-request-text(v-for='req in requests' :key='req.requestId') | {{ req.text }} br diff --git a/src/app/src/components/AnsweredDetail.vue b/src/app/src/components/AnsweredDetail.vue index 5ac4023..47a0f4b 100644 --- a/src/app/src/components/AnsweredDetail.vue +++ b/src/app/src/components/AnsweredDetail.vue @@ -48,7 +48,7 @@ export default { .sort(asOfDesc)[0].text }, log () { - return this.request.notes + return (this.request.notes || []) .map(note => ({ asOf: note.asOf, text: note.notes, status: 'Notes' })) .concat(this.request.history) .sort(asOfDesc) diff --git a/src/app/src/components/Journal.vue b/src/app/src/components/Journal.vue index fd6c691..97d2949 100644 --- a/src/app/src/components/Journal.vue +++ b/src/app/src/components/Journal.vue @@ -11,7 +11,8 @@ article :request='request' :events='eventBus' :toast='toast') - p.text-center(v-if='journal.length === 0'): em No requests found; click the "Add a New Request" button to add one + p.text-center(v-if='journal.length === 0'): em. + No requests found; click the “Add a New Request” button to add one edit-request(:events='eventBus' :toast='toast') notes-edit(:events='eventBus' @@ -50,7 +51,7 @@ export default { }, computed: { title () { - return `${this.user.given_name}'s Prayer Journal` + return `${this.user.given_name}’s Prayer Journal` }, journalCardRows () { return chunk(this.journal, 3) diff --git a/src/app/src/components/common/PageTitle.vue b/src/app/src/components/common/PageTitle.vue index d6bb6a1..cf17685 100644 --- a/src/app/src/components/common/PageTitle.vue +++ b/src/app/src/components/common/PageTitle.vue @@ -18,11 +18,11 @@ export default { }, watch: { title () { - document.title = `${this.title} « myPrayerJournal` + document.title = `${this.title.replace('’', "'")} « myPrayerJournal` } }, created () { - document.title = `${this.title} « myPrayerJournal` + document.title = `${this.title.replace('’', "'")} « myPrayerJournal` } }