From 213fe59e2ac37bc2ee86dc4298772c98d38a9d99 Mon Sep 17 00:00:00 2001 From: jan Date: Mon, 28 Mar 2016 16:40:13 +0200 Subject: cache loeschen wenn ein gril entfernt werden, liste aktualisieren beim hinzufuegen diff --git a/modules/lists/lists.go b/modules/lists/lists.go index 910162a..90de18c 100644 --- a/modules/lists/lists.go +++ b/modules/lists/lists.go @@ -5,9 +5,9 @@ import ( "encoding/json" "errors" "fagott.pw/charakterin" + "fagott.pw/grilist/cache" "fagott.pw/grilist/frontend" "fagott.pw/grilist/grilist" - "fagott.pw/grilist/cache" "fagott.pw/grilist/modules/grils" "fmt" "github.com/julienschmidt/httprouter" @@ -23,7 +23,7 @@ import ( // Module und so. type Module struct { g *grilist.Grilist - c *cache.Cache + c *cache.Cache grils *grils.GrilsModule } @@ -78,8 +78,8 @@ func (m *Module) Init(g *grilist.Grilist) { m.g.Router.POST("/new/list", m.createList) m.g.Router.GET("/api/lists/user", m.APIgetUserLists) - - m.c = cache.New() + + m.c = cache.New() } func (m *Module) getListGrils(list *List) error { @@ -89,7 +89,7 @@ func (m *Module) getListGrils(list *List) error { } defer rows.Close() - list.Grils = list.Grils[:0] + list.Grils = list.Grils[:0] for rows.Next() { var grilID int lg := &ListGril{} @@ -128,12 +128,12 @@ func (m *Module) getLists(whereClause string, params ...interface{}) ([]*List, e log.Println("error scanning row in getLists:", err) continue } - - if clist, ok := m.c.Get(list.ID); ok { - // weiteres parsen abbrechen - lists = append(lists, clist.(*List)) - continue - } + + if clist, ok := m.c.Get(list.ID); ok { + // weiteres parsen abbrechen + lists = append(lists, clist.(*List)) + continue + } // Owner kriegn owner, err := m.g.Charakterin.GetUserByID(ownerID) @@ -142,8 +142,8 @@ func (m *Module) getLists(whereClause string, params ...interface{}) ([]*List, e continue } list.Owner = owner - - m.c.Insert(list.ID, list) + + m.c.Insert(list.ID, list) lists = append(lists, list) } @@ -169,16 +169,16 @@ func (m *Module) GetUserLists(u *charakterin.User, withGrils bool) []*List { // FromID sucht nach der Liste mit der gegebenen ID und gibt sie, falls sie existiert, zurück. func (m *Module) FromID(id int, withGrils bool) (*List, error) { - if lst, ok := m.c.Get(id); ok { - l := lst.(*List) - // Potenzieller Optimierungsbedarf: neue query, wenn die Liste leer ist. updateGrilOrder nutzt derzeit aber genau dieses verhalten. - if withGrils && len(l.Grils) == 0 { - if err := m.getListGrils(l); err != nil { + if lst, ok := m.c.Get(id); ok { + l := lst.(*List) + // Potenzieller Optimierungsbedarf: neue query, wenn die Liste leer ist. updateGrilOrder nutzt derzeit aber genau dieses verhalten. + if withGrils && len(l.Grils) == 0 { + if err := m.getListGrils(l); err != nil { return nil, err } - } - return l, nil - } + } + return l, nil + } lists, err := m.getLists(`id = $1`, id) if err != nil { @@ -233,11 +233,11 @@ func (m *Module) ProvideDashboardData(user *charakterin.User) []grilist.Dashboar log.Println(err) return categories } - + for _, list := range lists { - if err := m.getListGrils(list); err != nil { - log.Println(err) - } + if err := m.getListGrils(list); err != nil { + log.Println(err) + } } categories = append(categories, grilist.DashboardCategory{ @@ -266,14 +266,14 @@ func (m *Module) viewList(w http.ResponseWriter, r *http.Request, p httprouter.P id, err := strconv.Atoi(sid) if err != nil { - log.Println("redir") + log.Println("redir") http.Redirect(w, r, "/", 302) return } list, err := m.FromID(id, true) if err != nil { - log.Println("redir") + log.Println("redir") http.Redirect(w, r, "/", 302) return } @@ -343,12 +343,14 @@ func (m *Module) addGrilToList(w http.ResponseWriter, r *http.Request, p httprou return } + lg := &ListGril{gril, rank} data := m.g.Renderer.DefaultData() data["Index"] = len(list.Grils) value := make(map[string]interface{}) value["IsListOwner"] = true - value["Gril"] = ListGril{gril, rank} + value["Gril"] = lg data["Value"] = value + list.Grils = append(list.Grils, lg) m.g.Renderer.RenderPage("list_gril", w, data) return } @@ -432,12 +434,12 @@ func (m *Module) updateGrilOrder(w http.ResponseWriter, r *http.Request, p httpr http.Error(w, "could not update gril order", 500) return } - - // wenn die liste im cache ist, die Grils clearen, damit beim naechsten aufruf die Gril-Liste neu geholt wird. - if l, ok := m.c.Get(listID); ok { - ls := l.(*List) - ls.Grils = ls.Grils[:0] - } + + // wenn die liste im cache ist, die Grils clearen, damit beim naechsten aufruf die Gril-Liste neu geholt wird. + if l, ok := m.c.Get(listID); ok { + ls := l.(*List) + ls.Grils = ls.Grils[:0] + } w.WriteHeader(200) w.Write([]byte("ok")) @@ -478,6 +480,11 @@ func (m *Module) removeGrilFromList(w http.ResponseWriter, r *http.Request, p ht return } + if l, ok := m.c.Get(listID); ok { + ls := l.(*List) + ls.Grils = ls.Grils[:0] + } + w.WriteHeader(200) w.Write([]byte("ok")) return -- cgit v0.10.1