diff --git a/db/migrate.go b/db/migrate.go index 1def43a..fecef46 100644 --- a/db/migrate.go +++ b/db/migrate.go @@ -2,7 +2,7 @@ package db import ( "database/sql" - "log" + "log/slog" "os" ) @@ -19,6 +19,6 @@ func Migrate(db *sql.DB, migrations []string) { res, err := db.Exec(string(data)) _ = res CheckError(err) - log.Print("Applied migration " + x) + slog.Info("Applied migration", "name", x) } } diff --git a/handlers/post.go b/handlers/post.go new file mode 100644 index 0000000..c5b5a23 --- /dev/null +++ b/handlers/post.go @@ -0,0 +1,10 @@ +package handlers + +import ( + "log" + "net/http" +) + +func PostHandler(w http.ResponseWriter, req *http.Request) { + log.Print(req.URL.Path) +} \ No newline at end of file diff --git a/handlers/postpage.go b/handlers/postpage.go new file mode 100644 index 0000000..bb2d664 --- /dev/null +++ b/handlers/postpage.go @@ -0,0 +1,11 @@ +package handlers + +import ( + "log" + "net/http" +) + +func PostPage(w http.ResponseWriter, req *http.Request) { + log.Printf("Serving a post") + log.Print(req.URL.Path) +} \ No newline at end of file diff --git a/handlers/public.go b/handlers/public.go new file mode 100644 index 0000000..2abe22b --- /dev/null +++ b/handlers/public.go @@ -0,0 +1,10 @@ +package handlers + +import ( + "log" + "net/http" +) + +func Public(w http.ResponseWriter, req *http.Request) { + log.Print(req.URL.Path) +} \ No newline at end of file diff --git a/handlers/user.go b/handlers/user.go new file mode 100644 index 0000000..72ad445 --- /dev/null +++ b/handlers/user.go @@ -0,0 +1,10 @@ +package handlers + +import ( + "log" + "net/http" +) + +func UserHandler(w http.ResponseWriter, req *http.Request) { + log.Print(req.Method) +} \ No newline at end of file diff --git a/main.go b/main.go index 761d164..a485bbb 100644 --- a/main.go +++ b/main.go @@ -2,11 +2,12 @@ package main import ( "database/sql" - "fmt" + "net/http" + "log" _ "github.com/mattn/go-sqlite3" dbpkg "nkeller.dev/blog_software/db" - usrpkg "nkeller.dev/blog_software/user" + "nkeller.dev/blog_software/handlers" ) type Post struct { @@ -31,10 +32,12 @@ func main() { } dbpkg.Migrate(db, migrations[:]) - user, err := usrpkg.Create(db, "profilelag2", "Hello") - if err != nil { - panic(err) - } - fmt.Println(user) - fmt.Printf("user: %v\n", user) + http.HandleFunc("/user", handlers.UserHandler) + http.HandleFunc("/post", handlers.PostHandler) + + http.HandleFunc("/", handlers.Public) + http.HandleFunc("/post/", handlers.PostPage) + + log.Print("Starting Blog_Software at http://localhost:8080") + http.ListenAndServe(":8080", nil) } diff --git a/public/JetBrainsMono-Regular.woff2 b/public/JetBrainsMono-Regular.woff2 new file mode 100644 index 0000000..40da427 Binary files /dev/null and b/public/JetBrainsMono-Regular.woff2 differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..0b68506 --- /dev/null +++ b/public/index.html @@ -0,0 +1,31 @@ + + + + + + Blog_Software + + + +

Nick's Blog

+

Thought I'd write a little bit

+ +
+
+
+

Diabetes Jokes

+

Jul 25, 2026

+
+
+
+

We're Totally Doomed, So Here's The Plan

+

Jul 5, 2026

+
+
+
+

Snippets are better than your Agentic slop

+

Jun 26, 2026

+
+
+ + \ No newline at end of file diff --git a/public/style.css b/public/style.css new file mode 100644 index 0000000..9c4b96b --- /dev/null +++ b/public/style.css @@ -0,0 +1,49 @@ +@font-face { + font-family: "JetBrains Mono"; + src: url("JetBrainsMono-Regular.woff2") format("woff2"); + font-weight: 400; + font-style: normal; +} +:root { + --background: rgb(38, 38, 38); + --foreground: rgb(240, 240, 240); + --subtext: rgb(100, 100, 100); +} +html { + font-family: "JetBrains Mono", monospace; +} +body { + background-color: var(--background); + color: var(--foreground); + width: 50%; + margin: auto; +} + +#title { + font-size: 3.5rem; + margin-bottom: 0; +} +#subtitle { + color:var(--subtext); + font-size: 1rem; + padding-bottom: 2rem; + margin-top: 0; +} + +#posts { + width: 100%; +} + +.post > a > h1 { + font-size: 1rem; + margin-bottom: 0; + color:pink; +} +.post > a { + text-decoration: none; +} +.post > h2 { + color: var(--subtext); + font-size: 0.7rem; + margin-top: 0; +} diff --git a/user/delete.go b/user/delete.go index 024f19c..4d10eea 100644 --- a/user/delete.go +++ b/user/delete.go @@ -1,13 +1,20 @@ package user -import ( - "database/sql" +import "database/sql" - dbpkg "nkeller.dev/blog_software/db" -) - -func Delete(db *sql.DB, id int) { +func Delete(db *sql.DB, id int) (sql.Result, error) { result, err := db.Exec("DELETE FROM users WHERE id = ?;", id) - dbpkg.CheckError(err) - _ = result -} \ No newline at end of file + if err != nil { + return result, err + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + return result, err + } + if rowsAffected == 0 { + return result, sql.ErrNoRows + } + + return result, nil +} diff --git a/user/verify.go b/user/verify.go index cb301e2..da39946 100644 --- a/user/verify.go +++ b/user/verify.go @@ -1,2 +1,19 @@ package user +import ( + "database/sql" +) + +type Password struct { + password sql.NullString +} + +func Verify(db *sql.DB, username string, password string) (bool, error) { + row := db.QueryRow("SELECT password FROM users WHERE username = ?;", username) + dbPassword := &Password{} + err := row.Scan(&dbPassword.password) + if err != nil { + return false, err + } + return (dbPassword.password.String == password), nil +} \ No newline at end of file