Skeleton files and http

This commit is contained in:
Nicholas Keller
2026-08-14 11:24:47 -04:00
parent 432a156403
commit 62ed7e190a
11 changed files with 167 additions and 19 deletions
+2 -2
View File
@@ -2,7 +2,7 @@ package db
import ( import (
"database/sql" "database/sql"
"log" "log/slog"
"os" "os"
) )
@@ -19,6 +19,6 @@ func Migrate(db *sql.DB, migrations []string) {
res, err := db.Exec(string(data)) res, err := db.Exec(string(data))
_ = res _ = res
CheckError(err) CheckError(err)
log.Print("Applied migration " + x) slog.Info("Applied migration", "name", x)
} }
} }
+10
View File
@@ -0,0 +1,10 @@
package handlers
import (
"log"
"net/http"
)
func PostHandler(w http.ResponseWriter, req *http.Request) {
log.Print(req.URL.Path)
}
+11
View File
@@ -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)
}
+10
View File
@@ -0,0 +1,10 @@
package handlers
import (
"log"
"net/http"
)
func Public(w http.ResponseWriter, req *http.Request) {
log.Print(req.URL.Path)
}
+10
View File
@@ -0,0 +1,10 @@
package handlers
import (
"log"
"net/http"
)
func UserHandler(w http.ResponseWriter, req *http.Request) {
log.Print(req.Method)
}
+11 -8
View File
@@ -2,11 +2,12 @@ package main
import ( import (
"database/sql" "database/sql"
"fmt" "net/http"
"log"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
dbpkg "nkeller.dev/blog_software/db" dbpkg "nkeller.dev/blog_software/db"
usrpkg "nkeller.dev/blog_software/user" "nkeller.dev/blog_software/handlers"
) )
type Post struct { type Post struct {
@@ -31,10 +32,12 @@ func main() {
} }
dbpkg.Migrate(db, migrations[:]) dbpkg.Migrate(db, migrations[:])
user, err := usrpkg.Create(db, "profilelag2", "Hello") http.HandleFunc("/user", handlers.UserHandler)
if err != nil { http.HandleFunc("/post", handlers.PostHandler)
panic(err)
} http.HandleFunc("/", handlers.Public)
fmt.Println(user) http.HandleFunc("/post/", handlers.PostPage)
fmt.Printf("user: %v\n", user)
log.Print("Starting Blog_Software at http://localhost:8080")
http.ListenAndServe(":8080", nil)
} }
Binary file not shown.
+31
View File
@@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Blog_Software</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1 id="title">Nick's Blog</h1>
<h2 id="subtitle">Thought I'd write a little bit</h2>
<div id="posts">
<hr>
<div class="post">
<a href="/post/2"><h1>Diabetes Jokes</h1></a>
<h2>Jul 25, 2026</h2>
</div>
<hr>
<div class="post">
<a href="/post/1"><h1>We're Totally Doomed, So Here's The Plan</h1></a>
<h2>Jul 5, 2026</h2>
</div>
<hr>
<div class="post">
<a href="/post/0"><h1>Snippets are better than your Agentic slop</h1></a>
<h2>Jun 26, 2026</h2>
</div>
</div>
</body>
</html>
+49
View File
@@ -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;
}
+16 -9
View File
@@ -1,13 +1,20 @@
package user package user
import ( import "database/sql"
"database/sql"
dbpkg "nkeller.dev/blog_software/db" func Delete(db *sql.DB, id int) (sql.Result, error) {
)
func Delete(db *sql.DB, id int) {
result, err := db.Exec("DELETE FROM users WHERE id = ?;", id) result, err := db.Exec("DELETE FROM users WHERE id = ?;", id)
dbpkg.CheckError(err) if err != nil {
_ = result return result, err
} }
rowsAffected, err := result.RowsAffected()
if err != nil {
return result, err
}
if rowsAffected == 0 {
return result, sql.ErrNoRows
}
return result, nil
}
+17
View File
@@ -1,2 +1,19 @@
package user 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
}