diff options
Diffstat (limited to 'modules/lists')
| -rw-r--r-- | modules/lists/lists.go | 159 |
1 files changed, 80 insertions, 79 deletions
diff --git a/modules/lists/lists.go b/modules/lists/lists.go index a42c51c..3febdba 100644 --- a/modules/lists/lists.go +++ b/modules/lists/lists.go | |||
| @@ -2,7 +2,7 @@ package lists | |||
| 2 | 2 | ||
| 3 | import ( | 3 | import ( |
| 4 | "database/sql" | 4 | "database/sql" |
| 5 | "encoding/json" | 5 | "encoding/json" |
| 6 | "errors" | 6 | "errors" |
| 7 | "fagott.pw/charakterin" | 7 | "fagott.pw/charakterin" |
| 8 | "fagott.pw/grilist/frontend" | 8 | "fagott.pw/grilist/frontend" |
| @@ -15,8 +15,8 @@ import ( | |||
| 15 | "log" | 15 | "log" |
| 16 | "net/http" | 16 | "net/http" |
| 17 | "net/url" | 17 | "net/url" |
| 18 | "strconv" | ||
| 19 | "sort" | 18 | "sort" |
| 19 | "strconv" | ||
| 20 | ) | 20 | ) |
| 21 | 21 | ||
| 22 | // Module und so. | 22 | // Module und so. |
| @@ -44,8 +44,9 @@ type ListGril struct { | |||
| 44 | 44 | ||
| 45 | // ListGrils ist die Sort-Interface Implementation für Grils einer Liste. | 45 | // ListGrils ist die Sort-Interface Implementation für Grils einer Liste. |
| 46 | type ListGrils []*ListGril | 46 | type ListGrils []*ListGril |
| 47 | func (l ListGrils) Len() int { return len(l) } | 47 | |
| 48 | func (l ListGrils) Swap(i, j int) { l[i], l[j] = l[j], l[i] } | 48 | func (l ListGrils) Len() int { return len(l) } |
| 49 | func (l ListGrils) Swap(i, j int) { l[i], l[j] = l[j], l[i] } | ||
| 49 | func (l ListGrils) Less(i, j int) bool { return l[i].Order < l[j].Order } | 50 | func (l ListGrils) Less(i, j int) bool { return l[i].Order < l[j].Order } |
| 50 | 51 | ||
| 51 | // Name gibt den Namen des Moduls zurück | 52 | // Name gibt den Namen des Moduls zurück |
| @@ -68,13 +69,13 @@ func (m *Module) Init(g *grilist.Grilist) { | |||
| 68 | } | 69 | } |
| 69 | m.grils = grilsModule | 70 | m.grils = grilsModule |
| 70 | m.g.Router.GET("/list/:id", m.viewList) | 71 | m.g.Router.GET("/list/:id", m.viewList) |
| 71 | m.g.Router.POST("/list/:id/order", m.updateGrilOrder) | 72 | m.g.Router.POST("/list/:id/order", m.updateGrilOrder) |
| 72 | m.g.Router.POST("/list/:id", m.addGrilToList) | 73 | m.g.Router.POST("/list/:id", m.addGrilToList) |
| 73 | m.g.Router.DELETE("/list/:id/order", m.removeGrilFromList) | 74 | m.g.Router.DELETE("/list/:id/order", m.removeGrilFromList) |
| 74 | m.g.Router.GET("/new/list", m.displayCreateList) | 75 | m.g.Router.GET("/new/list", m.displayCreateList) |
| 75 | m.g.Router.POST("/new/list", m.createList) | 76 | m.g.Router.POST("/new/list", m.createList) |
| 76 | 77 | ||
| 77 | m.g.Router.GET("/api/lists/user", m.APIgetUserLists) | 78 | m.g.Router.GET("/api/lists/user", m.APIgetUserLists) |
| 78 | } | 79 | } |
| 79 | 80 | ||
| 80 | func (m *Module) getListGrils(list *List) error { | 81 | func (m *Module) getListGrils(list *List) error { |
| @@ -143,14 +144,14 @@ func (m *Module) GetUserLists(u *charakterin.User, withGrils bool) []*List { | |||
| 143 | if err != nil { | 144 | if err != nil { |
| 144 | log.Println(err) | 145 | log.Println(err) |
| 145 | } | 146 | } |
| 146 | 147 | ||
| 147 | if withGrils { | 148 | if withGrils { |
| 148 | for _, list := range lists { | 149 | for _, list := range lists { |
| 149 | if err := m.getListGrils(list); err != nil { | 150 | if err := m.getListGrils(list); err != nil { |
| 150 | log.Println(err) | 151 | log.Println(err) |
| 151 | } | 152 | } |
| 152 | } | 153 | } |
| 153 | } | 154 | } |
| 154 | return lists | 155 | return lists |
| 155 | } | 156 | } |
| 156 | 157 | ||
| @@ -160,14 +161,14 @@ func (m *Module) FromID(id int, withGrils bool) (*List, error) { | |||
| 160 | if err != nil { | 161 | if err != nil { |
| 161 | return nil, err | 162 | return nil, err |
| 162 | } | 163 | } |
| 163 | 164 | ||
| 164 | if withGrils { | 165 | if withGrils { |
| 165 | for _, list := range lists { | 166 | for _, list := range lists { |
| 166 | if err := m.getListGrils(list); err != nil { | 167 | if err := m.getListGrils(list); err != nil { |
| 167 | return nil, err | 168 | return nil, err |
| 168 | } | 169 | } |
| 169 | } | 170 | } |
| 170 | } | 171 | } |
| 171 | 172 | ||
| 172 | if len(lists) == 0 { | 173 | if len(lists) == 0 { |
| 173 | return nil, errors.New("no list found") | 174 | return nil, errors.New("no list found") |
| @@ -213,11 +214,11 @@ func (m *Module) ProvideDashboardData(user *charakterin.User) []grilist.Dashboar | |||
| 213 | log.Println(err) | 214 | log.Println(err) |
| 214 | return categories | 215 | return categories |
| 215 | } | 216 | } |
| 216 | for _, list := range lists { | 217 | for _, list := range lists { |
| 217 | if err := m.getListGrils(list); err != nil { | 218 | if err := m.getListGrils(list); err != nil { |
| 218 | log.Println(err) | 219 | log.Println(err) |
| 219 | } | 220 | } |
| 220 | } | 221 | } |
| 221 | 222 | ||
| 222 | categories = append(categories, grilist.DashboardCategory{ | 223 | categories = append(categories, grilist.DashboardCategory{ |
| 223 | Title: "Neueste Listen", | 224 | Title: "Neueste Listen", |
| @@ -264,12 +265,12 @@ func (m *Module) viewList(w http.ResponseWriter, r *http.Request, p httprouter.P | |||
| 264 | 265 | ||
| 265 | func (m *Module) addGrilToList(w http.ResponseWriter, r *http.Request, p httprouter.Params) { | 266 | func (m *Module) addGrilToList(w http.ResponseWriter, r *http.Request, p httprouter.Params) { |
| 266 | slistID := p.ByName("id") | 267 | slistID := p.ByName("id") |
| 267 | 268 | ||
| 268 | user, err := m.g.Charakterin.GetUserFromRequest(r) | 269 | user, err := m.g.Charakterin.GetUserFromRequest(r) |
| 269 | if err != nil { | 270 | if err != nil { |
| 270 | http.Error(w, "403", http.StatusForbidden) | 271 | http.Error(w, "403", http.StatusForbidden) |
| 271 | return | 272 | return |
| 272 | } | 273 | } |
| 273 | 274 | ||
| 274 | listID, err := strconv.Atoi(slistID) | 275 | listID, err := strconv.Atoi(slistID) |
| 275 | if err != nil { | 276 | if err != nil { |
| @@ -294,15 +295,15 @@ func (m *Module) addGrilToList(w http.ResponseWriter, r *http.Request, p httprou | |||
| 294 | http.Error(w, "invalid list", 404) | 295 | http.Error(w, "invalid list", 404) |
| 295 | return | 296 | return |
| 296 | } | 297 | } |
| 297 | 298 | ||
| 298 | if list.Owner.ID != user.ID { | 299 | if list.Owner.ID != user.ID { |
| 299 | http.Error(w, "403", http.StatusForbidden) | 300 | http.Error(w, "403", http.StatusForbidden) |
| 300 | return | 301 | return |
| 301 | } | 302 | } |
| 302 | 303 | ||
| 303 | rank := 0 | 304 | rank := 0 |
| 304 | if len(list.Grils) > 0 { | 305 | if len(list.Grils) > 0 { |
| 305 | rank = list.Grils[len(list.Grils) - 1].Order + 1 | 306 | rank = list.Grils[len(list.Grils)-1].Order + 1 |
| 306 | } | 307 | } |
| 307 | 308 | ||
| 308 | // rein in die DB damit | 309 | // rein in die DB damit |
| @@ -324,7 +325,7 @@ func (m *Module) addGrilToList(w http.ResponseWriter, r *http.Request, p httprou | |||
| 324 | data["Index"] = len(list.Grils) | 325 | data["Index"] = len(list.Grils) |
| 325 | value := make(map[string]interface{}) | 326 | value := make(map[string]interface{}) |
| 326 | value["IsListOwner"] = true | 327 | value["IsListOwner"] = true |
| 327 | value["Gril"] = ListGril{ gril, rank } | 328 | value["Gril"] = ListGril{gril, rank} |
| 328 | data["Value"] = value | 329 | data["Value"] = value |
| 329 | m.g.Renderer.RenderPage("list_gril", w, data) | 330 | m.g.Renderer.RenderPage("list_gril", w, data) |
| 330 | return | 331 | return |
| @@ -371,8 +372,8 @@ func (m *Module) createList(w http.ResponseWriter, r *http.Request, p httprouter | |||
| 371 | 372 | ||
| 372 | func (m *Module) updateGrilOrder(w http.ResponseWriter, r *http.Request, p httprouter.Params) { | 373 | func (m *Module) updateGrilOrder(w http.ResponseWriter, r *http.Request, p httprouter.Params) { |
| 373 | slistID := p.ByName("id") | 374 | slistID := p.ByName("id") |
| 374 | 375 | ||
| 375 | user, err := m.g.Charakterin.GetUserFromRequest(r) | 376 | user, err := m.g.Charakterin.GetUserFromRequest(r) |
| 376 | if err != nil { | 377 | if err != nil { |
| 377 | http.Error(w, "403", http.StatusForbidden) | 378 | http.Error(w, "403", http.StatusForbidden) |
| 378 | return | 379 | return |
| @@ -395,23 +396,23 @@ func (m *Module) updateGrilOrder(w http.ResponseWriter, r *http.Request, p httpr | |||
| 395 | http.Error(w, "invalid gril ID", 404) | 396 | http.Error(w, "invalid gril ID", 404) |
| 396 | return | 397 | return |
| 397 | } | 398 | } |
| 398 | 399 | ||
| 399 | pos, err := strconv.Atoi(values.Get("pos")) | 400 | pos, err := strconv.Atoi(values.Get("pos")) |
| 400 | if err != nil { | 401 | if err != nil { |
| 401 | http.Error(w, "invalid position", 400) | 402 | http.Error(w, "invalid position", 400) |
| 402 | return | 403 | return |
| 403 | } | 404 | } |
| 404 | 405 | ||
| 405 | // rein in die DB damit | 406 | // rein in die DB damit |
| 406 | _, err = m.g.DB.Query(`SELECT grilist.set_gril_order($1, $2, $3, $4)`, user.ID, listID, grilID, pos) | 407 | _, err = m.g.DB.Exec(`SELECT grilist.set_gril_order($1, $2, $3, $4)`, user.ID, listID, grilID, pos) |
| 407 | if err != nil { | 408 | if err != nil { |
| 408 | log.Println("error reordering gril:", err) | 409 | log.Println("error reordering gril:", err) |
| 409 | http.Error(w, "could not update gril order", 500) | 410 | http.Error(w, "could not update gril order", 500) |
| 410 | return | 411 | return |
| 411 | } | 412 | } |
| 412 | 413 | ||
| 413 | w.WriteHeader(200) | 414 | w.WriteHeader(200) |
| 414 | w.Write([]byte("ok")) | 415 | w.Write([]byte("ok")) |
| 415 | return | 416 | return |
| 416 | } | 417 | } |
| 417 | 418 | ||
| @@ -435,47 +436,47 @@ func (m *Module) removeGrilFromList(w http.ResponseWriter, r *http.Request, p ht | |||
| 435 | http.Error(w, "invalid gril ID", 404) | 436 | http.Error(w, "invalid gril ID", 404) |
| 436 | return | 437 | return |
| 437 | } | 438 | } |
| 438 | 439 | ||
| 439 | res, err := m.g.DB.Exec(`DELETE FROM grilist.lists_grils WHERE list_id=$1 AND gril_id=$2`, listID, grilID) | 440 | res, err := m.g.DB.Exec(`DELETE FROM grilist.lists_grils WHERE list_id=$1 AND gril_id=$2`, listID, grilID) |
| 440 | if err != nil { | 441 | if err != nil { |
| 441 | log.Println("error removing gril:", err) | 442 | log.Println("error removing gril:", err) |
| 442 | http.Error(w, "could not remove gril", 500) | 443 | http.Error(w, "could not remove gril", 500) |
| 443 | return | 444 | return |
| 444 | } | 445 | } |
| 445 | |||
| 446 | if r, err := res.RowsAffected(); err != nil || r == 0 { | ||
| 447 | log.Println("invalid rows affected in removing gril") | ||
| 448 | http.Error(w, "gril not in list / other error", 500) | ||
| 449 | return | ||
| 450 | } | ||
| 451 | 446 | ||
| 452 | w.WriteHeader(200) | 447 | if r, err := res.RowsAffected(); err != nil || r == 0 { |
| 453 | w.Write([]byte("ok")) | 448 | log.Println("invalid rows affected in removing gril") |
| 449 | http.Error(w, "gril not in list / other error", 500) | ||
| 450 | return | ||
| 451 | } | ||
| 452 | |||
| 453 | w.WriteHeader(200) | ||
| 454 | w.Write([]byte("ok")) | ||
| 454 | return | 455 | return |
| 455 | } | 456 | } |
| 456 | 457 | ||
| 457 | func (m *Module) APIgetUserLists(w http.ResponseWriter, r *http.Request, p httprouter.Params) { | 458 | func (m *Module) APIgetUserLists(w http.ResponseWriter, r *http.Request, p httprouter.Params) { |
| 458 | user, err := m.g.Charakterin.GetUserFromRequest(r) | 459 | user, err := m.g.Charakterin.GetUserFromRequest(r) |
| 459 | if err != nil { | 460 | if err != nil { |
| 460 | http.Error(w, "403", http.StatusForbidden) | 461 | http.Error(w, "403", http.StatusForbidden) |
| 461 | return | 462 | return |
| 462 | } | 463 | } |
| 463 | 464 | ||
| 464 | lists := m.GetUserLists(user, false) | 465 | lists := m.GetUserLists(user, false) |
| 465 | 466 | ||
| 466 | for _, list := range lists { | 467 | for _, list := range lists { |
| 467 | // owner wegen SICHERHEIT rausfiltern (nodumppassword2k16) | 468 | // owner wegen SICHERHEIT rausfiltern (nodumppassword2k16) |
| 468 | list.Owner = nil | 469 | list.Owner = nil |
| 469 | } | 470 | } |
| 470 | 471 | ||
| 471 | data, err := json.Marshal(&lists) | 472 | data, err := json.Marshal(&lists) |
| 472 | if err != nil { | 473 | if err != nil { |
| 473 | log.Println(err) | 474 | log.Println(err) |
| 474 | http.Error(w, "500", http.StatusInternalServerError) | 475 | http.Error(w, "500", http.StatusInternalServerError) |
| 475 | return | 476 | return |
| 476 | } | 477 | } |
| 477 | w.WriteHeader(200) | 478 | w.WriteHeader(200) |
| 478 | w.Write(data) | 479 | w.Write(data) |
| 479 | } | 480 | } |
| 480 | 481 | ||
| 481 | // New erstellt eine neue Instanz des Modules | 482 | // New erstellt eine neue Instanz des Modules |
