From e461e78661fdacd9e7264676038fb2b425e2bbc2 Mon Sep 17 00:00:00 2001 From: KD Date: Mon, 20 Oct 2025 11:19:06 -0400 Subject: [PATCH] icarus_models version bump (#210) * icarus_models version bump * icarus_models related changes * Code formatting * Test changeS: * Test changes * Migration changes * Migration changes * Warning fix * Cleanup * Updated readme * Removed line from migrations * Code cleanup * Version bump * cargo update * icarus_models version bump --- Cargo.lock | 242 +++++++++--------- Cargo.toml | 4 +- README.md | 8 +- migrations/20250420185217_init_migration.sql | 4 +- src/callers/coverart.rs | 46 ++-- src/callers/song.rs | 93 ++++--- src/main.rs | 69 ++--- test_migrations/20250725213944_init.sql | 3 +- .../20250725214735_song_queue_processed.sql | 4 +- 9 files changed, 240 insertions(+), 233 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a45f10d..779eec5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr2line" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -144,21 +135,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "backtrace" -version = "0.3.76" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-link", -] - [[package]] name = "base64" version = "0.22.1" @@ -173,11 +149,11 @@ checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bitflags" -version = "2.9.4" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" dependencies = [ - "serde", + "serde_core", ] [[package]] @@ -219,9 +195,9 @@ dependencies = [ [[package]] name = "cfg-if" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "common-multipart-rfc7578" @@ -654,9 +630,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.8" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dc8f7d2ded5f9209535e4b3fd4d39c002f30902ff5ce9f64e2c33d549576500" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -671,28 +647,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi 0.11.1+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "getrandom" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.7+wasi-0.2.4", + "wasip2", ] -[[package]] -name = "gimli" -version = "0.32.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" - [[package]] name = "hashbrown" version = "0.15.5" @@ -853,7 +823,7 @@ dependencies = [ [[package]] name = "icarus" -version = "0.3.0" +version = "0.3.1" dependencies = [ "axum", "axum-extra", @@ -902,8 +872,8 @@ dependencies = [ [[package]] name = "icarus_models" -version = "0.7.0" -source = "git+ssh://git@git.kundeng.us/phoenix/icarus_models.git?tag=v0.7.0#11e5b1745cdb256b027cb8ce3e18e949351ea9ea" +version = "0.8.0" +source = "git+ssh://git@git.kundeng.us/phoenix/icarus_models.git?tag=v0.8.0#860d684e7b340b05d43d1fc3e6bd36b7cc45d81b" dependencies = [ "josekit", "rand 0.9.2", @@ -1023,9 +993,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.4" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" dependencies = [ "equivalent", "hashbrown 0.16.0", @@ -1033,17 +1003,6 @@ dependencies = [ "serde_core", ] -[[package]] -name = "io-uring" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" -dependencies = [ - "bitflags", - "cfg-if", - "libc", -] - [[package]] name = "itoa" version = "1.0.15" @@ -1246,13 +1205,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "wasi", + "windows-sys 0.61.2", ] [[package]] @@ -1361,15 +1320,6 @@ dependencies = [ "libm", ] -[[package]] -name = "object" -version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" -dependencies = [ - "memchr", -] - [[package]] name = "ogg_pager" version = "0.7.0" @@ -1387,9 +1337,9 @@ checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.73" +version = "0.10.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" +checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" dependencies = [ "bitflags", "cfg-if", @@ -1419,9 +1369,9 @@ checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-sys" -version = "0.9.109" +version = "0.9.110" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" dependencies = [ "cc", "libc", @@ -1632,7 +1582,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", ] [[package]] @@ -1646,9 +1596,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.12.1" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a52d8d02cacdb176ef4678de6c052efb4b3da14b78e4db683a4252762be5433" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -1658,9 +1608,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "722166aa0d7438abbaa4d5cc2c649dac844e8c56d82fb3d33e9c34b5cd268fc6" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -1669,9 +1619,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3160422bbd54dd5ecfdca71e5fd59b7b8fe2b1697ab2baf64f6d05dcc66d298" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "ring" @@ -1709,9 +1659,9 @@ dependencies = [ [[package]] name = "rust-embed" -version = "8.7.2" +version = "8.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "025908b8682a26ba8d12f6f2d66b987584a4a87bc024abc5bbc12553a8cd178a" +checksum = "fb44e1917075637ee8c7bcb865cf8830e3a92b5b1189e44e3a0ab5a0d5be314b" dependencies = [ "rust-embed-impl", "rust-embed-utils", @@ -1720,9 +1670,9 @@ dependencies = [ [[package]] name = "rust-embed-impl" -version = "8.7.2" +version = "8.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6065f1a4392b71819ec1ea1df1120673418bf386f50de1d6f54204d836d4349c" +checksum = "382499b49db77a7c19abd2a574f85ada7e9dbe125d5d1160fa5cad7c4cf71fc9" dependencies = [ "proc-macro2", "quote", @@ -1733,20 +1683,14 @@ dependencies = [ [[package]] name = "rust-embed-utils" -version = "8.7.2" +version = "8.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6cc0c81648b20b70c491ff8cce00c1c3b223bb8ed2b5d41f0e54c6c4c0a3594" +checksum = "21fcbee55c2458836bcdbfffb6ec9ba74bbc23ca7aa6816015a3dd2c4d8fc185" dependencies = [ "sha2", "walkdir", ] -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - [[package]] name = "rustix" version = "1.1.2" @@ -1977,12 +1921,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] @@ -2226,9 +2170,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.106" +version = "2.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" dependencies = [ "proc-macro2", "quote", @@ -2259,7 +2203,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" dependencies = [ "fastrand", - "getrandom 0.3.3", + "getrandom 0.3.4", "once_cell", "rustix", "windows-sys 0.61.2", @@ -2372,29 +2316,26 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.47.1" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "backtrace", "bytes", - "io-uring", "libc", "mio", "parking_lot", "pin-project-lite", "signal-hook-registry", - "slab", "socket2", "tokio-macros", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] name = "tokio-macros" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" dependencies = [ "proc-macro2", "quote", @@ -2649,7 +2590,7 @@ version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" dependencies = [ - "getrandom 0.3.3", + "getrandom 0.3.4", "js-sys", "serde", "wasm-bindgen", @@ -2689,15 +2630,6 @@ version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" -[[package]] -name = "wasi" -version = "0.14.7+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" -dependencies = [ - "wasip2", -] - [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" @@ -2824,6 +2756,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -2857,13 +2798,30 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -2876,6 +2834,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -2888,6 +2852,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -2900,12 +2870,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -2918,6 +2900,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -2930,6 +2918,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -2942,6 +2936,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -2954,6 +2954,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + [[package]] name = "wit-bindgen" version = "0.46.0" diff --git a/Cargo.toml b/Cargo.toml index b642710..ebf0655 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "icarus" -version = "0.3.0" +version = "0.3.1" edition = "2024" rust-version = "1.90" @@ -26,7 +26,7 @@ josekit = { version = "0.10.3" } utoipa = { version = "5.4.0", features = ["axum_extras"] } utoipa-swagger-ui = { version = "9.0.2", features = ["axum"] } icarus_meta = { git = "ssh://git@git.kundeng.us/phoenix/icarus_meta.git", tag = "v0.4.0" } -icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.7.0" } +icarus_models = { git = "ssh://git@git.kundeng.us/phoenix/icarus_models.git", tag = "v0.8.0" } icarus_envy = { git = "ssh://git@git.kundeng.us/phoenix/icarus_envy.git", tag = "v0.5.0" } [dev-dependencies] diff --git a/README.md b/README.md index a76440a..e3b04d2 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,12 @@ Web API for the Icarus project. ### Requires -`icarus_auth` +v0.6.0 -`songparser` +v0.4.1 +`icarus_auth` v0.6.1 +`songparser` v0.4.2 + +### Compatible with +`icarus-dm` v0.8.2 + ## Getting Started Quickest way to get started is with docker. Make sure `icarus_auth` and `songparser` repositories diff --git a/migrations/20250420185217_init_migration.sql b/migrations/20250420185217_init_migration.sql index 09e10b5..621a949 100644 --- a/migrations/20250420185217_init_migration.sql +++ b/migrations/20250420185217_init_migration.sql @@ -55,8 +55,8 @@ CREATE TABLE IF NOT EXISTS "song" ( CREATE TABLE IF NOT EXISTS "coverart" ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), title TEXT NOT NULL, - -- TODO: Separate path later - path TEXT NOT NULL, + directory TEXT NOT NULL, + filename TEXT NOT NULL, song_id UUID NOT NULL -- TODO: Add type later ); diff --git a/src/callers/coverart.rs b/src/callers/coverart.rs index 9ab8156..09901cb 100644 --- a/src/callers/coverart.rs +++ b/src/callers/coverart.rs @@ -325,11 +325,12 @@ pub mod cov_db { ) -> Result { let result = sqlx::query( r#" - INSERT INTO "coverart" (title, path, song_id) VALUES($1, $2, $3) RETURNING id; + INSERT INTO "coverart" (title, directory, filename, song_id) VALUES($1, $2, $3, $4) RETURNING id; "#, ) .bind(&coverart.title) - .bind(&coverart.path) + .bind(&coverart.directory) + .bind(&coverart.filename) .bind(song_id) .fetch_one(pool) .await @@ -355,7 +356,7 @@ pub mod cov_db { ) -> Result { let result = sqlx::query( r#" - SELECT id, title, path, song_id FROM "coverart" WHERE id = $1; + SELECT id, title, directory, filename, song_id FROM "coverart" WHERE id = $1; "#, ) .bind(id) @@ -375,15 +376,19 @@ pub mod cov_db { .try_get("title") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - path: row - .try_get("path") + directory: row + .try_get("directory") + .map_err(|_e| sqlx::Error::RowNotFound) + .unwrap(), + filename: row + .try_get("filename") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - data: Vec::new(), song_id: row .try_get("song_id") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), + ..Default::default() }), Err(_) => Err(sqlx::Error::RowNotFound), } @@ -395,7 +400,7 @@ pub mod cov_db { ) -> Result { let result = sqlx::query( r#" - SELECT id, title, path, song_id FROM "coverart" WHERE song_id = $1; + SELECT id, title, directory, filename, song_id FROM "coverart" WHERE song_id = $1; "#, ) .bind(song_id) @@ -415,8 +420,12 @@ pub mod cov_db { .try_get("title") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - path: row - .try_get("path") + directory: row + .try_get("directory") + .map_err(|_e| sqlx::Error::RowNotFound) + .unwrap(), + filename: row + .try_get("filename") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), data: Vec::new(), @@ -437,7 +446,7 @@ pub mod cov_db { r#" DELETE FROM "coverart" WHERE id = $1 - RETURNING id, title, path, song_id + RETURNING id, title, directory, filename, song_id "#, ) .bind(id) @@ -457,8 +466,12 @@ pub mod cov_db { .try_get("title") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - path: row - .try_get("path") + directory: row + .try_get("directory") + .map_err(|_e| sqlx::Error::RowNotFound) + .unwrap(), + filename: row + .try_get("filename") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), song_id: row @@ -701,14 +714,13 @@ pub mod endpoint { match crate::callers::song::song_db::get_song(&pool, &song_id).await { Ok(song) => { let directory = icarus_envy::environment::get_root_directory().await.value; - let dir = std::path::Path::new(&directory); - // TODO: Make this random and the file extension should not be hard coded let filename = format!("{}-coverart.jpeg", &song.filename[..8]); - let save_path = dir.join(&filename); - let path = String::from(save_path.to_str().unwrap()); + let mut coverart = - icarus_models::coverart::init::init_coverart_only_path(path); + icarus_models::coverart::init::init_coverart_dir_and_filename( + &directory, &filename, + ); coverart.title = song.album.clone(); coverart.data = data; diff --git a/src/callers/song.rs b/src/callers/song.rs index b6f6e3c..2301517 100644 --- a/src/callers/song.rs +++ b/src/callers/song.rs @@ -81,11 +81,7 @@ pub mod request { duration: self.duration, audio_type: self.audio_type.clone(), user_id: self.user_id, - // TODO: Change the type of this in icarus_models lib - date_created: String::new(), - filename: String::new(), - data: Vec::new(), - directory: String::new(), + ..Default::default() } } } @@ -224,7 +220,7 @@ pub mod song_db { pub async fn insert( pool: &sqlx::PgPool, song: &icarus_models::song::Song, - ) -> Result<(String, uuid::Uuid), sqlx::Error> { + ) -> Result<(time::OffsetDateTime, uuid::Uuid), sqlx::Error> { let result = sqlx::query( r#" INSERT INTO "song" (title, artist, album_artist, album, genre, year, track, disc, track_count, disc_count, duration, audio_type, filename, directory, user_id) @@ -262,7 +258,7 @@ pub mod song_db { .try_get("date_created") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(); - let date_created = date_created_time.to_string(); + let date_created = date_created_time; Ok((date_created, id)) } @@ -354,7 +350,7 @@ pub mod song_db { .try_get("directory") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - date_created: date_created_time.to_string(), + date_created: Some(date_created_time), user_id: row .try_get("user_id") .map_err(|_e| sqlx::Error::RowNotFound) @@ -451,7 +447,7 @@ pub mod song_db { .try_get("directory") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - date_created: date_created_time.to_string(), + date_created: Some(date_created_time), user_id: row .try_get("user_id") .map_err(|_e| sqlx::Error::RowNotFound) @@ -555,7 +551,7 @@ pub mod song_db { .try_get("directory") .map_err(|_e| sqlx::Error::RowNotFound) .unwrap(), - date_created: date_created_time.to_string(), + date_created: Some(date_created_time), user_id: row .try_get("user_id") .map_err(|_e| sqlx::Error::RowNotFound) @@ -1221,7 +1217,7 @@ pub mod endpoint { Ok(_) => match super::song_db::insert(&pool, &song).await { Ok((date_created, id)) => { song.id = id; - song.date_created = date_created; + song.date_created = Some(date_created); response.message = String::from("Successful"); response.data.push(song); @@ -1495,49 +1491,52 @@ pub mod endpoint { .await { Ok(coverart) => { - let coverart_path = std::path::Path::new(&coverart.path); - if coverart_path.exists() { - match song.song_path() { - Ok(song_path) => { - match super::song_db::delete_song(&pool, &song.id).await { - Ok(deleted_song) => { - match super::super::coverart::cov_db::delete_coverart( - &pool, - &coverart.id, - ) - .await - { - Ok(deleted_coverart) => { - match std::fs::remove_file(song_path) { - Ok(_) => match std::fs::remove_file( - &coverart.path, - ) { - Ok(_) => { - response.message = String::from(super::super::response::SUCCESSFUL); - response.data.push(super::response::delete_song::SongAndCoverArt{ song: deleted_song, coverart: deleted_coverart }); - ( - axum::http::StatusCode::OK, - axum::Json(response), - ) - } - Err(err) => { - response.message = err.to_string(); - (axum::http::StatusCode::INTERNAL_SERVER_ERROR, axum::Json(response)) - } - }, - Err(err) => { - response.message = err.to_string(); - (axum::http::StatusCode::INTERNAL_SERVER_ERROR, axum::Json(response)) - } - } - } + let coverart_path_str = match coverart.get_path() { + Ok(path) => path, + Err(err) => { + response.message = err.to_string(); + return ( + axum::http::StatusCode::INTERNAL_SERVER_ERROR, + axum::Json(response), + ); + } + }; + let coverart_path = std::path::Path::new(&coverart_path_str); + if coverart_path.exists() { + match super::song_db::delete_song(&pool, &song.id).await { + Ok(deleted_song) => { + match super::super::coverart::cov_db::delete_coverart( + &pool, + &coverart.id, + ) + .await + { + Ok(deleted_coverart) => { + match song.remove_from_filesystem() { + Ok(_) => match coverart.remove_from_filesystem() { + Ok(_) => { + response.message = String::from( + super::super::response::SUCCESSFUL, + ); + response.data.push(super::response::delete_song::SongAndCoverArt{ song: deleted_song, coverart: deleted_coverart }); + ( + axum::http::StatusCode::OK, + axum::Json(response), + ) + } + Err(err) => { + response.message = err.to_string(); + (axum::http::StatusCode::INTERNAL_SERVER_ERROR, axum::Json(response)) + } + }, Err(err) => { response.message = err.to_string(); (axum::http::StatusCode::INTERNAL_SERVER_ERROR, axum::Json(response)) } } } + Err(err) => { response.message = err.to_string(); ( diff --git a/src/main.rs b/src/main.rs index 43b7d88..d03f764 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1770,8 +1770,6 @@ mod tests { song ); - eprintln!("Song: {:?}", song); - match sequence_flow::queue_coverart_flow(&app, &song_queue_id).await { Ok(response) => { let resp = get_resp_data::< @@ -2171,14 +2169,13 @@ mod tests { } } - pub async fn other_song_id() -> Result<(uuid::Uuid, String, String, String), uuid::Error> - { + pub async fn other_song_id() + -> Result<(uuid::Uuid, (String, String), (String, String)), uuid::Error> { match uuid::Uuid::parse_str("94cf7940-34ff-489f-9124-d0ec90a55af4") { Ok(id) => Ok(( id, - String::from("tests/I/"), - String::from("track02.flac"), - String::from("tests/I/Coverart-2.jpg"), + (String::from("tests/I/"), String::from("track02.flac")), + (String::from("tests/I/"), String::from("Coverart-2.jpg")), )), Err(err) => Err(err), } @@ -2371,7 +2368,8 @@ mod tests { async fn get_test_data( song_directory: &String, song_filename: &String, - coverart_path: &String, + coverart_directory: &String, + coverart_filename: &String, ) -> Result<(Vec, Vec), std::io::Error> { let song = icarus_models::song::Song { directory: song_directory.clone(), @@ -2380,7 +2378,8 @@ mod tests { }; let coverart = icarus_models::coverart::CoverArt { - path: coverart_path.clone(), + directory: coverart_directory.clone(), + filename: coverart_filename.clone(), ..Default::default() }; @@ -2397,45 +2396,26 @@ mod tests { song_directory: &String, song_filename: &String, song_data: Vec, - coverart_path: &String, + coverart_directory: &String, + coverart_filename: &String, coverart_data: Vec, ) -> Result<(), std::io::Error> { let song = icarus_models::song::Song { directory: song_directory.clone(), filename: song_filename.clone(), + data: song_data, ..Default::default() }; let coverart = icarus_models::coverart::CoverArt { - path: coverart_path.clone(), + directory: coverart_directory.clone(), + filename: coverart_filename.clone(), + data: coverart_data, ..Default::default() }; - use std::io::Write; - - match song.song_path() { - Ok(song_path) => { - let song_p = std::path::Path::new(&song_path); - match std::fs::File::create(song_p) { - Ok(mut song_file) => match song_file.write_all(&song_data) { - Ok(_) => {} - Err(err) => { - return Err(err); - } - }, - Err(err) => { - return Err(err); - } - } - } - Err(err) => { - return Err(err); - } - } - - let coverart_p = std::path::Path::new(&coverart.path); - match std::fs::File::create(coverart_p) { - Ok(mut coverart_file) => match coverart_file.write_all(&coverart_data) { + match song.save_to_filesystem() { + Ok(_) => match coverart.save_to_filesystem() { Ok(_) => Ok(()), Err(err) => Err(err), }, @@ -2462,12 +2442,16 @@ mod tests { let app = super::init::app(pool).await; - let (id, song_directory, song_filename, coverart_path) = + let (id, (song_directory, song_filename), (cover_directory, cover_filename)) = test_data::other_song_id().await.unwrap(); - let (song_data, coverart_data) = - get_test_data(&song_directory, &song_filename, &coverart_path) - .await - .unwrap(); + let (song_data, coverart_data) = get_test_data( + &song_directory, + &song_filename, + &cover_directory, + &cover_filename, + ) + .await + .unwrap(); let uri = super::format_url_with_value(crate::callers::endpoints::DELETESONG, &id).await; @@ -2505,7 +2489,8 @@ mod tests { &song_directory, &song_filename, song_data, - &coverart_path, + &cover_directory, + &cover_filename, coverart_data, ) .await diff --git a/test_migrations/20250725213944_init.sql b/test_migrations/20250725213944_init.sql index 358829e..267ee8b 100644 --- a/test_migrations/20250725213944_init.sql +++ b/test_migrations/20250725213944_init.sql @@ -53,6 +53,7 @@ CREATE TABLE IF NOT EXISTS "song" ( CREATE TABLE IF NOT EXISTS "coverart" ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), title TEXT NOT NULL, - path TEXT NOT NULL, + directory TEXT NOT NULL, + filename TEXT NOT NULL, song_id UUID NOT NULL ); diff --git a/test_migrations/20250725214735_song_queue_processed.sql b/test_migrations/20250725214735_song_queue_processed.sql index 05da4bb..016f0a4 100644 --- a/test_migrations/20250725214735_song_queue_processed.sql +++ b/test_migrations/20250725214735_song_queue_processed.sql @@ -1,6 +1,6 @@ -- Add migration script here INSERT INTO "song" (id, title, artist, album_artist, album, genre, year, track, disc, track_count, disc_count, duration, audio_type, date_created, filename, directory, user_id) VALUES('44cf7940-34ff-489f-9124-d0ec90a55af9', 'Hypocrite Like The Rest', 'Kuoth', 'Kuoth', 'I', 'Alternative Hip-Hop', 2020, 1, 1, 9, 1, 139, 'flac', '2020-01-01 13:00:00-05', 'track01.flac', 'tests/I', '47491f9b-725a-4ba4-b9a5-711e1be46670'); -INSERT INTO "coverart" VALUES('996122cd-5ae9-4013-9934-60768d3006ed', 'I', 'tests/I/Coverart-1.jpg', '44cf7940-34ff-489f-9124-d0ec90a55af9'); +INSERT INTO "coverart" (id, title, directory, filename, song_id) VALUES('996122cd-5ae9-4013-9934-60768d3006ed', 'I', 'tests/I', 'Coverart-1.jpg', '44cf7940-34ff-489f-9124-d0ec90a55af9'); INSERT INTO "song" (id, title, artist, album_artist, album, genre, year, track, disc, track_count, disc_count, duration, audio_type, date_created, filename, directory, user_id) VALUES('94cf7940-34ff-489f-9124-d0ec90a55af4', 'It''s Too Late', 'Kuoth', 'Kuoth', 'I', 'Alternative Hip-Hop', 2020, 2, 1, 9, 1, 116, 'flac', '2020-01-01 13:01:00-05', 'track02.flac', 'tests/I', '47491f9b-725a-4ba4-b9a5-711e1be46670'); -INSERT INTO "coverart" VALUES('d96122cd-5ae9-4013-9934-60768d3006e9', 'I', 'tests/I/Coverart-2.jpg', '94cf7940-34ff-489f-9124-d0ec90a55af4'); +INSERT INTO "coverart" (id, title, directory, filename, song_id) VALUES('d96122cd-5ae9-4013-9934-60768d3006e9', 'I', 'tests/I', 'Coverart-2.jpg', '94cf7940-34ff-489f-9124-d0ec90a55af4');