diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..f589ca3 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 0000000..b0c1c68 --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/web.iml b/.idea/web.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/web.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 253453c..b844c05 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -6,7 +6,11 @@ - + + + + + @@ -27,6 +31,9 @@ + + + @@ -36,6 +43,13 @@ + + + + + @@ -44,28 +58,30 @@ - { - "keyToString": { - "RunOnceActivity.OpenProjectViewOnStart": "true", - "RunOnceActivity.ShowReadmeOnStart": "true", - "WebServerToolWindowFactoryState": "false", - "code.cleanup.on.save": "true", - "last_opened_file_path": "/home/tiradoe/Projects/movie-night/movie-night-web/src/package.json", - "list.type.of.created.stylesheet": "CSS", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.standard": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.standard": "", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "prettierjs.PrettierConfiguration.Package": "/home/tiradoe/Projects/movie-night/movie-night-web/node_modules/prettier", - "rearrange.code.on.save": "true", - "settings.editor.selected.configurable": "settings.javascript.prettier", - "ts.external.directory.path": "/home/tiradoe/.local/share/JetBrains/Toolbox/apps/PhpStorm/ch-0/223.8214.64/plugins/javascript-impl/jsLanguageServicesImpl/external", - "vue.rearranger.settings.migration": "true" + +}]]> @@ -89,6 +105,14 @@ + + + + + + + + @@ -106,6 +130,7 @@ + diff --git a/src/nuxt.config.ts b/src/nuxt.config.ts index 118f38a..4619992 100644 --- a/src/nuxt.config.ts +++ b/src/nuxt.config.ts @@ -1,28 +1,34 @@ // https://nuxt.com/docs/api/configuration/nuxt-config export default defineNuxtConfig({ - app: { - head: { - charset: 'utf-8', - viewport: "width=device-width,initial-scale=1.0", - title: "Cinema Corona", - link: [ - {rel: "icon", type: "image/png", href: "/favicon.png"} - ], - }, + app: { + head: { + charset: "utf-8", + viewport: "width=device-width,initial-scale=1.0", + title: "Cinema Corona", + link: [{ rel: "icon", type: "image/png", href: "/favicon.png" }], }, - modules: ["@nuxtjs/tailwindcss"], - css: ["@/assets/css/main.css"], - components: { - dirs: [ - '~/components', - '~/components/modal-content', - '~/components/forms', - '~/components/admin', - ] + }, + + modules: ["@nuxtjs/tailwindcss"], + css: ["@/assets/css/main.css"], + compatibilityDate: "2025-04-05", + + components: { + dirs: [ + "~/components", + "~/components/modal-content", + "~/components/forms", + "~/components/admin", + ], + }, + + runtimeConfig: { + public: { + apiURL: process.env.API_URL || "http://localhost:8000/api", }, - runtimeConfig: { - public: { - apiURL: process.env.API_URL || "http://localhost:8000/api" - } - } -}) + }, + + typescript: { + typeCheck: true, + }, +}); diff --git a/src/package-lock.json b/src/package-lock.json index 46bd4a4..4dbf0c1 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -4,15 +4,17 @@ "requires": true, "packages": { "": { - "name": "src", "hasInstallScript": true, "dependencies": { "lazysizes": "^5.3.2" }, "devDependencies": { "@nuxtjs/tailwindcss": "^6.2.0", + "@types/node": "^22.14.0", "nuxt": "3.x", - "prettier": "3.x" + "prettier": "3.x", + "typescript": "^5.8.3", + "vue-tsc": "^2.2.8" } }, "node_modules/@alloc/quick-lru": { @@ -2743,6 +2745,16 @@ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true }, + "node_modules/@types/node": { + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", + "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, "node_modules/@types/parse-path": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", @@ -2846,6 +2858,35 @@ "vue": "^3.0.0" } }, + "node_modules/@volar/language-core": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.12.tgz", + "integrity": "sha512-RLrFdXEaQBWfSnYGVxvR2WrO6Bub0unkdHYIdC31HzIEqATIuuhRRzYu76iGPZ6OtA4Au1SnW0ZwIqPP217YhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.12" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.12.tgz", + "integrity": "sha512-bUFIKvn2U0AWojOaqf63ER0N/iHIBYZPpNGogfLPQ68F5Eet6FnLlyho7BS0y2HJ1jFhSif7AcuTx1TqsCzRzw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.12.tgz", + "integrity": "sha512-HJB73OTJDgPc80K30wxi3if4fSsZZAOScbj2fcicMuOPoOkcf9NNAINb33o+DzhBdF9xTKC1gnPmIRDous5S0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.12", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, "node_modules/@vue-macros/common": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.16.1.tgz", @@ -3001,6 +3042,17 @@ "@vue/shared": "3.5.13" } }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, "node_modules/@vue/devtools-api": { "version": "6.6.4", "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", @@ -3063,6 +3115,31 @@ "rfdc": "^1.4.1" } }, + "node_modules/@vue/language-core": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.8.tgz", + "integrity": "sha512-rrzB0wPGBvcwaSNRriVWdNAbHQWSf0NlGqgKHK5mEkXpefjUlVRP62u03KvwZpvKVjRnBIQ/Lwre+Mx9N6juUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "~2.4.11", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@vue/reactivity": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", @@ -3177,6 +3254,13 @@ "node": ">= 14" } }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -4271,6 +4355,13 @@ } } }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", @@ -5101,6 +5192,16 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, "node_modules/hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", @@ -6232,6 +6333,13 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -6949,6 +7057,13 @@ "node": ">= 0.8" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -9211,6 +9326,20 @@ "node": ">= 0.6" } }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/ufo": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", @@ -9241,6 +9370,13 @@ "unplugin": "^2.1.0" } }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, "node_modules/unenv": { "version": "2.0.0-rc.15", "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.15.tgz", @@ -10153,6 +10289,23 @@ "vue": "^3.2.0" } }, + "node_modules/vue-tsc": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.8.tgz", + "integrity": "sha512-jBYKBNFADTN+L+MdesNX/TB3XuDSyaWynKMDgR+yCSln0GQ9Tfb7JS2lr46s2LiFUT1WsmfWsSvIElyxzOPqcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "~2.4.11", + "@vue/language-core": "2.2.8" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/src/package.json b/src/package.json index 10cf53d..109baeb 100644 --- a/src/package.json +++ b/src/package.json @@ -9,8 +9,11 @@ }, "devDependencies": { "@nuxtjs/tailwindcss": "^6.2.0", + "@types/node": "^22.14.0", "nuxt": "3.x", - "prettier": "3.x" + "prettier": "3.x", + "typescript": "^5.8.3", + "vue-tsc": "^2.2.8" }, "dependencies": { "lazysizes": "^5.3.2" diff --git a/src/pages/index.vue b/src/pages/index.vue index aaafffd..03ec09c 100644 --- a/src/pages/index.vue +++ b/src/pages/index.vue @@ -2,31 +2,53 @@ Login - + - Username - + Username + - Password - + Password + - Submit + + Submit + - + - @@ -36,29 +58,31 @@ export default { methods: { login: async function (e) { const config = useRuntimeConfig(); - e.preventDefault() - document.getElementById("password-incorrect").classList.add("hidden") + e.preventDefault(); + document.getElementById("password-incorrect").classList.add("hidden"); let username = document.getElementById("username").value; let password = document.getElementById("password").value; - let response = await fetch(`${config.public.apiURL}/auth/login`, { + let response = await fetch(`${config.public.apiURL}/auth/login/`, { method: "POST", - body: JSON.stringify({username: username, password: password}), - headers: {"Content-type": "application/json"} + body: JSON.stringify({ username: username, password: password }), + headers: { "Content-type": "application/json" }, }) - .then(response => { - if (!response.ok) { - document.getElementById("password-incorrect").classList.remove("hidden") - return false; - } + .then((response) => { + if (!response.ok) { + document + .getElementById("password-incorrect") + .classList.remove("hidden"); + return false; + } - return response.json(); + return response.json(); - //window.location = "/admin" - }) - .catch(err => { - return false - }) + //window.location = "/admin" + }) + .catch((err) => { + return false; + }); if (response) { let token = useCookie("token", { @@ -66,19 +90,17 @@ export default { }); token.value = response.token; - return navigateTo("/admin") + return navigateTo("/admin"); } - } + }, }, mounted() { let token = useCookie("token"); if (token.value) { - navigateTo("/admin") + navigateTo("/admin"); } - } -} + }, +}; - \ No newline at end of file + diff --git a/src/tsconfig.json b/src/tsconfig.json index a746f2a..5c39569 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -1,4 +1,9 @@ { // https://nuxt.com/docs/guide/concepts/typescript - "extends": "./.nuxt/tsconfig.json" + "extends": "./.nuxt/tsconfig.json", + "compilerOptions": { + "types": [ + "node" + ] + } }