1package main
 2
 3import (
 4	"fmt"
 5	"io"
 6	"log"
 7	"net/http"
 8	"text/template"
 9
10	"github.com/dgraph-io/badger/v3"
11)
12
13func (m model) root(writer http.ResponseWriter, request *http.Request) {
14	cookie, err := request.Cookie("access_token")
15	if err != nil {
16		home, err := templates.ReadFile("templates/home_unauthenticated.html")
17		if err != nil {
18			log.Fatalln(err)
19		}
20		io.WriteString(writer, string(home))
21		return
22	}
23
24	if cookie.Value == m.AccessToken {
25		dash, err := templates.ReadFile("templates/home_authenticated.html")
26		if err != nil {
27			log.Fatalln(err)
28		}
29		tmpl, err := template.New("authenticated").Parse(string(dash))
30		tmpl.Execute(writer, m.genTable())
31	}
32}
33
34func (m model) genTable() string {
35	var table string
36	err := m.database.View(func(txn *badger.Txn) error {
37		opts := badger.DefaultIteratorOptions
38		opts.PrefetchSize = 10
39		iterator := txn.NewIterator(opts)
40		defer iterator.Close()
41		for iterator.Rewind(); iterator.Valid(); iterator.Next() {
42			item := iterator.Item()
43			k := item.Key()
44			err := item.Value(func(v []byte) error {
45				table = table + fmt.Sprintf(`<tr>
46	<td><p>%s</p></td>
47	<td><p>%s</p></td>
48	<td><button>Edit</button><button>Delete</button></td>
49</tr>`, k, v)
50				return nil
51			})
52			if err != nil {
53				return err
54			}
55		}
56		return nil
57	})
58	if err != nil {
59		return err.Error()
60	}
61	return table
62}