diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml index a1df02c..eb4ef9e 100644 --- a/.devcontainer/docker-compose.yaml +++ b/.devcontainer/docker-compose.yaml @@ -7,6 +7,7 @@ services: # Custom strapi service strapi: # Build the strapi service from its folder + container_name: clic-strapi build: # Build context, relative to the current file context: ../strapi/.devcontainer @@ -27,14 +28,12 @@ services: - type: bind source: ../strapi target: /app - ports: - # Expose strapi to port 8001 - - "8001:8001" depends_on: - strapi-postgres # Database service for strapi strapi-postgres: + container_name: clic-postgres image: postgres environment: POSTGRES_DB: strapi_data @@ -43,6 +42,30 @@ services: volumes: - "strapi-data:/var/lib/postgresql/data" + app: + # Build the app service from its folder + build: + # Build context, relative to the current file + context: ../app/.devcontainer + # Path to Dockerfile, relative to context + dockerfile: Dockerfile + args: + VARIANT: ${VARIANT:-18-bullseye} + environment: + NODE_ENV: development + volumes: + # Bind-mount the app project folder into the container + - type: bind + source: ../app + target: /app + + caddy: + image: caddy + volumes: + - "../caddy/Caddyfile.dev:/etc/caddy/Caddyfile" + ports: + - "80:80" + volumes: # Persist strapi database strapi-data: diff --git a/.vscode/settings.json b/.vscode/settings.json index 7ec871b..927266d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,5 +16,47 @@ "color": "white", "backgroundColor": "orange" }, - "todohighlight.keywordsPattern": "(todo|TODO|fixme|FIXME)(:?)" + "todohighlight.keywordsPattern": "(todo|TODO|fixme|FIXME)(:?)", + "terminal.integrated.profiles.linux": { + "strapi": { + "path": "docker", + "args": ["exec", "-it", "clic-strapi", "/bin/bash"], + "overrideName": true + }, + "postgres": { + "path": "docker", + "args": ["exec", "-it", "clic-postgres", "/bin/bash"], + "overrideName": true + } + }, + "terminal.integrated.profiles.windows": { + "strapi": { + "path": "docker", + "args": ["exec", "-it", "clic-strapi", "/bin/bash"], + "overrideName": true + }, + "postgres": { + "path": "docker", + "args": ["exec", "-it", "clic-postgres", "/bin/bash"], + "overrideName": true + } + }, + "terminal.integrated.profiles.osx": { + "strapi": { + "path": "docker", + "args": ["exec", "-it", "clic-strapi", "/bin/bash"], + "overrideName": true + }, + "postgres": { + "path": "docker", + "args": ["exec", "-it", "clic-postgres", "/bin/bash"], + "overrideName": true + } + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + } } diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..045b291 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,34 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Start dev container", + "type": "shell", + "command": "docker compose --file .devcontainer/docker-compose.yaml up", + "windows": { + "command": "docker compose --file .devcontainer\\docker-compose.yaml up" + }, + "group": "none", + "presentation": { + "reveal": "always", + "panel": "new" + }, + "runOptions": { + "runOn": "folderOpen" + } + }, + { + "label": "Stop dev container", + "type": "shell", + "command": "docker compose --file .devcontainer/docker-compose.yaml down", + "windows": { + "command": "docker compose --file .devcontainer\\docker-compose.yaml down" + }, + "group": "none", + "presentation": { + "reveal": "always", + "panel": "new" + } + } + ] +} diff --git a/app/.devcontainer/Dockerfile b/app/.devcontainer/Dockerfile new file mode 100644 index 0000000..e989ef6 --- /dev/null +++ b/app/.devcontainer/Dockerfile @@ -0,0 +1,12 @@ +# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster +ARG VARIANT=18-bullseye +FROM mcr.microsoft.com/vscode/devcontainers/typescript-node:0-${VARIANT} + +# the root folder will be mounted at /app in the container +WORKDIR /app + +# use "node" user with UID/GID 1000 (avoid permission issues with root) +USER node + +# install dependencies and run in watch mode +CMD npm install && npm run dev \ No newline at end of file diff --git a/strapi/.devcontainer/devcontainer.json b/app/.devcontainer/devcontainer.json similarity index 94% rename from strapi/.devcontainer/devcontainer.json rename to app/.devcontainer/devcontainer.json index 67be020..db6f69e 100644 --- a/strapi/.devcontainer/devcontainer.json +++ b/app/.devcontainer/devcontainer.json @@ -2,11 +2,11 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: // https://github.com/microsoft/vscode-dev-containers/tree/v0.238.0/containers/typescript-node { - "name": "clic-website-devcontainer/strapi", + "name": "clic-website-devcontainer/app", // Use docker-compose stack, relative to current file "dockerComposeFile": "../../.devcontainer/docker-compose.yaml", // Connect VSCode to following service defined in dockerComposeFile - "service": "strapi", + "service": "app", // Working directory inside devcontainer, where project is located "workspaceFolder": "/app", // Configure tool-specific properties. diff --git a/app/package-lock.json b/app/package-lock.json index 6bdbae6..88f2740 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -42,11 +42,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", + "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -148,9 +148,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "engines": { "node": ">=6.0.0" } @@ -169,19 +169,14 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, "node_modules/@next/env": { "version": "13.4.12", "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.12.tgz", @@ -362,29 +357,10 @@ "node": ">= 8" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", - "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, "node_modules/@rushstack/eslint-patch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.2.tgz", - "integrity": "sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", + "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==" }, "node_modules/@swc/helpers": { "version": "0.5.1", @@ -809,14 +785,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -825,17 +793,6 @@ "node": ">=8" } }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -887,20 +844,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -941,9 +884,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001518", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001518.tgz", - "integrity": "sha512-rup09/e3I0BKjncL+FesTayKtPrdwKhUufQFd3riFw1hHg8JmIFoInYfB102cFcY/pPgGmdyl/iy+jgiDi2vdA==", + "version": "1.0.30001519", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", + "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", "funding": [ { "type": "opencollective", @@ -1100,49 +1043,6 @@ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/define-properties": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", @@ -1199,9 +1099,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.480", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.480.tgz", - "integrity": "sha512-IXTgg+bITkQv/FLP9FjX6f9KFCs5hQWeh5uNSKxB9mqYj/JXhHDbu+ekS43LVvbkL3eW6/oZy4+r9Om6lan1Uw==" + "version": "1.4.490", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz", + "integrity": "sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==" }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -1407,13 +1307,13 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -1425,18 +1325,17 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz", - "integrity": "sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", + "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", "dependencies": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", "get-tsconfig": "^4.5.0", - "globby": "^13.1.3", "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "synckit": "^0.8.5" + "is-glob": "^4.0.3" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -1449,35 +1348,6 @@ "eslint-plugin-import": "*" } }, - "node_modules/eslint-import-resolver-typescript/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint-module-utils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", @@ -1552,22 +1422,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/resolve": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", - "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", - "dependencies": { - "is-core-module": "^2.12.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -1767,28 +1621,6 @@ "node": ">=0.10.0" } }, - "node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1974,17 +1806,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -2001,9 +1822,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.6.2.tgz", - "integrity": "sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", + "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -2188,14 +2009,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "engines": { - "node": ">=14.18.0" - } - }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -2316,9 +2129,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { "has": "^1.0.3" }, @@ -2340,20 +2153,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2373,23 +2172,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -2457,17 +2239,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", @@ -2521,31 +2292,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -2694,11 +2440,6 @@ "node": ">=10" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2719,17 +2460,6 @@ "node": ">=8.6" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2880,31 +2610,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3030,37 +2735,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", - "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -3402,9 +3076,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, "node_modules/regexp.prototype.flags": { "version": "1.5.0", @@ -3423,11 +3097,11 @@ } }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -3477,102 +3151,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/run-applescript/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/run-applescript/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/run-applescript/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/run-applescript/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-applescript/node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3679,11 +3257,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -3787,17 +3360,6 @@ "node": ">=4" } }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -3893,21 +3455,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", - "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", - "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, "node_modules/tailwindcss": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", @@ -3976,17 +3523,6 @@ "node": ">=0.8" } }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4147,14 +3683,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "engines": { - "node": ">=8" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", diff --git a/caddy/Caddyfile.dev b/caddy/Caddyfile.dev new file mode 100644 index 0000000..995e486 --- /dev/null +++ b/caddy/Caddyfile.dev @@ -0,0 +1,11 @@ +{ + auto_https off +} + +http://localhost:80 { + handle_path /strapi* { + reverse_proxy http://strapi:8001 + } + + reverse_proxy http://app:3000 +} diff --git a/strapi/.env.example b/strapi/.env.example index 0c67025..b532981 100644 --- a/strapi/.env.example +++ b/strapi/.env.example @@ -1,5 +1,6 @@ HOST=0.0.0.0 PORT=8001 +URL=http://localhost/strapi APP_KEYS="toBeModified1,toBeModified2" API_TOKEN_SALT=tobemodified ADMIN_JWT_SECRET=tobemodified diff --git a/strapi/config/middlewares.ts b/strapi/config/middlewares.ts index 5191241..3884bda 100644 --- a/strapi/config/middlewares.ts +++ b/strapi/config/middlewares.ts @@ -9,4 +9,5 @@ export default [ "strapi::session", "strapi::favicon", "strapi::public", + { resolve: "./src/middlewares/admin-redirect" }, ]; diff --git a/strapi/config/server.ts b/strapi/config/server.ts index b73a6e5..871c114 100644 --- a/strapi/config/server.ts +++ b/strapi/config/server.ts @@ -4,4 +4,5 @@ export default ({ env }) => ({ app: { keys: env.array("APP_KEYS"), }, + url: env("URL", "http://localhost/strapi"), }); diff --git a/strapi/src/api/association/content-types/association/schema.json b/strapi/src/api/association/content-types/association/schema.json new file mode 100644 index 0000000..cf551e2 --- /dev/null +++ b/strapi/src/api/association/content-types/association/schema.json @@ -0,0 +1,126 @@ +{ + "kind": "singleType", + "collectionName": "associations", + "info": { + "singularName": "association", + "pluralName": "associations", + "displayName": "Association", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "attributes": { + "association_name": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "string", + "required": true, + "default": "CLIC", + "unique": true + }, + "about": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "richtext", + "required": false + }, + "logo": { + "type": "media", + "multiple": false, + "required": true, + "allowedTypes": [ + "images" + ], + "pluginOptions": { + "i18n": { + "localized": true + } + } + }, + "gallery": { + "type": "media", + "multiple": true, + "required": false, + "allowedTypes": [ + "images", + "videos" + ], + "pluginOptions": { + "i18n": { + "localized": true + } + } + }, + "official_documents": { + "type": "media", + "multiple": true, + "required": false, + "allowedTypes": [ + "files" + ], + "pluginOptions": { + "i18n": { + "localized": true + } + } + }, + "social_links": { + "type": "relation", + "relation": "oneToMany", + "target": "api::social-link.social-link" + }, + "members": { + "type": "relation", + "relation": "oneToMany", + "target": "api::member.member" + }, + "partners": { + "type": "relation", + "relation": "oneToMany", + "target": "api::partner.partner" + }, + "address": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "string", + "required": true, + "unique": true, + "default": "CLIC, INN 132, Station 14, EPFL, CH-1015 Lausanne" + }, + "email": { + "pluginOptions": { + "i18n": { + "localized": false + } + }, + "type": "email", + "default": "clic@epfl.ch", + "unique": false + }, + "phone": { + "pluginOptions": { + "i18n": { + "localized": false + } + }, + "type": "string", + "default": "+41 21 693 81 28", + "unique": false + } + } +} diff --git a/strapi/src/api/association/controllers/association.ts b/strapi/src/api/association/controllers/association.ts new file mode 100644 index 0000000..9228f14 --- /dev/null +++ b/strapi/src/api/association/controllers/association.ts @@ -0,0 +1,7 @@ +/** + * association controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::association.association'); diff --git a/strapi/src/api/association/routes/association.ts b/strapi/src/api/association/routes/association.ts new file mode 100644 index 0000000..3b76b04 --- /dev/null +++ b/strapi/src/api/association/routes/association.ts @@ -0,0 +1,7 @@ +/** + * association router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::association.association'); diff --git a/strapi/src/api/association/services/association.ts b/strapi/src/api/association/services/association.ts new file mode 100644 index 0000000..e665438 --- /dev/null +++ b/strapi/src/api/association/services/association.ts @@ -0,0 +1,7 @@ +/** + * association service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::association.association'); diff --git a/strapi/src/api/commission/content-types/commission/schema.json b/strapi/src/api/commission/content-types/commission/schema.json new file mode 100644 index 0000000..9d9c8d6 --- /dev/null +++ b/strapi/src/api/commission/content-types/commission/schema.json @@ -0,0 +1,72 @@ +{ + "kind": "collectionType", + "collectionName": "commissions", + "info": { + "singularName": "commission", + "pluralName": "commissions", + "displayName": "Commission", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "attributes": { + "commission_name": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "string", + "required": true, + "unique": true + }, + "news": { + "type": "relation", + "relation": "manyToMany", + "target": "api::news.news", + "mappedBy": "commissions" + }, + "description": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "richtext", + "required": true + }, + "small_description": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "text", + "required": true + }, + "members": { + "type": "relation", + "relation": "manyToMany", + "target": "api::member.member", + "mappedBy": "commissions" + }, + "social_links": { + "type": "relation", + "relation": "oneToMany", + "target": "api::social-link.social-link", + "mappedBy": "commission" + }, + "partners": { + "type": "relation", + "relation": "manyToMany", + "target": "api::partner.partner", + "inversedBy": "commissions" + } + } +} diff --git a/strapi/src/api/commission/controllers/commission.ts b/strapi/src/api/commission/controllers/commission.ts new file mode 100644 index 0000000..5373de1 --- /dev/null +++ b/strapi/src/api/commission/controllers/commission.ts @@ -0,0 +1,7 @@ +/** + * commission controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::commission.commission'); diff --git a/strapi/src/api/commission/routes/commission.ts b/strapi/src/api/commission/routes/commission.ts new file mode 100644 index 0000000..6f9cc8c --- /dev/null +++ b/strapi/src/api/commission/routes/commission.ts @@ -0,0 +1,7 @@ +/** + * commission router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::commission.commission'); diff --git a/strapi/src/api/commission/services/commission.ts b/strapi/src/api/commission/services/commission.ts new file mode 100644 index 0000000..cbc4497 --- /dev/null +++ b/strapi/src/api/commission/services/commission.ts @@ -0,0 +1,7 @@ +/** + * commission service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::commission.commission'); diff --git a/strapi/src/api/event/content-types/event/schema.json b/strapi/src/api/event/content-types/event/schema.json new file mode 100644 index 0000000..a4577c7 --- /dev/null +++ b/strapi/src/api/event/content-types/event/schema.json @@ -0,0 +1,103 @@ +{ + "kind": "collectionType", + "collectionName": "events", + "info": { + "singularName": "event", + "pluralName": "events", + "displayName": "Event", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "attributes": { + "event_date": { + "pluginOptions": { + "i18n": { + "localized": false + } + }, + "type": "datetime", + "required": true + }, + "event_description": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "richtext", + "default": "insert the event description here", + "required": true + }, + "canceled": { + "pluginOptions": { + "i18n": { + "localized": false + } + }, + "type": "boolean", + "default": false, + "required": true + }, + "media": { + "type": "media", + "multiple": true, + "required": false, + "allowedTypes": [ + "images", + "videos", + "audios" + ], + "pluginOptions": { + "i18n": { + "localized": false + } + } + }, + "link": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "string" + }, + "news": { + "type": "relation", + "relation": "oneToMany", + "target": "api::news.news", + "mappedBy": "event" + }, + "event_name": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "string", + "required": true, + "unique": true + }, + "small_description": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "text", + "required": true + }, + "partners": { + "type": "relation", + "relation": "manyToMany", + "target": "api::partner.partner", + "inversedBy": "events" + } + } +} diff --git a/strapi/src/api/event/controllers/event.ts b/strapi/src/api/event/controllers/event.ts new file mode 100644 index 0000000..9725955 --- /dev/null +++ b/strapi/src/api/event/controllers/event.ts @@ -0,0 +1,7 @@ +/** + * event controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::event.event'); diff --git a/strapi/src/api/event/routes/event.ts b/strapi/src/api/event/routes/event.ts new file mode 100644 index 0000000..bea7eaa --- /dev/null +++ b/strapi/src/api/event/routes/event.ts @@ -0,0 +1,7 @@ +/** + * event router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::event.event'); diff --git a/strapi/src/api/event/services/event.ts b/strapi/src/api/event/services/event.ts new file mode 100644 index 0000000..8fe1b33 --- /dev/null +++ b/strapi/src/api/event/services/event.ts @@ -0,0 +1,7 @@ +/** + * event service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::event.event'); diff --git a/strapi/src/api/member/content-types/member/schema.json b/strapi/src/api/member/content-types/member/schema.json new file mode 100644 index 0000000..79fe691 --- /dev/null +++ b/strapi/src/api/member/content-types/member/schema.json @@ -0,0 +1,52 @@ +{ + "kind": "collectionType", + "collectionName": "members", + "info": { + "singularName": "member", + "pluralName": "members", + "displayName": "Member", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "link": { + "type": "string", + "required": true + }, + "role": { + "type": "string", + "required": true + }, + "picture": { + "type": "media", + "multiple": false, + "required": false, + "allowedTypes": [ + "images" + ] + }, + "name": { + "type": "string", + "required": true + }, + "affiliation": { + "type": "string", + "required": true + }, + "poles": { + "type": "relation", + "relation": "manyToMany", + "target": "api::pole.pole", + "inversedBy": "members" + }, + "commissions": { + "type": "relation", + "relation": "manyToMany", + "target": "api::commission.commission", + "inversedBy": "members" + } + } +} diff --git a/strapi/src/api/member/controllers/member.ts b/strapi/src/api/member/controllers/member.ts new file mode 100644 index 0000000..204bc1b --- /dev/null +++ b/strapi/src/api/member/controllers/member.ts @@ -0,0 +1,7 @@ +/** + * member controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::member.member'); diff --git a/strapi/src/api/member/routes/member.ts b/strapi/src/api/member/routes/member.ts new file mode 100644 index 0000000..e914063 --- /dev/null +++ b/strapi/src/api/member/routes/member.ts @@ -0,0 +1,7 @@ +/** + * member router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::member.member'); diff --git a/strapi/src/api/member/services/member.ts b/strapi/src/api/member/services/member.ts new file mode 100644 index 0000000..0c024c1 --- /dev/null +++ b/strapi/src/api/member/services/member.ts @@ -0,0 +1,7 @@ +/** + * member service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::member.member'); diff --git a/strapi/src/api/news/content-types/news/schema.json b/strapi/src/api/news/content-types/news/schema.json new file mode 100644 index 0000000..a15772a --- /dev/null +++ b/strapi/src/api/news/content-types/news/schema.json @@ -0,0 +1,90 @@ +{ + "kind": "collectionType", + "collectionName": "newss", + "info": { + "singularName": "news", + "pluralName": "newss", + "displayName": "News", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "attributes": { + "content": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "richtext", + "default": "insert the news content here", + "required": true + }, + "publication": { + "pluginOptions": { + "i18n": { + "localized": false + } + }, + "type": "date", + "required": true + }, + "picture": { + "type": "media", + "multiple": false, + "required": true, + "allowedTypes": [ + "images" + ], + "pluginOptions": { + "i18n": { + "localized": true + } + } + }, + "event": { + "type": "relation", + "relation": "manyToOne", + "target": "api::event.event", + "inversedBy": "news" + }, + "news_title": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "string", + "required": true + }, + "commissions": { + "type": "relation", + "relation": "manyToMany", + "target": "api::commission.commission", + "inversedBy": "news" + }, + "link": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "string" + }, + "small_description": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "text", + "required": true + } + } +} diff --git a/strapi/src/api/news/controllers/news.ts b/strapi/src/api/news/controllers/news.ts new file mode 100644 index 0000000..c71543d --- /dev/null +++ b/strapi/src/api/news/controllers/news.ts @@ -0,0 +1,7 @@ +/** + * news controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::news.news'); diff --git a/strapi/src/api/news/routes/news.ts b/strapi/src/api/news/routes/news.ts new file mode 100644 index 0000000..222c69b --- /dev/null +++ b/strapi/src/api/news/routes/news.ts @@ -0,0 +1,7 @@ +/** + * news router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::news.news'); diff --git a/strapi/src/api/news/services/news.ts b/strapi/src/api/news/services/news.ts new file mode 100644 index 0000000..8a376ba --- /dev/null +++ b/strapi/src/api/news/services/news.ts @@ -0,0 +1,7 @@ +/** + * news service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::news.news'); diff --git a/strapi/src/api/partner/content-types/partner/schema.json b/strapi/src/api/partner/content-types/partner/schema.json new file mode 100644 index 0000000..87804c6 --- /dev/null +++ b/strapi/src/api/partner/content-types/partner/schema.json @@ -0,0 +1,57 @@ +{ + "kind": "collectionType", + "collectionName": "partners", + "info": { + "singularName": "partner", + "pluralName": "partners", + "displayName": "Partner" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "partner_name": { + "type": "string", + "required": true, + "unique": true + }, + "partner_logo": { + "allowedTypes": [ + "images" + ], + "type": "media", + "multiple": false, + "required": true + }, + "partner_link": { + "type": "string", + "required": true, + "unique": true + }, + "partner_rank": { + "type": "integer", + "default": 1, + "required": true + }, + "partnership_end": { + "type": "date", + "required": false + }, + "partnership_start": { + "type": "date" + }, + "commissions": { + "type": "relation", + "relation": "manyToMany", + "target": "api::commission.commission", + "inversedBy": "partners" + }, + "events": { + "type": "relation", + "relation": "manyToMany", + "target": "api::event.event", + "inversedBy": "partners" + } + } +} diff --git a/strapi/src/api/partner/controllers/partner.ts b/strapi/src/api/partner/controllers/partner.ts new file mode 100644 index 0000000..bdfb779 --- /dev/null +++ b/strapi/src/api/partner/controllers/partner.ts @@ -0,0 +1,7 @@ +/** + * partner controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::partner.partner'); diff --git a/strapi/src/api/partner/routes/partner.ts b/strapi/src/api/partner/routes/partner.ts new file mode 100644 index 0000000..5f566f8 --- /dev/null +++ b/strapi/src/api/partner/routes/partner.ts @@ -0,0 +1,7 @@ +/** + * partner router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::partner.partner'); diff --git a/strapi/src/api/partner/services/partner.ts b/strapi/src/api/partner/services/partner.ts new file mode 100644 index 0000000..8e731ca --- /dev/null +++ b/strapi/src/api/partner/services/partner.ts @@ -0,0 +1,7 @@ +/** + * partner service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::partner.partner'); diff --git a/strapi/src/api/pole/content-types/pole/schema.json b/strapi/src/api/pole/content-types/pole/schema.json new file mode 100644 index 0000000..587567a --- /dev/null +++ b/strapi/src/api/pole/content-types/pole/schema.json @@ -0,0 +1,57 @@ +{ + "kind": "collectionType", + "collectionName": "poles", + "info": { + "singularName": "pole", + "pluralName": "poles", + "displayName": "Pole" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "attributes": { + "pole_name": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "string", + "required": true, + "unique": true + }, + "pole_description": { + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "type": "richtext", + "required": true + }, + "pole_logo": { + "allowedTypes": [ + "images" + ], + "type": "media", + "multiple": false, + "pluginOptions": { + "i18n": { + "localized": true + } + }, + "required": false + }, + "members": { + "type": "relation", + "relation": "manyToMany", + "target": "api::member.member", + "mappedBy": "poles" + } + } +} diff --git a/strapi/src/api/pole/controllers/pole.ts b/strapi/src/api/pole/controllers/pole.ts new file mode 100644 index 0000000..64616aa --- /dev/null +++ b/strapi/src/api/pole/controllers/pole.ts @@ -0,0 +1,7 @@ +/** + * pole controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::pole.pole'); diff --git a/strapi/src/api/pole/routes/pole.ts b/strapi/src/api/pole/routes/pole.ts new file mode 100644 index 0000000..d8a4cbc --- /dev/null +++ b/strapi/src/api/pole/routes/pole.ts @@ -0,0 +1,7 @@ +/** + * pole router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::pole.pole'); diff --git a/strapi/src/api/pole/services/pole.ts b/strapi/src/api/pole/services/pole.ts new file mode 100644 index 0000000..37fba4e --- /dev/null +++ b/strapi/src/api/pole/services/pole.ts @@ -0,0 +1,7 @@ +/** + * pole service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::pole.pole'); diff --git a/strapi/src/api/social-link/content-types/social-link/schema.json b/strapi/src/api/social-link/content-types/social-link/schema.json new file mode 100644 index 0000000..b5f7b21 --- /dev/null +++ b/strapi/src/api/social-link/content-types/social-link/schema.json @@ -0,0 +1,42 @@ +{ + "kind": "collectionType", + "collectionName": "social_links", + "info": { + "singularName": "social-link", + "pluralName": "social-links", + "displayName": "Social Link" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "target_name": { + "type": "string", + "required": true, + "unique": false + }, + "target_url": { + "type": "string", + "unique": true, + "required": true + }, + "enabled": { + "type": "boolean", + "default": true + }, + "icon": { + "allowedTypes": [ + "images" + ], + "type": "media", + "multiple": false + }, + "commission": { + "type": "relation", + "relation": "manyToOne", + "target": "api::commission.commission", + "inversedBy": "social_links" + } + } +} diff --git a/strapi/src/api/social-link/controllers/social-link.ts b/strapi/src/api/social-link/controllers/social-link.ts new file mode 100644 index 0000000..098b97e --- /dev/null +++ b/strapi/src/api/social-link/controllers/social-link.ts @@ -0,0 +1,7 @@ +/** + * social-link controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::social-link.social-link'); diff --git a/strapi/src/api/social-link/routes/social-link.ts b/strapi/src/api/social-link/routes/social-link.ts new file mode 100644 index 0000000..360ea4a --- /dev/null +++ b/strapi/src/api/social-link/routes/social-link.ts @@ -0,0 +1,7 @@ +/** + * social-link router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::social-link.social-link'); diff --git a/strapi/src/api/social-link/services/social-link.ts b/strapi/src/api/social-link/services/social-link.ts new file mode 100644 index 0000000..1a27f2b --- /dev/null +++ b/strapi/src/api/social-link/services/social-link.ts @@ -0,0 +1,7 @@ +/** + * social-link service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::social-link.social-link'); diff --git a/strapi/src/middlewares/admin-redirect.ts b/strapi/src/middlewares/admin-redirect.ts new file mode 100644 index 0000000..632310e --- /dev/null +++ b/strapi/src/middlewares/admin-redirect.ts @@ -0,0 +1,15 @@ +/** + * `admin-redirect` middleware + */ +import { Strapi } from "@strapi/strapi"; + +export default (config, { strapi }: { strapi: Strapi }) => { + const redirects = ["/", "/index.html"].map((path) => ({ + method: "GET", + path, + handler: (ctx) => ctx.redirect(strapi.config.admin.url), + config: { auth: false }, + })); + + strapi.server.routes(redirects); +};