package main import ( "net/http" "strconv" "strings" ) func serveFlashcardDetail(w http.ResponseWriter, r *http.Request, store *sqliteStore) { segments := strings.Split(strings.TrimPrefix(r.URL.Path, "/api/v1/flashcards/"), "/") if len(segments) == 0 || segments[0] == "" { writeJSON(w, http.StatusNotFound, map[string]string{"error": "not found"}) return } publicID, err := strconv.ParseInt(segments[0], 10, 64) if err != nil { writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid id"}) return } if len(segments) >= 2 && segments[1] != "" { version, err := strconv.Atoi(segments[1]) if err != nil { writeJSON(w, http.StatusBadRequest, map[string]string{"error": "invalid version"}) return } e, err := store.getByPublicIDAndVersion(r.Context(), publicID, version) if err != nil { writeJSON(w, http.StatusInternalServerError, map[string]string{"error": "internal error"}) return } if e == nil { writeJSON(w, http.StatusNotFound, map[string]string{"error": "not found"}) return } writeJSON(w, http.StatusOK, e) return } e, err := store.getLatestByPublicID(r.Context(), publicID) if err != nil { writeJSON(w, http.StatusInternalServerError, map[string]string{"error": "internal error"}) return } if e == nil { writeJSON(w, http.StatusNotFound, map[string]string{"error": "not found"}) return } writeJSON(w, http.StatusOK, e) }