From e09900ae7011092f69c814f6834bcb6da42954b7 Mon Sep 17 00:00:00 2001
From: paku <paku@skyizwhite.dev>
Date: Fri, 19 Apr 2024 13:31:10 +0900
Subject: [PATCH] Add recovery middleware

---
 src/app.lisp                  |  3 ++-
 src/middlewares/recovery.lisp | 15 +++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)
 create mode 100644 src/middlewares/recovery.lisp

diff --git a/src/app.lisp b/src/app.lisp
index 951042e..c34f727 100644
--- a/src/app.lisp
+++ b/src/app.lisp
@@ -32,7 +32,8 @@
                      :directory "src/routes")
   (jg:static-path *app* "/assets/" "src/assets/")
   (jg:install-middleware *app* mw:*public-files*)
-  (jg:install-middleware *app* mw:*normalize-path*))
+  (jg:install-middleware *app* mw:*normalize-path*)
+  (jg:install-middleware *app* mw:*recovery*))
 
 (defun update ()
   (stop)
diff --git a/src/middlewares/recovery.lisp b/src/middlewares/recovery.lisp
new file mode 100644
index 0000000..91f9214
--- /dev/null
+++ b/src/middlewares/recovery.lisp
@@ -0,0 +1,15 @@
+(defpackage #:hp/middlewares/recovery
+  (:use #:cl)
+  (:export #:*recovery*))
+(in-package #:hp/middlewares/recovery)
+
+;;; TODO: insert logger
+
+(defparameter *recovery*
+  (lambda (app)
+    (lambda (env)
+      (handler-case
+          (funcall app env)
+        (error (c)
+          `(500 (:content-type "text/plain")
+                (,(format nil "Internal Server Error: ~a~%" c))))))))