diff --git a/.gitignore b/.gitignore index 42381fc..ba6ae26 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ vite.config.ts.timestamp-* generated/* src/generated/* +.github/* \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..981fc08 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "editor.tabSize": 2, + "editor.insertSpaces": true, + "[javascript]": { + "editor.tabSize": 2, + "editor.insertSpaces": true + }, + "[svelte]": { + "editor.tabSize": 2, + "editor.insertSpaces": true + } +} \ No newline at end of file diff --git a/package.json b/package.json index bb48261..e29cda1 100644 --- a/package.json +++ b/package.json @@ -17,25 +17,26 @@ "@eslint/compat": "^1.2.5", "@eslint/js": "^9.18.0", "@sveltejs/adapter-node": "^5.2.12", - "@sveltejs/kit": "^2.20.4", + "@sveltejs/kit": "^2.20.7", "@sveltejs/vite-plugin-svelte": "^5.0.3", "@tailwindcss/typography": "^0.5.16", - "@tailwindcss/vite": "^4.1.2", + "@tailwindcss/vite": "^4.1.4", "eslint": "^9.18.0", "eslint-config-prettier": "^10.0.1", "eslint-plugin-svelte": "^3.0.0", "flowbite": "^3.1.2", - "flowbite-svelte": "^0.48.4", + "flowbite-svelte": "^0.48.6", "globals": "^16.0.0", - "prettier": "^3.4.2", + "prettier": "^3.5.3", "prettier-plugin-svelte": "^3.3.3", "prettier-plugin-tailwindcss": "^0.6.11", "prisma": "6.5.0", - "svelte": "^5.25.6", - "svelte-check": "^4.1.2", - "tailwindcss": "^4.1.2", + "svelte": "^5.27.0", + "svelte-check": "^4.1.6", + "svelte-dnd-action": "^0.9.60", + "tailwindcss": "^4.1.4", "typescript": "^5.0.0", - "vite": "^6.2.5" + "vite": "^6.3.0" }, "pnpm": { "onlyBuiltDependencies": [ @@ -47,8 +48,9 @@ "@fortawesome/free-solid-svg-icons": "^6.7.2", "@prisma/client": "6.5.0", "axios": "^1.8.4", + "date-fns": "^4.1.0", "flowbite-svelte-blocks": "^1.1.4", - "flowbite-svelte-icons": "^2.1.0", + "flowbite-svelte-icons": "^2.1.1", "svelte-fa": "^4.0.3", "uuid": "^11.1.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 920d0e0..68e8fdd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,15 +20,18 @@ importers: axios: specifier: ^1.8.4 version: 1.8.4 + date-fns: + specifier: ^4.1.0 + version: 4.1.0 flowbite-svelte-blocks: specifier: ^1.1.4 - version: 1.1.4(rollup@4.39.0)(svelte@5.25.12) + version: 1.1.4(rollup@4.39.0)(svelte@5.27.0) flowbite-svelte-icons: - specifier: ^2.1.0 - version: 2.1.1(svelte@5.25.12)(tailwind-merge@3.2.0) + specifier: ^2.1.1 + version: 2.1.1(svelte@5.27.0)(tailwind-merge@3.2.0) svelte-fa: specifier: ^4.0.3 - version: 4.0.3(svelte@5.25.12) + version: 4.0.3(svelte@5.27.0) uuid: specifier: ^11.1.0 version: 11.1.0 @@ -41,19 +44,19 @@ importers: version: 9.24.0 '@sveltejs/adapter-node': specifier: ^5.2.12 - version: 5.2.12(@sveltejs/kit@2.20.5(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2))) + version: 5.2.12(@sveltejs/kit@2.20.7(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2))) '@sveltejs/kit': - specifier: ^2.20.4 - version: 2.20.5(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)) + specifier: ^2.20.7 + version: 2.20.7(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)) '@sveltejs/vite-plugin-svelte': specifier: ^5.0.3 - version: 5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)) + version: 5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)) '@tailwindcss/typography': specifier: ^0.5.16 - version: 0.5.16(tailwindcss@4.1.3) + version: 0.5.16(tailwindcss@4.1.4) '@tailwindcss/vite': - specifier: ^4.1.2 - version: 4.1.3(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)) + specifier: ^4.1.4 + version: 4.1.4(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)) eslint: specifier: ^9.18.0 version: 9.24.0(jiti@2.4.2) @@ -62,43 +65,46 @@ importers: version: 10.1.2(eslint@9.24.0(jiti@2.4.2)) eslint-plugin-svelte: specifier: ^3.0.0 - version: 3.5.1(eslint@9.24.0(jiti@2.4.2))(svelte@5.25.12) + version: 3.5.1(eslint@9.24.0(jiti@2.4.2))(svelte@5.27.0) flowbite: specifier: ^3.1.2 version: 3.1.2(rollup@4.39.0) flowbite-svelte: - specifier: ^0.48.4 - version: 0.48.6(rollup@4.39.0)(svelte@5.25.12) + specifier: ^0.48.6 + version: 0.48.6(rollup@4.39.0)(svelte@5.27.0) globals: specifier: ^16.0.0 version: 16.0.0 prettier: - specifier: ^3.4.2 + specifier: ^3.5.3 version: 3.5.3 prettier-plugin-svelte: specifier: ^3.3.3 - version: 3.3.3(prettier@3.5.3)(svelte@5.25.12) + version: 3.3.3(prettier@3.5.3)(svelte@5.27.0) prettier-plugin-tailwindcss: specifier: ^0.6.11 - version: 0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.25.12))(prettier@3.5.3) + version: 0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.27.0))(prettier@3.5.3) prisma: specifier: 6.5.0 version: 6.5.0(typescript@5.8.3) svelte: - specifier: ^5.25.6 - version: 5.25.12 + specifier: ^5.27.0 + version: 5.27.0 svelte-check: - specifier: ^4.1.2 - version: 4.1.5(picomatch@4.0.2)(svelte@5.25.12)(typescript@5.8.3) + specifier: ^4.1.6 + version: 4.1.6(picomatch@4.0.2)(svelte@5.27.0)(typescript@5.8.3) + svelte-dnd-action: + specifier: ^0.9.60 + version: 0.9.60(svelte@5.27.0) tailwindcss: - specifier: ^4.1.2 - version: 4.1.3 + specifier: ^4.1.4 + version: 4.1.4 typescript: specifier: ^5.0.0 version: 5.8.3 vite: - specifier: ^6.2.5 - version: 6.2.6(jiti@2.4.2)(lightningcss@1.29.2) + specifier: ^6.3.0 + version: 6.3.0(jiti@2.4.2)(lightningcss@1.29.2) packages: @@ -557,8 +563,8 @@ packages: peerDependencies: '@sveltejs/kit': ^2.4.0 - '@sveltejs/kit@2.20.5': - resolution: {integrity: sha512-zT/97KvVUo19jEGZa972ls7KICjPCB53j54TVxnEFT5VEwL16G+YFqRVwJbfxh7AmS7/Ptr1rKF7Qt4FBMDNlw==} + '@sveltejs/kit@2.20.7': + resolution: {integrity: sha512-dVbLMubpJJSLI4OYB+yWYNHGAhgc2bVevWuBjDj8jFUXIJOAnLwYP3vsmtcgoxNGUXoq0rHS5f7MFCsryb6nzg==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -581,77 +587,89 @@ packages: svelte: ^5.0.0 vite: ^6.0.0 - '@tailwindcss/node@4.1.3': - resolution: {integrity: sha512-H/6r6IPFJkCfBJZ2dKZiPJ7Ueb2wbL592+9bQEl2r73qbX6yGnmQVIfiUvDRB2YI0a3PWDrzUwkvQx1XW1bNkA==} + '@tailwindcss/node@4.1.4': + resolution: {integrity: sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==} - '@tailwindcss/oxide-android-arm64@4.1.3': - resolution: {integrity: sha512-cxklKjtNLwFl3mDYw4XpEfBY+G8ssSg9ADL4Wm6//5woi3XGqlxFsnV5Zb6v07dxw1NvEX2uoqsxO/zWQsgR+g==} + '@tailwindcss/oxide-android-arm64@4.1.4': + resolution: {integrity: sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.3': - resolution: {integrity: sha512-mqkf2tLR5VCrjBvuRDwzKNShRu99gCAVMkVsaEOFvv6cCjlEKXRecPu9DEnxp6STk5z+Vlbh1M5zY3nQCXMXhw==} + '@tailwindcss/oxide-darwin-arm64@4.1.4': + resolution: {integrity: sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.3': - resolution: {integrity: sha512-7sGraGaWzXvCLyxrc7d+CCpUN3fYnkkcso3rCzwUmo/LteAl2ZGCDlGvDD8Y/1D3ngxT8KgDj1DSwOnNewKhmg==} + '@tailwindcss/oxide-darwin-x64@4.1.4': + resolution: {integrity: sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.3': - resolution: {integrity: sha512-E2+PbcbzIReaAYZe997wb9rId246yDkCwAakllAWSGqe6VTg9hHle67hfH6ExjpV2LSK/siRzBUs5wVff3RW9w==} + '@tailwindcss/oxide-freebsd-x64@4.1.4': + resolution: {integrity: sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.3': - resolution: {integrity: sha512-GvfbJ8wjSSjbLFFE3UYz4Eh8i4L6GiEYqCtA8j2Zd2oXriPuom/Ah/64pg/szWycQpzRnbDiJozoxFU2oJZyfg==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4': + resolution: {integrity: sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.3': - resolution: {integrity: sha512-35UkuCWQTeG9BHcBQXndDOrpsnt3Pj9NVIB4CgNiKmpG8GnCNXeMczkUpOoqcOhO6Cc/mM2W7kaQ/MTEENDDXg==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.4': + resolution: {integrity: sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.3': - resolution: {integrity: sha512-dm18aQiML5QCj9DQo7wMbt1Z2tl3Giht54uVR87a84X8qRtuXxUqnKQkRDK5B4bCOmcZ580lF9YcoMkbDYTXHQ==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.4': + resolution: {integrity: sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.3': - resolution: {integrity: sha512-LMdTmGe/NPtGOaOfV2HuO7w07jI3cflPrVq5CXl+2O93DCewADK0uW1ORNAcfu2YxDUS035eY2W38TxrsqngxA==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.4': + resolution: {integrity: sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.3': - resolution: {integrity: sha512-aalNWwIi54bbFEizwl1/XpmdDrOaCjRFQRgtbv9slWjmNPuJJTIKPHf5/XXDARc9CneW9FkSTqTbyvNecYAEGw==} + '@tailwindcss/oxide-linux-x64-musl@4.1.4': + resolution: {integrity: sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-win32-arm64-msvc@4.1.3': - resolution: {integrity: sha512-PEj7XR4OGTGoboTIAdXicKuWl4EQIjKHKuR+bFy9oYN7CFZo0eu74+70O4XuERX4yjqVZGAkCdglBODlgqcCXg==} + '@tailwindcss/oxide-wasm32-wasi@4.1.4': + resolution: {integrity: sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.4': + resolution: {integrity: sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.3': - resolution: {integrity: sha512-T8gfxECWDBENotpw3HR9SmNiHC9AOJdxs+woasRZ8Q/J4VHN0OMs7F+4yVNZ9EVN26Wv6mZbK0jv7eHYuLJLwA==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.4': + resolution: {integrity: sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.3': - resolution: {integrity: sha512-t16lpHCU7LBxDe/8dCj9ntyNpXaSTAgxWm1u2XQP5NiIu4KGSyrDJJRlK9hJ4U9yJxx0UKCVI67MJWFNll5mOQ==} + '@tailwindcss/oxide@4.1.4': + resolution: {integrity: sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==} engines: {node: '>= 10'} '@tailwindcss/typography@0.5.16': @@ -659,8 +677,8 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - '@tailwindcss/vite@4.1.3': - resolution: {integrity: sha512-lUI/QaDxLtlV52Lho6pu07CG9pSnRYLOPmKGIQjyHdTBagemc6HmgZxyjGAQ/5HMPrNeWBfTVIpQl0/jLXvWHQ==} + '@tailwindcss/vite@4.1.4': + resolution: {integrity: sha512-4UQeMrONbvrsXKXXp/uxmdEN5JIJ9RkH7YVzs6AMxC/KC1+Np7WZBaNIco7TEjlkthqxZbt8pU/ipD+hKjm80A==} peerDependencies: vite: ^5.2.0 || ^6 @@ -772,6 +790,9 @@ packages: engines: {node: '>=4'} hasBin: true + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + debug@4.4.0: resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} @@ -1436,14 +1457,19 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte-check@4.1.5: - resolution: {integrity: sha512-Gb0T2IqBNe1tLB9EB1Qh+LOe+JB8wt2/rNBDGvkxQVvk8vNeAoG+vZgFB/3P5+zC7RWlyBlzm9dVjZFph/maIg==} + svelte-check@4.1.6: + resolution: {integrity: sha512-P7w/6tdSfk3zEVvfsgrp3h3DFC75jCdZjTQvgGJtjPORs1n7/v2VMPIoty3PWv7jnfEm3x0G/p9wH4pecTb0Wg==} engines: {node: '>= 18.0.0'} hasBin: true peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 typescript: '>=5.0.0' + svelte-dnd-action@0.9.60: + resolution: {integrity: sha512-PTz9RlJiSTNXo0mIUGPmYXRMcqzLG/ghr79YqLrsOrq0dM4gQhXn97AkuImTalNuIxl/tohFK3uQPsEML+ZKeQ==} + peerDependencies: + svelte: '>=3.23.0 || ^5.0.0-next.0' + svelte-eslint-parser@1.1.2: resolution: {integrity: sha512-vqFBRamDKo1l70KMfxxXj1/0Cco5TfMDnqaAjgz6D8PyoMhfMcDOLRkAwPg8WkMyZjMtQL3wW66TZ0x59iqO2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1458,8 +1484,8 @@ packages: peerDependencies: svelte: ^4.0.0 || ^5.0.0 - svelte@5.25.12: - resolution: {integrity: sha512-4Y3mRN4fuZicNwBeb7sPPEUmiNIoN4lwf2NWD6CJdtYM3xVoOvjXhHQayIRbE0pTHG0mgk88n8WZvuOiNbtD8Q==} + svelte@5.27.0: + resolution: {integrity: sha512-Uai13Ydt1ZE+bUHme6b9U38PCYVNCqBRoBMkUKbFbKiD7kHWjdUUrklYAQZJxyKK81qII4mrBwe/YmvEMSlC9w==} engines: {node: '>=18'} svg.draggable.js@2.2.2: @@ -1499,13 +1525,17 @@ packages: tailwind-merge@3.2.0: resolution: {integrity: sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==} - tailwindcss@4.1.3: - resolution: {integrity: sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==} + tailwindcss@4.1.4: + resolution: {integrity: sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -1529,8 +1559,8 @@ packages: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true - vite@6.2.6: - resolution: {integrity: sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==} + vite@6.3.0: + resolution: {integrity: sha512-9aC0n4pr6hIbvi1YOpFjwQ+QOTGssvbJKoeYkuHHGWwlXfdxQlI8L2qNMo9awEEcCPSiS+5mJZk5jH1PAqoDeQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -1929,17 +1959,17 @@ snapshots: dependencies: acorn: 8.14.1 - '@sveltejs/adapter-node@5.2.12(@sveltejs/kit@2.20.5(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)))': + '@sveltejs/adapter-node@5.2.12(@sveltejs/kit@2.20.7(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)))': dependencies: '@rollup/plugin-commonjs': 28.0.3(rollup@4.39.0) '@rollup/plugin-json': 6.1.0(rollup@4.39.0) '@rollup/plugin-node-resolve': 16.0.1(rollup@4.39.0) - '@sveltejs/kit': 2.20.5(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)) + '@sveltejs/kit': 2.20.7(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)) rollup: 4.39.0 - '@sveltejs/kit@2.20.5(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2))': + '@sveltejs/kit@2.20.7(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.1.1 @@ -1951,99 +1981,103 @@ snapshots: sade: 1.8.1 set-cookie-parser: 2.7.1 sirv: 3.0.1 - svelte: 5.25.12 - vite: 6.2.6(jiti@2.4.2)(lightningcss@1.29.2) + svelte: 5.27.0 + vite: 6.3.0(jiti@2.4.2)(lightningcss@1.29.2) - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)) + '@sveltejs/vite-plugin-svelte': 5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)) debug: 4.4.0 - svelte: 5.25.12 - vite: 6.2.6(jiti@2.4.2)(lightningcss@1.29.2) + svelte: 5.27.0 + vite: 6.3.0(jiti@2.4.2)(lightningcss@1.29.2) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2))': + '@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.25.12)(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)))(svelte@5.27.0)(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 - svelte: 5.25.12 - vite: 6.2.6(jiti@2.4.2)(lightningcss@1.29.2) - vitefu: 1.0.6(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)) + svelte: 5.27.0 + vite: 6.3.0(jiti@2.4.2)(lightningcss@1.29.2) + vitefu: 1.0.6(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)) transitivePeerDependencies: - supports-color - '@tailwindcss/node@4.1.3': + '@tailwindcss/node@4.1.4': dependencies: enhanced-resolve: 5.18.1 jiti: 2.4.2 lightningcss: 1.29.2 - tailwindcss: 4.1.3 + tailwindcss: 4.1.4 + + '@tailwindcss/oxide-android-arm64@4.1.4': + optional: true - '@tailwindcss/oxide-android-arm64@4.1.3': + '@tailwindcss/oxide-darwin-arm64@4.1.4': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.3': + '@tailwindcss/oxide-darwin-x64@4.1.4': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.3': + '@tailwindcss/oxide-freebsd-x64@4.1.4': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.3': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.4': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.3': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.4': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.3': + '@tailwindcss/oxide-linux-arm64-musl@4.1.4': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.3': + '@tailwindcss/oxide-linux-x64-gnu@4.1.4': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.3': + '@tailwindcss/oxide-linux-x64-musl@4.1.4': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.3': + '@tailwindcss/oxide-wasm32-wasi@4.1.4': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.3': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.4': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.3': + '@tailwindcss/oxide-win32-x64-msvc@4.1.4': optional: true - '@tailwindcss/oxide@4.1.3': + '@tailwindcss/oxide@4.1.4': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.3 - '@tailwindcss/oxide-darwin-arm64': 4.1.3 - '@tailwindcss/oxide-darwin-x64': 4.1.3 - '@tailwindcss/oxide-freebsd-x64': 4.1.3 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.3 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.3 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.3 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.3 - '@tailwindcss/oxide-linux-x64-musl': 4.1.3 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.3 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.3 - - '@tailwindcss/typography@0.5.16(tailwindcss@4.1.3)': + '@tailwindcss/oxide-android-arm64': 4.1.4 + '@tailwindcss/oxide-darwin-arm64': 4.1.4 + '@tailwindcss/oxide-darwin-x64': 4.1.4 + '@tailwindcss/oxide-freebsd-x64': 4.1.4 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.4 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.4 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.4 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.4 + '@tailwindcss/oxide-linux-x64-musl': 4.1.4 + '@tailwindcss/oxide-wasm32-wasi': 4.1.4 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.4 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.4 + + '@tailwindcss/typography@0.5.16(tailwindcss@4.1.4)': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 4.1.3 + tailwindcss: 4.1.4 - '@tailwindcss/vite@4.1.3(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2))': + '@tailwindcss/vite@4.1.4(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2))': dependencies: - '@tailwindcss/node': 4.1.3 - '@tailwindcss/oxide': 4.1.3 - tailwindcss: 4.1.3 - vite: 6.2.6(jiti@2.4.2)(lightningcss@1.29.2) + '@tailwindcss/node': 4.1.4 + '@tailwindcss/oxide': 4.1.4 + tailwindcss: 4.1.4 + vite: 6.3.0(jiti@2.4.2)(lightningcss@1.29.2) '@types/cookie@0.6.0': {} @@ -2147,6 +2181,8 @@ snapshots: cssesc@3.0.0: {} + date-fns@4.1.0: {} + debug@4.4.0: dependencies: ms: 2.1.3 @@ -2228,7 +2264,7 @@ snapshots: dependencies: eslint: 9.24.0(jiti@2.4.2) - eslint-plugin-svelte@3.5.1(eslint@9.24.0(jiti@2.4.2))(svelte@5.25.12): + eslint-plugin-svelte@3.5.1(eslint@9.24.0(jiti@2.4.2))(svelte@5.27.0): dependencies: '@eslint-community/eslint-utils': 4.5.1(eslint@9.24.0(jiti@2.4.2)) '@jridgewell/sourcemap-codec': 1.5.0 @@ -2239,9 +2275,9 @@ snapshots: postcss-load-config: 3.1.4(postcss@8.5.3) postcss-safe-parser: 7.0.1(postcss@8.5.3) semver: 7.7.1 - svelte-eslint-parser: 1.1.2(svelte@5.25.12) + svelte-eslint-parser: 1.1.2(svelte@5.27.0) optionalDependencies: - svelte: 5.25.12 + svelte: 5.27.0 transitivePeerDependencies: - ts-node @@ -2355,25 +2391,25 @@ snapshots: transitivePeerDependencies: - rollup - flowbite-svelte-blocks@1.1.4(rollup@4.39.0)(svelte@5.25.12): + flowbite-svelte-blocks@1.1.4(rollup@4.39.0)(svelte@5.27.0): dependencies: flowbite: 2.5.2(rollup@4.39.0) - svelte: 5.25.12 + svelte: 5.27.0 tailwind-merge: 2.6.0 transitivePeerDependencies: - rollup - flowbite-svelte-icons@2.1.1(svelte@5.25.12)(tailwind-merge@3.2.0): + flowbite-svelte-icons@2.1.1(svelte@5.27.0)(tailwind-merge@3.2.0): dependencies: - svelte: 5.25.12 + svelte: 5.27.0 tailwind-merge: 3.2.0 - flowbite-svelte@0.48.6(rollup@4.39.0)(svelte@5.25.12): + flowbite-svelte@0.48.6(rollup@4.39.0)(svelte@5.27.0): dependencies: '@floating-ui/dom': 1.6.13 apexcharts: 3.54.1 flowbite: 3.1.2(rollup@4.39.0) - svelte: 5.25.12 + svelte: 5.27.0 tailwind-merge: 3.2.0 transitivePeerDependencies: - rollup @@ -2660,16 +2696,16 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.25.12): + prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.27.0): dependencies: prettier: 3.5.3 - svelte: 5.25.12 + svelte: 5.27.0 - prettier-plugin-tailwindcss@0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.25.12))(prettier@3.5.3): + prettier-plugin-tailwindcss@0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.27.0))(prettier@3.5.3): dependencies: prettier: 3.5.3 optionalDependencies: - prettier-plugin-svelte: 3.3.3(prettier@3.5.3)(svelte@5.25.12) + prettier-plugin-svelte: 3.3.3(prettier@3.5.3)(svelte@5.27.0) prettier@3.5.3: {} @@ -2753,19 +2789,23 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.1.5(picomatch@4.0.2)(svelte@5.25.12)(typescript@5.8.3): + svelte-check@4.1.6(picomatch@4.0.2)(svelte@5.27.0)(typescript@5.8.3): dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 4.0.3 fdir: 6.4.3(picomatch@4.0.2) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.25.12 + svelte: 5.27.0 typescript: 5.8.3 transitivePeerDependencies: - picomatch - svelte-eslint-parser@1.1.2(svelte@5.25.12): + svelte-dnd-action@0.9.60(svelte@5.27.0): + dependencies: + svelte: 5.27.0 + + svelte-eslint-parser@1.1.2(svelte@5.27.0): dependencies: eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 @@ -2774,13 +2814,13 @@ snapshots: postcss-scss: 4.0.9(postcss@8.5.3) postcss-selector-parser: 7.1.0 optionalDependencies: - svelte: 5.25.12 + svelte: 5.27.0 - svelte-fa@4.0.3(svelte@5.25.12): + svelte-fa@4.0.3(svelte@5.27.0): dependencies: - svelte: 5.25.12 + svelte: 5.27.0 - svelte@5.25.12: + svelte@5.27.0: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -2832,10 +2872,15 @@ snapshots: tailwind-merge@3.2.0: {} - tailwindcss@4.1.3: {} + tailwindcss@4.1.4: {} tapable@2.2.1: {} + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + totalist@3.0.1: {} type-check@0.4.0: @@ -2852,19 +2897,22 @@ snapshots: uuid@11.1.0: {} - vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2): + vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2): dependencies: esbuild: 0.25.2 + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 postcss: 8.5.3 rollup: 4.39.0 + tinyglobby: 0.2.12 optionalDependencies: fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.2 - vitefu@1.0.6(vite@6.2.6(jiti@2.4.2)(lightningcss@1.29.2)): + vitefu@1.0.6(vite@6.3.0(jiti@2.4.2)(lightningcss@1.29.2)): optionalDependencies: - vite: 6.2.6(jiti@2.4.2)(lightningcss@1.29.2) + vite: 6.3.0(jiti@2.4.2)(lightningcss@1.29.2) which@2.0.2: dependencies: diff --git a/prisma/migrations/20250417135043_/migration.sql b/prisma/migrations/20250417135043_/migration.sql new file mode 100644 index 0000000..433cab4 --- /dev/null +++ b/prisma/migrations/20250417135043_/migration.sql @@ -0,0 +1,8 @@ +/* + Warnings: + + - You are about to drop the column `title` on the `User` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE "User" DROP COLUMN "title"; diff --git a/prisma/migrations/20250417163938_/migration.sql b/prisma/migrations/20250417163938_/migration.sql new file mode 100644 index 0000000..69fa422 --- /dev/null +++ b/prisma/migrations/20250417163938_/migration.sql @@ -0,0 +1,93 @@ +-- CreateTable +CREATE TABLE "Board" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "ownerId" TEXT NOT NULL, + "organizationId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Board_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BoardMember" ( + "id" TEXT NOT NULL, + "boardId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "role" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "BoardMember_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BoardColumn" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "order" INTEGER NOT NULL, + "boardId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "BoardColumn_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BoardTask" ( + "id" TEXT NOT NULL, + "title" TEXT NOT NULL, + "description" TEXT, + "order" INTEGER NOT NULL, + "columnId" TEXT NOT NULL, + "assigneeId" TEXT, + "dueDate" TIMESTAMP(3), + "completed" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "BoardTask_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BoardTaskActivity" ( + "id" TEXT NOT NULL, + "taskId" TEXT NOT NULL, + "authorId" TEXT NOT NULL, + "type" TEXT NOT NULL, + "content" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "BoardTaskActivity_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "BoardMember_boardId_userId_key" ON "BoardMember"("boardId", "userId"); + +-- AddForeignKey +ALTER TABLE "Board" ADD CONSTRAINT "Board_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Board" ADD CONSTRAINT "Board_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BoardMember" ADD CONSTRAINT "BoardMember_boardId_fkey" FOREIGN KEY ("boardId") REFERENCES "Board"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BoardMember" ADD CONSTRAINT "BoardMember_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BoardColumn" ADD CONSTRAINT "BoardColumn_boardId_fkey" FOREIGN KEY ("boardId") REFERENCES "Board"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BoardTask" ADD CONSTRAINT "BoardTask_columnId_fkey" FOREIGN KEY ("columnId") REFERENCES "BoardColumn"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BoardTask" ADD CONSTRAINT "BoardTask_assigneeId_fkey" FOREIGN KEY ("assigneeId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BoardTaskActivity" ADD CONSTRAINT "BoardTaskActivity_taskId_fkey" FOREIGN KEY ("taskId") REFERENCES "BoardTask"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BoardTaskActivity" ADD CONSTRAINT "BoardTaskActivity_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index bebc72d..7f78a34 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -17,34 +17,37 @@ enum UserRole { } model User { - id String @id @default(uuid()) - user_id String @unique - email String @unique - name String? - session_id String? @unique - role UserRole @default(READ_ONLY) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - profilePhoto String? - phone String? - title String? - department String? - isActive Boolean @default(true) - lastLogin DateTime? - accounts Account[] - deletedAccounts Account[] @relation("DeletedAccounts") - contacts Contact[] - leads Lead[] - opportunities Opportunity[] - tasks Task[] - events Event[] - ownedTasks Task[] @relation("TaskOwner") - ownedEvents Event[] @relation("EventOwner") - cases Case[] - comments Comment[] - preparedQuotes Quote[] @relation("QuotePreparer") - organizations UserOrganization[] - AuditLog AuditLog[] + id String @id @default(uuid()) + user_id String @unique + email String @unique + name String? + session_id String? @unique + role UserRole @default(READ_ONLY) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + profilePhoto String? + phone String? + department String? + isActive Boolean @default(true) + lastLogin DateTime? + accounts Account[] + deletedAccounts Account[] @relation("DeletedAccounts") + contacts Contact[] + leads Lead[] + opportunities Opportunity[] + tasks Task[] + events Event[] + ownedTasks Task[] @relation("TaskOwner") + ownedEvents Event[] @relation("EventOwner") + cases Case[] + comments Comment[] + preparedQuotes Quote[] @relation("QuotePreparer") + organizations UserOrganization[] + AuditLog AuditLog[] + Board Board[] + BoardMember BoardMember[] + BoardTask BoardTask[] + BoardTaskActivity BoardTaskActivity[] } model Organization { @@ -73,6 +76,7 @@ model Organization { products Product[] solutions Solution[] AuditLog AuditLog[] + Board Board[] } model UserOrganization { @@ -543,3 +547,68 @@ model AuditLog { @@index([organizationId]) @@index([action]) } + +// --- Trello-like Board Models --- +model Board { + id String @id @default(uuid()) + name String + description String? + owner User @relation(fields: [ownerId], references: [id]) + ownerId String + organization Organization @relation(fields: [organizationId], references: [id]) + organizationId String + members BoardMember[] + columns BoardColumn[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model BoardMember { + id String @id @default(uuid()) + board Board @relation(fields: [boardId], references: [id]) + boardId String + user User @relation(fields: [userId], references: [id]) + userId String + role String // e.g. "admin", "member" + createdAt DateTime @default(now()) + + @@unique([boardId, userId]) +} + +model BoardColumn { + id String @id @default(uuid()) + name String + order Int + board Board @relation(fields: [boardId], references: [id]) + boardId String + tasks BoardTask[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model BoardTask { + id String @id @default(uuid()) + title String + description String? + order Int + column BoardColumn @relation(fields: [columnId], references: [id]) + columnId String + assignee User? @relation(fields: [assigneeId], references: [id]) + assigneeId String? + dueDate DateTime? + completed Boolean @default(false) + activities BoardTaskActivity[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model BoardTaskActivity { + id String @id @default(uuid()) + task BoardTask @relation(fields: [taskId], references: [id]) + taskId String + author User @relation(fields: [authorId], references: [id]) + authorId String + type String // e.g. "comment", "status_change" + content String + createdAt DateTime @default(now()) +} diff --git a/src/lib/assets/images/banner.png b/src/lib/assets/images/banner.png new file mode 100644 index 0000000..641cc18 Binary files /dev/null and b/src/lib/assets/images/banner.png differ diff --git a/src/lib/components/TaskModal.svelte b/src/lib/components/TaskModal.svelte new file mode 100644 index 0000000..9711299 --- /dev/null +++ b/src/lib/components/TaskModal.svelte @@ -0,0 +1,314 @@ + + + +
{error}
+ {:else} +{details.description}
+