Yu-Gi-Oh! Deck Building and Card Inventory Management web interface written in Common Lisp, utilizing HTMX.
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

77 wiersze
2.6KB

  1. (in-package #:cl-user)
  2. (defpackage #:cl-deck-builder2.app
  3. (:use #:cl)
  4. (:import-from #:mito-attachment
  5. #:*storage*
  6. #:s3-storage
  7. #:disk-storage
  8. #:disk-storage-mount-path)
  9. (:import-from #:lack.builder
  10. #:builder)
  11. (:import-from #:ppcre
  12. #:scan)
  13. (:import-from #:cl-deck-builder2.web
  14. #:*web*
  15. #:make-chat-server)
  16. (:import-from #:cl-deck-builder2.config
  17. #:config
  18. #:productionp
  19. #:*public-directory*
  20. #:*static-directory*)
  21. (:import-from #:cl-deck-builder2.toolkit
  22. #:git-revision)
  23. (:documentation "The package the app file executes in. Passed to ~CLACK:CLACKUP~ function."))
  24. (in-package #:cl-deck-builder2.app)
  25. (defparameter *git-revision* (git-revision))
  26. (setf *storage*
  27. (if (productionp)
  28. ;; Store files in AWS S3 for production environment
  29. (make-instance 's3-storage
  30. :bucket "mito-attachment-example"
  31. :endpoint "s3-ap-northeast-1.amazonaws.com"
  32. :access-key (uiop:getenv "AWS_ACCESS_KEY")
  33. :secret-key (uiop:getenv "AWS_SECRET_KEY"))
  34. ;; Store files in local filesystem for development environment
  35. (make-instance 'disk-storage
  36. :bucket "mito-attachment-example"
  37. :directory (merge-pathnames "attachment" *public-directory*))))
  38. (builder
  39. (:static
  40. :path (lambda (path)
  41. (if (ppcre:scan "^(?:/img/|/css/|/js/|/webfonts/|/robot\\.txt$|/favicon\\.(ico|png)|/manifest\\.json$)" path)
  42. path
  43. nil))
  44. :root *static-directory*)
  45. (:static
  46. :path "/public/"
  47. :root *public-directory*)
  48. (if (productionp)
  49. nil
  50. :accesslog)
  51. (if (getf (config) :error-log)
  52. `(:backtrace
  53. :output ,(getf (config) :error-log))
  54. nil)
  55. :session
  56. :csrf
  57. (when (typep *storage* 'disk-storage)
  58. `(:mount ,(disk-storage-mount-path *storage*) ,*storage*))
  59. (:clack-errors :debug t)
  60. (if (productionp)
  61. nil
  62. (lambda (app)
  63. (lambda (env)
  64. (let ((datafly:*trace-sql* t))
  65. (setf (getf djula:*default-template-arguments* :git-revision) *git-revision*
  66. (getf djula:*default-template-arguments* :server-name) "phntsm.ddns.net")
  67. (funcall app env)))))
  68. (:mount "/label-maker" cl-deck-builder2.web.label-maker:*web*)
  69. (:mount "/tinymce" cl-deck-builder2.web.tinymce:*web*)
  70. (:mount "/chat-server" #'cl-deck-builder2.web.sse:make-chat-server)
  71. *web*)