User
This commit is contained in:
@@ -28,26 +28,31 @@ type Entry struct {
|
||||
Username string `json:"username"`
|
||||
}
|
||||
|
||||
func handleFeed(w http.ResponseWriter, r *http.Request) {
|
||||
page, _ := strconv.Atoi(chi.URLParam(r, "page"))
|
||||
// feedPage liefert eine Feed-Seite (20 Beiträge, neueste zuerst). Ist uid != 0,
|
||||
// werden nur die Beiträge dieses Nutzers geliefert.
|
||||
func feedPage(page int, uid int64) ([]Entry, error) {
|
||||
if page < 0 {
|
||||
page = 0
|
||||
}
|
||||
if page > 100 {
|
||||
page = 100
|
||||
}
|
||||
|
||||
const count = 20
|
||||
offset := page * count
|
||||
|
||||
rows, err := db.Query(`
|
||||
query := `
|
||||
SELECT e.pid, e.uid, e.created_at, e.content, e.filepath, u.username
|
||||
FROM entry e JOIN user u ON u.uid = e.uid
|
||||
ORDER BY e.created_at DESC
|
||||
LIMIT ? OFFSET ?`, count, offset)
|
||||
FROM entry e JOIN user u ON u.uid = e.uid`
|
||||
args := []any{}
|
||||
if uid != 0 {
|
||||
query += ` WHERE e.uid = ?`
|
||||
args = append(args, uid)
|
||||
}
|
||||
query += ` ORDER BY e.created_at DESC LIMIT ? OFFSET ?`
|
||||
args = append(args, count, page*count)
|
||||
|
||||
rows, err := db.Query(query, args...)
|
||||
if err != nil {
|
||||
writeError(w, http.StatusInternalServerError, "Datenbankfehler")
|
||||
return
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
@@ -59,6 +64,33 @@ func handleFeed(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
entries = append(entries, e)
|
||||
}
|
||||
return entries, rows.Err()
|
||||
}
|
||||
|
||||
func handleFeed(w http.ResponseWriter, r *http.Request) {
|
||||
page, _ := strconv.Atoi(chi.URLParam(r, "page"))
|
||||
entries, err := feedPage(page, 0)
|
||||
if err != nil {
|
||||
writeError(w, http.StatusInternalServerError, "Datenbankfehler")
|
||||
return
|
||||
}
|
||||
writeJSON(w, http.StatusOK, entries)
|
||||
}
|
||||
|
||||
// handleUserFeed liefert den Feed eines einzelnen Nutzers (öffentlich).
|
||||
func handleUserFeed(w http.ResponseWriter, r *http.Request) {
|
||||
var uid int64
|
||||
if err := db.QueryRow(`SELECT uid FROM user WHERE username = ?`, chi.URLParam(r, "username")).Scan(&uid); err != nil {
|
||||
writeError(w, http.StatusNotFound, "Nutzer nicht gefunden")
|
||||
return
|
||||
}
|
||||
|
||||
page, _ := strconv.Atoi(chi.URLParam(r, "page"))
|
||||
entries, err := feedPage(page, uid)
|
||||
if err != nil {
|
||||
writeError(w, http.StatusInternalServerError, "Datenbankfehler")
|
||||
return
|
||||
}
|
||||
writeJSON(w, http.StatusOK, entries)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user