mirror of
https://github.com/sergeyyarkov/yarkov.tech.git
synced 2026-10-11 02:19:08 +03:00
incrementing article views
This commit is contained in:
parent
2f2dea8d0b
commit
4d9ec73f40
@ -4,16 +4,9 @@ import { defineConfig, envField } from "astro/config";
|
||||
* Integrations
|
||||
*/
|
||||
import node from "@astrojs/node";
|
||||
import sitemap from "@astrojs/sitemap";
|
||||
import solidJs from "@astrojs/solid-js";
|
||||
import icon from "astro-icon";
|
||||
|
||||
/**
|
||||
* Other required modules
|
||||
*/
|
||||
import languages from "./src/i18n/languages";
|
||||
import { DEFAULT_LANGUAGE } from "./src/constants";
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: "https://yarkov.tech",
|
||||
@ -28,16 +21,7 @@ export default defineConfig({
|
||||
DIRECTUS_TOKEN: envField.string({ context: "server", access: "secret", default: "" }),
|
||||
},
|
||||
},
|
||||
integrations: [
|
||||
sitemap({
|
||||
i18n: {
|
||||
defaultLocale: DEFAULT_LANGUAGE,
|
||||
locales: Object.fromEntries(Object.keys(languages).map((key) => [key, key])),
|
||||
},
|
||||
}),
|
||||
icon(),
|
||||
solidJs(),
|
||||
],
|
||||
integrations: [icon(), solidJs()],
|
||||
trailingSlash: "ignore",
|
||||
scopedStyleStrategy: "where",
|
||||
});
|
||||
|
||||
230
package-lock.json
generated
230
package-lock.json
generated
@ -12,7 +12,6 @@
|
||||
"@astrojs/check": "^0.9.5",
|
||||
"@astrojs/node": "^9.5.0",
|
||||
"@astrojs/rss": "^4.0.13",
|
||||
"@astrojs/sitemap": "^3.6.0",
|
||||
"@astrojs/solid-js": "^5.1.3",
|
||||
"@iconify-json/mdi": "^1.2.3",
|
||||
"astro": "^5.15.8",
|
||||
@ -346,17 +345,6 @@
|
||||
"picocolors": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/sitemap": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.6.0.tgz",
|
||||
"integrity": "sha512-4aHkvcOZBWJigRmMIAJwRQXBS+ayoP5z40OklTXYXhUDhwusz+DyDl+nSshY6y9DvkVEavwNcFO8FD81iGhXjg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"sitemap": "^8.0.0",
|
||||
"stream-replace-string": "^2.0.0",
|
||||
"zod": "^3.25.76"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/solid-js": {
|
||||
"version": "5.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/solid-js/-/solid-js-5.1.3.tgz",
|
||||
@ -379,6 +367,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/solid-js/node_modules/@types/node": {
|
||||
"version": "24.10.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
|
||||
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~7.16.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/solid-js/node_modules/fdir": {
|
||||
"version": "6.5.0",
|
||||
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
|
||||
@ -401,7 +400,6 @@
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
@ -414,7 +412,6 @@
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
|
||||
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.25.0",
|
||||
"fdir": "^6.4.4",
|
||||
@ -582,7 +579,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
|
||||
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.28.5",
|
||||
@ -1826,6 +1822,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/@graphql-codegen/cli/node_modules/@types/node": {
|
||||
"version": "24.10.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
|
||||
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~7.16.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@graphql-codegen/cli/node_modules/ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
@ -2374,7 +2382,6 @@
|
||||
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
@ -3473,7 +3480,6 @@
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"detect-libc": "^1.0.3",
|
||||
"is-glob": "^4.0.3",
|
||||
@ -5086,15 +5092,6 @@
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/sax": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
|
||||
"integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/tar": {
|
||||
"version": "6.1.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.13.tgz",
|
||||
@ -5477,12 +5474,6 @@
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/arg": {
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
|
||||
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/argparse": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
||||
@ -5530,7 +5521,6 @@
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-5.15.8.tgz",
|
||||
"integrity": "sha512-QiiRnNPdxCcAGO2UlO07o+QeGgRfEC5Dlm0x35WPB/ixFK1T2bsNB6KaXri70cVkYY1GYgoRtrWv3HCR26o9aw==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"@astrojs/compiler": "^2.13.0",
|
||||
"@astrojs/internal-helpers": "0.7.4",
|
||||
@ -5622,6 +5612,17 @@
|
||||
"@iconify/utils": "^2.1.30"
|
||||
}
|
||||
},
|
||||
"node_modules/astro/node_modules/@types/node": {
|
||||
"version": "24.10.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
|
||||
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"undici-types": "~7.16.0"
|
||||
}
|
||||
},
|
||||
"node_modules/astro/node_modules/chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
@ -5665,7 +5666,6 @@
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
@ -5832,7 +5832,6 @@
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
|
||||
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.25.0",
|
||||
"fdir": "^6.4.4",
|
||||
@ -6176,7 +6175,6 @@
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"baseline-browser-mapping": "^2.8.25",
|
||||
"caniuse-lite": "^1.0.30001754",
|
||||
@ -8087,7 +8085,6 @@
|
||||
"resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz",
|
||||
"integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
|
||||
}
|
||||
@ -8368,7 +8365,6 @@
|
||||
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
@ -9266,7 +9262,6 @@
|
||||
"integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
|
||||
"devOptional": true,
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"jiti": "lib/jiti-cli.mjs"
|
||||
}
|
||||
@ -12075,7 +12070,6 @@
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.68.0.tgz",
|
||||
"integrity": "sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA==",
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"chokidar": ">=3.0.0 <4.0.0",
|
||||
"immutable": "^4.0.0",
|
||||
@ -12095,12 +12089,6 @@
|
||||
"devOptional": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/sax": {
|
||||
"version": "1.4.3",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz",
|
||||
"integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==",
|
||||
"license": "BlueOak-1.0.0"
|
||||
},
|
||||
"node_modules/saxes": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
|
||||
@ -12185,7 +12173,6 @@
|
||||
"resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz",
|
||||
"integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
@ -12385,25 +12372,6 @@
|
||||
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
|
||||
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
|
||||
},
|
||||
"node_modules/sitemap": {
|
||||
"version": "8.0.2",
|
||||
"resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.2.tgz",
|
||||
"integrity": "sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/node": "^17.0.5",
|
||||
"@types/sax": "^1.2.1",
|
||||
"arg": "^5.0.0",
|
||||
"sax": "^1.4.1"
|
||||
},
|
||||
"bin": {
|
||||
"sitemap": "dist/cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0",
|
||||
"npm": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/slash": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
|
||||
@ -12488,7 +12456,6 @@
|
||||
"resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.10.tgz",
|
||||
"integrity": "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"csstype": "^3.1.0",
|
||||
"seroval": "~1.3.0",
|
||||
@ -12556,12 +12523,6 @@
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/stream-replace-string": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz",
|
||||
"integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/streamx": {
|
||||
"version": "2.15.1",
|
||||
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz",
|
||||
@ -12911,7 +12872,6 @@
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
@ -13063,7 +13023,6 @@
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"license": "Apache-2.0",
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
"tsserver": "bin/tsserver"
|
||||
@ -13141,7 +13100,8 @@
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
|
||||
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
|
||||
"license": "MIT",
|
||||
"optional": true
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/unicode-properties": {
|
||||
"version": "1.4.1",
|
||||
@ -13910,7 +13870,6 @@
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
|
||||
"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"engines": {
|
||||
"node": ">=8.3.0"
|
||||
},
|
||||
@ -14198,7 +14157,6 @@
|
||||
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
|
||||
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
|
||||
"license": "MIT",
|
||||
"peer": true,
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/colinhacks"
|
||||
}
|
||||
@ -14436,16 +14394,6 @@
|
||||
"picocolors": "^1.1.1"
|
||||
}
|
||||
},
|
||||
"@astrojs/sitemap": {
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.6.0.tgz",
|
||||
"integrity": "sha512-4aHkvcOZBWJigRmMIAJwRQXBS+ayoP5z40OklTXYXhUDhwusz+DyDl+nSshY6y9DvkVEavwNcFO8FD81iGhXjg==",
|
||||
"requires": {
|
||||
"sitemap": "^8.0.0",
|
||||
"stream-replace-string": "^2.0.0",
|
||||
"zod": "^3.25.76"
|
||||
}
|
||||
},
|
||||
"@astrojs/solid-js": {
|
||||
"version": "5.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/solid-js/-/solid-js-5.1.3.tgz",
|
||||
@ -14455,6 +14403,16 @@
|
||||
"vite-plugin-solid": "^2.11.8"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/node": {
|
||||
"version": "24.10.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
|
||||
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"undici-types": "~7.16.0"
|
||||
}
|
||||
},
|
||||
"fdir": {
|
||||
"version": "6.5.0",
|
||||
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
|
||||
@ -14464,14 +14422,12 @@
|
||||
"picomatch": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"peer": true
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="
|
||||
},
|
||||
"vite": {
|
||||
"version": "6.4.1",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
|
||||
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"esbuild": "^0.25.0",
|
||||
"fdir": "^6.4.4",
|
||||
@ -14544,7 +14500,6 @@
|
||||
"version": "7.28.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz",
|
||||
"integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.27.1",
|
||||
"@babel/generator": "^7.28.5",
|
||||
@ -15214,6 +15169,17 @@
|
||||
"dev": true,
|
||||
"requires": {}
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "24.10.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
|
||||
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"undici-types": "~7.16.0"
|
||||
}
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
@ -15588,7 +15554,6 @@
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
|
||||
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {}
|
||||
}
|
||||
}
|
||||
@ -16192,7 +16157,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
|
||||
"integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@parcel/watcher-android-arm64": "2.5.1",
|
||||
"@parcel/watcher-darwin-arm64": "2.5.1",
|
||||
@ -17097,14 +17061,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"@types/sax": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
|
||||
"integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==",
|
||||
"requires": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"@types/tar": {
|
||||
"version": "6.1.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.13.tgz",
|
||||
@ -17393,11 +17349,6 @@
|
||||
"picomatch": "^2.0.4"
|
||||
}
|
||||
},
|
||||
"arg": {
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
|
||||
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
|
||||
},
|
||||
"argparse": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
|
||||
@ -17429,7 +17380,6 @@
|
||||
"version": "5.15.8",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-5.15.8.tgz",
|
||||
"integrity": "sha512-QiiRnNPdxCcAGO2UlO07o+QeGgRfEC5Dlm0x35WPB/ixFK1T2bsNB6KaXri70cVkYY1GYgoRtrWv3HCR26o9aw==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"@astrojs/compiler": "^2.13.0",
|
||||
"@astrojs/internal-helpers": "0.7.4",
|
||||
@ -17496,6 +17446,16 @@
|
||||
"zod-to-ts": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/node": {
|
||||
"version": "24.10.1",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz",
|
||||
"integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"undici-types": "~7.16.0"
|
||||
}
|
||||
},
|
||||
"chokidar": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
|
||||
@ -17518,8 +17478,7 @@
|
||||
"picomatch": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"peer": true
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "4.1.2",
|
||||
@ -17580,7 +17539,6 @@
|
||||
"version": "6.4.1",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz",
|
||||
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"esbuild": "^0.25.0",
|
||||
"fdir": "^6.4.4",
|
||||
@ -17768,7 +17726,6 @@
|
||||
"version": "4.28.0",
|
||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz",
|
||||
"integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"baseline-browser-mapping": "^2.8.25",
|
||||
"caniuse-lite": "^1.0.30001754",
|
||||
@ -19041,8 +18998,7 @@
|
||||
"graphql": {
|
||||
"version": "16.12.0",
|
||||
"resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz",
|
||||
"integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==",
|
||||
"peer": true
|
||||
"integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ=="
|
||||
},
|
||||
"graphql-config": {
|
||||
"version": "5.1.5",
|
||||
@ -19209,7 +19165,6 @@
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
|
||||
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
|
||||
"dev": true,
|
||||
"peer": true,
|
||||
"requires": {}
|
||||
}
|
||||
}
|
||||
@ -19784,8 +19739,7 @@
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
|
||||
"integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
|
||||
"devOptional": true,
|
||||
"peer": true
|
||||
"devOptional": true
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
@ -21634,7 +21588,6 @@
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.68.0.tgz",
|
||||
"integrity": "sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA==",
|
||||
"devOptional": true,
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"chokidar": ">=3.0.0 <4.0.0",
|
||||
"immutable": "^4.0.0",
|
||||
@ -21649,11 +21602,6 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"sax": {
|
||||
"version": "1.4.3",
|
||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz",
|
||||
"integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ=="
|
||||
},
|
||||
"saxes": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
|
||||
@ -21714,8 +21662,7 @@
|
||||
"seroval": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/seroval/-/seroval-1.3.2.tgz",
|
||||
"integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==",
|
||||
"peer": true
|
||||
"integrity": "sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ=="
|
||||
},
|
||||
"seroval-plugins": {
|
||||
"version": "1.3.3",
|
||||
@ -21853,17 +21800,6 @@
|
||||
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
|
||||
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
|
||||
},
|
||||
"sitemap": {
|
||||
"version": "8.0.2",
|
||||
"resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.2.tgz",
|
||||
"integrity": "sha512-LwktpJcyZDoa0IL6KT++lQ53pbSrx2c9ge41/SeLTyqy2XUNA6uR4+P9u5IVo5lPeL2arAcOKn1aZAxoYbCKlQ==",
|
||||
"requires": {
|
||||
"@types/node": "^17.0.5",
|
||||
"@types/sax": "^1.2.1",
|
||||
"arg": "^5.0.0",
|
||||
"sax": "^1.4.1"
|
||||
}
|
||||
},
|
||||
"slash": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
|
||||
@ -21916,7 +21852,6 @@
|
||||
"version": "1.9.10",
|
||||
"resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.9.10.tgz",
|
||||
"integrity": "sha512-Coz956cos/EPDlhs6+jsdTxKuJDPT7B5SVIWgABwROyxjY7Xbr8wkzD68Et+NxnV7DLJ3nJdAC2r9InuV/4Jew==",
|
||||
"peer": true,
|
||||
"requires": {
|
||||
"csstype": "^3.1.0",
|
||||
"seroval": "~1.3.0",
|
||||
@ -21963,11 +21898,6 @@
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
|
||||
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="
|
||||
},
|
||||
"stream-replace-string": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz",
|
||||
"integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w=="
|
||||
},
|
||||
"streamx": {
|
||||
"version": "2.15.1",
|
||||
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz",
|
||||
@ -22202,8 +22132,7 @@
|
||||
"picomatch": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"peer": true
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -22296,8 +22225,7 @@
|
||||
"typescript": {
|
||||
"version": "5.9.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
|
||||
"peer": true
|
||||
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="
|
||||
},
|
||||
"typescript-auto-import-cache": {
|
||||
"version": "0.3.6",
|
||||
@ -22335,9 +22263,11 @@
|
||||
"integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q=="
|
||||
},
|
||||
"undici-types": {
|
||||
"version": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
|
||||
"version": "7.16.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
|
||||
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
|
||||
"optional": true
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"unicode-properties": {
|
||||
"version": "1.4.1",
|
||||
@ -22856,7 +22786,6 @@
|
||||
"version": "7.5.10",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
|
||||
"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
|
||||
"peer": true,
|
||||
"requires": {}
|
||||
},
|
||||
"xml-name-validator": {
|
||||
@ -23037,8 +22966,7 @@
|
||||
"zod": {
|
||||
"version": "3.25.76",
|
||||
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
|
||||
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
|
||||
"peer": true
|
||||
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="
|
||||
},
|
||||
"zod-to-json-schema": {
|
||||
"version": "3.24.6",
|
||||
|
||||
@ -22,7 +22,6 @@
|
||||
"@astrojs/check": "^0.9.5",
|
||||
"@astrojs/node": "^9.5.0",
|
||||
"@astrojs/rss": "^4.0.13",
|
||||
"@astrojs/sitemap": "^3.6.0",
|
||||
"@astrojs/solid-js": "^5.1.3",
|
||||
"@iconify-json/mdi": "^1.2.3",
|
||||
"astro": "^5.15.8",
|
||||
|
||||
@ -28,6 +28,8 @@ The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://
|
||||
scalar JSON
|
||||
|
||||
type Mutation {
|
||||
create_appeal_item(data: create_appeal_input!): appeal
|
||||
create_appeal_items(data: [create_appeal_input!], filter: appeal_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [appeal!]!
|
||||
create_article_item(data: create_article_input!): article
|
||||
create_article_items(data: [create_article_input!], filter: article_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [article!]!
|
||||
create_article_tag_item(data: create_article_tag_input!): article_tag
|
||||
@ -48,6 +50,8 @@ type Mutation {
|
||||
create_project_translations_items(data: [create_project_translations_input!], filter: project_translations_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [project_translations!]!
|
||||
create_tag_item(data: create_tag_input!): tag
|
||||
create_tag_items(data: [create_tag_input!], filter: tag_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [tag!]!
|
||||
delete_appeal_item(id: ID!): delete_one
|
||||
delete_appeal_items(ids: [ID]!): delete_many
|
||||
delete_article_item(id: ID!): delete_one
|
||||
delete_article_items(ids: [ID]!): delete_many
|
||||
delete_article_tag_item(id: ID!): delete_one
|
||||
@ -68,6 +72,9 @@ type Mutation {
|
||||
delete_project_translations_items(ids: [ID]!): delete_many
|
||||
delete_tag_item(id: ID!): delete_one
|
||||
delete_tag_items(ids: [ID]!): delete_many
|
||||
update_appeal_batch(data: [update_appeal_input!], filter: appeal_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [appeal!]!
|
||||
update_appeal_item(data: update_appeal_input!, id: ID!): appeal
|
||||
update_appeal_items(data: update_appeal_input!, filter: appeal_filter, ids: [ID]!, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [appeal!]!
|
||||
update_article_batch(data: [update_article_input!], filter: article_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [article!]!
|
||||
update_article_item(data: update_article_input!, id: ID!): article
|
||||
update_article_items(data: update_article_input!, filter: article_filter, ids: [ID]!, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [article!]!
|
||||
@ -103,6 +110,10 @@ type Mutation {
|
||||
}
|
||||
|
||||
type Query {
|
||||
appeal(filter: appeal_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [appeal!]!
|
||||
appeal_aggregated(filter: appeal_filter, groupBy: [String], limit: Int, offset: Int, page: Int, search: String, sort: [String]): [appeal_aggregated!]!
|
||||
appeal_by_id(id: ID!, version: String): appeal
|
||||
appeal_by_version(id: ID!, version: String!): version_appeal
|
||||
article(filter: article_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [article!]!
|
||||
article_aggregated(filter: article_filter, groupBy: [String], limit: Int, offset: Int, page: Int, search: String, sort: [String]): [article_aggregated!]!
|
||||
article_by_id(id: ID!, version: String): article
|
||||
@ -150,6 +161,7 @@ type Query {
|
||||
}
|
||||
|
||||
type Subscription {
|
||||
appeal_mutated(event: EventEnum): appeal_mutated
|
||||
article_mutated(event: EventEnum): article_mutated
|
||||
article_tag_mutated(event: EventEnum): article_tag_mutated
|
||||
article_translations_mutated(event: EventEnum): article_translations_mutated
|
||||
@ -185,6 +197,63 @@ type Subscription {
|
||||
tag_mutated(event: EventEnum): tag_mutated
|
||||
}
|
||||
|
||||
type appeal {
|
||||
client_ip: String!
|
||||
date_created: Date
|
||||
date_created_func: datetime_functions
|
||||
email: String!
|
||||
id: ID!
|
||||
message: String!
|
||||
name: String!
|
||||
subject: String!
|
||||
}
|
||||
|
||||
type appeal_aggregated {
|
||||
avg: appeal_aggregated_fields
|
||||
avgDistinct: appeal_aggregated_fields
|
||||
count: appeal_aggregated_count
|
||||
countAll: Int
|
||||
countDistinct: appeal_aggregated_count
|
||||
group: JSON
|
||||
max: appeal_aggregated_fields
|
||||
min: appeal_aggregated_fields
|
||||
sum: appeal_aggregated_fields
|
||||
sumDistinct: appeal_aggregated_fields
|
||||
}
|
||||
|
||||
type appeal_aggregated_count {
|
||||
client_ip: Int
|
||||
date_created: Int
|
||||
email: Int
|
||||
id: Int
|
||||
message: Int
|
||||
name: Int
|
||||
subject: Int
|
||||
}
|
||||
|
||||
type appeal_aggregated_fields {
|
||||
id: Float
|
||||
}
|
||||
|
||||
input appeal_filter {
|
||||
_and: [appeal_filter]
|
||||
_or: [appeal_filter]
|
||||
client_ip: string_filter_operators
|
||||
date_created: date_filter_operators
|
||||
date_created_func: datetime_function_filter_operators
|
||||
email: string_filter_operators
|
||||
id: number_filter_operators
|
||||
message: string_filter_operators
|
||||
name: string_filter_operators
|
||||
subject: string_filter_operators
|
||||
}
|
||||
|
||||
type appeal_mutated {
|
||||
data: appeal
|
||||
event: EventEnum
|
||||
key: ID!
|
||||
}
|
||||
|
||||
type article {
|
||||
id: ID!
|
||||
translations(filter: article_translations_filter, limit: Int, offset: Int, page: Int, search: String, sort: [String]): [article_translations]
|
||||
@ -458,6 +527,16 @@ type count_functions {
|
||||
count: Int
|
||||
}
|
||||
|
||||
input create_appeal_input {
|
||||
client_ip: String!
|
||||
date_created: Date
|
||||
email: String!
|
||||
id: ID
|
||||
message: String!
|
||||
name: String!
|
||||
subject: String!
|
||||
}
|
||||
|
||||
input create_article_input {
|
||||
id: ID
|
||||
translations: [create_article_translations_input]
|
||||
@ -2118,6 +2197,16 @@ type tag_mutated {
|
||||
key: ID!
|
||||
}
|
||||
|
||||
input update_appeal_input {
|
||||
client_ip: String
|
||||
date_created: Date
|
||||
email: String
|
||||
id: ID
|
||||
message: String
|
||||
name: String
|
||||
subject: String
|
||||
}
|
||||
|
||||
input update_article_input {
|
||||
id: ID
|
||||
translations: [update_article_translations_input]
|
||||
@ -2327,6 +2416,16 @@ input update_tag_input {
|
||||
title: String
|
||||
}
|
||||
|
||||
type version_appeal {
|
||||
client_ip: String
|
||||
date_created: Date
|
||||
email: String
|
||||
id: ID
|
||||
message: String
|
||||
name: String
|
||||
subject: String
|
||||
}
|
||||
|
||||
type version_article {
|
||||
id: ID
|
||||
translations: JSON
|
||||
|
||||
@ -59,22 +59,11 @@ const t = useTranslation(Astro);
|
||||
href="/favicon-light-16x16.png"
|
||||
media="(prefers-color-scheme: light)"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="32x32"
|
||||
href="/favicon-dark-32x32.png"
|
||||
media="(prefers-color-scheme: dark)"
|
||||
/>
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="16x16"
|
||||
href="/favicon-dark-16x16.png"
|
||||
media="(prefers-color-scheme: dark)"
|
||||
/>
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-dark-32x32.png" media="(prefers-color-scheme: dark)" />
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-dark-16x16.png" media="(prefers-color-scheme: dark)" />
|
||||
<link rel="manifest" href="/site.webmanifest" />
|
||||
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5" />
|
||||
<link rel="sitemap" href="/sitemap-index.xml" />
|
||||
<slot />
|
||||
<script is:inline src="/assets/js/detect-theme.js"></script>
|
||||
<script src="../quicklink.js"></script>
|
||||
|
||||
@ -6,32 +6,32 @@ import { useTranslation } from "@i18n/utils";
|
||||
const t = useTranslation(Astro);
|
||||
---
|
||||
|
||||
<form name='contact' method='post'>
|
||||
<div class='flex'>
|
||||
<form name="contact" action="/api/appeal" method="post">
|
||||
<div class="flex">
|
||||
<div>
|
||||
<input name='name' placeholder={t("input.nameField")} type='text' maxlength='20' autocomplete='off' required />
|
||||
<input name="name" placeholder={t("input.nameField")} type="text" maxlength="20" autocomplete="off" required />
|
||||
</div>
|
||||
<div>
|
||||
<input name='email' placeholder='example@email.com' autocomplete='off' type='email' required />
|
||||
<input name="email" placeholder="example@email.com" autocomplete="off" type="email" required />
|
||||
</div>
|
||||
</div>
|
||||
<input name='subject' placeholder={t("input.subjectField")} type='text' autocomplete='off' required />
|
||||
<input name="subject" placeholder={t("input.subjectField")} type="text" autocomplete="off" required />
|
||||
<textarea
|
||||
name='message'
|
||||
name="message"
|
||||
placeholder={t("input.messageField")}
|
||||
id='message'
|
||||
autocomplete='off'
|
||||
id="message"
|
||||
autocomplete="off"
|
||||
cols={30}
|
||||
rows={10}
|
||||
required></textarea>
|
||||
<div class='footer'>
|
||||
<div class="footer">
|
||||
<Button type={"submit"}>
|
||||
<UIString key={"btn.submit"} />
|
||||
</Button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<style lang='scss'>
|
||||
<style lang="scss">
|
||||
form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@ -18,6 +18,7 @@ type Documents = {
|
||||
"\n\t\tquery Article {\n\t\t\tarticle {\n\t\t\t\ttranslations(filter: { status: { _eq: \"published\" } }) {\n\t\t\t\t\tid\n\t\t\t\t\ttitle\n\t\t\t\t\ttags {\n\t\t\t\t\t\ttag_id {\n\t\t\t\t\t\t\ttitle\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdescription\n\t\t\t\t\tslug\n\t\t\t\t\tpub_date\n\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\tcode\n\t\t\t\t\t\tname\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": typeof types.ArticleDocument,
|
||||
"\n\t\tquery RecentArticle {\n\t\t\tarticle {\n\t\t\t\ttranslations(filter: { status: { _eq: \"published\" } }) {\n\t\t\t\t\ttitle\n\t\t\t\t\tcover_image {\n\t\t\t\t\t\tid\n\t\t\t\t\t\ttitle\n\t\t\t\t\t}\n\t\t\t\t\tslug\n\t\t\t\t\tpub_date\n\t\t\t\t\tviews\n\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\tcode\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": typeof types.RecentArticleDocument,
|
||||
"\n\t\tquery Article_translations($slug: String!) {\n\t\t\tarticle_translations(filter: { slug: { _eq: $slug } }) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\ttags {\n\t\t\t\t\ttag_id {\n\t\t\t\t\t\ttitle\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdescription\n\t\t\t\tslug\n\t\t\t\tcontent\n\t\t\t\tauthor {\n\t\t\t\t\tfirst_name\n\t\t\t\t\tlast_name\n\t\t\t\t}\n\t\t\t\tpub_date\n\t\t\t\tviews\n\t\t\t\tlanguages_code {\n\t\t\t\t\tcode\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t\tcover_image {\n\t\t\t\t\ttitle\n\t\t\t\t\ttype\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t\tarticle_id {\n\t\t\t\t\ttranslations {\n\t\t\t\t\t\tslug\n\t\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\t\tcode\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpub_date\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": typeof types.Article_TranslationsDocument,
|
||||
"\n\t\tmutation Update_article_translations_item($id: ID!, $views: Int!) {\n\t\t\tupdate_article_translations_item(id: $id, data: { views: $views }) {\n\t\t\t\tviews\n\t\t\t}\n\t\t}\n\t": typeof types.Update_Article_Translations_ItemDocument,
|
||||
"\n\t\tquery AboutMeQuery($pageLang: String!) {\n\t\t\tglobal_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\tabout\n\t\t\t}\n\t\t}\n\t": typeof types.AboutMeQueryDocument,
|
||||
"\n\t\tquery Project_translations($pageLang: String!) {\n\t\t\tproject_translations(filter: { languages_code: { code: { _contains: $pageLang } } }, sort: [\"-year\"]) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\tyear\n\t\t\t\tdescription\n\t\t\t\tsource_url\n\t\t\t\tdemo_url\n\t\t\t\tarticle_url\n\t\t\t\ticon {\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": typeof types.Project_TranslationsDocument,
|
||||
"\n\t\tquery Tag {\n\t\t\ttag {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t}\n\t\t}\n\t": typeof types.TagDocument,
|
||||
@ -26,6 +27,7 @@ const documents: Documents = {
|
||||
"\n\t\tquery Article {\n\t\t\tarticle {\n\t\t\t\ttranslations(filter: { status: { _eq: \"published\" } }) {\n\t\t\t\t\tid\n\t\t\t\t\ttitle\n\t\t\t\t\ttags {\n\t\t\t\t\t\ttag_id {\n\t\t\t\t\t\t\ttitle\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdescription\n\t\t\t\t\tslug\n\t\t\t\t\tpub_date\n\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\tcode\n\t\t\t\t\t\tname\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": types.ArticleDocument,
|
||||
"\n\t\tquery RecentArticle {\n\t\t\tarticle {\n\t\t\t\ttranslations(filter: { status: { _eq: \"published\" } }) {\n\t\t\t\t\ttitle\n\t\t\t\t\tcover_image {\n\t\t\t\t\t\tid\n\t\t\t\t\t\ttitle\n\t\t\t\t\t}\n\t\t\t\t\tslug\n\t\t\t\t\tpub_date\n\t\t\t\t\tviews\n\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\tcode\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": types.RecentArticleDocument,
|
||||
"\n\t\tquery Article_translations($slug: String!) {\n\t\t\tarticle_translations(filter: { slug: { _eq: $slug } }) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\ttags {\n\t\t\t\t\ttag_id {\n\t\t\t\t\t\ttitle\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdescription\n\t\t\t\tslug\n\t\t\t\tcontent\n\t\t\t\tauthor {\n\t\t\t\t\tfirst_name\n\t\t\t\t\tlast_name\n\t\t\t\t}\n\t\t\t\tpub_date\n\t\t\t\tviews\n\t\t\t\tlanguages_code {\n\t\t\t\t\tcode\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t\tcover_image {\n\t\t\t\t\ttitle\n\t\t\t\t\ttype\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t\tarticle_id {\n\t\t\t\t\ttranslations {\n\t\t\t\t\t\tslug\n\t\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\t\tcode\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpub_date\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": types.Article_TranslationsDocument,
|
||||
"\n\t\tmutation Update_article_translations_item($id: ID!, $views: Int!) {\n\t\t\tupdate_article_translations_item(id: $id, data: { views: $views }) {\n\t\t\t\tviews\n\t\t\t}\n\t\t}\n\t": types.Update_Article_Translations_ItemDocument,
|
||||
"\n\t\tquery AboutMeQuery($pageLang: String!) {\n\t\t\tglobal_translations(filter: { languages_code: { code: { _contains: $pageLang } } }) {\n\t\t\t\tabout\n\t\t\t}\n\t\t}\n\t": types.AboutMeQueryDocument,
|
||||
"\n\t\tquery Project_translations($pageLang: String!) {\n\t\t\tproject_translations(filter: { languages_code: { code: { _contains: $pageLang } } }, sort: [\"-year\"]) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\tyear\n\t\t\t\tdescription\n\t\t\t\tsource_url\n\t\t\t\tdemo_url\n\t\t\t\tarticle_url\n\t\t\t\ticon {\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t": types.Project_TranslationsDocument,
|
||||
"\n\t\tquery Tag {\n\t\t\ttag {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t}\n\t\t}\n\t": types.TagDocument,
|
||||
@ -43,6 +45,10 @@ export function graphql(source: "\n\t\tquery RecentArticle {\n\t\t\tarticle {\n\
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
export function graphql(source: "\n\t\tquery Article_translations($slug: String!) {\n\t\t\tarticle_translations(filter: { slug: { _eq: $slug } }) {\n\t\t\t\tid\n\t\t\t\ttitle\n\t\t\t\ttags {\n\t\t\t\t\ttag_id {\n\t\t\t\t\t\ttitle\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdescription\n\t\t\t\tslug\n\t\t\t\tcontent\n\t\t\t\tauthor {\n\t\t\t\t\tfirst_name\n\t\t\t\t\tlast_name\n\t\t\t\t}\n\t\t\t\tpub_date\n\t\t\t\tviews\n\t\t\t\tlanguages_code {\n\t\t\t\t\tcode\n\t\t\t\t\tname\n\t\t\t\t}\n\t\t\t\tcover_image {\n\t\t\t\t\ttitle\n\t\t\t\t\ttype\n\t\t\t\t\tfilename_disk\n\t\t\t\t}\n\t\t\t\tarticle_id {\n\t\t\t\t\ttranslations {\n\t\t\t\t\t\tslug\n\t\t\t\t\t\tlanguages_code {\n\t\t\t\t\t\t\tcode\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpub_date\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t"): typeof import('./graphql').Article_TranslationsDocument;
|
||||
/**
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
export function graphql(source: "\n\t\tmutation Update_article_translations_item($id: ID!, $views: Int!) {\n\t\t\tupdate_article_translations_item(id: $id, data: { views: $views }) {\n\t\t\t\tviews\n\t\t\t}\n\t\t}\n\t"): typeof import('./graphql').Update_Article_Translations_ItemDocument;
|
||||
/**
|
||||
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||
*/
|
||||
|
||||
@ -34,6 +34,8 @@ export enum EventEnum {
|
||||
|
||||
export type Mutation = {
|
||||
__typename?: 'Mutation';
|
||||
create_appeal_item?: Maybe<Appeal>;
|
||||
create_appeal_items: Array<Appeal>;
|
||||
create_article_item?: Maybe<Article>;
|
||||
create_article_items: Array<Article>;
|
||||
create_article_tag_item?: Maybe<Article_Tag>;
|
||||
@ -54,6 +56,8 @@ export type Mutation = {
|
||||
create_project_translations_items: Array<Project_Translations>;
|
||||
create_tag_item?: Maybe<Tag>;
|
||||
create_tag_items: Array<Tag>;
|
||||
delete_appeal_item?: Maybe<Delete_One>;
|
||||
delete_appeal_items?: Maybe<Delete_Many>;
|
||||
delete_article_item?: Maybe<Delete_One>;
|
||||
delete_article_items?: Maybe<Delete_Many>;
|
||||
delete_article_tag_item?: Maybe<Delete_One>;
|
||||
@ -74,6 +78,9 @@ export type Mutation = {
|
||||
delete_project_translations_items?: Maybe<Delete_Many>;
|
||||
delete_tag_item?: Maybe<Delete_One>;
|
||||
delete_tag_items?: Maybe<Delete_Many>;
|
||||
update_appeal_batch: Array<Appeal>;
|
||||
update_appeal_item?: Maybe<Appeal>;
|
||||
update_appeal_items: Array<Appeal>;
|
||||
update_article_batch: Array<Article>;
|
||||
update_article_item?: Maybe<Article>;
|
||||
update_article_items: Array<Article>;
|
||||
@ -109,6 +116,22 @@ export type Mutation = {
|
||||
};
|
||||
|
||||
|
||||
export type MutationCreate_Appeal_ItemArgs = {
|
||||
data: Create_Appeal_Input;
|
||||
};
|
||||
|
||||
|
||||
export type MutationCreate_Appeal_ItemsArgs = {
|
||||
data?: InputMaybe<Array<Create_Appeal_Input>>;
|
||||
filter?: InputMaybe<Appeal_Filter>;
|
||||
limit?: InputMaybe<Scalars['Int']['input']>;
|
||||
offset?: InputMaybe<Scalars['Int']['input']>;
|
||||
page?: InputMaybe<Scalars['Int']['input']>;
|
||||
search?: InputMaybe<Scalars['String']['input']>;
|
||||
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
|
||||
};
|
||||
|
||||
|
||||
export type MutationCreate_Article_ItemArgs = {
|
||||
data: Create_Article_Input;
|
||||
};
|
||||
@ -269,6 +292,16 @@ export type MutationCreate_Tag_ItemsArgs = {
|
||||
};
|
||||
|
||||
|
||||
export type MutationDelete_Appeal_ItemArgs = {
|
||||
id: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationDelete_Appeal_ItemsArgs = {
|
||||
ids: Array<InputMaybe<Scalars['ID']['input']>>;
|
||||
};
|
||||
|
||||
|
||||
export type MutationDelete_Article_ItemArgs = {
|
||||
id: Scalars['ID']['input'];
|
||||
};
|
||||
@ -369,6 +402,35 @@ export type MutationDelete_Tag_ItemsArgs = {
|
||||
};
|
||||
|
||||
|
||||
export type MutationUpdate_Appeal_BatchArgs = {
|
||||
data?: InputMaybe<Array<Update_Appeal_Input>>;
|
||||
filter?: InputMaybe<Appeal_Filter>;
|
||||
limit?: InputMaybe<Scalars['Int']['input']>;
|
||||
offset?: InputMaybe<Scalars['Int']['input']>;
|
||||
page?: InputMaybe<Scalars['Int']['input']>;
|
||||
search?: InputMaybe<Scalars['String']['input']>;
|
||||
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
|
||||
};
|
||||
|
||||
|
||||
export type MutationUpdate_Appeal_ItemArgs = {
|
||||
data: Update_Appeal_Input;
|
||||
id: Scalars['ID']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type MutationUpdate_Appeal_ItemsArgs = {
|
||||
data: Update_Appeal_Input;
|
||||
filter?: InputMaybe<Appeal_Filter>;
|
||||
ids: Array<InputMaybe<Scalars['ID']['input']>>;
|
||||
limit?: InputMaybe<Scalars['Int']['input']>;
|
||||
offset?: InputMaybe<Scalars['Int']['input']>;
|
||||
page?: InputMaybe<Scalars['Int']['input']>;
|
||||
search?: InputMaybe<Scalars['String']['input']>;
|
||||
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
|
||||
};
|
||||
|
||||
|
||||
export type MutationUpdate_Article_BatchArgs = {
|
||||
data?: InputMaybe<Array<Update_Article_Input>>;
|
||||
filter?: InputMaybe<Article_Filter>;
|
||||
@ -670,6 +732,10 @@ export type MutationUpdate_Tag_ItemsArgs = {
|
||||
|
||||
export type Query = {
|
||||
__typename?: 'Query';
|
||||
appeal: Array<Appeal>;
|
||||
appeal_aggregated: Array<Appeal_Aggregated>;
|
||||
appeal_by_id?: Maybe<Appeal>;
|
||||
appeal_by_version?: Maybe<Version_Appeal>;
|
||||
article: Array<Article>;
|
||||
article_aggregated: Array<Article_Aggregated>;
|
||||
article_by_id?: Maybe<Article>;
|
||||
@ -717,6 +783,39 @@ export type Query = {
|
||||
};
|
||||
|
||||
|
||||
export type QueryAppealArgs = {
|
||||
filter?: InputMaybe<Appeal_Filter>;
|
||||
limit?: InputMaybe<Scalars['Int']['input']>;
|
||||
offset?: InputMaybe<Scalars['Int']['input']>;
|
||||
page?: InputMaybe<Scalars['Int']['input']>;
|
||||
search?: InputMaybe<Scalars['String']['input']>;
|
||||
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryAppeal_AggregatedArgs = {
|
||||
filter?: InputMaybe<Appeal_Filter>;
|
||||
groupBy?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
|
||||
limit?: InputMaybe<Scalars['Int']['input']>;
|
||||
offset?: InputMaybe<Scalars['Int']['input']>;
|
||||
page?: InputMaybe<Scalars['Int']['input']>;
|
||||
search?: InputMaybe<Scalars['String']['input']>;
|
||||
sort?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryAppeal_By_IdArgs = {
|
||||
id: Scalars['ID']['input'];
|
||||
version?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
|
||||
export type QueryAppeal_By_VersionArgs = {
|
||||
id: Scalars['ID']['input'];
|
||||
version: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
|
||||
export type QueryArticleArgs = {
|
||||
filter?: InputMaybe<Article_Filter>;
|
||||
limit?: InputMaybe<Scalars['Int']['input']>;
|
||||
@ -1068,6 +1167,7 @@ export type QueryTag_By_VersionArgs = {
|
||||
|
||||
export type Subscription = {
|
||||
__typename?: 'Subscription';
|
||||
appeal_mutated?: Maybe<Appeal_Mutated>;
|
||||
article_mutated?: Maybe<Article_Mutated>;
|
||||
article_tag_mutated?: Maybe<Article_Tag_Mutated>;
|
||||
article_translations_mutated?: Maybe<Article_Translations_Mutated>;
|
||||
@ -1104,6 +1204,11 @@ export type Subscription = {
|
||||
};
|
||||
|
||||
|
||||
export type SubscriptionAppeal_MutatedArgs = {
|
||||
event?: InputMaybe<EventEnum>;
|
||||
};
|
||||
|
||||
|
||||
export type SubscriptionArticle_MutatedArgs = {
|
||||
event?: InputMaybe<EventEnum>;
|
||||
};
|
||||
@ -1268,6 +1373,68 @@ export type SubscriptionTag_MutatedArgs = {
|
||||
event?: InputMaybe<EventEnum>;
|
||||
};
|
||||
|
||||
export type Appeal = {
|
||||
__typename?: 'appeal';
|
||||
client_ip: Scalars['String']['output'];
|
||||
date_created?: Maybe<Scalars['Date']['output']>;
|
||||
date_created_func?: Maybe<Datetime_Functions>;
|
||||
email: Scalars['String']['output'];
|
||||
id: Scalars['ID']['output'];
|
||||
message: Scalars['String']['output'];
|
||||
name: Scalars['String']['output'];
|
||||
subject: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
export type Appeal_Aggregated = {
|
||||
__typename?: 'appeal_aggregated';
|
||||
avg?: Maybe<Appeal_Aggregated_Fields>;
|
||||
avgDistinct?: Maybe<Appeal_Aggregated_Fields>;
|
||||
count?: Maybe<Appeal_Aggregated_Count>;
|
||||
countAll?: Maybe<Scalars['Int']['output']>;
|
||||
countDistinct?: Maybe<Appeal_Aggregated_Count>;
|
||||
group?: Maybe<Scalars['JSON']['output']>;
|
||||
max?: Maybe<Appeal_Aggregated_Fields>;
|
||||
min?: Maybe<Appeal_Aggregated_Fields>;
|
||||
sum?: Maybe<Appeal_Aggregated_Fields>;
|
||||
sumDistinct?: Maybe<Appeal_Aggregated_Fields>;
|
||||
};
|
||||
|
||||
export type Appeal_Aggregated_Count = {
|
||||
__typename?: 'appeal_aggregated_count';
|
||||
client_ip?: Maybe<Scalars['Int']['output']>;
|
||||
date_created?: Maybe<Scalars['Int']['output']>;
|
||||
email?: Maybe<Scalars['Int']['output']>;
|
||||
id?: Maybe<Scalars['Int']['output']>;
|
||||
message?: Maybe<Scalars['Int']['output']>;
|
||||
name?: Maybe<Scalars['Int']['output']>;
|
||||
subject?: Maybe<Scalars['Int']['output']>;
|
||||
};
|
||||
|
||||
export type Appeal_Aggregated_Fields = {
|
||||
__typename?: 'appeal_aggregated_fields';
|
||||
id?: Maybe<Scalars['Float']['output']>;
|
||||
};
|
||||
|
||||
export type Appeal_Filter = {
|
||||
_and?: InputMaybe<Array<InputMaybe<Appeal_Filter>>>;
|
||||
_or?: InputMaybe<Array<InputMaybe<Appeal_Filter>>>;
|
||||
client_ip?: InputMaybe<String_Filter_Operators>;
|
||||
date_created?: InputMaybe<Date_Filter_Operators>;
|
||||
date_created_func?: InputMaybe<Datetime_Function_Filter_Operators>;
|
||||
email?: InputMaybe<String_Filter_Operators>;
|
||||
id?: InputMaybe<Number_Filter_Operators>;
|
||||
message?: InputMaybe<String_Filter_Operators>;
|
||||
name?: InputMaybe<String_Filter_Operators>;
|
||||
subject?: InputMaybe<String_Filter_Operators>;
|
||||
};
|
||||
|
||||
export type Appeal_Mutated = {
|
||||
__typename?: 'appeal_mutated';
|
||||
data?: Maybe<Appeal>;
|
||||
event?: Maybe<EventEnum>;
|
||||
key: Scalars['ID']['output'];
|
||||
};
|
||||
|
||||
export type Article = {
|
||||
__typename?: 'article';
|
||||
id: Scalars['ID']['output'];
|
||||
@ -1662,6 +1829,16 @@ export type Count_Functions = {
|
||||
count?: Maybe<Scalars['Int']['output']>;
|
||||
};
|
||||
|
||||
export type Create_Appeal_Input = {
|
||||
client_ip: Scalars['String']['input'];
|
||||
date_created?: InputMaybe<Scalars['Date']['input']>;
|
||||
email: Scalars['String']['input'];
|
||||
id?: InputMaybe<Scalars['ID']['input']>;
|
||||
message: Scalars['String']['input'];
|
||||
name: Scalars['String']['input'];
|
||||
subject: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
export type Create_Article_Input = {
|
||||
id?: InputMaybe<Scalars['ID']['input']>;
|
||||
translations?: InputMaybe<Array<InputMaybe<Create_Article_Translations_Input>>>;
|
||||
@ -4010,6 +4187,16 @@ export type Tag_Mutated = {
|
||||
key: Scalars['ID']['output'];
|
||||
};
|
||||
|
||||
export type Update_Appeal_Input = {
|
||||
client_ip?: InputMaybe<Scalars['String']['input']>;
|
||||
date_created?: InputMaybe<Scalars['Date']['input']>;
|
||||
email?: InputMaybe<Scalars['String']['input']>;
|
||||
id?: InputMaybe<Scalars['ID']['input']>;
|
||||
message?: InputMaybe<Scalars['String']['input']>;
|
||||
name?: InputMaybe<Scalars['String']['input']>;
|
||||
subject?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type Update_Article_Input = {
|
||||
id?: InputMaybe<Scalars['ID']['input']>;
|
||||
translations?: InputMaybe<Array<InputMaybe<Update_Article_Translations_Input>>>;
|
||||
@ -4219,6 +4406,17 @@ export type Update_Tag_Input = {
|
||||
title?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type Version_Appeal = {
|
||||
__typename?: 'version_appeal';
|
||||
client_ip?: Maybe<Scalars['String']['output']>;
|
||||
date_created?: Maybe<Scalars['Date']['output']>;
|
||||
email?: Maybe<Scalars['String']['output']>;
|
||||
id?: Maybe<Scalars['ID']['output']>;
|
||||
message?: Maybe<Scalars['String']['output']>;
|
||||
name?: Maybe<Scalars['String']['output']>;
|
||||
subject?: Maybe<Scalars['String']['output']>;
|
||||
};
|
||||
|
||||
export type Version_Article = {
|
||||
__typename?: 'version_article';
|
||||
id?: Maybe<Scalars['ID']['output']>;
|
||||
@ -4346,6 +4544,14 @@ export type Article_TranslationsQueryVariables = Exact<{
|
||||
|
||||
export type Article_TranslationsQuery = { __typename?: 'Query', article_translations: Array<{ __typename?: 'article_translations', id: string, title: string, description: string, slug: string, content: string, pub_date: any, views: number, tags?: Array<{ __typename?: 'article_translations_tag', tag_id?: { __typename?: 'tag', title: string } | null } | null> | null, author?: { __typename?: 'directus_users', first_name?: string | null, last_name?: string | null } | null, languages_code?: { __typename?: 'languages', code: string, name?: string | null } | null, cover_image?: { __typename?: 'directus_files', title?: string | null, type?: string | null, filename_disk?: string | null } | null, article_id?: { __typename?: 'article', translations?: Array<{ __typename?: 'article_translations', slug: string, pub_date: any, languages_code?: { __typename?: 'languages', code: string, name?: string | null } | null } | null> | null } | null }> };
|
||||
|
||||
export type Update_Article_Translations_ItemMutationVariables = Exact<{
|
||||
id: Scalars['ID']['input'];
|
||||
views: Scalars['Int']['input'];
|
||||
}>;
|
||||
|
||||
|
||||
export type Update_Article_Translations_ItemMutation = { __typename?: 'Mutation', update_article_translations_item?: { __typename?: 'article_translations', views: number } | null };
|
||||
|
||||
export type AboutMeQueryQueryVariables = Exact<{
|
||||
pageLang: Scalars['String']['input'];
|
||||
}>;
|
||||
@ -4466,6 +4672,13 @@ export const Article_TranslationsDocument = new TypedDocumentString(`
|
||||
}
|
||||
}
|
||||
`) as unknown as TypedDocumentString<Article_TranslationsQuery, Article_TranslationsQueryVariables>;
|
||||
export const Update_Article_Translations_ItemDocument = new TypedDocumentString(`
|
||||
mutation Update_article_translations_item($id: ID!, $views: Int!) {
|
||||
update_article_translations_item(id: $id, data: {views: $views}) {
|
||||
views
|
||||
}
|
||||
}
|
||||
`) as unknown as TypedDocumentString<Update_Article_Translations_ItemMutation, Update_Article_Translations_ItemMutationVariables>;
|
||||
export const AboutMeQueryDocument = new TypedDocumentString(`
|
||||
query AboutMeQuery($pageLang: String!) {
|
||||
global_translations(filter: {languages_code: {code: {_contains: $pageLang}}}) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
---
|
||||
import ArticleLayout from "@root/layouts/article.astro";
|
||||
import { getArticleTranslationsBySlug } from "@/src/queries";
|
||||
import { getArticleTranslationsBySlug, incArticleTranslationViews } from "@/src/queries";
|
||||
|
||||
const { url } = Astro.params as { blog: string; url: string };
|
||||
const slug = url.split("/").at(-1);
|
||||
@ -11,7 +11,7 @@ const article = await getArticleTranslationsBySlug(slug);
|
||||
|
||||
if (!article) return Astro.redirect("/404");
|
||||
|
||||
// if (import.meta.env.PROD) await incArticleTranslationViews(article);
|
||||
if (import.meta.env.PROD) await incArticleTranslationViews(article);
|
||||
---
|
||||
|
||||
<ArticleLayout lang={article.languages_code?.code} article={article} />
|
||||
|
||||
@ -1,14 +1,5 @@
|
||||
---
|
||||
import { getLanguageKeys } from "@i18n/utils";
|
||||
import { DEFAULT_LANGUAGE } from "@root/constants";
|
||||
import AboutTemplate from "@templates/About.astro";
|
||||
|
||||
// TODO: do not generate pages without required data
|
||||
export function getStaticPaths() {
|
||||
return getLanguageKeys()
|
||||
.filter((lang) => lang !== DEFAULT_LANGUAGE)
|
||||
.map((lang) => ({ params: { lang } }));
|
||||
}
|
||||
---
|
||||
|
||||
<AboutTemplate />
|
||||
|
||||
@ -1,13 +1,5 @@
|
||||
---
|
||||
import { getLanguageKeys } from "@i18n/utils";
|
||||
import { DEFAULT_LANGUAGE } from "@root/constants";
|
||||
import ArticlesTemplate from "@templates/Articles.astro";
|
||||
|
||||
export function getStaticPaths() {
|
||||
return getLanguageKeys()
|
||||
.filter((lang) => lang !== DEFAULT_LANGUAGE)
|
||||
.map((lang) => ({ params: { lang } }));
|
||||
}
|
||||
---
|
||||
|
||||
<ArticlesTemplate />
|
||||
|
||||
@ -1,13 +1,5 @@
|
||||
---
|
||||
import { getLanguageKeys } from "@i18n/utils";
|
||||
import { DEFAULT_LANGUAGE } from "@root/constants";
|
||||
import ContactsTemplate from "@templates/Contacts.astro";
|
||||
|
||||
export function getStaticPaths() {
|
||||
return getLanguageKeys()
|
||||
.filter((lang) => lang !== DEFAULT_LANGUAGE)
|
||||
.map((lang) => ({ params: { lang } }));
|
||||
}
|
||||
---
|
||||
|
||||
<ContactsTemplate />
|
||||
|
||||
@ -1,13 +1,5 @@
|
||||
---
|
||||
import { getLanguageKeys } from "@i18n/utils";
|
||||
import { DEFAULT_LANGUAGE } from "@root/constants";
|
||||
import HomeTemplate from "@templates/Home.astro";
|
||||
|
||||
export function getStaticPaths() {
|
||||
return getLanguageKeys()
|
||||
.filter((lang) => lang !== DEFAULT_LANGUAGE)
|
||||
.map((lang) => ({ params: { lang } }));
|
||||
}
|
||||
---
|
||||
|
||||
<HomeTemplate />
|
||||
|
||||
@ -1,13 +1,5 @@
|
||||
---
|
||||
import { getLanguageKeys } from "@i18n/utils";
|
||||
import { DEFAULT_LANGUAGE } from "@root/constants";
|
||||
import ProjectsTemplate from "@templates/Projects.astro";
|
||||
|
||||
export function getStaticPaths() {
|
||||
return getLanguageKeys()
|
||||
.filter((lang) => lang !== DEFAULT_LANGUAGE)
|
||||
.map((lang) => ({ params: { lang } }));
|
||||
}
|
||||
---
|
||||
|
||||
<ProjectsTemplate />
|
||||
|
||||
6
src/pages/api/appeal.ts
Normal file
6
src/pages/api/appeal.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import { APIRoute } from "astro";
|
||||
|
||||
export const POST: APIRoute = async ({ request, clientAddress }) => {
|
||||
const data = await request.formData();
|
||||
return new Response("done.", { status: 200 });
|
||||
};
|
||||
80
src/pages/sitemap.xml.ts
Normal file
80
src/pages/sitemap.xml.ts
Normal file
@ -0,0 +1,80 @@
|
||||
import type { APIContext } from "astro";
|
||||
// import { getCollection } from 'astro:content';
|
||||
|
||||
export async function GET(context: APIContext) {
|
||||
return new Response("sitemap", { status: 200 });
|
||||
}
|
||||
|
||||
// export async function GET(context: APIContext) {
|
||||
// const site = context.site?.toString() || 'https://yourdomain.com';
|
||||
|
||||
// // Get all collections
|
||||
// const posts = await getCollection('blog');
|
||||
// const projects = await getCollection('projects');
|
||||
|
||||
// // Generate URLs for all content
|
||||
// const urls: Array<{ loc: string; changefreq?: string; priority?: number }> = [];
|
||||
|
||||
// // Static pages
|
||||
// urls.push(
|
||||
// { loc: `${site}/`, changefreq: 'weekly', priority: 1.0 },
|
||||
// { loc: `${site}/blog/`, changefreq: 'weekly', priority: 0.9 },
|
||||
// { loc: `${site}/projects/`, changefreq: 'monthly', priority: 0.8 },
|
||||
// { loc: `${site}/about/`, changefreq: 'monthly', priority: 0.7 },
|
||||
// );
|
||||
|
||||
// // Blog posts
|
||||
// posts
|
||||
// .filter(post => !post.data.draft)
|
||||
// .forEach(post => {
|
||||
// urls.push({
|
||||
// loc: `${site}/blog/${post.slug}/`,
|
||||
// changefreq: 'monthly',
|
||||
// priority: 0.8
|
||||
// });
|
||||
// });
|
||||
|
||||
// // Projects
|
||||
// projects
|
||||
// .filter(project => !project.data.draft)
|
||||
// .forEach(project => {
|
||||
// urls.push({
|
||||
// loc: `${site}/projects/${project.slug}/`,
|
||||
// changefreq: 'monthly',
|
||||
// priority: 0.7
|
||||
// });
|
||||
// });
|
||||
|
||||
// // Get all unique tags
|
||||
// const allTags = new Set<string>();
|
||||
// posts.forEach(post => {
|
||||
// post.data.tags?.forEach(tag => allTags.add(tag));
|
||||
// });
|
||||
|
||||
// // Add tag pages
|
||||
// allTags.forEach(tag => {
|
||||
// urls.push({
|
||||
// loc: `${site}/tags/${encodeURIComponent(tag)}/`,
|
||||
// changefreq: 'weekly',
|
||||
// priority: 0.5
|
||||
// });
|
||||
// });
|
||||
|
||||
// // Generate sitemap XML
|
||||
// const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
|
||||
// <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
// ${urls.map(url => ` <url>
|
||||
// <loc>${url.loc}</loc>${url.changefreq ? `
|
||||
// <changefreq>${url.changefreq}</changefreq>` : ''}${url.priority !== undefined ? `
|
||||
// <priority>${url.priority}</priority>` : ''}
|
||||
// </url>`).join('\n')}
|
||||
// </urlset>`;
|
||||
|
||||
// return new Response(sitemap, {
|
||||
// status: 200,
|
||||
// headers: {
|
||||
// 'Content-Type': 'application/xml',
|
||||
// 'Cache-Control': 'public, max-age=3600' // Cache for 1 hour
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
@ -1,5 +1,6 @@
|
||||
import { graphql } from "../graphql";
|
||||
import execute from "../graphql/execute";
|
||||
import { Article_Translations } from "../graphql/graphql";
|
||||
|
||||
export async function getArticleList() {
|
||||
const ArticleQuery = graphql(`
|
||||
@ -110,12 +111,19 @@ export async function getArticleTranslationsBySlug(slug: string) {
|
||||
return { ...result.data.article_translations[0] };
|
||||
}
|
||||
|
||||
// export async function incArticleTranslationViews() {
|
||||
// const IncArticleTranslationViewsQuery = graphql(`
|
||||
// mutation Update_article_translations_item($id: ID!) {
|
||||
// update_article_translations_item(id: $id, data: { views: ${article.views + 1} }) {
|
||||
// views
|
||||
// }
|
||||
// }
|
||||
// `)
|
||||
// }
|
||||
export async function incArticleTranslationViews({
|
||||
id,
|
||||
views: currentViews,
|
||||
}: Pick<Article_Translations, "id" | "views">) {
|
||||
const IncArticleTranslationViewsQuery = graphql(`
|
||||
mutation Update_article_translations_item($id: ID!, $views: Int!) {
|
||||
update_article_translations_item(id: $id, data: { views: $views }) {
|
||||
views
|
||||
}
|
||||
}
|
||||
`);
|
||||
|
||||
const result = await execute(IncArticleTranslationViewsQuery, { id, views: currentViews + 1 });
|
||||
|
||||
return result.data?.update_article_translations_item?.views;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user