refactor to data-source
This commit is contained in:
22
drops.lisp
22
drops.lisp
@@ -1,10 +1,10 @@
|
|||||||
(in-package :lispostory)
|
(in-package :lispostory)
|
||||||
|
|
||||||
|
(define-data-source drop)
|
||||||
|
|
||||||
(defparameter *chronostory-drops-sheet-url* "https://docs.google.com/spreadsheets/d/e/2PACX-1vRpKuZGJQIFFxSi6kzYx4ALI0MQborpLEkh3J1qIGSd0Bw7U4NYg5CK-3ESzyK580z4D8NO59SUeC3k/pub?gid=1888753114&single=true&output=csv")
|
(defparameter *chronostory-drops-sheet-url* "https://docs.google.com/spreadsheets/d/e/2PACX-1vRpKuZGJQIFFxSi6kzYx4ALI0MQborpLEkh3J1qIGSd0Bw7U4NYg5CK-3ESzyK580z4D8NO59SUeC3k/pub?gid=1888753114&single=true&output=csv")
|
||||||
|
|
||||||
(defparameter *chronostory-drops* nil)
|
(defmethod refresh ((ds drop-data-source))
|
||||||
|
|
||||||
(defun refresh-drops ()
|
|
||||||
(let* ((data (drakma:http-request *chronostory-drops-sheet-url*))
|
(let* ((data (drakma:http-request *chronostory-drops-sheet-url*))
|
||||||
(csv (cl-csv:read-csv data))
|
(csv (cl-csv:read-csv data))
|
||||||
(header (car csv))
|
(header (car csv))
|
||||||
@@ -14,19 +14,13 @@
|
|||||||
(lambda (row)
|
(lambda (row)
|
||||||
(pairhash keys (subseq row 0 num-fields-to-keep)))
|
(pairhash keys (subseq row 0 num-fields-to-keep)))
|
||||||
(cdr csv))))
|
(cdr csv))))
|
||||||
(setf *chronostory-drops* drops)
|
(setf (cache ds) drops)
|
||||||
(write-string-into-file
|
(write-string-into-file
|
||||||
(shasht:write-json drops nil)
|
(shasht:write-json drops nil)
|
||||||
"drops.json"
|
(file-path ds)
|
||||||
:if-exists :overwrite
|
:if-exists :overwrite
|
||||||
:if-does-not-exist :create)))
|
:if-does-not-exist :create)))
|
||||||
|
|
||||||
(defun reload-drops ()
|
(comment
|
||||||
(let ((drops (shasht:read-json (uiop:read-file-string "drops.json"))))
|
(defvar drops (make-drop-data-source))
|
||||||
(setf *chronostory-drops* drops)
|
(reload drops))
|
||||||
drops))
|
|
||||||
|
|
||||||
(defun load-drops ()
|
|
||||||
(if *chronostory-drops*
|
|
||||||
*chronostory-drops*
|
|
||||||
(reload-drops)))
|
|
||||||
|
|||||||
20
items.lisp
20
items.lisp
@@ -1,5 +1,7 @@
|
|||||||
(in-package :lispostory)
|
(in-package :lispostory)
|
||||||
|
|
||||||
|
(define-data-source item)
|
||||||
|
|
||||||
(defparameter *maplestory-items-url* "https://maplestory.io/api/gms/83/item")
|
(defparameter *maplestory-items-url* "https://maplestory.io/api/gms/83/item")
|
||||||
|
|
||||||
(defun get-maplestory-items ()
|
(defun get-maplestory-items ()
|
||||||
@@ -7,21 +9,9 @@
|
|||||||
|
|
||||||
(defparameter *chronostory-item-url-format* "https://chronostory.onrender.com/api/item-info?itemId=~a")
|
(defparameter *chronostory-item-url-format* "https://chronostory.onrender.com/api/item-info?itemId=~a")
|
||||||
|
|
||||||
(defparameter *chronostory-items* (make-array 0))
|
|
||||||
|
|
||||||
(defun chronostory-item-url (item-id)
|
(defun chronostory-item-url (item-id)
|
||||||
(format nil *chronostory-item-url-format* item-id))
|
(format nil *chronostory-item-url-format* item-id))
|
||||||
|
|
||||||
(defun reload-item-data ()
|
|
||||||
(let ((item-data (shasht:read-json (uiop:read-file-string "items.json"))))
|
|
||||||
(setf *chronostory-items* item-data)
|
|
||||||
item-data))
|
|
||||||
|
|
||||||
(defun load-item-data ()
|
|
||||||
(if (/= (length *chronostory-items*) 0)
|
|
||||||
*chronostory-items*
|
|
||||||
(reload-item-data)))
|
|
||||||
|
|
||||||
(defun get-chrono-item (maple-item)
|
(defun get-chrono-item (maple-item)
|
||||||
(if (gethash "isCash" maple-item)
|
(if (gethash "isCash" maple-item)
|
||||||
nil
|
nil
|
||||||
@@ -33,7 +23,7 @@
|
|||||||
(uiop:println (concatenate 'string "Retrieved id " (write-to-string item-id))))
|
(uiop:println (concatenate 'string "Retrieved id " (write-to-string item-id))))
|
||||||
data)))
|
data)))
|
||||||
|
|
||||||
(defun refresh-item-data ()
|
(defmethod refresh ((ds item-data-source))
|
||||||
(let* ((maple-items (get-maplestory-items))
|
(let* ((maple-items (get-maplestory-items))
|
||||||
(_ (uiop:println "Retrieved maplestory items. Getting chronostory items..."))
|
(_ (uiop:println "Retrieved maplestory items. Getting chronostory items..."))
|
||||||
(chrono-items
|
(chrono-items
|
||||||
@@ -45,10 +35,10 @@
|
|||||||
collect chrono-item)))
|
collect chrono-item)))
|
||||||
(declare (ignore _))
|
(declare (ignore _))
|
||||||
(uiop:println "Retrieved chronostory items. Writing out to json file...")
|
(uiop:println "Retrieved chronostory items. Writing out to json file...")
|
||||||
(setf *chronostory-items* chrono-items)
|
(setf (cache ds) chrono-items)
|
||||||
(write-string-into-file
|
(write-string-into-file
|
||||||
(shasht:write-json chrono-items nil)
|
(shasht:write-json chrono-items nil)
|
||||||
"items.json"
|
(file-path ds)
|
||||||
:if-exists :overwrite
|
:if-exists :overwrite
|
||||||
:if-does-not-exist :create)
|
:if-does-not-exist :create)
|
||||||
(uiop:println "Done!")))
|
(uiop:println "Done!")))
|
||||||
|
|||||||
22
mobs.lisp
22
mobs.lisp
@@ -1,5 +1,7 @@
|
|||||||
(in-package :lispostory)
|
(in-package :lispostory)
|
||||||
|
|
||||||
|
(define-data-source mob)
|
||||||
|
|
||||||
(defparameter *maplestory-mobs-url* "https://maplestory.io/api/gms/83/mob")
|
(defparameter *maplestory-mobs-url* "https://maplestory.io/api/gms/83/mob")
|
||||||
|
|
||||||
(defun get-maplestory-mobs ()
|
(defun get-maplestory-mobs ()
|
||||||
@@ -8,8 +10,6 @@
|
|||||||
(defparameter *chronostory-mob-url-format* "https://chronostory.onrender.com/api/mob-info?mobId=~a")
|
(defparameter *chronostory-mob-url-format* "https://chronostory.onrender.com/api/mob-info?mobId=~a")
|
||||||
(defparameter *chronostory-mob-drop-url-format* "https://chronostory.onrender.com/api/mob-drops?mobId=~a")
|
(defparameter *chronostory-mob-drop-url-format* "https://chronostory.onrender.com/api/mob-drops?mobId=~a")
|
||||||
|
|
||||||
(defparameter *chronostory-mobs* (make-array 0))
|
|
||||||
|
|
||||||
(defun chronostory-mob-url (mob-id)
|
(defun chronostory-mob-url (mob-id)
|
||||||
(format nil *chronostory-mob-url-format* mob-id))
|
(format nil *chronostory-mob-url-format* mob-id))
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
(uiop:println (concatenate 'string "Retrieved id " (write-to-string mob-id))))
|
(uiop:println (concatenate 'string "Retrieved id " (write-to-string mob-id))))
|
||||||
data))
|
data))
|
||||||
|
|
||||||
(defun refresh-mob-data ()
|
(defmethod refresh ((ds mob-data-source))
|
||||||
(let* ((maple-mobs (get-maplestory-mobs))
|
(let* ((maple-mobs (get-maplestory-mobs))
|
||||||
(_ (uiop:println "Retrieved maplestory mobs. Getting chronostory mobs..."))
|
(_ (uiop:println "Retrieved maplestory mobs. Getting chronostory mobs..."))
|
||||||
(chrono-mobs
|
(chrono-mobs
|
||||||
@@ -36,16 +36,10 @@
|
|||||||
(chrono-mobs-str (shasht:write-json chrono-mobs nil)))
|
(chrono-mobs-str (shasht:write-json chrono-mobs nil)))
|
||||||
(declare (ignore _))
|
(declare (ignore _))
|
||||||
(uiop:println "Retrieved chronostory mobs. Writing out to json file...")
|
(uiop:println "Retrieved chronostory mobs. Writing out to json file...")
|
||||||
(setf *chronostory-mobs* chrono-mobs)
|
(setf (cache ds) chrono-mobs)
|
||||||
(write-string-into-file chrono-mobs-str "mobs.json" :if-exists :overwrite :if-does-not-exist :create)
|
(write-string-into-file chrono-mobs-str (file-path ds) :if-exists :overwrite :if-does-not-exist :create)
|
||||||
(uiop:println "Done!")))
|
(uiop:println "Done!")))
|
||||||
|
|
||||||
(defun reload-mob-data ()
|
(comment
|
||||||
(let ((mob-data (shasht:read-json (uiop:read-file-string "mobs.json"))))
|
(defvar mobs (make-mob-data-source))
|
||||||
(setf *chronostory-mobs* mob-data)
|
(reload mobs))
|
||||||
mob-data))
|
|
||||||
|
|
||||||
(defun load-mob-data ()
|
|
||||||
(if (/= (length *chronostory-mobs*) 0)
|
|
||||||
*chronostory-mobs*
|
|
||||||
(reload-mob-data)))
|
|
||||||
|
|||||||
20
spawns.lisp
20
spawns.lisp
@@ -1,5 +1,7 @@
|
|||||||
(in-package :lispostory)
|
(in-package :lispostory)
|
||||||
|
|
||||||
|
(define-data-source spawn)
|
||||||
|
|
||||||
(defparameter *chronostory-spawns-url-format* "https://docs.google.com/spreadsheets/d/e/2PACX-1vSIUj-72ADgwMqShxt4Dn7OP7dBN54l0wda1IPwlIVTZUN_ZtTlRx5DDidr43VXv2HYQ5RNqccLbbGS/pub?gid=~a&output=csv&single=true")
|
(defparameter *chronostory-spawns-url-format* "https://docs.google.com/spreadsheets/d/e/2PACX-1vSIUj-72ADgwMqShxt4Dn7OP7dBN54l0wda1IPwlIVTZUN_ZtTlRx5DDidr43VXv2HYQ5RNqccLbbGS/pub?gid=~a&output=csv&single=true")
|
||||||
|
|
||||||
(defparameter *chronostory-spawn-gids*
|
(defparameter *chronostory-spawn-gids*
|
||||||
@@ -16,8 +18,6 @@
|
|||||||
:el-nath 1897049096
|
:el-nath 1897049096
|
||||||
:ludibrium 1290087592))
|
:ludibrium 1290087592))
|
||||||
|
|
||||||
(defvar *chronostory-spawns* nil)
|
|
||||||
|
|
||||||
(defun chronostory-spawn-url (gid)
|
(defun chronostory-spawn-url (gid)
|
||||||
(format nil *chronostory-spawns-url-format* gid))
|
(format nil *chronostory-spawns-url-format* gid))
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ separate csvs."
|
|||||||
(joined (string-join (concatenate 'list first-half second-half) #\Newline)))
|
(joined (string-join (concatenate 'list first-half second-half) #\Newline)))
|
||||||
(csv-to-hash-tables (cl-csv:read-csv joined))))
|
(csv-to-hash-tables (cl-csv:read-csv joined))))
|
||||||
|
|
||||||
(defun refresh-spawn-data ()
|
(defmethod refresh ((ds spawn-data-source))
|
||||||
(let ((spawn-data (pairhash
|
(let ((spawn-data (pairhash
|
||||||
(mapcar #'car *chronostory-spawn-gids*)
|
(mapcar #'car *chronostory-spawn-gids*)
|
||||||
(mapcar (lambda (pair)
|
(mapcar (lambda (pair)
|
||||||
@@ -96,20 +96,10 @@ separate csvs."
|
|||||||
(uiop:println (concat "Requesting data for " (symbol-name (car pair))))
|
(uiop:println (concat "Requesting data for " (symbol-name (car pair))))
|
||||||
(parse-sheet data)))
|
(parse-sheet data)))
|
||||||
*chronostory-spawn-gids*))))
|
*chronostory-spawn-gids*))))
|
||||||
(setf *chronostory-spawns* spawn-data)
|
(setf (cache ds) spawn-data)
|
||||||
(write-string-into-file
|
(write-string-into-file
|
||||||
(shasht:write-json spawn-data nil)
|
(shasht:write-json spawn-data nil)
|
||||||
"spawns.json"
|
(file-path ds)
|
||||||
:if-exists :overwrite
|
:if-exists :overwrite
|
||||||
:if-does-not-exist :create)
|
:if-does-not-exist :create)
|
||||||
spawn-data))
|
spawn-data))
|
||||||
|
|
||||||
(defun reload-spawn-data ()
|
|
||||||
(let ((spawn-data (shasht:read-json (uiop:read-file-string "spawns.json" :if-does-not-exist nil))))
|
|
||||||
(setf *chronostory-spawns* spawn-data)
|
|
||||||
spawn-data))
|
|
||||||
|
|
||||||
(defun load-spawn-data ()
|
|
||||||
(if-not *chronostory-spawns*
|
|
||||||
(reload-spawn-data)
|
|
||||||
*chronostory-spawns*))
|
|
||||||
|
|||||||
29
utils.lisp
29
utils.lisp
@@ -19,3 +19,32 @@
|
|||||||
|
|
||||||
(defun string-to-hash-table-key (s)
|
(defun string-to-hash-table-key (s)
|
||||||
(string-replace " " s ""))
|
(string-replace " " s ""))
|
||||||
|
|
||||||
|
(defclass data-source ()
|
||||||
|
((cache :initform nil :accessor cache)
|
||||||
|
(file-path :initarg :file-path :accessor file-path)))
|
||||||
|
|
||||||
|
(defmacro define-data-source (singular-name)
|
||||||
|
(let* ((class-name (symbolicate singular-name '-data-source))
|
||||||
|
(constructor-name (symbolicate 'make- singular-name '-data-source))
|
||||||
|
(plural-name (concat (symbol-name singular-name) "s"))
|
||||||
|
(file-name (concat (string-downcase plural-name) ".json")))
|
||||||
|
`(progn
|
||||||
|
(defclass ,class-name (data-source) ())
|
||||||
|
|
||||||
|
(defun ,constructor-name ()
|
||||||
|
(make-instance ',class-name :file-path ,file-name)))))
|
||||||
|
|
||||||
|
(defgeneric data (data-source))
|
||||||
|
(defmethod data ((ds data-source))
|
||||||
|
(or (cache ds)
|
||||||
|
(reload ds)))
|
||||||
|
|
||||||
|
(defgeneric reload (data-source))
|
||||||
|
(defmethod reload ((ds data-source))
|
||||||
|
(if (uiop:file-exists-p (file-path ds))
|
||||||
|
(let ((data (shasht:read-json (uiop:read-file-string (file-path ds)))))
|
||||||
|
(setf (cache ds) data)
|
||||||
|
data)))
|
||||||
|
|
||||||
|
(defgeneric refresh (data-source))
|
||||||
|
|||||||
Reference in New Issue
Block a user