Add note title
This commit is contained in:
parent
73063316aa
commit
836fab0d27
31
main.go
31
main.go
@ -24,12 +24,13 @@ type config struct {
|
|||||||
|
|
||||||
type note struct {
|
type note struct {
|
||||||
Id int64 `json:"id"`
|
Id int64 `json:"id"`
|
||||||
|
Title string `json:"title"`
|
||||||
Content string `json:"content"`
|
Content string `json:"content"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func httpError(err error, statusCode int, message string, w http.ResponseWriter) bool {
|
func httpError(err error, statusCode int, message string, w http.ResponseWriter) bool {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(message, err)
|
||||||
writeError(w, statusCode, message)
|
writeError(w, statusCode, message)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@ -54,7 +55,7 @@ func writeError(w http.ResponseWriter, statusCode int, message string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getNotes(w http.ResponseWriter, req *http.Request, _ httprouter.Params) {
|
func getNotes(w http.ResponseWriter, req *http.Request, _ httprouter.Params) {
|
||||||
res, err := db.Query(`SELECT Id, Content FROM Notes`)
|
res, err := db.Query(`SELECT Id, Title, Content FROM Notes`)
|
||||||
if httpError(err, http.StatusInternalServerError, "Failed to load notes", w) {
|
if httpError(err, http.StatusInternalServerError, "Failed to load notes", w) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -69,7 +70,7 @@ func getNotes(w http.ResponseWriter, req *http.Request, _ httprouter.Params) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var note note
|
var note note
|
||||||
res.Scan(¬e.Id, ¬e.Content)
|
res.Scan(¬e.Id, ¬e.Title, ¬e.Content)
|
||||||
notes = append(notes, note)
|
notes = append(notes, note)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,19 +95,24 @@ func postNotes(w http.ResponseWriter, req *http.Request, _ httprouter.Params) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(note.Title) == 0 {
|
||||||
|
writeError(w, http.StatusBadRequest, "Missing note title")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if len(note.Content) == 0 {
|
if len(note.Content) == 0 {
|
||||||
writeError(w, http.StatusBadRequest, "Missing note content")
|
writeError(w, http.StatusBadRequest, "Missing note content")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
stmt, err := db.Prepare(`INSERT INTO Notes(Content) VALUES(?) RETURNING Id`)
|
stmt, err := db.Prepare(`INSERT INTO Notes(Title, Content) VALUES(?, ?) RETURNING Id`)
|
||||||
if httpError(err, http.StatusInternalServerError, "Failed to store note", w) {
|
if httpError(err, http.StatusInternalServerError, "Failed to store note", w) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
defer stmt.Close()
|
defer stmt.Close()
|
||||||
|
|
||||||
res := stmt.QueryRow(note.Content)
|
res := stmt.QueryRow(note.Title, note.Content)
|
||||||
err = res.Scan(¬e.Id)
|
err = res.Scan(¬e.Id)
|
||||||
if httpError(err, http.StatusInternalServerError, "Failed to store note", w) {
|
if httpError(err, http.StatusInternalServerError, "Failed to store note", w) {
|
||||||
return
|
return
|
||||||
@ -128,7 +134,7 @@ func getNote(w http.ResponseWriter, req *http.Request, p httprouter.Params) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
stmt, err := db.Prepare(`SELECT Content FROM Notes WHERE Id = ?`)
|
stmt, err := db.Prepare(`SELECT Title, Content FROM Notes WHERE Id = ?`)
|
||||||
if httpError(err, http.StatusInternalServerError, "Failed to get note", w) {
|
if httpError(err, http.StatusInternalServerError, "Failed to get note", w) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -139,7 +145,7 @@ func getNote(w http.ResponseWriter, req *http.Request, p httprouter.Params) {
|
|||||||
|
|
||||||
var note note = note{Id: id}
|
var note note = note{Id: id}
|
||||||
|
|
||||||
err = res.Scan(¬e.Content)
|
err = res.Scan(¬e.Title, ¬e.Content)
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
writeError(w, http.StatusNotFound, "Note doesn't exist")
|
writeError(w, http.StatusNotFound, "Note doesn't exist")
|
||||||
return
|
return
|
||||||
@ -175,19 +181,24 @@ func putNote(w http.ResponseWriter, req *http.Request, p httprouter.Params) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(note.Title) == 0 {
|
||||||
|
writeError(w, http.StatusBadRequest, "Missing note title")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if len(note.Content) == 0 {
|
if len(note.Content) == 0 {
|
||||||
writeError(w, http.StatusBadRequest, "Missing note content")
|
writeError(w, http.StatusBadRequest, "Missing note content")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
stmt, err := db.Prepare(`UPDATE Notes SET Content = ? WHERE Id = ?`)
|
stmt, err := db.Prepare(`UPDATE Notes SET Title = ?, Content = ? WHERE Id = ?`)
|
||||||
if httpError(err, http.StatusInternalServerError, "Failed to update note", w) {
|
if httpError(err, http.StatusInternalServerError, "Failed to update note", w) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
defer stmt.Close()
|
defer stmt.Close()
|
||||||
|
|
||||||
res, err := stmt.Exec(note.Content, id)
|
res, err := stmt.Exec(note.Title, note.Content, id)
|
||||||
if httpError(err, http.StatusInternalServerError, "Failed to update note", w) {
|
if httpError(err, http.StatusInternalServerError, "Failed to update note", w) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -279,7 +290,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Println("Creating missing tables")
|
log.Println("Creating missing tables")
|
||||||
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS Notes(Id INTEGER PRIMARY KEY AUTOINCREMENT, Content TEXT)`)
|
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS Notes(Id INTEGER PRIMARY KEY AUTOINCREMENT, Title TEXT, Content TEXT)`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln("Failed to create table:", err)
|
log.Fatalln("Failed to create table:", err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user