Yu-Gi-Oh! Deck Building and Card Inventory Management web interface written in Common Lisp, utilizing HTMX.
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

503 lines
15KB

  1. #|
  2. src/models/packages.lisp
  3. Models Main Package List
  4. |#
  5. (in-package #:cl-user)
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7. (defpackage #:cl-deck-builder2.models.generics
  8. (:use #:cl)
  9. (:export #:deck-id-of
  10. #:name-of
  11. #:ygo-archetype-of
  12. #:ygo-atk-of
  13. #:ygo-attribute-of
  14. #:ygo-def-of
  15. #:ygo-description-of
  16. #:ygo-frame-type-of
  17. #:ygo-level-of
  18. #:ygo-linkmarkers-of
  19. #:ygo-linkval-of
  20. #:ygo-passcode-of
  21. #:ygo-price-of
  22. #:ygo-race-of
  23. #:ygo-scale-of
  24. #:ygo-type-of))
  25. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  26. (defpackage #:cl-deck-builder2.models.registered-table
  27. (:use #:cl
  28. #:cl-deck-builder2.db
  29. #:cl-deck-builder2.models.generics)
  30. (:import-from #:cl-deck-builder2.toolkit
  31. #:relative-pathname)
  32. (:export #:registry
  33. #:registered-classes
  34. #:registered-table-class
  35. #:ensure-tables-exist
  36. #:migration-expressions
  37. #:migrate-table
  38. #:export-registered-classes
  39. #:export-registered-classe-to-file))
  40. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  41. (defpackage #:cl-deck-builder2.models.attachment
  42. (:use #:cl
  43. #:cl-deck-builder2.models.generics)
  44. (:import-from #:cl-deck-builder2.models.registered-table
  45. #:registered-table-class)
  46. (:import-from #:cl-deck-builder2.db
  47. #:create-dao)
  48. (:export #:attachment
  49. #:create-attachment
  50. #:attachment-valid-p))
  51. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  52. (defpackage #:cl-deck-builder2.models.category
  53. (:use #:cl
  54. #:cl-deck-builder2.models.generics)
  55. (:import-from #:cl-deck-builder2.db
  56. #:create-dao
  57. #:select-dao)
  58. (:import-from #:cl-deck-builder2.models.registered-table
  59. #:registered-table-class)
  60. (:export #:category
  61. #:category-name-of
  62. #:category-left-of
  63. #:category-right-of
  64. #:category-rename
  65. #:category-insert-right-of
  66. #:category-insert-new-child
  67. #:category-insert-fake-data
  68. #:category-full-tree
  69. #:category-leaf-nodes
  70. #:category-full-tree-format
  71. #:category-delete-tree
  72. #:category-delete-and-reparent
  73. #:category-tree-depth
  74. #:category-node-depth
  75. #:category-subtree-depth
  76. #:category-subtree-max-depth
  77. #:by-category))
  78. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  79. (defpackage #:cl-deck-builder2.models.ygoprodeck.fields
  80. (:use #:cl
  81. #:cl-deck-builder2.db
  82. #:cl-deck-builder2.models.generics)
  83. (:import-from #:cl-deck-builder2.models.registered-table
  84. #:registered-table-class)
  85. (:export #:variant
  86. #:name-of
  87. #:define-variant-list
  88. #:variant-condition
  89. #:variant-language
  90. #:ygo-banlist-name
  91. #:ygo-format-name
  92. #:ygo-linkmarker-name
  93. #:ygo-set-rarity-code))
  94. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  95. (defpackage #:cl-deck-builder2.models.ygoprodeck
  96. (:use #:cl
  97. #:cl-deck-builder2.db
  98. #:cl-deck-builder2.models.generics
  99. #:cl-deck-builder2.models.registered-table)
  100. (:export :ygo-info
  101. #:ygo-description-of
  102. #:ygo-frame-type-of
  103. #:ygo-type-of
  104. #:ygo-passcode-of
  105. #:name-of
  106. #:ygo-race-of
  107. #:ygo-archetype-of
  108. #:ygo-attribute-of
  109. #:ygo-linkmarkers-of
  110. #:ygo-atk-of
  111. #:ygo-def-of
  112. #:ygo-level-of
  113. #:ygo-linkval-of
  114. #:ygo-scale-of))
  115. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  116. (defpackage #:cl-deck-builder2.models.ygoprodeck.classes
  117. (:use #:cl
  118. #:cl-deck-builder2.models.generics
  119. #:cl-deck-builder2.models.ygoprodeck.fields)
  120. (:import-from #:cl-deck-builder2.models.registered-table
  121. #:registered-table-class)
  122. (:import-from #:cl-deck-builder2.models.ygoprodeck.fields
  123. #:variant-condition
  124. #:ygo-banlist-name
  125. #:ygo-format-name
  126. #:ygo-linkmarker-name
  127. #:ygo-set-rarity-code)
  128. (:import-from :cl-deck-builder2.toolkit
  129. :currency-deflate
  130. :currency-inflate)
  131. (:export #:ygo-card-name
  132. #:ygo-card-type
  133. #:ygo-card-frame-type
  134. #:ygo-card-race
  135. #:ygo-card-archetype
  136. #:ygo-card-attribute
  137. #:ygo-card
  138. #:ygo-card-misc-info
  139. #:ygo-set-name
  140. #:ygo-set-code
  141. #:ygo-set-rarity-code
  142. #:ygo-set-rarity
  143. #:ygo-set-edition
  144. #:ygo-set
  145. #:ygo-set-item
  146. #:ygo-linkmarker
  147. #:ygo-format
  148. ;; #:ygo-banlist-name
  149. ;; #:ygo-format-name
  150. ;; #:ygo-linkmarker-name
  151. #:ygo-banlist
  152. #:ygo-alternative-artwork
  153. #:ygo-price
  154. ;; Accessor Methods
  155. #:ygo-alternate-id-of
  156. #:ygo-archetype-of
  157. #:ygo-atk-of
  158. #:ygo-attribute-of
  159. #:ygo-ban-goat
  160. #:ygo-ban-ocg
  161. #:ygo-ban-tcg
  162. #:ygo-beta-id-of
  163. #:ygo-beta-name-of
  164. #:ygo-card-type-of
  165. #:ygo-code-of
  166. #:ygo-common-charity-format
  167. #:ygo-def-of
  168. #:ygo-desc-of
  169. #:ygo-downvotes-of
  170. #:ygo-duel-links-format
  171. #:ygo-edison-format
  172. #:ygo-edition-of
  173. #:ygo-frame-type-of
  174. #:ygo-goat-format
  175. #:ygo-has-effect
  176. #:ygo-is-staple
  177. #:ygo-konami-id-of
  178. #:ygo-level-of
  179. #:ygo-linkmarker-bottom
  180. #:ygo-linkmarker-bottom-left
  181. #:ygo-linkmarker-bottom-right
  182. #:ygo-linkmarker-left
  183. #:ygo-linkmarker-right
  184. #:ygo-linkmarker-top
  185. #:ygo-linkmarker-top-left
  186. #:ygo-linkmarker-top-right
  187. #:ygo-name-of
  188. #:ygo-ocg-date-of
  189. #:ygo-ocg-format
  190. #:ygo-ocg-goat-format
  191. #:ygo-passcode-of
  192. #:ygo-question-atk
  193. #:ygo-question-def
  194. #:ygo-race-of
  195. #:ygo-rarity-of
  196. #:ygo-scale-of
  197. #:ygo-set-code-of
  198. #:ygo-set-rarity-code-of
  199. #:ygo-speed-duel-format
  200. #:ygo-tcg-date-of
  201. #:ygo-tcg-format
  202. #:ygo-treated-as
  203. #:ygo-upvotes-of
  204. #:ygo-url-of
  205. #:ygo-views-of
  206. #:ygo-viewsweek-of
  207. #:ygo-amazon-price-of
  208. #:ygo-cardmarket-price-of
  209. #:ygo-coolstuffinc-price-of
  210. #:ygo-ebay-price-of
  211. #:ygo-tcgplayer-price-of
  212. #:ygo-price-of
  213. #:qty-of
  214. #:item-of
  215. #:variant-of
  216. #:sell-price-of
  217. #:opt-qty-of
  218. #:buy-price-of)
  219. (:documentation "New YGOProDeck database schema - classes."))
  220. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  221. (defpackage #:cl-deck-builder2.models.ygoprodeck.methods
  222. (:use #:cl
  223. #:cl-deck-builder2.db
  224. #:cl-deck-builder2.models.generics
  225. #:cl-deck-builder2.models.ygoprodeck.classes
  226. #:cl-deck-builder2.models.ygoprodeck.fields)
  227. (:import-from #:cl-deck-builder2.models.registered-table
  228. #:registered-classes
  229. #:registry)
  230. (:export #:print-object
  231. #:split-code
  232. #:ygo-card
  233. #:ygo-card-by-name
  234. #:ygo-card-by-passcode
  235. #:ygo-card-names-by-deck-id
  236. #:ygo-card-names-from-list
  237. #:ygo-card-sets
  238. #:ygo-set
  239. #:ygo-set-by-id
  240. #:ygo-set-by-code
  241. #:ygo-set-by-name
  242. #:ygo-set-by-passcode
  243. #:ygo-select-set-item)
  244. (:documentation "New YGOProDeck database schema - methods."))
  245. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  246. (defpackage #:cl-deck-builder2.models.ygoprodeck.cardinfo
  247. (:use #:cl)
  248. (:local-nicknames (#:v #:org.shirakumo.verbose))
  249. (:export #:cardinfo
  250. #:cardinfo-input
  251. #:cardinfo-output
  252. #:cardinfo-input-exists-p
  253. #:cardinfo-output-exists-p
  254. #:cardinfo-json
  255. #:cardinfo-list
  256. #:cardinfo-download
  257. #:cardinfo-cleanup
  258. #:cardinfo-convert
  259. #:cardinfo-update-and-cleanup))
  260. (defpackage #:cl-deck-builder2.models.ygoprodeck.json
  261. (:use #:cl
  262. #:cl-deck-builder2.db
  263. #:cl-deck-builder2.toolkit
  264. #:cl-deck-builder2.models.generics
  265. #:cl-deck-builder2.models.ygoprodeck.fields
  266. #:cl-deck-builder2.models.ygoprodeck.cardinfo
  267. #:cl-deck-builder2.models.ygoprodeck.classes)
  268. (:local-nicknames (#:v #:org.shirakumo.verbose))
  269. (:export #:cardinfo-import))
  270. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  271. (defpackage #:cl-deck-builder2.models.user
  272. (:use #:cl
  273. #:cl-deck-builder2.models.generics
  274. #:cl-deck-builder2.db)
  275. (:import-from #:cl-deck-builder2.models.registered-table
  276. #:registered-table-class)
  277. (:import-from :mito-auth
  278. :has-secure-password)
  279. (:export #:user
  280. #:name-of
  281. #:user-email-of
  282. #:user-roles-of
  283. #:role
  284. #:user-role
  285. #:user-role-user
  286. #:user-role-role
  287. #:user-admin-p
  288. #:user-verified-p
  289. #:create-user
  290. #:find-user
  291. #:create-role
  292. #:add-role))
  293. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  294. (defpackage #:cl-deck-builder2.models.feedback
  295. (:use #:cl)
  296. (:import-from #:cl-deck-builder2.db
  297. #:create-dao)
  298. (:import-from #:cl-deck-builder2.models.registered-table
  299. #:registered-table-class)
  300. (:import-from #:cl-deck-builder2.models.user
  301. #:user)
  302. (:export #:feedback
  303. #:feedback-body-of
  304. #:feedback-user-of
  305. #:create-feedback))
  306. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  307. ;; This package doesn't touch the DB ... yet
  308. (defpackage #:cl-deck-builder2.models.qr-code
  309. (:use :cl
  310. :cl-deck-builder2.db)
  311. (:local-nicknames (#:v #:org.shirakumo.verbose))
  312. (:import-from :cl-deck-builder2.toolkit
  313. :query-param)
  314. (:export :qr-settings
  315. :qr-string
  316. :qr-min-version
  317. :qr-ec-level
  318. :qr-encoding-mode
  319. :qr-mask-number
  320. :qr-to-plist
  321. :qr-generate))
  322. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  323. (defpackage #:cl-deck-builder2.models.ydk
  324. (:use #:cl
  325. #:cl-deck-builder2.db
  326. #:cl-deck-builder2.models.generics
  327. #:cl-deck-builder2.models.registered-table
  328. #:cl-deck-builder2.toolkit)
  329. (:import-from #:cl-deck-builder2.models.category
  330. #:category)
  331. (:import-from #:cl-deck-builder2.models.ygoprodeck
  332. #:ygo-info)
  333. (:export #:ydk
  334. #:deck-item
  335. #:ydk-deck
  336. #:deck-id-of
  337. #:deck-kind-of
  338. #:deck-passcode-of
  339. #:ydk-created-by
  340. #:ydk-name-of
  341. #:ydk-id-of
  342. #:ydk-deck-delete-from
  343. #:ydk-deck-item-delete-from
  344. #:ydk-deck-delete-by-id
  345. #:ydk-deck-delete-by-name
  346. #:ydk-deck-by-id
  347. #:ydk-deck-by-name
  348. #:ydk-deck-info-by-id
  349. #:ydk-rename-deck
  350. #:ydk-add
  351. #:ydk-clear
  352. #:ydk-sync
  353. #:ydk-main-deck-of
  354. #:ydk-extra-deck-of
  355. #:ydk-side-deck-of
  356. #:ydk-category-of
  357. #:ydk-all
  358. #:ydk-concatenate
  359. #:ydk-unique
  360. #:ydk-query
  361. #:ydk-sorted
  362. #:ydk-delete
  363. #:ydk-delete-index
  364. #:ydk-table-ensure-exists
  365. #:ydk-table-drop
  366. #:ydk-table-delete
  367. #:ydk-table-select
  368. #:ydk-table-select-count
  369. #:ydk-to-kde)
  370. (:documentation "This model is just a thin wrapper around YDK format.
  371. The YDK Format is like this:
  372. created by...
  373. #main
  374. <a series of passcodes>
  375. #extra
  376. <a series of passcodes>
  377. !side
  378. <a series of passcodes>
  379. TODO CL-YDK + YDK-STORAGE-MIXIN?"))
  380. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  381. ;; Psuedo class for working with the SQLite database.
  382. ;; This will probably go away once we switch over to MariaDB.
  383. (defpackage #:cl-deck-builder2.models.sqlite-schema
  384. (:use :cl
  385. :cl-deck-builder2.db)
  386. (:export #:sqlite-schema
  387. #:kind-of
  388. #:sql-of
  389. #:rootpage-of
  390. #:table-names))
  391. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  392. (defpackage #:cl-deck-builder2.models.constructed-decks
  393. (:use #:cl
  394. #:cl-deck-builder2.db
  395. #:cl-deck-builder2.toolkit
  396. #:cl-deck-builder2.models.generics
  397. #:cl-deck-builder2.models.registered-table
  398. #:cl-deck-builder2.models.ygoprodeck.classes
  399. #:cl-deck-builder2.models.ygoprodeck.methods)
  400. (:import-from #:cl-deck-builder2.models.category
  401. #:category)
  402. (:import-from #:cl-deck-builder2.models.ydk
  403. #:deck-item
  404. #:deck-id-of
  405. #:deck-passcode-of
  406. #:ydk-category-of
  407. #:ydk-created-by
  408. #:ydk-name-of
  409. #:ydk-deck)
  410. (:local-nicknames (#:v #:org.shirakumo.verbose))
  411. (:export #:constructed-deck
  412. #:constructed-deck-item
  413. #:constructed-deck-intermediate
  414. #:cdi-deck-item
  415. #:cdi-deck-set
  416. #:cdi-deck-set-item
  417. #:cdi-deck-condition
  418. #:cdi-deck-card
  419. #:constructed-deck-as-cdi-list
  420. ;; :deck-category-of
  421. ;; :deck-created-by
  422. ;; :deck-id-of
  423. :deck-name-of
  424. ;; :deck-sell-price
  425. :deck-sell-price-of
  426. :deck-sold
  427. ;; :ydk-deck-of
  428. ;; :ygo-card-of
  429. ;; #:sold-deck
  430. #:ydk-deck-pull-from-inventory
  431. #:find-any-invalid-qtys
  432. #:deck-to-pull-set-items-qty-as-alist
  433. #:deck-to-pull-desired-qty-as-alist
  434. #:subtract-desired-from-set-item-qty-as-alist
  435. #:valid-pull-p
  436. #:cdi-pull-from-inventory))
  437. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  438. (uiop:define-package #:cl-deck-builder2.models
  439. (:use #:cl)
  440. (:use-reexport #:cl-deck-builder2.models.attachment
  441. #:cl-deck-builder2.models.category
  442. #:cl-deck-builder2.models.constructed-decks
  443. #:cl-deck-builder2.models.feedback
  444. #:cl-deck-builder2.models.qr-code
  445. #:cl-deck-builder2.models.registered-table
  446. #:cl-deck-builder2.models.sqlite-schema
  447. #:cl-deck-builder2.models.user
  448. #:cl-deck-builder2.models.ydk
  449. #:cl-deck-builder2.models.ygoprodeck
  450. #:cl-deck-builder2.models.ygoprodeck.fields
  451. #:cl-deck-builder2.models.ygoprodeck.cardinfo
  452. #:cl-deck-builder2.models.ygoprodeck.json
  453. ;; TODO replace ygoprodeck with ygoprodeck2
  454. #:cl-deck-builder2.models.ygoprodeck.classes
  455. #:cl-deck-builder2.models.ygoprodeck.methods))