diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-26 16:52:03 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-26 16:52:03 -0400 |
| commit | ee64cdc2712a8e7f77c6af02385afd43a2a1e61b (patch) | |
| tree | 8baf3e9ffba5522c901fc04dd118ba25697a1e35 /db.go | |
| parent | 97d5c458cfa039d857301e1ca7d5af3beb37131d (diff) | |
refactor: Split Go code into multiple files
Diffstat (limited to 'db.go')
| -rw-r--r-- | db.go | 92 |
1 files changed, 92 insertions, 0 deletions
@@ -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, "<option value=\"%s\">%s</option>", 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, "<hr>") + 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, "<hr>") + } else { + fmt.Fprintf(w, "<center><h1>No results found for %s %s(%s)</h1></center>", osName, name, section) + } +} |
