Explorar o código

[back] Deployment preparations

Innocenty Enikeew %!s(int64=7) %!d(string=hai) anos
pai
achega
8cc6fa0a40
Modificáronse 3 ficheiros con 30 adicións e 12 borrados
  1. 3 0
      back/config.lisp.example
  2. 4 2
      back/db.lisp
  3. 23 10
      back/server.lisp

+ 3 - 0
back/config.lisp.example

@@ -0,0 +1,3 @@
+(in-package :chad-music.server)
+
+(setf *path-url-mappings* '(("/media/music/" . "/music/")))

+ 4 - 2
back/db.lisp

@@ -2,6 +2,7 @@
 (defpackage chad-music.db
   (:use :cl #:audio-streams #:alexandria #:chad-music.utils)
   (:export #:*standard-optimize-settings*
+           #:*db-path*
            #:*db*
            #:album #:id #:artist #:year #:album #:original-date #:publisher #:country #:genre #:type #:status #:mb-id #:track-count #:total-duration #:cover
            #:make-album #:album-id #:album-artist #:album-year #:album-album #:album-original-date #:album-publisher #:album-country
@@ -23,6 +24,7 @@
   (album-tracks (make-hash-table :test 'equal) :type hash-table))
 
 (defvar *db* (make-db) "Metadata database")
+(defvar *db-path* "music.sexp" "Default file to save/load database")
 
 (defstruct album
   id artist year album original-date publisher country
@@ -293,7 +295,7 @@
 (defun album-tracks (album-id)
   (gethash album-id (db-album-tracks *db*)))
 
-(defun save-db (file-name)
+(defun save-db (&optional (file-name *db-path*))
   (declare #.*standard-optimize-settings*)
   (with-output-to-file (s file-name :if-exists :supersede)
     (labels ((print-values (table)
@@ -302,7 +304,7 @@
       (print-values (db-albums *db*))
       (print-values (db-tracks *db*)))))
 
-(defun load-db (file-name)
+(defun load-db (&optional (file-name *db-path*))
   (declare #.*standard-optimize-settings*)
   (with-input-from-file (s file-name)
     (let ((albums (make-hash-table :test 'equal))

+ 23 - 10
back/server.lisp

@@ -1,10 +1,10 @@
 (in-package :cl-user)
 (defpackage chad-music.server
-  (:use :cl #:alexandria #:chad-music.db #:jonathan))
+  (:use :cl #:alexandria #:chad-music.db #:jonathan)
+  (:export #:main))
 (in-package :chad-music.server)
 
-(defvar *path-url-mappings*
-  '(("/media/pogo/Music/" . "/music/")) "Map database paths to urls")
+(defvar *path-url-mappings* nil "alist map database paths to urls")
 
 (defun get-url (path)
   (declare #.*standard-optimize-settings*)
@@ -151,17 +151,30 @@
       (if file (list 200 nil file) +404+))))
 
 (defvar *mapper* (myway:make-mapper))
-(myway:connect *mapper* "/cat/:category/size" 'get-category-size)
-(myway:connect *mapper* "/cat/:category" 'get-category)
-(myway:connect *mapper* "/cat" 'get-category-list)
-(myway:connect *mapper* "/album/:id/tracks" 'get-album-tracks)
-;;(myway:connect *mapper* "*" (lambda (p) (declare (ignore p)) +404+))
-
-(defun main (&rest args &key (port 5000) (debug nil) (use-thread t) (serve-files t) &allow-other-keys)
+(myway:connect *mapper* "/api/cat/:category/size" 'get-category-size)
+(myway:connect *mapper* "/api/cat/:category" 'get-category)
+(myway:connect *mapper* "/api/cat" 'get-category-list)
+(myway:connect *mapper* "/api/album/:id/tracks" 'get-album-tracks)
+
+(defun main (&rest args &key (port 5000) (debug nil) (use-thread t) (serve-files nil) &allow-other-keys)
+  ;; Load config file
+  (when-let (file (probe-file
+                   (merge-pathnames "config.lisp"
+                                    (asdf:component-pathname
+                                     (asdf:find-system '#:chad-music)))))
+    (load file))
+
+  ;; Load database
+  (when-let (file (probe-file *db-path*))
+    (chad-music.db:load-db file))
+
+  ;; Set up debug file server
   (when serve-files
     (loop for (path-prefix . url-prefix) in *path-url-mappings*
        do (myway:connect *mapper* (concatenate 'string url-prefix "*")
                          (file-server path-prefix))))
+
+  ;; Start application
   (apply #'clack:clackup
          (myway:to-app *mapper*)
          :server :woo