From ee64cdc2712a8e7f77c6af02385afd43a2a1e61b Mon Sep 17 00:00:00 2001 From: Jacob McDonnell Date: Sun, 26 Apr 2026 16:52:03 -0400 Subject: refactor: Split Go code into multiple files --- db.go | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 db.go (limited to 'db.go') diff --git a/db.go b/db.go new file mode 100644 index 00000000..49e7656a --- /dev/null +++ b/db.go @@ -0,0 +1,92 @@ +package main + +import ( + "database/sql" + "fmt" + "log" + _ "modernc.org/sqlite" + "net/http" + "os" +) + +type Database struct { + DB *sql.DB +} + +type Entry struct { + os string + name string + section int + path string +} + +func (d *Database) GetOS(w http.ResponseWriter, r *http.Request) { + rows, err := d.DB.Query("SELECT DISTINCT os FROM manpages;") + if err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + defer rows.Close() + + for rows.Next() { + var osName string + + if err := rows.Scan(&osName); err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + fmt.Fprintf(w, "", osName, osName) + } +} + +func (d *Database) Search(w http.ResponseWriter, r *http.Request) { + query := r.URL.Query() + + log.Println("Request for:", r.URL.String()) + + name := query["name"][0] + section := query["section"][0] + osName := query["os"][0] + + log.Println(name) + + rows, err := d.DB.Query("SELECT * FROM manpages WHERE name == ? AND section == ? AND os == ?;", name, section, osName) + if err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + defer rows.Close() + + var entries []Entry + for rows.Next() { + var entry Entry + + if err := rows.Scan(&entry.os, &entry.name, &entry.section, &entry.path); err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + + entries = append(entries, entry) + } + + if len(entries) > 0 { + fmt.Fprintf(w, "
") + for _, e := range entries { + data, err := os.ReadFile(e.path) + if err != nil { + log.Println(err) + ErrorPage(w, 500) + return + } + fmt.Fprintf(w, "%s", data) + } + fmt.Fprintf(w, "
") + } else { + fmt.Fprintf(w, "

No results found for %s %s(%s)

", osName, name, section) + } +} -- cgit v1.2.3