diff --git a/database/migrations/20241220_001_add_invite_only_events.sql b/database/migrations/20241220_001_add_invite_only_events.sql index cdcb0aa..442e393 100644 --- a/database/migrations/20241220_001_add_invite_only_events.sql +++ b/database/migrations/20241220_001_add_invite_only_events.sql @@ -3,11 +3,11 @@ -- Description: Adds invite-only visibility option and invite tokens table -- Add 'invite-only' to the visibility enum -ALTER TABLE events +ALTER TABLE events DROP CONSTRAINT IF EXISTS events_visibility_check; -ALTER TABLE events -ADD CONSTRAINT events_visibility_check +ALTER TABLE events +ADD CONSTRAINT events_visibility_check CHECK (visibility IN ('public', 'private', 'invite-only')); -- Create invite_tokens table diff --git a/database/migrations/20241220_001_add_invite_only_events_rollback.sql b/database/migrations/20241220_001_add_invite_only_events_rollback.sql index 49b654b..3fb0261 100644 --- a/database/migrations/20241220_001_add_invite_only_events_rollback.sql +++ b/database/migrations/20241220_001_add_invite_only_events_rollback.sql @@ -9,9 +9,9 @@ DROP INDEX IF EXISTS idx_invite_tokens_event_id; DROP TABLE IF EXISTS invite_tokens; -- Revert visibility enum to original values -ALTER TABLE events +ALTER TABLE events DROP CONSTRAINT IF EXISTS events_visibility_check; -ALTER TABLE events -ADD CONSTRAINT events_visibility_check +ALTER TABLE events +ADD CONSTRAINT events_visibility_check CHECK (visibility IN ('public', 'private')); diff --git a/package-lock.json b/package-lock.json index a1695a2..8c70d36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "event-cactus", + "name": "cactoide", "version": "0.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "event-cactus", + "name": "cactoide", "version": "0.1.1", "dependencies": { "@sveltejs/adapter-node": "^5.3.1", @@ -22,7 +22,7 @@ "@tailwindcss/forms": "^0.5.9", "@tailwindcss/typography": "^0.5.15", "@tailwindcss/vite": "^4.0.0", - "drizzle-kit": "^0.31.4", + "drizzle-kit": "^0.31.5", "eslint": "^9.18.0", "eslint-config-prettier": "^10.0.1", "eslint-plugin-svelte": "^3.0.0", @@ -1643,6 +1643,7 @@ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.30.1.tgz", "integrity": "sha512-LyRpQmokZdMK4QOlGBbLX12c37IRnvC3rE6ysA4gLmBWMx5mheeEEjkZZXhtIL9Lze0BgMttaALFoROTx+kbEw==", "license": "MIT", + "peer": true, "dependencies": { "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", @@ -1675,6 +1676,7 @@ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.1.2.tgz", "integrity": "sha512-7v+7OkUYelC2dhhYDAgX1qO2LcGscZ18Hi5kKzJQq7tQeXpH215dd0+J/HnX2zM5B3QKcIrTVqCGkZXAy5awYw==", "license": "MIT", + "peer": true, "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", "debug": "^4.4.1", @@ -2093,17 +2095,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/node": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", - "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "undici-types": "~7.10.0" - } - }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", @@ -2156,6 +2147,7 @@ "integrity": "sha512-pUXGCuHnnKw6PyYq93lLRiZm3vjuslIy7tus1lIQTYVK9bL8XBgJnCWm8a0KcTtHC84Yya1Q6rtll+duSMj0dg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.39.1", "@typescript-eslint/types": "8.39.1", @@ -2373,6 +2365,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2668,9 +2661,9 @@ "license": "MIT" }, "node_modules/drizzle-kit": { - "version": "0.31.4", - "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.4.tgz", - "integrity": "sha512-tCPWVZWZqWVx2XUsVpJRnH9Mx0ClVOf5YUHerZ5so1OKSlqww4zy1R5ksEdGRcO3tM3zj0PYN6V48TbQCL1RfA==", + "version": "0.31.5", + "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.31.5.tgz", + "integrity": "sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg==", "dev": true, "license": "MIT", "dependencies": { @@ -2828,6 +2821,7 @@ "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -2895,6 +2889,7 @@ "integrity": "sha512-TS9bTNIryDzStCpJN93aC5VRSW3uTx9sClUn4B87pwiCaJh220otoI0X8mJKr+VcPtniMdN8GKjlwgWGUv5ZKA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -4120,6 +4115,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -4242,6 +4238,7 @@ "resolved": "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz", "integrity": "sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==", "license": "Unlicense", + "peer": true, "engines": { "node": ">=12" }, @@ -4266,6 +4263,7 @@ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -4282,6 +4280,7 @@ "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==", "dev": true, "license": "MIT", + "peer": true, "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" @@ -4475,6 +4474,7 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -4674,6 +4674,7 @@ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.38.1.tgz", "integrity": "sha512-fO6CLDfJYWHgfo6lQwkQU2vhCiHc2MBl6s3vEhK+sSZru17YL4R5s1v14ndRpqKAIkq8nCz6MTk1yZbESZWeyQ==", "license": "MIT", + "peer": true, "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", @@ -4766,7 +4767,8 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.12.tgz", "integrity": "sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/tapable": { "version": "2.2.2", @@ -4866,6 +4868,7 @@ "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4903,8 +4906,7 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", "license": "MIT", - "optional": true, - "peer": true + "optional": true }, "node_modules/uri-js": { "version": "4.4.1", @@ -4928,6 +4930,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.11.tgz", "integrity": "sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==", "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -5052,20 +5055,6 @@ "node": ">=18" } }, - "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", - "license": "ISC", - "optional": true, - "peer": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index eacf05f..ed485f8 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@tailwindcss/forms": "^0.5.9", "@tailwindcss/typography": "^0.5.15", "@tailwindcss/vite": "^4.0.0", - "drizzle-kit": "^0.31.4", + "drizzle-kit": "^0.31.5", "eslint": "^9.18.0", "eslint-config-prettier": "^10.0.1", "eslint-plugin-svelte": "^3.0.0", diff --git a/src/routes/event/[id]/+page.server.ts b/src/routes/event/[id]/+page.server.ts index f5db9c3..afb8cc2 100644 --- a/src/routes/event/[id]/+page.server.ts +++ b/src/routes/event/[id]/+page.server.ts @@ -1,9 +1,8 @@ import { database } from '$lib/database/db'; -import { events, rsvps, inviteTokens } from '$lib/database/schema'; -import { eq, asc, and } from 'drizzle-orm'; +import { events, rsvps } from '$lib/database/schema'; +import { eq, asc } from 'drizzle-orm'; import { error, fail } from '@sveltejs/kit'; import type { PageServerLoad, Actions } from './$types'; -import { isTokenValid } from '$lib/inviteTokenHelpers.js'; export const load: PageServerLoad = async ({ params, cookies }) => { const eventId = params.id; diff --git a/src/routes/event/[id]/+page.svelte b/src/routes/event/[id]/+page.svelte index abd1558..c764864 100644 --- a/src/routes/event/[id]/+page.svelte +++ b/src/routes/event/[id]/+page.svelte @@ -18,7 +18,7 @@ let newAttendeeName = ''; let isAddingRSVP = false; let error = ''; - let success = ''; + let success = ''; // TODO: change to boolean and refactor with 482-506 let addGuests = false; let numberOfGuests = 1; let showCalendarModal = false; @@ -50,19 +50,20 @@ success = ''; } - // TODO: ERROR - // //WHEN DELETING RSVP: THE MODAL MESSAGE IS "RSVP removed successfully." + const handleFormSuccess = () => { + if (form?.type === 'add') { + success = 'RSVP added successfully!'; + } else { + success = 'RSVP removed successfully.'; + } - // Handle form success from server - $: if (form?.success) { - success = 'RSVP added successfully!'; error = ''; newAttendeeName = ''; addGuests = false; numberOfGuests = 1; - // show and auto-hide success toast for add action - toastType = 'add'; + toastType = form?.type || 'add'; + if (browser) { if (successHideTimer) clearTimeout(successHideTimer); successHideTimer = window.setTimeout(() => { @@ -70,7 +71,10 @@ toastType = null; }, 3000); } - } + }; + + // Handle form success from server + $: if (form?.success) handleFormSuccess(); // Derive toast type from local or server form $: typeToShow = toastType ?? form?.type;