summaryrefslogtreecommitdiff
path: root/db.go
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-26 16:52:03 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-26 16:52:03 -0400
commitee64cdc2712a8e7f77c6af02385afd43a2a1e61b (patch)
tree8baf3e9ffba5522c901fc04dd118ba25697a1e35 /db.go
parent97d5c458cfa039d857301e1ca7d5af3beb37131d (diff)
refactor: Split Go code into multiple files
Diffstat (limited to 'db.go')
-rw-r--r--db.go92
1 files changed, 92 insertions, 0 deletions
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, "<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)
+ }
+}