Yu-Gi-Oh! Deck Building and Card Inventory Management web interface written in Common Lisp, utilizing HTMX.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

138 lines
5.2KB

  1. #|
  2. Legacy Code
  3. Scheduled For Deletion
  4. YGOProDeck v1 JSON Importer
  5. |#
  6. (in-package #:cl-user)
  7. (defpackage #:cl-deck-builder2.models.ygoprodeck.json
  8. (:use :cl
  9. :cl-deck-builder2.db
  10. :cl-deck-builder2.models.ygoprodeck)
  11. (:local-nicknames
  12. (#:v #:org.shirakumo.verbose))
  13. (:export :json-import-cardinfo))
  14. (in-package #:cl-deck-builder2.models.ygoprodeck.json)
  15. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  16. (defvar *json* nil
  17. "The currently loaded \"cardinfo.php\" data pulled from YGOProDeck
  18. API. You may have to munge it into \"cardinfo.json\" with jq:
  19. $ jq . < cardinfo.php > cardinfo.json
  20. ")
  21. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  22. ;; GET-NEW-CARDINFO got renamed to YGOPRODECK2:FETCH-CARDINFO.
  23. ;; Actually, basically everything got moved into YGOPRODECK2. This is
  24. ;; legacy code.
  25. (defun json-import-cardinfo (path &optional (force nil))
  26. (load-cardinfo path force)
  27. (let ((lst ()))
  28. ;; CARD is an ALIST
  29. (dolist (card *json*)
  30. (let (;; Banlist_Info: Unused
  31. ;; (banlist-info (assoc-utils:aget card :banlist--info))
  32. ;; Card Images: Variant Artwork
  33. ;; Skip the first one with REST
  34. (card-images (rest (assoc-utils:aget card :card--images)))
  35. ;; make a copy: we munge it
  36. (card-prices (copy-alist (assoc-utils:aget card :card--prices)))
  37. ;; make a copy: we munge it
  38. (card-sets (copy-alist (assoc-utils:aget card :card--sets)))
  39. ;; Link Markers: Unused
  40. ;; (linkmarkers (assoc-utils:aget card :linkmarkers))
  41. ;; make a copy: we munge it
  42. (card-misc-info (copy-alist (assoc-utils:aget card :misc--info)))
  43. ;; '((:banlist--info)
  44. ;; (:card--images)
  45. ;; (:card--prices)
  46. ;; (:card--sets)
  47. ;; (:linkmarkers)
  48. ;; (:misc--info))
  49. (passcode (assoc-utils:aget card :id))
  50. (base-fields (assoc-utils:alist-plist
  51. (json-cardinfo-base-fields card))))
  52. ;; First import all the base data
  53. (push (apply #'make-instance 'ygo-info base-fields) lst)
  54. ;; Card images, variant artwork, I'm not sure how to handle
  55. ;; it. Here's a dirty hack! If there are any variant images
  56. ;; with passcodes, just create a duplicate entry with the same
  57. ;; data from the parent. I'm sure a separate table is a better
  58. ;; way to handle this information, but I don't know how to do
  59. ;; that right now!
  60. (dolist (card-image card-images)
  61. (let ((id (assoc-utils:aget card-image :id)))
  62. (setf (getf base-fields :passcode) id)
  63. (push (apply #'make-instance 'ygo-info base-fields) lst)))
  64. ;; TODO Ban List Info
  65. ;; Append :passcode to all banlist-info for this card
  66. ;; (dolist (banlist banlist-info)
  67. ;; (setf banlist (acons :passcode passcode banlist))
  68. ;; (apply #'mito:create-dao 'banlist-info
  69. ;; (assoc-utils:alist-plist banlist)))
  70. ;; Append :passcode to all card-prices for this card
  71. (dolist (card-price card-prices)
  72. (setf card-price (acons :passcode passcode card-price)
  73. ;; Data Transformation
  74. (car (assoc :cardmarket--price card-price)) :cardmarket
  75. (car (assoc :tcgplayer--price card-price)) :tcgplayer
  76. (car (assoc :ebay--price card-price)) :ebay
  77. (car (assoc :amazon--price card-price)) :amazon
  78. (car (assoc :coolstuffinc--price card-price)) :coolstuffinc)
  79. (push (apply #'make-instance 'ygo-price (assoc-utils:alist-plist card-price))
  80. lst))
  81. ;; Append :passcode to all card-sets for this card
  82. (dolist (card-set card-sets)
  83. (setf card-set (acons :passcode passcode card-set)
  84. ;; Data Transformation
  85. (car (assoc :set--name card-set)) :name
  86. (car (assoc :set--code card-set)) :code
  87. (car (assoc :set--rarity card-set)) :rarity
  88. (car (assoc :set--rarity--code card-set)) :rarity-code
  89. (car (assoc :set--price card-set)) :price)
  90. (push (apply #'make-instance 'ygo-set (assoc-utils:alist-plist card-set))
  91. lst))
  92. ;; misc_info + misc_info.formats
  93. ;; (dolist (misc-info card-misc-info)
  94. ;; (setf card-set (acons :passcode passcode card-set)
  95. ;; ;; Data Transformation
  96. ;; (car (assoc :set--name card-set)) :name
  97. ;; (car (assoc :set--code card-set)) :code
  98. ;; (car (assoc :set--rarity card-set)) :rarity
  99. ;; (car (assoc :set--rarity--code card-set)) :rarity-code
  100. ;; (car (assoc :set--price card-set)) :price)
  101. ;; (push (apply #'make-instance 'ygo-set (assoc-utils:alist-plist card-set))
  102. ;; lst))
  103. ))
  104. (do-grouped-insert lst)))
  105. ;; TODO linkmarkers
  106. ;; Append :passcode to all linkmarkers for this card
  107. ;; (dolist (linkmarker linkmarkers)
  108. ;; (setf linkmarker (acons :passcode passcode linkmarker))
  109. ;; Data Transformation
  110. ;; (apply #'mito:create-dao 'linkmarker
  111. ;; (assoc-utils:alist-plist linkmarker)))