package lists import ( "fagott.pw/charakterin" "fagott.pw/grilist/frontend" "fagott.pw/grilist/grilist" "fagott.pw/grilist/modules/grils" "fmt" "log" "time" ) // Module und so. type Module struct { g *grilist.Grilist grils *grils.GrilsModule } // List ist eine Liste an DINGEN. type List struct { ID int Name string Description string Owner *charakterin.User ForkOf int UpdatedAt time.Time } // Name gibt den Namen des Moduls zurück func (m *Module) Name() string { return "Lists" } // Init initialisiert das Modul func (m *Module) Init(g *grilist.Grilist) { m.g = g gm, ok := g.Modules["Grils"] if !ok { log.Fatal("lists: grils module not found") } grilsModule, ok := gm.Interface().(*grils.GrilsModule) if !ok { log.Fatal("lists: error with grils module") } m.grils = grilsModule } // Interface gibt das Modul zurück func (m *Module) Interface() interface{} { return m } // GetUserLists gibt die Listen eines Benutzers zurück. func (m *Module) GetUserLists(u *charakterin.User) []*List { var lists []*List rows, err := m.g.DB.Query(`SELECT id, name, description, fork_of, updated_at FROM grilist.lists WHERE user_id = $1`, u.ID) if err != nil { return lists } defer rows.Close() for rows.Next() { list := &List{} if err := rows.Scan(&list.ID, &list.Name, &list.Description, &list.ForkOf, &list.UpdatedAt); err != nil { log.Println("error scanning row", err) continue } lists = append(lists, list) } return lists } func mkCard(title, description string, actions ...frontend.Action) frontend.Card { card := frontend.Card{ Title: title, Description: description, Size: "medium", } for _, action := range actions { card.Actions = append(card.Actions, action) } return card } func (m *Module) ProvideDashboardData(user *charakterin.User) grilist.DashboardCategory { data := grilist.DashboardCategory{ Title: "Meine Listen", } rows, err := m.g.DB.Query(`SELECT id, name, description FROM grilist.lists WHERE user_id = $1`, user.ID) if err != nil { return data } defer rows.Close() for rows.Next() { var id int var title, description string if err := rows.Scan(&id, &title, &description); err != nil { log.Println("error scanning row", err) continue } data.Cards = append(data.Cards, mkCard(title, description, frontend.Action{"anguckieren", fmt.Sprintf("/lists/%d", id)})) } return data } func New() *Module { return &Module{} }