Yu-Gi-Oh! Deck Building and Card Inventory Management web interface written in Common Lisp, utilizing HTMX.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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)))