diff options
Diffstat (limited to 'modules/lists')
| -rw-r--r-- | modules/lists/lists.go | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/modules/lists/lists.go b/modules/lists/lists.go index 8957c5f..85e6ce5 100644 --- a/modules/lists/lists.go +++ b/modules/lists/lists.go | |||
| @@ -15,6 +15,7 @@ import ( | |||
| 15 | "net/http" | 15 | "net/http" |
| 16 | "net/url" | 16 | "net/url" |
| 17 | "strconv" | 17 | "strconv" |
| 18 | "sort" | ||
| 18 | ) | 19 | ) |
| 19 | 20 | ||
| 20 | // Module und so. | 21 | // Module und so. |
| @@ -40,6 +41,12 @@ type ListGril struct { | |||
| 40 | Order int | 41 | Order int |
| 41 | } | 42 | } |
| 42 | 43 | ||
| 44 | // ListGrils ist die Sort-Interface Implementation für Grils einer Liste. | ||
| 45 | type ListGrils []*ListGril | ||
| 46 | func (l ListGrils) Len() int { return len(l) } | ||
| 47 | func (l ListGrils) Swap(i, j int) { l[i], l[j] = l[j], l[i] } | ||
| 48 | func (l ListGrils) Less(i, j int) bool { return l[i].Order < l[j].Order } | ||
| 49 | |||
| 43 | // Name gibt den Namen des Moduls zurück | 50 | // Name gibt den Namen des Moduls zurück |
| 44 | func (m *Module) Name() string { | 51 | func (m *Module) Name() string { |
| 45 | return "Lists" | 52 | return "Lists" |
| @@ -90,6 +97,7 @@ func (m *Module) getListGrils(list *List) error { | |||
| 90 | 97 | ||
| 91 | list.Grils = append(list.Grils, lg) | 98 | list.Grils = append(list.Grils, lg) |
| 92 | } | 99 | } |
| 100 | sort.Sort(ListGrils(list.Grils)) | ||
| 93 | return nil | 101 | return nil |
| 94 | } | 102 | } |
| 95 | 103 | ||
| @@ -258,8 +266,40 @@ func (m *Module) addGrilToList(w http.ResponseWriter, r *http.Request, p httprou | |||
| 258 | return | 266 | return |
| 259 | } | 267 | } |
| 260 | 268 | ||
| 261 | log.Println("implement: add gril", grilID, "to list", listID) | 269 | list, err := m.FromID(listID) |
| 262 | http.Error(w, "not implemented", 500) | 270 | if err != nil { |
| 271 | http.Error(w, "invalid list", 404) | ||
| 272 | return | ||
| 273 | } | ||
| 274 | |||
| 275 | rank := 0 | ||
| 276 | if len(list.Grils) > 0 { | ||
| 277 | rank = list.Grils[len(list.Grils) - 1].Order + 1 | ||
| 278 | } | ||
| 279 | |||
| 280 | // rein in die DB damit | ||
| 281 | _, err = m.g.DB.Query(`INSERT INTO grilist.lists_grils(list_id, gril_id, "order") VALUES($1, $2, $3)`, listID, grilID, rank) | ||
| 282 | if err != nil { | ||
| 283 | log.Println("error inserting gril into list:", err) | ||
| 284 | http.Error(w, "could not insert gril", 500) | ||
| 285 | return | ||
| 286 | } | ||
| 287 | |||
| 288 | gril, err := m.grils.FromID(grilID) | ||
| 289 | if err != nil { | ||
| 290 | log.Println("inserted gril into list but couldnt get gril afterwards:", err) | ||
| 291 | http.Error(w, "error after insert", 500) | ||
| 292 | return | ||
| 293 | } | ||
| 294 | |||
| 295 | data := m.g.Renderer.DefaultData() | ||
| 296 | data["Index"] = len(list.Grils) | ||
| 297 | value := make(map[string]interface{}) | ||
| 298 | value["IsListOwner"] = true | ||
| 299 | value["Gril"] = ListGril{ gril, rank } | ||
| 300 | data["Value"] = value | ||
| 301 | m.g.Renderer.RenderPage("list_gril", w, data) | ||
| 302 | return | ||
| 263 | } | 303 | } |
| 264 | 304 | ||
| 265 | func (m *Module) displayCreateList(w http.ResponseWriter, r *http.Request, p httprouter.Params) { | 305 | func (m *Module) displayCreateList(w http.ResponseWriter, r *http.Request, p httprouter.Params) { |
