diff --git a/.qwen/settings.json b/.qwen/settings.json new file mode 100644 index 00000000..08fad9b2 --- /dev/null +++ b/.qwen/settings.json @@ -0,0 +1,13 @@ +{ + "mcpServers": { + "playwright-mcp": { + "command": "npx", + "args": [ + "-y", + "playwright-mcp@latest" + ], + "timeout": 60000 + } + }, + "$version": 3 +} \ No newline at end of file diff --git a/.qwen/settings.json.orig b/.qwen/settings.json.orig new file mode 100644 index 00000000..63d02981 --- /dev/null +++ b/.qwen/settings.json.orig @@ -0,0 +1,9 @@ +{ + "mcpServers": { + "playwright-mcp": { + "command": "npx", + "args": ["-y", "playwright-mcp@latest"], + "timeout": 60000 + } + } +} diff --git a/biome.json b/biome.json new file mode 100644 index 00000000..95a1463b --- /dev/null +++ b/biome.json @@ -0,0 +1,49 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.4.10/schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": false, + "experimentalScannerIgnores": [ + "node_modules", + ".next", + "out", + "public" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100 + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "correctness": { + "noUnusedVariables": "warn", + "noUnusedImports": "warn" + }, + "suspicious": { + "noExplicitAny": "warn" + }, + "style": { + "noNonNullAssertion": "warn" + }, + "complexity": { + "noForEach": "off" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "single", + "trailingCommas": "all", + "semicolons": "always" + } + } +} diff --git a/bun.lock b/bun.lock index 6c87f21a..09ab344c 100644 --- a/bun.lock +++ b/bun.lock @@ -111,10 +111,11 @@ "@types/react-dom": "^19", "@vitest/ui": "^4.0.18", "eslint": "^9", - "eslint-config-next": "15.1.6", + "eslint-config-next": "15.5.12", "jsdom": "^28.0.0", "msw": "^2.12.9", "parcel": "^2.6.2", + "playwright-mcp": "^0.0.19", "postcss": "^8.5.1", "postcss-preset-mantine": "^1.17.0", "postcss-simple-vars": "^7.0.1", @@ -246,6 +247,8 @@ "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], + "@hono/node-server": ["@hono/node-server@1.19.13", "", { "peerDependencies": { "hono": "^4" } }, "sha512-TsQLe4i2gvoTtrHje625ngThGBySOgSK3Xo2XRYOdqGN1teR8+I7vchQC46uLJi8OF62YTYA3AhSpumtkhsaKQ=="], + "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], @@ -360,6 +363,8 @@ "@mischnic/json-sourcemap": ["@mischnic/json-sourcemap@0.1.1", "", { "dependencies": { "@lezer/common": "^1.0.0", "@lezer/lr": "^1.0.0", "json5": "^2.2.1" } }, "sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w=="], + "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.29.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="], + "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw=="], "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw=="], @@ -378,7 +383,7 @@ "@next/env": ["@next/env@15.5.14", "", {}, "sha512-aXeirLYuASxEgi4X4WhfXsShCFxWDfNn/8ZeC5YXAS2BB4A8FJi1kwwGL6nvMVboE7fZCzmJPNdMvVHc8JpaiA=="], - "@next/eslint-plugin-next": ["@next/eslint-plugin-next@15.1.6", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-+slMxhTgILUntZDGNgsKEYHUvpn72WP1YTlkmEhS51vnVd7S9jEEy0n9YAMcI21vUG4akTw9voWH02lrClt/yw=="], + "@next/eslint-plugin-next": ["@next/eslint-plugin-next@15.5.12", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-+ZRSDFTv4aC96aMb5E41rMjysx8ApkryevnvEYZvPZO52KvkqP5rNExLUXJFr9P4s0f3oqNQR6vopCZsPWKDcQ=="], "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@15.5.14", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Y9K6SPzobnZvrRDPO2s0grgzC+Egf0CqfbdvYmQVaztV890zicw8Z8+4Vqw8oPck8r1TjUHxVh8299Cg4TrxXg=="], @@ -600,6 +605,8 @@ "@popperjs/core": ["@popperjs/core@2.11.8", "", {}, "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="], + "@posthog/core": ["@posthog/core@1.25.1", "", {}, "sha512-76enEGwLVtcCTbfAr1wJ6zi4tYzVkGsqJx+H9JiX0K8/VxuKdbOtVShsOJhTD9uvFfTeW3DX+PSCelcqWrRRkw=="], + "@prisma/client": ["@prisma/client@6.3.1", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-ARAJaPs+eBkemdky/XU3cvGRl+mIPHCN2lCXsl5Vlb0E2gV+R6IN7aCI8CisRGszEZondwIsW9Iz8EJkTdykyA=="], "@prisma/debug": ["@prisma/debug@6.3.1", "", {}, "sha512-RrEBkd+HLZx+ydfmYT0jUj7wjLiS95wfTOSQ+8FQbvb6vHh5AeKfEPt/XUQ5+Buljj8hltEfOslEW57/wQIVeA=="], @@ -662,6 +669,8 @@ "@sinclair/typebox": ["@sinclair/typebox@0.34.49", "", {}, "sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A=="], + "@skorotkiewicz/snowflake-id": ["@skorotkiewicz/snowflake-id@1.0.1", "", {}, "sha512-leZkiZoBgg6zpVfg+cMkehr/bdKXGa6pOoX0rNc1C2jVdGTWa87+/BBgIy8C4uVtI404cuOMBu2IzIXI1BE3TQ=="], + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], "@standard-schema/utils": ["@standard-schema/utils@0.3.0", "", {}, "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g=="], @@ -926,6 +935,8 @@ "@vitest/utils": ["@vitest/utils@4.1.2", "", { "dependencies": { "@vitest/pretty-format": "4.1.2", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ=="], + "accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="], + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], @@ -938,6 +949,8 @@ "ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], + "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + "animate.css": ["animate.css@4.1.1", "", {}, "sha512-+mRmCTv6SbCmtYJCN4faJMNFVNN5EuCTTprDTAo7YzIGji2KADmakjVA3+8mVDkZ2Bf09vayB35lSQIex2+QaQ=="], "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -994,6 +1007,8 @@ "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="], + "body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="], + "brace-expansion": ["brace-expansion@1.1.13", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -1008,6 +1023,8 @@ "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], + "bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="], + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -1054,6 +1071,10 @@ "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + "content-disposition": ["content-disposition@1.1.0", "", {}, "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="], + + "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], "cookie": ["cookie@1.1.1", "", {}, "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ=="], @@ -1062,6 +1083,8 @@ "core-js": ["core-js@3.49.0", "", {}, "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg=="], + "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], + "cosmiconfig": ["cosmiconfig@7.1.0", "", { "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" } }, "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA=="], "crelt": ["crelt@1.0.6", "", {}, "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="], @@ -1132,6 +1155,8 @@ "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + "depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="], + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], @@ -1154,6 +1179,8 @@ "ecdsa-sig-formatter": ["ecdsa-sig-formatter@1.0.11", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ=="], + "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], + "electron-to-chromium": ["electron-to-chromium@1.5.331", "", {}, "sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q=="], "elysia": ["elysia@1.4.28", "", { "dependencies": { "cookie": "^1.1.1", "exact-mirror": "^0.2.7", "fast-decode-uri-component": "^1.0.1", "memoirist": "^0.4.0" }, "peerDependencies": { "@sinclair/typebox": ">= 0.34.0 < 1", "@types/bun": ">= 1.2.0", "file-type": ">= 20.0.0", "openapi-types": ">= 12.0.0", "typescript": ">= 5.0.0" }, "optionalPeers": ["@types/bun", "typescript"] }, "sha512-Vrx8sBnvq8squS/3yNBzR1jBXI+SgmnmvwawPjNuEHndUe5l1jV2Gp6JJ4ulDkEB8On6bWmmuyPpA+bq4t+WYg=="], @@ -1168,6 +1195,8 @@ "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], @@ -1196,11 +1225,13 @@ "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + "escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="], + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], "eslint": ["eslint@9.39.4", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.5", "@eslint/js": "9.39.4", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ=="], - "eslint-config-next": ["eslint-config-next@15.1.6", "", { "dependencies": { "@next/eslint-plugin-next": "15.1.6", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-Wd1uy6y7nBbXUSg9QAuQ+xYEKli5CgUhLjz1QHW11jLDis5vK5XB3PemL6jEmy7HrdhaRFDz+GTZ/3FoH+EUjg=="], + "eslint-config-next": ["eslint-config-next@15.5.12", "", { "dependencies": { "@next/eslint-plugin-next": "15.5.12", "@rushstack/eslint-patch": "^1.10.3", "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^5.0.0" }, "peerDependencies": { "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-ktW3XLfd+ztEltY5scJNjxjHwtKWk6vU2iwzZqSN09UsbBmMeE/cVlJ1yESg6Yx5LW7p/Z8WzUAgYXGLEmGIpg=="], "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.10", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.16.1", "resolve": "^2.0.0-next.6" } }, "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ=="], @@ -1232,8 +1263,14 @@ "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], + "etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="], + "eventemitter3": ["eventemitter3@5.0.4", "", {}, "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw=="], + "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], + + "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], + "exact-mirror": ["exact-mirror@0.2.7", "", { "peerDependencies": { "@sinclair/typebox": "^0.34.15" }, "optionalPeers": ["@sinclair/typebox"] }, "sha512-+MeEmDcLA4o/vjK2zujgk+1VTxPR4hdp23qLqkWfStbECtAq9gmsvQa3LW6z/0GXZyHJobrCnmy1cdeE7BjsYg=="], "exif-js": ["exif-js@2.3.0", "", {}, "sha512-1Og9pAzG2FZRVlaavH8bB8BTeHcjMdJhKmeQITkX+uLRCD0xPtKAdZ2clZmQdJ56p9adXtJ8+jwrGp/4505lYg=="], @@ -1242,6 +1279,10 @@ "expect-type": ["expect-type@1.3.0", "", {}, "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA=="], + "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], + + "express-rate-limit": ["express-rate-limit@8.3.2", "", { "dependencies": { "ip-address": "10.1.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg=="], + "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], "fast-decode-uri-component": ["fast-decode-uri-component@1.0.1", "", {}, "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg=="], @@ -1254,6 +1295,8 @@ "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], + "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], @@ -1272,6 +1315,8 @@ "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + "finalhandler": ["finalhandler@2.1.1", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="], + "find-root": ["find-root@1.1.0", "", {}, "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="], "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="], @@ -1286,8 +1331,12 @@ "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], + "forwarded": ["forwarded@0.2.0", "", {}, "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="], + "framer-motion": ["framer-motion@12.38.0", "", { "dependencies": { "motion-dom": "^12.38.0", "motion-utils": "^12.36.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g=="], + "fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="], + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], @@ -1324,6 +1373,8 @@ "graphql": ["graphql@16.13.2", "", {}, "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig=="], + "happy-dom": ["happy-dom@17.6.3", "", { "dependencies": { "webidl-conversions": "^7.0.0", "whatwg-mimetype": "^3.0.0" } }, "sha512-UVIHeVhxmxedbWPCfgS55Jg2rDfwf2BCKeylcPSqazLz5w3Kri7Q4xdBJubsr/+VUzFLh0VjIvh13RaDA2/Xug=="], + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], @@ -1342,14 +1393,20 @@ "hoist-non-react-statics": ["hoist-non-react-statics@3.3.2", "", { "dependencies": { "react-is": "^16.7.0" } }, "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="], + "hono": ["hono@4.12.12", "", {}, "sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q=="], + "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], "html-encoding-sniffer": ["html-encoding-sniffer@6.0.0", "", { "dependencies": { "@exodus/bytes": "^1.6.0" } }, "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg=="], + "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], + "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "iconv-lite": ["iconv-lite@0.7.2", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="], + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], @@ -1362,10 +1419,16 @@ "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], "internmap": ["internmap@2.0.3", "", {}, "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="], + "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="], + + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], + "iron-session": ["iron-session@8.0.4", "", { "dependencies": { "cookie": "^0.7.2", "iron-webcrypto": "^1.2.1", "uncrypto": "^0.1.3" } }, "sha512-9ivNnaKOd08osD0lJ3i6If23GFS2LsxyMU8Gf/uBUEgm8/8CC1hrrCHFDpMo3IFbpBgwoo/eairRsaD3c5itxA=="], "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], @@ -1412,6 +1475,8 @@ "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], + "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], @@ -1454,6 +1519,8 @@ "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + "json-schema-typed": ["json-schema-typed@8.0.2", "", {}, "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA=="], + "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="], "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], @@ -1546,8 +1613,12 @@ "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], + "media-typer": ["media-typer@1.1.0", "", {}, "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="], + "memoirist": ["memoirist@0.4.0", "", {}, "sha512-zxTgA0mSYELa66DimuNQDvyLq36AwDlTuVRbnQtB+VuTcKWm5Qc4z3WkSpgsFWHNhexqkIooqpv4hdcqrX5Nmg=="], + "merge-descriptors": ["merge-descriptors@2.0.0", "", {}, "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="], + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], @@ -1586,6 +1657,8 @@ "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], + "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], + "next": ["next@15.5.14", "", { "dependencies": { "@next/env": "15.5.14", "@swc/helpers": "0.5.15", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "15.5.14", "@next/swc-darwin-x64": "15.5.14", "@next/swc-linux-arm64-gnu": "15.5.14", "@next/swc-linux-arm64-musl": "15.5.14", "@next/swc-linux-x64-gnu": "15.5.14", "@next/swc-linux-x64-musl": "15.5.14", "@next/swc-win32-arm64-msvc": "15.5.14", "@next/swc-win32-x64-msvc": "15.5.14", "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-M6S+4JyRjmKic2Ssm7jHUPkE6YUJ6lv4507jprsSZLulubz0ihO2E+S4zmQK3JZ2ov81JrugukKU4Tz0ivgqqQ=="], "next-view-transitions": ["next-view-transitions@0.3.5", "", { "peerDependencies": { "next": ">=14.0.0", "react": ">=18.2.0 || ^19.0.0", "react-dom": ">=18.2.0 || ^19.0.0" } }, "sha512-yP8OPNydLmKpmE94hLurLGEzPsUy1uyl9iSv8oxaC2JwhSXTD86SVwk1NMMQT7Ado4kMENDJ7fNBIXHy3GU/Lg=="], @@ -1624,6 +1697,8 @@ "obug": ["obug@2.1.1", "", {}, "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ=="], + "on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="], + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], "openapi-types": ["openapi-types@12.1.3", "", {}, "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="], @@ -1650,6 +1725,8 @@ "parse5": ["parse5@8.0.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA=="], + "parseurl": ["parseurl@1.3.3", "", {}, "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="], + "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], @@ -1668,10 +1745,14 @@ "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + "pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="], + "playwright": ["playwright@1.59.1", "", { "dependencies": { "playwright-core": "1.59.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw=="], "playwright-core": ["playwright-core@1.59.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg=="], + "playwright-mcp": ["playwright-mcp@0.0.19", "", { "dependencies": { "@modelcontextprotocol/sdk": "^1.25.1", "@skorotkiewicz/snowflake-id": "^1.0.1", "happy-dom": "^17.4.4", "lodash": "^4.17.21", "playwright": "^1.51.0", "posthog-node": "^5.11.1", "zod": "^3.24.2" }, "bin": { "playwright-mcp": "dist/server.js" } }, "sha512-KzqO66bShWvXQU7pGrb/NkQ3pQKRAxOK5H+tHVUCBv/0X+2fcV7AJrsgr97BOAo5dv+/7ZrNK6o7aMkMJ/MMmA=="], + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], @@ -1690,6 +1771,8 @@ "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + "posthog-node": ["posthog-node@5.29.1", "", { "dependencies": { "@posthog/core": "1.25.1" }, "peerDependencies": { "rxjs": "^7.0.0" }, "optionalPeers": ["rxjs"] }, "sha512-XA1OGrE8SAmO3JkfWjeVg7XxEN/6M6ZXzYmBJKl3uXv/xxk7ru0oeoqi/rcWJ6z5+nFP9wUFVoS37//qaPxwFg=="], + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], "primeicons": ["primeicons@7.0.0", "", {}, "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw=="], @@ -1736,6 +1819,8 @@ "prosemirror-view": ["prosemirror-view@1.41.8", "", { "dependencies": { "prosemirror-model": "^1.20.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.1.0" } }, "sha512-TnKDdohEatgyZNGCDWIdccOHXhYloJwbwU+phw/a23KBvJIR9lWQWW7WHHK3vBdOLDNuF7TaX98GObUZOWkOnA=="], + "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], + "proxy-compare": ["proxy-compare@3.0.1", "", {}, "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q=="], "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], @@ -1744,10 +1829,16 @@ "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], + "qs": ["qs@6.15.1", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg=="], + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], "ramda": ["ramda@0.27.2", "", {}, "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA=="], + "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], + + "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], + "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], @@ -1820,6 +1911,8 @@ "rope-sequence": ["rope-sequence@1.3.4", "", {}, "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ=="], + "router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="], + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], @@ -1830,18 +1923,26 @@ "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], + + "serve-static": ["serve-static@2.2.1", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="], + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="], + "setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="], + "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], @@ -1940,6 +2041,8 @@ "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + "toidentifier": ["toidentifier@1.0.1", "", {}, "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="], + "token-types": ["token-types@6.1.2", "", { "dependencies": { "@borewit/text-codec": "^0.2.1", "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww=="], "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], @@ -1958,6 +2061,8 @@ "type-fest": ["type-fest@5.5.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g=="], + "type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="], + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], @@ -1980,6 +2085,8 @@ "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + "unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="], + "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], "until-async": ["until-async@3.0.2", "", {}, "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw=="], @@ -2010,6 +2117,8 @@ "valtio": ["valtio@2.3.1", "", { "dependencies": { "proxy-compare": "^3.0.1" }, "peerDependencies": { "@types/react": ">=18.0.0", "react": ">=18.0.0" }, "optionalPeers": ["@types/react", "react"] }, "sha512-ZsOaOEn0U9IJ96cAj3CZ3GjwpN3EJdjsi1PT4PREuB+Pcqfsczu16isT5DT1UrmHbk4PtLjk8kwNEHuR2CX56w=="], + "vary": ["vary@1.1.2", "", {}, "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="], + "victory-vendor": ["victory-vendor@37.3.6", "", { "dependencies": { "@types/d3-array": "^3.0.3", "@types/d3-ease": "^3.0.0", "@types/d3-interpolate": "^3.0.1", "@types/d3-scale": "^4.0.2", "@types/d3-shape": "^3.1.0", "@types/d3-time": "^3.0.0", "@types/d3-timer": "^3.0.0", "d3-array": "^3.1.6", "d3-ease": "^3.0.1", "d3-interpolate": "^3.0.1", "d3-scale": "^4.0.2", "d3-shape": "^3.1.0", "d3-time": "^3.0.0", "d3-timer": "^3.0.1" } }, "sha512-SbPDPdDBYp+5MJHhBCAyI7wKM3d5ivekigc2Dk2s7pgbZ9wIgIBYGVw4zGHBml/qTFbexrofXW6Gu4noGxrOwQ=="], "vite": ["vite@8.0.3", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.8", "rolldown": "1.0.0-rc.12", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", "esbuild": "^0.27.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ=="], @@ -2072,6 +2181,8 @@ "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + "zod-to-json-schema": ["zod-to-json-schema@3.25.2", "", { "peerDependencies": { "zod": "^3.25.28 || ^4" } }, "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="], + "@cubejs-client/core/uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], "@elysiajs/cookie/cookie": ["cookie@0.5.0", "", {}, "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="], @@ -2084,6 +2195,8 @@ "@mantine/core/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + "@modelcontextprotocol/sdk/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "@parcel/core/dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], "@parcel/packager-js/globals": ["globals@13.24.0", "", { "dependencies": { "type-fest": "^0.20.2" } }, "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ=="], @@ -2102,6 +2215,8 @@ "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], + "ajv-formats/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "babel-plugin-macros/resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -2120,10 +2235,16 @@ "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "express/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], "form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "happy-dom/webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], + + "happy-dom/whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], + "iron-session/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], "lmdb/node-addon-api": ["node-addon-api@6.1.0", "", {}, "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA=="], @@ -2146,10 +2267,14 @@ "postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "router/path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="], + "string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], + "@modelcontextprotocol/sdk/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "@parcel/packager-js/globals/type-fest": ["type-fest@0.20.2", "", {}, "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="], "@scalar/themes/@scalar/types/@scalar/openapi-types": ["@scalar/openapi-types@0.2.0", "", { "dependencies": { "zod": "^3.23.8" } }, "sha512-waiKk12cRCqyUCWTOX0K1WEVX46+hVUK+zRPzAahDJ7G0TApvbNkuy5wx7aoUyEk++HHde0XuQnshXnt8jsddA=="], @@ -2158,6 +2283,8 @@ "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], + "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "cross-fetch/node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], "form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], diff --git a/package.json b/package.json index 0d116269..1b5c51e0 100644 --- a/package.json +++ b/package.json @@ -125,6 +125,7 @@ "jsdom": "^28.0.0", "msw": "^2.12.9", "parcel": "^2.6.2", + "playwright-mcp": "^0.0.19", "postcss": "^8.5.1", "postcss-preset-mantine": "^1.17.0", "postcss-simple-vars": "^7.0.1", diff --git a/prisma/_seeder_list/core/seed_app_menu.ts b/prisma/_seeder_list/core/seed_app_menu.ts new file mode 100644 index 00000000..98a57e1e --- /dev/null +++ b/prisma/_seeder_list/core/seed_app_menu.ts @@ -0,0 +1,57 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const appMenuJson = loadJsonData("core/app-menu.json"); +const appMenuChildJson = loadJsonData("core/app-menu-child.json"); + +export async function seedAppMenu() { + console.log("🔄 Seeding AppMenu..."); + + for (const item of appMenuJson) { + await prisma.appMenu.upsert({ + where: { id: item.id }, + update: { + name: item.name, + link: item.link, + isActive: item.isActive, + }, + create: { + id: item.id, + name: item.name, + link: item.link, + isActive: item.isActive, + }, + }); + + console.log(`✅ AppMenu seeded: ${item.name}`); + } + + console.log("🎉 AppMenu seed selesai"); +} + +export async function seedAppMenuChild() { + console.log("🔄 Seeding AppMenuChild..."); + + for (const item of appMenuChildJson) { + await prisma.appMenuChild.upsert({ + where: { id: item.id }, + update: { + name: item.name, + link: item.link, + isActive: item.isActive, + appMenuId: item.appMenuId, + }, + create: { + id: item.id, + name: item.name, + link: item.link, + isActive: item.isActive, + appMenuId: item.appMenuId, + }, + }); + + console.log(`✅ AppMenuChild seeded: ${item.name}`); + } + + console.log("🎉 AppMenuChild seed selesai"); +} diff --git a/prisma/_seeder_list/core/seed_core.ts b/prisma/_seeder_list/core/seed_core.ts new file mode 100644 index 00000000..4838c28b --- /dev/null +++ b/prisma/_seeder_list/core/seed_core.ts @@ -0,0 +1,69 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const layananJson = loadJsonData("core/layanan.json"); +const potensiJson = loadJsonData("core/potensi.json"); +const landingPageLayananJson = loadJsonData("core/landingpage-layanan.json"); + +export async function seedLayananCore() { + console.log("🔄 Seeding Layanan..."); + + for (const item of layananJson) { + await prisma.layanan.upsert({ + where: { id: item.id }, + update: { + name: item.name, + }, + create: { + id: item.id, + name: item.name, + }, + }); + + console.log(`✅ Layanan seeded: ${item.name}`); + } + + console.log("🎉 Layanan seed selesai"); +} + +export async function seedPotensiCore() { + console.log("🔄 Seeding Potensi..."); + + for (const item of potensiJson) { + await prisma.potensi.upsert({ + where: { id: item.id }, + update: { + name: item.name, + }, + create: { + id: item.id, + name: item.name, + }, + }); + + console.log(`✅ Potensi seeded: ${item.name}`); + } + + console.log("🎉 Potensi seed selesai"); +} + +export async function seedLandingPageLayanan() { + console.log("🔄 Seeding LandingPage_Layanan..."); + + for (const item of landingPageLayananJson) { + await prisma.landingPage_Layanan.upsert({ + where: { id: item.id }, + update: { + deksripsi: item.deksripsi, + }, + create: { + id: item.id, + deksripsi: item.deksripsi, + }, + }); + + console.log(`✅ LandingPage_Layanan seeded: ${item.id}`); + } + + console.log("🎉 LandingPage_Layanan seed selesai"); +} diff --git a/prisma/_seeder_list/desa/berita/seed_berita.ts b/prisma/_seeder_list/desa/berita/seed_berita.ts index 53b9d41b..5186ff74 100644 --- a/prisma/_seeder_list/desa/berita/seed_berita.ts +++ b/prisma/_seeder_list/desa/berita/seed_berita.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import kategoriBerita from "../../../data/desa/berita/kategori-berita.json"; -import beritaJson from "../../../data/desa/berita/berita.json"; +import { loadJsonData } from "../../../load-json"; + +const kategoriBerita = loadJsonData("desa/berita/kategori-berita.json"); +const beritaJson = loadJsonData("desa/berita/berita.json"); export async function seedBerita() { // ================== SUBMENU BERITA ======================== diff --git a/prisma/_seeder_list/desa/gallery/foto/seed_foto.ts b/prisma/_seeder_list/desa/gallery/foto/seed_foto.ts index 6abf33c2..88faa8fe 100644 --- a/prisma/_seeder_list/desa/gallery/foto/seed_foto.ts +++ b/prisma/_seeder_list/desa/gallery/foto/seed_foto.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import foto from "../../../../data/desa/gallery/foto/foto.json"; +import { loadJsonData } from "../../../../load-json"; + +const foto = loadJsonData("desa/gallery/foto/foto.json"); export async function seedFoto() { console.log("🔄 Seeding Foto..."); diff --git a/prisma/_seeder_list/desa/gallery/video/seed_video.ts b/prisma/_seeder_list/desa/gallery/video/seed_video.ts index 42d97860..27bd1a11 100644 --- a/prisma/_seeder_list/desa/gallery/video/seed_video.ts +++ b/prisma/_seeder_list/desa/gallery/video/seed_video.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import galleryVideo from "../../../../data/desa/gallery/video/video.json"; +import { loadJsonData } from "../../../../load-json"; + +const galleryVideo = loadJsonData("desa/gallery/video/video.json"); export async function seedVideo() { console.log("🔄 Seeding Gallery Video..."); diff --git a/prisma/_seeder_list/desa/layanan/seed_layanan.ts b/prisma/_seeder_list/desa/layanan/seed_layanan.ts index a242458c..1dff7d4f 100644 --- a/prisma/_seeder_list/desa/layanan/seed_layanan.ts +++ b/prisma/_seeder_list/desa/layanan/seed_layanan.ts @@ -1,8 +1,10 @@ import prisma from "@/lib/prisma"; -import pelayananSuratKeterangan from "../../../data/desa/layanan/pelayananSuratKeterangan.json"; -import pelayananTelunjukSaktiDesa from "../../../data/desa/layanan/pelayananTelunjukSaktiDesa.json"; -import pelayananPerizinanBerusaha from "../../../data/desa/layanan/pelayananPerizinanBerusaha.json"; -import pelayananPendudukNonPermanen from "../../../data/desa/layanan/pelayananPendudukNonPermanen.json"; +import { loadJsonData } from "../../../load-json"; + +const pelayananSuratKeterangan = loadJsonData("desa/layanan/pelayananSuratKeterangan.json"); +const pelayananTelunjukSaktiDesa = loadJsonData("desa/layanan/pelayananTelunjukSaktiDesa.json"); +const pelayananPerizinanBerusaha = loadJsonData("desa/layanan/pelayananPerizinanBerusaha.json"); +const pelayananPendudukNonPermanen = loadJsonData("desa/layanan/pelayananPendudukNonPermanen.json"); export async function seedLayanan() { console.log("🔄 Seeding Pelayanan Surat Keterangan..."); diff --git a/prisma/_seeder_list/desa/musik-desa/seed_musik_desa.ts b/prisma/_seeder_list/desa/musik-desa/seed_musik_desa.ts new file mode 100644 index 00000000..c745f425 --- /dev/null +++ b/prisma/_seeder_list/desa/musik-desa/seed_musik_desa.ts @@ -0,0 +1,57 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../../load-json"; + +const musikJson = loadJsonData("desa/musik-desa/musik-desa.json"); + +export async function seedMusikDesa() { + console.log("Seeding Musik Desa..."); + + for (const item of musikJson) { + let audioFileId: string | null = null; + let coverImageId: string | null = null; + + if (item.audioFileName) { + const audio = await prisma.fileStorage.findUnique({ + where: { name: item.audioFileName }, + select: { id: true }, + }); + if (audio) audioFileId = audio.id; + } + + if (item.coverImageName) { + const cover = await prisma.fileStorage.findUnique({ + where: { name: item.coverImageName }, + select: { id: true }, + }); + if (cover) coverImageId = cover.id; + } + + await prisma.musikDesa.upsert({ + where: { id: item.id }, + update: { + judul: item.judul, + artis: item.artis, + deskripsi: item.deskripsi, + durasi: item.durasi, + audioFileId, + coverImageId, + genre: item.genre, + tahunRilis: item.tahunRilis, + }, + create: { + id: item.id, + judul: item.judul, + artis: item.artis, + deskripsi: item.deskripsi, + durasi: item.durasi, + audioFileId, + coverImageId, + genre: item.genre, + tahunRilis: item.tahunRilis, + }, + }); + console.log(` Musik: ${item.judul} - ${item.artis}`); + } + + console.log("Musik Desa seed selesai"); +} diff --git a/prisma/_seeder_list/desa/penghargaan/penghargaan.ts b/prisma/_seeder_list/desa/penghargaan/penghargaan.ts index b696ae75..57362a62 100644 --- a/prisma/_seeder_list/desa/penghargaan/penghargaan.ts +++ b/prisma/_seeder_list/desa/penghargaan/penghargaan.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import penghargaan from "../../../data/desa/penghargaan/penghargaan.json" +import { loadJsonData } from "../../../load-json"; + +const penghargaan = loadJsonData("desa/penghargaan/penghargaan.json"); export async function seedPenghargaan() { console.log("🔄 Seeding Penghargaan..."); diff --git a/prisma/_seeder_list/desa/pengumuman/seed_pengumuman.ts b/prisma/_seeder_list/desa/pengumuman/seed_pengumuman.ts index 184fc804..e217fa82 100644 --- a/prisma/_seeder_list/desa/pengumuman/seed_pengumuman.ts +++ b/prisma/_seeder_list/desa/pengumuman/seed_pengumuman.ts @@ -1,7 +1,9 @@ import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../../load-json"; import { safeSeedUnique } from "../../../safeseedUnique"; -import kategoriPengumuman from "../../../data/desa/pengumuman/kategori-pengumuman.json"; -import pengumuman from "../../../data/desa/pengumuman/pengumuman.json"; + +const kategoriPengumuman = loadJsonData("desa/pengumuman/kategori-pengumuman.json"); +const pengumuman = loadJsonData("desa/pengumuman/pengumuman.json"); export async function seedPengumuman() { console.log("🔄 Seeding Kategori Pengumuman..."); diff --git a/prisma/_seeder_list/desa/potensi/seed_potensi.ts b/prisma/_seeder_list/desa/potensi/seed_potensi.ts index 7e1ad408..b988af08 100644 --- a/prisma/_seeder_list/desa/potensi/seed_potensi.ts +++ b/prisma/_seeder_list/desa/potensi/seed_potensi.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import kategoriPotensi from "../../../data/desa/potensi/kategori-potensi.json"; -import potensiDesa from "../../../data/desa/potensi/potensi-desa.json"; +import { loadJsonData } from "../../../load-json"; + +const kategoriPotensi = loadJsonData("desa/potensi/kategori-potensi.json"); +const potensiDesa = loadJsonData("desa/potensi/potensi-desa.json"); export async function seedPotensi() { console.log("🔄Seeding Kategori Potensi Desa ..."); diff --git a/prisma/_seeder_list/desa/profile-desa/seed_profile_desa.ts b/prisma/_seeder_list/desa/profile-desa/seed_profile_desa.ts index 68af0dca..2e7b0912 100644 --- a/prisma/_seeder_list/desa/profile-desa/seed_profile_desa.ts +++ b/prisma/_seeder_list/desa/profile-desa/seed_profile_desa.ts @@ -1,10 +1,12 @@ import prisma from "@/lib/prisma"; -import lambangDesa from "../../../data/desa/profile/lambang_desa.json"; -import maskotDesa from "../../../data/desa/profile/maskot_desa.json"; -import profilePerbekel from "../../../data/desa/profile/profil_perbekel.json"; -import profileDesaImage from "../../../data/desa/profile/profileDesaImage.json"; -import sejarahDesa from "../../../data/desa/profile/sejarah_desa.json"; -import visiMisiDesa from "../../../data/desa/profile/visi_misi_desa.json"; +import { loadJsonData } from "../../../load-json"; + +const lambangDesa = loadJsonData("desa/profile/lambang_desa.json"); +const maskotDesa = loadJsonData("desa/profile/maskot_desa.json"); +const profilePerbekel = loadJsonData("desa/profile/profil_perbekel.json"); +const profileDesaImage = loadJsonData("desa/profile/profileDesaImage.json"); +const sejarahDesa = loadJsonData("desa/profile/sejarah_desa.json"); +const visiMisiDesa = loadJsonData("desa/profile/visi_misi_desa.json"); export async function seedProfileDesa() { // =========== SEJARAH DESA =========== diff --git a/prisma/_seeder_list/desa/profile-desa/seed_profile_perbekel.ts b/prisma/_seeder_list/desa/profile-desa/seed_profile_perbekel.ts index 1507fe32..f8064bbd 100644 --- a/prisma/_seeder_list/desa/profile-desa/seed_profile_perbekel.ts +++ b/prisma/_seeder_list/desa/profile-desa/seed_profile_perbekel.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import perbekelDariMasaKeMasa from "../../../data/desa/profile/profile-perbekel-lalu.json"; +import { loadJsonData } from "../../../load-json"; + +const perbekelDariMasaKeMasa = loadJsonData("desa/profile/profile-perbekel-lalu.json"); export async function seedProfilePerbekel() { console.log("🔄 Seeding Perbekel Dari Masa Ke Masa..."); diff --git a/prisma/_seeder_list/ekonomi/seed_apbdes.ts b/prisma/_seeder_list/ekonomi/seed_apbdes.ts new file mode 100644 index 00000000..0d79a077 --- /dev/null +++ b/prisma/_seeder_list/ekonomi/seed_apbdes.ts @@ -0,0 +1,45 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const apbdesJson = loadJsonData("ekonomi/apbdes/apbdes.json"); + +export async function seedAPBDes() { + console.log("Seeding APBDes..."); + + for (const item of apbdesJson) { + let imageId: string | null = null; + let fileId: string | null = null; + + if (item.imageName) { + const image = await prisma.fileStorage.findUnique({ + where: { name: item.imageName }, + select: { id: true }, + }); + if (image) imageId = image.id; + } + + await prisma.aPBDes.upsert({ + where: { id: item.id }, + update: { + tahun: item.tahun, + name: item.name, + deskripsi: item.deskripsi, + jumlah: item.jumlah, + imageId, + fileId, + }, + create: { + id: item.id, + tahun: item.tahun, + name: item.name, + deskripsi: item.deskripsi, + jumlah: item.jumlah, + imageId, + fileId, + }, + }); + console.log(` APBDes: ${item.name}`); + } + + console.log("APBDes seed selesai"); +} diff --git a/prisma/_seeder_list/ekonomi/seed_apbdes_item.ts b/prisma/_seeder_list/ekonomi/seed_apbdes_item.ts new file mode 100644 index 00000000..03cb3106 --- /dev/null +++ b/prisma/_seeder_list/ekonomi/seed_apbdes_item.ts @@ -0,0 +1,63 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const itemsJson = loadJsonData("ekonomi/apbdes/apbdes-items.json"); +const realisasiJson = loadJsonData("ekonomi/apbdes/realisasi-items.json"); + +export async function seedAPBDesItem() { + console.log("Seeding APBDes Items..."); + + // Seed items first (sorted by level to ensure parents exist) + const sortedItems = [...itemsJson].sort((a, b) => a.level - b.level); + + for (const item of sortedItems) { + await prisma.aPBDesItem.upsert({ + where: { id: item.id }, + update: { + kode: item.kode, + uraian: item.uraian, + anggaran: item.anggaran, + tipe: item.tipe, + level: item.level, + parentId: item.parentId, + apbdesId: item.apbdesId, + }, + create: { + id: item.id, + kode: item.kode, + uraian: item.uraian, + anggaran: item.anggaran, + tipe: item.tipe, + level: item.level, + parentId: item.parentId, + apbdesId: item.apbdesId, + }, + }); + console.log(` APBDes Item: ${item.kode} - ${item.uraian}`); + } + + console.log("Seeding Realisasi Items..."); + for (const item of realisasiJson) { + await prisma.realisasiItem.upsert({ + where: { id: item.id }, + update: { + kode: item.kode, + apbdesItemId: item.apbdesItemId, + jumlah: item.jumlah, + tanggal: new Date(item.tanggal), + keterangan: item.keterangan, + }, + create: { + id: item.id, + kode: item.kode, + apbdesItemId: item.apbdesItemId, + jumlah: item.jumlah, + tanggal: new Date(item.tanggal), + keterangan: item.keterangan, + }, + }); + console.log(` Realisasi: ${item.kode} - Rp ${item.jumlah.toLocaleString("id-ID")}`); + } + + console.log("APBDes Item & Realisasi seed selesai"); +} diff --git a/prisma/_seeder_list/ekonomi/seed_demografi_pekerjaan.ts b/prisma/_seeder_list/ekonomi/seed_demografi_pekerjaan.ts index 41d4dc07..0c9af960 100644 --- a/prisma/_seeder_list/ekonomi/seed_demografi_pekerjaan.ts +++ b/prisma/_seeder_list/ekonomi/seed_demografi_pekerjaan.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import demografiPekerjaan from "../../data/ekonomi/demografi-pekerjaan/demografi-pekerjaan.json"; +import { loadJsonData } from "../../load-json"; + +const demografiPekerjaan = loadJsonData("ekonomi/demografi-pekerjaan/demografi-pekerjaan.json"); export async function seedDemografiPekerjaan() { console.log("🔄 Seeding Demografi Pekerjaan..."); diff --git a/prisma/_seeder_list/ekonomi/seed_jumlah_penduduk_miskin.ts b/prisma/_seeder_list/ekonomi/seed_jumlah_penduduk_miskin.ts index 48374742..9cda0fc8 100644 --- a/prisma/_seeder_list/ekonomi/seed_jumlah_penduduk_miskin.ts +++ b/prisma/_seeder_list/ekonomi/seed_jumlah_penduduk_miskin.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import jumlahPendudukMiskin from "../../data/ekonomi/jumlah-penduduk-miskin/jumlah-penduduk-miskin.json"; +import { loadJsonData } from "../../load-json"; + +const jumlahPendudukMiskin = loadJsonData("ekonomi/jumlah-penduduk-miskin/jumlah-penduduk-miskin.json"); export async function seedJumlahPendudukMiskin() { console.log("🔄 Seeding Jumlah Penduduk Miskin..."); diff --git a/prisma/_seeder_list/ekonomi/seed_jumlah_pengangguran.ts b/prisma/_seeder_list/ekonomi/seed_jumlah_pengangguran.ts index b1f2cb03..aff1b5cd 100644 --- a/prisma/_seeder_list/ekonomi/seed_jumlah_pengangguran.ts +++ b/prisma/_seeder_list/ekonomi/seed_jumlah_pengangguran.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import jumlahPengangguran from "../../data/ekonomi/jumlah-pengangguran/detail-data-pengangguran.json"; +import { loadJsonData } from "../../load-json"; + +const jumlahPengangguran = loadJsonData("ekonomi/jumlah-pengangguran/detail-data-pengangguran.json"); export async function seedJumlahPengangguran() { for (const d of jumlahPengangguran) { diff --git a/prisma/_seeder_list/ekonomi/seed_lowongan_kerja_lokal.ts b/prisma/_seeder_list/ekonomi/seed_lowongan_kerja_lokal.ts index 95494b24..bff218c1 100644 --- a/prisma/_seeder_list/ekonomi/seed_lowongan_kerja_lokal.ts +++ b/prisma/_seeder_list/ekonomi/seed_lowongan_kerja_lokal.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import lowonganKerjaLokal from "../../data/ekonomi/lowongan-kerja-lokal/lowongan-kerja-lokal.json"; +import { loadJsonData } from "../../load-json"; + +const lowonganKerjaLokal = loadJsonData("ekonomi/lowongan-kerja-lokal/lowongan-kerja-lokal.json"); export async function seedLowonganKerjaLokal() { console.log("🔄 Seeding Lowongan Kerja Lokal..."); diff --git a/prisma/_seeder_list/ekonomi/seed_pasar_desa.ts b/prisma/_seeder_list/ekonomi/seed_pasar_desa.ts index f8ad4105..b1754cf1 100644 --- a/prisma/_seeder_list/ekonomi/seed_pasar_desa.ts +++ b/prisma/_seeder_list/ekonomi/seed_pasar_desa.ts @@ -1,7 +1,9 @@ import prisma from "@/lib/prisma"; -import kategoriProduk from "../../data/ekonomi/pasar-desa/kategori-produk.json"; -import pasarDesa from "../../data/ekonomi/pasar-desa/pasar-desa.json"; -import kategoriToPasar from "../../data/ekonomi/pasar-desa/kategori-to-pasar.json"; +import { loadJsonData } from "../../load-json"; + +const kategoriProduk = loadJsonData("ekonomi/pasar-desa/kategori-produk.json"); +const pasarDesa = loadJsonData("ekonomi/pasar-desa/pasar-desa.json"); +const kategoriToPasar = loadJsonData("ekonomi/pasar-desa/kategori-to-pasar.json"); export async function seedPasarDesa() { console.log("🔄 Seeding Kategori Produk..."); diff --git a/prisma/_seeder_list/ekonomi/seed_pendapatan_asli.ts b/prisma/_seeder_list/ekonomi/seed_pendapatan_asli.ts index 93a30a5e..bfe639f0 100644 --- a/prisma/_seeder_list/ekonomi/seed_pendapatan_asli.ts +++ b/prisma/_seeder_list/ekonomi/seed_pendapatan_asli.ts @@ -1,8 +1,10 @@ import prisma from "@/lib/prisma"; -import apbdes from "../../data/ekonomi/pendapatan-asli-desa/apbDesa.json"; -import pendapatan from "../../data/ekonomi/pendapatan-asli-desa/pendapatanDesa.json"; -import belanja from "../../data/ekonomi/pendapatan-asli-desa/belanjaDesa.json"; -import pembiayaan from "../../data/ekonomi/pendapatan-asli-desa/pembiayaanDesa.json"; +import { loadJsonData } from "../../load-json"; + +const apbdes = loadJsonData("ekonomi/pendapatan-asli-desa/apbDesa.json"); +const pendapatan = loadJsonData("ekonomi/pendapatan-asli-desa/pendapatanDesa.json"); +const belanja = loadJsonData("ekonomi/pendapatan-asli-desa/belanjaDesa.json"); +const pembiayaan = loadJsonData("ekonomi/pendapatan-asli-desa/pembiayaanDesa.json"); export async function seedPendapatanAsli() { console.log("🔄 Seeding Pendapatan Asli..."); diff --git a/prisma/_seeder_list/ekonomi/seed_penduduk_usia_kerja_yang_menganggur.ts b/prisma/_seeder_list/ekonomi/seed_penduduk_usia_kerja_yang_menganggur.ts index ac64954f..f78cab88 100644 --- a/prisma/_seeder_list/ekonomi/seed_penduduk_usia_kerja_yang_menganggur.ts +++ b/prisma/_seeder_list/ekonomi/seed_penduduk_usia_kerja_yang_menganggur.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import grafikMenganggurBerdasarkanUsia from "../../data/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran-berdasarkan-usia.json"; -import grafikMenganggurBerdasarkanPendidikan from "../../data/ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran-berdasarkan-pendidikan.json"; +import { loadJsonData } from "../../load-json"; + +const grafikMenganggurBerdasarkanUsia = loadJsonData("ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran-berdasarkan-usia.json"); +const grafikMenganggurBerdasarkanPendidikan = loadJsonData("ekonomi/jumlah-penduduk-usia-kerja-yang-menganggur/pengangguran-berdasarkan-pendidikan.json"); export async function seedPendudukUsiaKerjaYangMenganggur() { for (const p of grafikMenganggurBerdasarkanUsia) { diff --git a/prisma/_seeder_list/ekonomi/seed_program_kemiskinan.ts b/prisma/_seeder_list/ekonomi/seed_program_kemiskinan.ts index 748b1f8b..ec17bd3c 100644 --- a/prisma/_seeder_list/ekonomi/seed_program_kemiskinan.ts +++ b/prisma/_seeder_list/ekonomi/seed_program_kemiskinan.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import programKemiskinan from "../../data/ekonomi/program-kemiskinan/program-kemiskinan.json"; -import statistikKemiskinan from "../../data/ekonomi/program-kemiskinan/statistik-kemiskinan.json"; +import { loadJsonData } from "../../load-json"; + +const programKemiskinan = loadJsonData("ekonomi/program-kemiskinan/program-kemiskinan.json"); +const statistikKemiskinan = loadJsonData("ekonomi/program-kemiskinan/statistik-kemiskinan.json"); export async function seedProgramKemiskinan() { for (const s of statistikKemiskinan) { diff --git a/prisma/_seeder_list/ekonomi/seed_sektor_unggulan_desa.ts b/prisma/_seeder_list/ekonomi/seed_sektor_unggulan_desa.ts index 0bfd469e..aa8986ec 100644 --- a/prisma/_seeder_list/ekonomi/seed_sektor_unggulan_desa.ts +++ b/prisma/_seeder_list/ekonomi/seed_sektor_unggulan_desa.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import sektorUnggulanDesa from "../../data/ekonomi/sektor-unggulan/sektor-unggulan.json"; +import { loadJsonData } from "../../load-json"; + +const sektorUnggulanDesa = loadJsonData("ekonomi/sektor-unggulan/sektor-unggulan.json"); export async function seedSektorUnggulanDesa() { console.log("🔄 Seeding Sektor Unggulan Desa..."); diff --git a/prisma/_seeder_list/ekonomi/seed_struktur_bumdes.ts b/prisma/_seeder_list/ekonomi/seed_struktur_bumdes.ts index 47f92ed7..da37dc5b 100644 --- a/prisma/_seeder_list/ekonomi/seed_struktur_bumdes.ts +++ b/prisma/_seeder_list/ekonomi/seed_struktur_bumdes.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import posisiOrganisasiBumDes from "../../data/ekonomi/struktur-organisasi/posisi-organisasi-bumdes.json"; -import pegawai from "../../data/ekonomi/struktur-organisasi/pegawai-bumdes.json"; +import { loadJsonData } from "../../load-json"; + +const posisiOrganisasiBumDes = loadJsonData("ekonomi/struktur-organisasi/posisi-organisasi-bumdes.json"); +const pegawai = loadJsonData("ekonomi/struktur-organisasi/pegawai-bumdes.json"); export async function seedStrukturBumdes() { const flattenedPosisi = posisiOrganisasiBumDes.flat(); diff --git a/prisma/_seeder_list/inovasi/seed_ajukan.ts b/prisma/_seeder_list/inovasi/seed_ajukan.ts index ee690fc0..c35fe44e 100644 --- a/prisma/_seeder_list/inovasi/seed_ajukan.ts +++ b/prisma/_seeder_list/inovasi/seed_ajukan.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import ajukanIde from "../../data/inovasi/ajukan-ide/ajukan-ide.json"; +import { loadJsonData } from "../../load-json"; + +const ajukanIde = loadJsonData("inovasi/ajukan-ide/ajukan-ide.json"); export async function seedAjukan() { console.log("🔄 Seeding Ajukan Ide Inovatif..."); diff --git a/prisma/_seeder_list/inovasi/seed_desa_digital.ts b/prisma/_seeder_list/inovasi/seed_desa_digital.ts index 0c0b2209..688dc8c5 100644 --- a/prisma/_seeder_list/inovasi/seed_desa_digital.ts +++ b/prisma/_seeder_list/inovasi/seed_desa_digital.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import desaDigital from "../../data/inovasi/desa-digital/desa-digital.json"; +import { loadJsonData } from "../../load-json"; + +const desaDigital = loadJsonData("inovasi/desa-digital/desa-digital.json"); export async function seedDesaDigital() { console.log("🔄 Seeding Desa Digital..."); diff --git a/prisma/_seeder_list/inovasi/seed_info_teknologi.ts b/prisma/_seeder_list/inovasi/seed_info_teknologi.ts index 768cde5b..e16b2098 100644 --- a/prisma/_seeder_list/inovasi/seed_info_teknologi.ts +++ b/prisma/_seeder_list/inovasi/seed_info_teknologi.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import infoTeknologi from "../../data/inovasi/info-teknologi/info-teknologi.json"; +import { loadJsonData } from "../../load-json"; + +const infoTeknologi = loadJsonData("inovasi/info-teknologi/info-teknologi.json"); export async function seedInfoTeknologi() { console.log("🔄 Seeding Info Teknologi..."); diff --git a/prisma/_seeder_list/inovasi/seed_kolaborasi_inovasi.ts b/prisma/_seeder_list/inovasi/seed_kolaborasi_inovasi.ts index 7a725478..08598499 100644 --- a/prisma/_seeder_list/inovasi/seed_kolaborasi_inovasi.ts +++ b/prisma/_seeder_list/inovasi/seed_kolaborasi_inovasi.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import kolaborasiInovasi from "../../data/inovasi/kolaborasi-inovasi/kolaborasi-inovasi.json"; -import mitraKolaborasi from "../../data/inovasi/kolaborasi-inovasi/mitra-kolaborasi.json"; +import { loadJsonData } from "../../load-json"; + +const kolaborasiInovasi = loadJsonData("inovasi/kolaborasi-inovasi/kolaborasi-inovasi.json"); +const mitraKolaborasi = loadJsonData("inovasi/kolaborasi-inovasi/mitra-kolaborasi.json"); export async function seedKolaborasiInovasi() { console.log("🔄 Seeding Kolaborasi Inovasi..."); diff --git a/prisma/_seeder_list/inovasi/seed_layanan_online_desa.ts b/prisma/_seeder_list/inovasi/seed_layanan_online_desa.ts index d233ca00..0611466e 100644 --- a/prisma/_seeder_list/inovasi/seed_layanan_online_desa.ts +++ b/prisma/_seeder_list/inovasi/seed_layanan_online_desa.ts @@ -1,8 +1,10 @@ import prisma from "@/lib/prisma"; -import jenisLayanan from "../../data/inovasi/layanan-online-desa/jenis-layanan.json"; -import administrasiOnline from "../../data/inovasi/layanan-online-desa/administrasi-online.json"; -import jenisPengaduan from "../../data/inovasi/layanan-online-desa/jenis-pengaduan.json"; -import pengaduanMasyarakat from "../../data/inovasi/layanan-online-desa/pengaduan-masyarakat.json"; +import { loadJsonData } from "../../load-json"; + +const jenisLayanan = loadJsonData("inovasi/layanan-online-desa/jenis-layanan.json"); +const administrasiOnline = loadJsonData("inovasi/layanan-online-desa/administrasi-online.json"); +const jenisPengaduan = loadJsonData("inovasi/layanan-online-desa/jenis-pengaduan.json"); +const pengaduanMasyarakat = loadJsonData("inovasi/layanan-online-desa/pengaduan-masyarakat.json"); export async function seedLayananOnlineDesa() { console.log("🔄 Seeding Jenis Layanan..."); diff --git a/prisma/_seeder_list/inovasi/seed_program_kreatif_desa.ts b/prisma/_seeder_list/inovasi/seed_program_kreatif_desa.ts index e98584b2..9212b844 100644 --- a/prisma/_seeder_list/inovasi/seed_program_kreatif_desa.ts +++ b/prisma/_seeder_list/inovasi/seed_program_kreatif_desa.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import programKreatif from "../../data/inovasi/program-kreatif-desa/program-kreatif-desa.json"; +import { loadJsonData } from "../../load-json"; + +const programKreatif = loadJsonData("inovasi/program-kreatif-desa/program-kreatif-desa.json"); export async function seedProgramKreatifDesa() { console.log("🔄 Seeding Program Kreatif..."); diff --git a/prisma/_seeder_list/keamanan/seed_keamanan_lingkungan.ts b/prisma/_seeder_list/keamanan/seed_keamanan_lingkungan.ts index 018dcb19..7c9f68e5 100644 --- a/prisma/_seeder_list/keamanan/seed_keamanan_lingkungan.ts +++ b/prisma/_seeder_list/keamanan/seed_keamanan_lingkungan.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import keamananLingkunganJson from "../../data/keamanan/keamanan-lingkungan/keamanan-lingkungan.json"; +import { loadJsonData } from "../../load-json"; + +const keamananLingkunganJson = loadJsonData("keamanan/keamanan-lingkungan/keamanan-lingkungan.json"); export async function seedKeamananLingkungan() { console.log("🔄 Seeding Keamanan Lingkungan..."); diff --git a/prisma/_seeder_list/keamanan/seed_kontak_darurat.ts b/prisma/_seeder_list/keamanan/seed_kontak_darurat.ts index d108c03a..5ff2c56a 100644 --- a/prisma/_seeder_list/keamanan/seed_kontak_darurat.ts +++ b/prisma/_seeder_list/keamanan/seed_kontak_darurat.ts @@ -1,7 +1,9 @@ import prisma from "@/lib/prisma"; -import kontakDaruratKeamanan from "../../data/keamanan/kontak-darurat-keamanan/kontak-darurat-keamanan.json"; -import kontakItem from "../../data/keamanan/kontak-darurat-keamanan/kontakItem.json"; -import kontakDaruratToItem from "../../data/keamanan/kontak-darurat-keamanan/kontakDaruratToItem.json"; +import { loadJsonData } from "../../load-json"; + +const kontakDaruratKeamanan = loadJsonData("keamanan/kontak-darurat-keamanan/kontak-darurat-keamanan.json"); +const kontakItem = loadJsonData("keamanan/kontak-darurat-keamanan/kontakItem.json"); +const kontakDaruratToItem = loadJsonData("keamanan/kontak-darurat-keamanan/kontakDaruratToItem.json"); export async function seedKontakDaruratKeamanan() { console.log("🔄 Seeding Kontak Item..."); diff --git a/prisma/_seeder_list/keamanan/seed_laporan_publik.ts b/prisma/_seeder_list/keamanan/seed_laporan_publik.ts index a5056bb6..f616f2e4 100644 --- a/prisma/_seeder_list/keamanan/seed_laporan_publik.ts +++ b/prisma/_seeder_list/keamanan/seed_laporan_publik.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import laporanPublik from "../../data/keamanan/laporan-publik/laporan-publik.json"; -import penangananLaporan from "../../data/keamanan/laporan-publik/penanganan-laporan.json"; +import { loadJsonData } from "../../load-json"; + +const laporanPublik = loadJsonData("keamanan/laporan-publik/laporan-publik.json"); +const penangananLaporan = loadJsonData("keamanan/laporan-publik/penanganan-laporan.json"); export async function seedLaporanPublik() { console.log("🔄 Seeding Laporan Publik..."); diff --git a/prisma/_seeder_list/keamanan/seed_pencegahan_kriminalitas.ts b/prisma/_seeder_list/keamanan/seed_pencegahan_kriminalitas.ts index 1a11b9a7..aa2a987e 100644 --- a/prisma/_seeder_list/keamanan/seed_pencegahan_kriminalitas.ts +++ b/prisma/_seeder_list/keamanan/seed_pencegahan_kriminalitas.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import pencegahanKriminalitas from "../../data/keamanan/pencegahan-kriminalitas/pencegahan-kriminalitas.json"; +import { loadJsonData } from "../../load-json"; + +const pencegahanKriminalitas = loadJsonData("keamanan/pencegahan-kriminalitas/pencegahan-kriminalitas.json"); export async function seedPencegahanKriminalitas() { console.log("🔄 Seeding Pencegahan Kriminalitas..."); diff --git a/prisma/_seeder_list/keamanan/seed_polsek_terdekat.ts b/prisma/_seeder_list/keamanan/seed_polsek_terdekat.ts index 1e8ff8de..11369d6f 100644 --- a/prisma/_seeder_list/keamanan/seed_polsek_terdekat.ts +++ b/prisma/_seeder_list/keamanan/seed_polsek_terdekat.ts @@ -1,7 +1,9 @@ import prisma from "@/lib/prisma"; -import layananPolsek from "../../data/keamanan/polsek-terdekat/layanan-polsek.json"; -import polsekTerdekat from "../../data/keamanan/polsek-terdekat/polsek-terdekat.json"; -import layananToPolsek from "../../data/keamanan/polsek-terdekat/layanan-to-polsek.json"; +import { loadJsonData } from "../../load-json"; + +const layananPolsek = loadJsonData("keamanan/polsek-terdekat/layanan-polsek.json"); +const polsekTerdekat = loadJsonData("keamanan/polsek-terdekat/polsek-terdekat.json"); +const layananToPolsek = loadJsonData("keamanan/polsek-terdekat/layanan-to-polsek.json"); export async function seedPolsekTerdekat() { console.log("🔄 Seeding Layanan Polsek..."); diff --git a/prisma/_seeder_list/keamanan/seed_tips_keamanan.ts b/prisma/_seeder_list/keamanan/seed_tips_keamanan.ts index 5b5a3abc..fe636fd2 100644 --- a/prisma/_seeder_list/keamanan/seed_tips_keamanan.ts +++ b/prisma/_seeder_list/keamanan/seed_tips_keamanan.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import tipsKeamananJson from "../../data/keamanan/tips-keamanan/tips-keamanan.json"; +import { loadJsonData } from "../../load-json"; + +const tipsKeamananJson = loadJsonData("keamanan/tips-keamanan/tips-keamanan.json"); export async function seedTipsKeamanan() { console.log("🔄 Seeding Tips Keamanan..."); diff --git a/prisma/_seeder_list/kependudukan/seed_data_banjar.ts b/prisma/_seeder_list/kependudukan/seed_data_banjar.ts new file mode 100644 index 00000000..a70931e8 --- /dev/null +++ b/prisma/_seeder_list/kependudukan/seed_data_banjar.ts @@ -0,0 +1,32 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const dataBanjarJson = loadJsonData("kependudukan/data-banjar/data-banjar.json"); + +export async function seedDataBanjar() { + console.log("Seeding Data Banjar..."); + + for (const item of dataBanjarJson) { + await prisma.dataBanjar.upsert({ + where: { id: item.id }, + update: { + nama: item.nama, + penduduk: item.penduduk, + kk: item.kk, + miskin: item.miskin, + tahun: item.tahun, + }, + create: { + id: item.id, + nama: item.nama, + penduduk: item.penduduk, + kk: item.kk, + miskin: item.miskin, + tahun: item.tahun, + }, + }); + console.log(` Banjar: ${item.nama} (${item.penduduk} penduduk)`); + } + + console.log("Data Banjar seed selesai"); +} diff --git a/prisma/_seeder_list/kependudukan/seed_dinamika_penduduk.ts b/prisma/_seeder_list/kependudukan/seed_dinamika_penduduk.ts new file mode 100644 index 00000000..1e494765 --- /dev/null +++ b/prisma/_seeder_list/kependudukan/seed_dinamika_penduduk.ts @@ -0,0 +1,32 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const dinamikaPendudukJson = loadJsonData("kependudukan/dinamika-penduduk/dinamika-penduduk.json"); + +export async function seedDinamikaPenduduk() { + console.log("Seeding Dinamika Penduduk..."); + + for (const item of dinamikaPendudukJson) { + await prisma.dinamikaPenduduk.upsert({ + where: { id: item.id }, + update: { + tahun: item.tahun, + kelahiran: item.kelahiran, + kematian: item.kematian, + masuk: item.masuk, + keluar: item.keluar, + }, + create: { + id: item.id, + tahun: item.tahun, + kelahiran: item.kelahiran, + kematian: item.kematian, + masuk: item.masuk, + keluar: item.keluar, + }, + }); + console.log(` Tahun ${item.tahun}: ${item.kelahiran} kelahiran, ${item.kematian} kematian`); + } + + console.log("Dinamika Penduduk seed selesai"); +} diff --git a/prisma/_seeder_list/kependudukan/seed_distribusi_agama.ts b/prisma/_seeder_list/kependudukan/seed_distribusi_agama.ts new file mode 100644 index 00000000..e578a47d --- /dev/null +++ b/prisma/_seeder_list/kependudukan/seed_distribusi_agama.ts @@ -0,0 +1,28 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const distribusiAgamaJson = loadJsonData("kependudukan/distribusi-agama/distribusi-agama.json"); + +export async function seedDistribusiAgama() { + console.log("Seeding Distribusi Agama..."); + + for (const item of distribusiAgamaJson) { + await prisma.distribusiAgama.upsert({ + where: { id: item.id }, + update: { + agama: item.agama, + jumlah: item.jumlah, + tahun: item.tahun, + }, + create: { + id: item.id, + agama: item.agama, + jumlah: item.jumlah, + tahun: item.tahun, + }, + }); + console.log(` ${item.agama}: ${item.jumlah} penganut`); + } + + console.log("Distribusi Agama seed selesai"); +} diff --git a/prisma/_seeder_list/kependudukan/seed_distribusi_umur.ts b/prisma/_seeder_list/kependudukan/seed_distribusi_umur.ts new file mode 100644 index 00000000..b4a8bcb0 --- /dev/null +++ b/prisma/_seeder_list/kependudukan/seed_distribusi_umur.ts @@ -0,0 +1,28 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const distribusiUmurJson = loadJsonData("kependudukan/distribusi-umur/distribusi-umur.json"); + +export async function seedDistribusiUmur() { + console.log("Seeding Distribusi Umur..."); + + for (const item of distribusiUmurJson) { + await prisma.distribusiUmur.upsert({ + where: { id: item.id }, + update: { + rentangUmur: item.rentangUmur, + jumlah: item.jumlah, + tahun: item.tahun, + }, + create: { + id: item.id, + rentangUmur: item.rentangUmur, + jumlah: item.jumlah, + tahun: item.tahun, + }, + }); + console.log(` Rentang ${item.rentangUmur}: ${item.jumlah} jiwa`); + } + + console.log("Distribusi Umur seed selesai"); +} diff --git a/prisma/_seeder_list/kependudukan/seed_migrasi_penduduk.ts b/prisma/_seeder_list/kependudukan/seed_migrasi_penduduk.ts new file mode 100644 index 00000000..60987695 --- /dev/null +++ b/prisma/_seeder_list/kependudukan/seed_migrasi_penduduk.ts @@ -0,0 +1,34 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const migrasiPendudukJson = loadJsonData("kependudukan/migrasi-penduduk/migrasi-penduduk.json"); + +export async function seedMigrasiPenduduk() { + console.log("Seeding MigrASI PENDUDUK..."); + + for (const item of migrasiPendudukJson) { + await prisma.migrasiPenduduk.upsert({ + where: { id: item.id }, + update: { + nama: item.nama, + jenis: item.jenis, + tanggal: new Date(item.tanggal), + asal: item.asal, + tujuan: item.tujuan, + alasan: item.alasan, + }, + create: { + id: item.id, + nama: item.nama, + jenis: item.jenis, + tanggal: new Date(item.tanggal), + asal: item.asal, + tujuan: item.tujuan, + alasan: item.alasan, + }, + }); + console.log(` ${item.nama}: ${item.jenis} (${item.alasan})`); + } + + console.log("Migrasi Penduduk seed selesai"); +} diff --git a/prisma/_seeder_list/kesehatan/artikel-kesehatan/seed_artikel_kesehatan.ts b/prisma/_seeder_list/kesehatan/artikel-kesehatan/seed_artikel_kesehatan.ts new file mode 100644 index 00000000..9cbe218a --- /dev/null +++ b/prisma/_seeder_list/kesehatan/artikel-kesehatan/seed_artikel_kesehatan.ts @@ -0,0 +1,106 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../../load-json"; + +const artikelJson = loadJsonData("kesehatan/artikel-kesehatan/artikel-kesehatan.json"); +const introJson = loadJsonData("kesehatan/artikel-kesehatan/introduction.json"); +const symptomJson = loadJsonData("kesehatan/artikel-kesehatan/symptom.json"); +const preventionJson = loadJsonData("kesehatan/artikel-kesehatan/prevention.json"); +const firstAidJson = loadJsonData("kesehatan/artikel-kesehatan/first-aid.json"); +const mythVsFactJson = loadJsonData("kesehatan/artikel-kesehatan/myth-vs-fact.json"); +const doctorSignJson = loadJsonData("kesehatan/artikel-kesehatan/doctor-sign.json"); + +export async function seedArtikelKesehatan() { + console.log("Seeding Introduction..."); + for (const item of introJson) { + await prisma.introduction.upsert({ + where: { id: item.id }, + update: { content: item.content }, + create: { id: item.id, content: item.content }, + }); + } + + console.log("Seeding Symptom..."); + for (const item of symptomJson) { + await prisma.symptom.upsert({ + where: { id: item.id }, + update: { title: item.title, content: item.content }, + create: { id: item.id, title: item.title, content: item.content }, + }); + } + + console.log("Seeding Prevention..."); + for (const item of preventionJson) { + await prisma.prevention.upsert({ + where: { id: item.id }, + update: { title: item.title, content: item.content }, + create: { id: item.id, title: item.title, content: item.content }, + }); + } + + console.log("Seeding First Aid..."); + for (const item of firstAidJson) { + await prisma.firstAid.upsert({ + where: { id: item.id }, + update: { title: item.title, content: item.content }, + create: { id: item.id, title: item.title, content: item.content }, + }); + } + + console.log("Seeding Myth vs Fact..."); + for (const item of mythVsFactJson) { + await prisma.mythVsFact.upsert({ + where: { id: item.id }, + update: { + title: item.title, + mitos: item.mitos, + fakta: item.fakta, + }, + create: { + id: item.id, + title: item.title, + mitos: item.mitos, + fakta: item.fakta, + }, + }); + } + + console.log("Seeding Doctor Sign..."); + for (const item of doctorSignJson) { + await prisma.doctorSign.upsert({ + where: { id: item.id }, + update: { content: item.content }, + create: { id: item.id, content: item.content }, + }); + } + + console.log("Seeding Artikel Kesehatan..."); + for (const item of artikelJson) { + await prisma.artikelKesehatan.upsert({ + where: { id: item.id }, + update: { + title: item.title, + content: item.content, + introductionId: item.introductionId, + symptomId: item.symptomId, + preventionId: item.preventionId, + firstAidId: item.firstAidId, + mythVsFactId: item.mythVsFactId, + doctorSignId: item.doctorSignId, + }, + create: { + id: item.id, + title: item.title, + content: item.content, + introductionId: item.introductionId, + symptomId: item.symptomId, + preventionId: item.preventionId, + firstAidId: item.firstAidId, + mythVsFactId: item.mythVsFactId, + doctorSignId: item.doctorSignId, + }, + }); + console.log(` Artikel: ${item.title}`); + } + + console.log("Artikel Kesehatan seed selesai"); +} diff --git a/prisma/_seeder_list/kesehatan/fasilitas-kesehatan/seed_fasilitas_kesehatan.ts b/prisma/_seeder_list/kesehatan/fasilitas-kesehatan/seed_fasilitas_kesehatan.ts new file mode 100644 index 00000000..e63ed89f --- /dev/null +++ b/prisma/_seeder_list/kesehatan/fasilitas-kesehatan/seed_fasilitas_kesehatan.ts @@ -0,0 +1,122 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../../load-json"; + +const faskesJson = loadJsonData("kesehatan/fasilitas-kesehatan/fasilitas-kesehatan.json"); +const infoUmumJson = loadJsonData("kesehatan/fasilitas-kesehatan/informasi-umum.json"); +const layananUnggulanJson = loadJsonData("kesehatan/fasilitas-kesehatan/layanan-unggulan.json"); +const dokterJson = loadJsonData("kesehatan/fasilitas-kesehatan/dokter-tenaga-medis.json"); +const fasilitasPendukungJson = loadJsonData("kesehatan/fasilitas-kesehatan/fasilitas-pendukung.json"); +const prosedurJson = loadJsonData("kesehatan/fasilitas-kesehatan/prosedur-pendaftaran.json"); +const tarifJson = loadJsonData("kesehatan/fasilitas-kesehatan/tarif-layanan.json"); + +export async function seedFasilitasKesehatan() { + console.log("Seeding Informasi Umum..."); + for (const item of infoUmumJson) { + await prisma.informasiUmum.upsert({ + where: { id: item.id }, + update: { + fasilitas: item.fasilitas, + alamat: item.alamat, + jamOperasional: item.jamOperasional, + }, + create: { + id: item.id, + fasilitas: item.fasilitas, + alamat: item.alamat, + jamOperasional: item.jamOperasional, + }, + }); + console.log(` Informasi Umum: ${item.fasilitas}`); + } + + console.log("Seeding Layanan Unggulan..."); + for (const item of layananUnggulanJson) { + await prisma.layananUnggulan.upsert({ + where: { id: item.id }, + update: { content: item.content }, + create: { id: item.id, content: item.content }, + }); + } + + console.log("Seeding Fasilitas Pendukung..."); + for (const item of fasilitasPendukungJson) { + await prisma.fasilitasPendukung.upsert({ + where: { id: item.id }, + update: { content: item.content }, + create: { id: item.id, content: item.content }, + }); + } + + console.log("Seeding Prosedur Pendaftaran..."); + for (const item of prosedurJson) { + await prisma.prosedurPendaftaran.upsert({ + where: { id: item.id }, + update: { content: item.content }, + create: { id: item.id, content: item.content }, + }); + } + + console.log("Seeding Tarif dan Layanan..."); + for (const item of tarifJson) { + await prisma.tarifDanLayanan.upsert({ + where: { id: item.id }, + update: { layanan: item.layanan, tarif: item.tarif }, + create: { id: item.id, layanan: item.layanan, tarif: item.tarif }, + }); + console.log(` Tarif: ${item.layanan}`); + } + + console.log("Seeding Dokter dan Tenaga Medis..."); + for (const item of dokterJson) { + await prisma.dokterdanTenagaMedis.upsert({ + where: { id: item.id }, + update: { + name: item.name, + specialist: item.specialist, + jadwal: item.jadwal, + jadwalLibur: item.jadwalLibur, + jamBukaOperasional: item.jamBukaOperasional, + jamTutupOperasional: item.jamTutupOperasional, + jamBukaLibur: item.jamBukaLibur, + jamTutupLibur: item.jamTutupLibur, + }, + create: { + id: item.id, + name: item.name, + specialist: item.specialist, + jadwal: item.jadwal, + jadwalLibur: item.jadwalLibur, + jamBukaOperasional: item.jamBukaOperasional, + jamTutupOperasional: item.jamTutupOperasional, + jamBukaLibur: item.jamBukaLibur, + jamTutupLibur: item.jamTutupLibur, + }, + }); + console.log(` Dokter: ${item.name}`); + } + + console.log("Seeding Fasilitas Kesehatan..."); + for (const item of faskesJson) { + await prisma.fasilitasKesehatan.upsert({ + where: { id: item.id }, + update: { + name: item.name, + informasiUmumId: item.informasiUmumId, + layananUnggulanId: item.layananUnggulanId, + fasilitasPendukungId: item.fasilitasPendukungId, + prosedurPendaftaranId: item.prosedurPendaftaranId, + }, + create: { + id: item.id, + name: item.name, + informasiUmumId: item.informasiUmumId, + layananUnggulanId: item.layananUnggulanId, + fasilitasPendukungId: item.fasilitasPendukungId, + prosedurPendaftaranId: item.prosedurPendaftaranId, + }, + }); + console.log(` Fasilitas Kesehatan: ${item.name}`); + } + + console.log("Fasilitas Kesehatan seed selesai"); +} diff --git a/prisma/_seeder_list/kesehatan/info-wabah-penyakit/seed_info_wabah_penyakit.ts b/prisma/_seeder_list/kesehatan/info-wabah-penyakit/seed_info_wabah_penyakit.ts index 922bb848..05dfa3fb 100644 --- a/prisma/_seeder_list/kesehatan/info-wabah-penyakit/seed_info_wabah_penyakit.ts +++ b/prisma/_seeder_list/kesehatan/info-wabah-penyakit/seed_info_wabah_penyakit.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import infoWabahPenyakitJson from "../../../data/kesehatan/infowabahpenyakit/infowabahpenyakit.json"; +import { loadJsonData } from "../../../load-json"; + +const infoWabahPenyakitJson = loadJsonData("kesehatan/infowabahpenyakit/infowabahpenyakit.json"); export async function seedInfoWabahPenyakit() { console.log("🔄 Seeding Info Wabah Penyakit..."); diff --git a/prisma/_seeder_list/kesehatan/jadwal-kegiatan/seed_jadwal_kegiatan.ts b/prisma/_seeder_list/kesehatan/jadwal-kegiatan/seed_jadwal_kegiatan.ts new file mode 100644 index 00000000..cab19914 --- /dev/null +++ b/prisma/_seeder_list/kesehatan/jadwal-kegiatan/seed_jadwal_kegiatan.ts @@ -0,0 +1,123 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../../load-json"; + +const jadwalJson = loadJsonData("kesehatan/jadwal-kegiatan/jadwal-kegiatan.json"); +const infoJadwalJson = loadJsonData("kesehatan/jadwal-kegiatan/informasi-jadwal.json"); +const deskJadwalJson = loadJsonData("kesehatan/jadwal-kegiatan/deskripsi-jadwal.json"); +const layananJadwalJson = loadJsonData("kesehatan/jadwal-kegiatan/layanan-jadwal.json"); +const syaratJadwalJson = loadJsonData("kesehatan/jadwal-kegiatan/syarat-ketentuan.json"); +const dokumenJadwalJson = loadJsonData("kesehatan/jadwal-kegiatan/dokumen-jadwal.json"); +const daftarJadwalJson = loadJsonData("kesehatan/jadwal-kegiatan/pendaftaran-jadwal.json"); + +export async function seedJadwalKegiatan() { + console.log("Seeding Informasi Jadwal Kegiatan..."); + for (const item of infoJadwalJson) { + await prisma.informasiJadwalKegiatan.upsert({ + where: { id: item.id }, + update: { + name: item.name, + tanggal: item.tanggal, + waktu: item.waktu, + lokasi: item.lokasi, + }, + create: { + id: item.id, + name: item.name, + tanggal: item.tanggal, + waktu: item.waktu, + lokasi: item.lokasi, + }, + }); + console.log(` Informasi: ${item.name}`); + } + + console.log("Seeding Deskripsi Jadwal Kegiatan..."); + for (const item of deskJadwalJson) { + await prisma.deskripsiJadwalKegiatan.upsert({ + where: { id: item.id }, + update: { deskripsi: item.deskripsi }, + create: { id: item.id, deskripsi: item.deskripsi }, + }); + } + + console.log("Seeding Layanan Jadwal Kegiatan..."); + for (const item of layananJadwalJson) { + await prisma.layananJadwalKegiatan.upsert({ + where: { id: item.id }, + update: { content: item.content }, + create: { id: item.id, content: item.content }, + }); + } + + console.log("Seeding Syarat & Ketentuan Jadwal..."); + for (const item of syaratJadwalJson) { + await prisma.syaratKetentuanJadwalKegiatan.upsert({ + where: { id: item.id }, + update: { content: item.content }, + create: { id: item.id, content: item.content }, + }); + } + + console.log("Seeding Dokumen Jadwal Kegiatan..."); + for (const item of dokumenJadwalJson) { + await prisma.dokumenJadwalKegiatan.upsert({ + where: { id: item.id }, + update: { content: item.content }, + create: { id: item.id, content: item.content }, + }); + } + + console.log("Seeding Pendaftaran Jadwal Kegiatan..."); + for (const item of daftarJadwalJson) { + await prisma.pendaftaranJadwalKegiatan.upsert({ + where: { id: item.id }, + update: { + name: item.name, + tanggal: item.tanggal, + namaOrangtua: item.namaOrtu, + nomor: item.nomor, + alamat: item.alamat, + catatan: item.catatan, + }, + create: { + id: item.id, + name: item.name, + tanggal: item.tanggal, + namaOrangtua: item.namaOrtu, + nomor: item.nomor, + alamat: item.alamat, + catatan: item.catatan, + }, + }); + console.log(` Pendaftaran: ${item.name}`); + } + + console.log("Seeding Jadwal Kegiatan..."); + for (const item of jadwalJson) { + await prisma.jadwalKegiatan.upsert({ + where: { id: item.id }, + update: { + content: item.content, + informasiJadwalKegiatanId: item.informasiJadwalKegiatanId, + deskripsiJadwalKegiatanId: item.deskripsiJadwalKegiatanId, + layananJadwalKegiatanId: item.layananJadwalKegiatanId, + syaratKetentuanJadwalKegiatanId: item.syaratKetentuanJadwalKegiatanId, + dokumenJadwalKegiatanId: item.dokumenJadwalKegiatanId, + pendaftaranJadwalKegiatanId: item.pendaftaranJadwalKegiatanId, + }, + create: { + id: item.id, + content: item.content, + informasiJadwalKegiatanId: item.informasiJadwalKegiatanId, + deskripsiJadwalKegiatanId: item.deskripsiJadwalKegiatanId, + layananJadwalKegiatanId: item.layananJadwalKegiatanId, + syaratKetentuanJadwalKegiatanId: item.syaratKetentuanJadwalKegiatanId, + dokumenJadwalKegiatanId: item.dokumenJadwalKegiatanId, + pendaftaranJadwalKegiatanId: item.pendaftaranJadwalKegiatanId, + }, + }); + console.log(` Jadwal Kegiatan seeded`); + } + + console.log("Jadwal Kegiatan seed selesai"); +} diff --git a/prisma/_seeder_list/kesehatan/kontak-darurat/seed_kontak_darurat.ts b/prisma/_seeder_list/kesehatan/kontak-darurat/seed_kontak_darurat.ts index d42aec3a..b8ac24fc 100644 --- a/prisma/_seeder_list/kesehatan/kontak-darurat/seed_kontak_darurat.ts +++ b/prisma/_seeder_list/kesehatan/kontak-darurat/seed_kontak_darurat.ts @@ -1,6 +1,8 @@ -import kontakDaruratJson from "../../../data/kesehatan/kontak-darurat/kontak-darurat.json"; +import { loadJsonData } from "../../../load-json"; import prisma from "@/lib/prisma"; +const kontakDaruratJson = loadJsonData("kesehatan/kontak-darurat/kontak-darurat.json"); + export async function seedKontakDarurat() { console.log("🔄 Seeding Kontak Darurat..."); diff --git a/prisma/_seeder_list/kesehatan/penanganan-darurat/seed_penanganan_darurat.ts b/prisma/_seeder_list/kesehatan/penanganan-darurat/seed_penanganan_darurat.ts index 788b1dc7..ed448543 100644 --- a/prisma/_seeder_list/kesehatan/penanganan-darurat/seed_penanganan_darurat.ts +++ b/prisma/_seeder_list/kesehatan/penanganan-darurat/seed_penanganan_darurat.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import penangananDaruratJson from "../../../data/kesehatan/penanganan-darurat/penganan-darurat.json"; +import { loadJsonData } from "../../../load-json"; + +const penangananDaruratJson = loadJsonData("kesehatan/penanganan-darurat/penganan-darurat.json"); export async function seedPenangananDarurat() { console.log("🔄 Seeding Penanganan Darurat..."); diff --git a/prisma/_seeder_list/kesehatan/posyandu/seed_posyandu.ts b/prisma/_seeder_list/kesehatan/posyandu/seed_posyandu.ts index fce475ca..67130c76 100644 --- a/prisma/_seeder_list/kesehatan/posyandu/seed_posyandu.ts +++ b/prisma/_seeder_list/kesehatan/posyandu/seed_posyandu.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import posyanduJson from "../../../data/kesehatan/posyandu/posyandu.json"; +import { loadJsonData } from "../../../load-json"; + +const posyanduJson = loadJsonData("kesehatan/posyandu/posyandu.json"); export async function seedPosyandu() { console.log("🔄 Seeding Posyandu..."); diff --git a/prisma/_seeder_list/kesehatan/program-kesehatan/seed_program_kesehatan.ts b/prisma/_seeder_list/kesehatan/program-kesehatan/seed_program_kesehatan.ts index 4c898e44..d24ed58a 100644 --- a/prisma/_seeder_list/kesehatan/program-kesehatan/seed_program_kesehatan.ts +++ b/prisma/_seeder_list/kesehatan/program-kesehatan/seed_program_kesehatan.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import programKesehatanJson from "../../../data/kesehatan/program-kesehatan/program-kesehatan.json"; +import { loadJsonData } from "../../../load-json"; + +const programKesehatanJson = loadJsonData("kesehatan/program-kesehatan/program-kesehatan.json"); export async function seedProgramKesehatan() { for (const p of programKesehatanJson) { diff --git a/prisma/_seeder_list/kesehatan/puskesmas/seed_puskesmas.ts b/prisma/_seeder_list/kesehatan/puskesmas/seed_puskesmas.ts index 2c9a632b..328f7d98 100644 --- a/prisma/_seeder_list/kesehatan/puskesmas/seed_puskesmas.ts +++ b/prisma/_seeder_list/kesehatan/puskesmas/seed_puskesmas.ts @@ -1,7 +1,9 @@ import prisma from "@/lib/prisma"; -import puskesmasJson from "../../../data/kesehatan/puskesmas/puskesmas.json"; -import kontakPuskesmasJson from "../../../data/kesehatan/puskesmas/kontak-puskesmas/kontak.json"; -import jamPuskesmasJson from "../../../data/kesehatan/puskesmas/jam-puskesmas/jam.json"; +import { loadJsonData } from "../../../load-json"; + +const puskesmasJson = loadJsonData("kesehatan/puskesmas/puskesmas.json"); +const kontakPuskesmasJson = loadJsonData("kesehatan/puskesmas/kontak-puskesmas/kontak.json"); +const jamPuskesmasJson = loadJsonData("kesehatan/puskesmas/jam-puskesmas/jam.json"); export async function seedPuskesmas() { console.log("🔄 Seeding Kontak Puskesmas..."); diff --git a/prisma/_seeder_list/kesehatan/seed_grafik_kepuasan.ts b/prisma/_seeder_list/kesehatan/seed_grafik_kepuasan.ts new file mode 100644 index 00000000..61bf4ed0 --- /dev/null +++ b/prisma/_seeder_list/kesehatan/seed_grafik_kepuasan.ts @@ -0,0 +1,32 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const grafikKepuasanJson = loadJsonData("kesehatan/grafik-kepuasan/grafik-kepuasan.json"); + +export async function seedGrafikKepuasan() { + console.log("Seeding Grafik Kepuasan..."); + + for (const item of grafikKepuasanJson) { + await prisma.grafikKepuasan.upsert({ + where: { id: item.id }, + update: { + nama: item.nama, + tanggal: new Date(item.tanggal), + jenisKelamin: item.jenisKelamin, + alamat: item.alamat, + penyakit: item.penyakit, + }, + create: { + id: item.id, + nama: item.nama, + tanggal: new Date(item.tanggal), + jenisKelamin: item.jenisKelamin, + alamat: item.alamat, + penyakit: item.penyakit, + }, + }); + console.log(` Grafik Kepuasan: ${item.nama}`); + } + + console.log("Grafik Kepuasan seed selesai"); +} diff --git a/prisma/_seeder_list/kesehatan/seed_kelahiran_kematian.ts b/prisma/_seeder_list/kesehatan/seed_kelahiran_kematian.ts new file mode 100644 index 00000000..c991c347 --- /dev/null +++ b/prisma/_seeder_list/kesehatan/seed_kelahiran_kematian.ts @@ -0,0 +1,70 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const kelahiranJson = loadJsonData("kesehatan/kelahiran/kelahiran.json"); +const kematianJson = loadJsonData("kesehatan/kematian/kematian.json"); +const dataKematianKelahiranJson = loadJsonData("kesehatan/kematian-kelahiran/data-kematian-kelahiran.json"); + +export async function seedKelahiranKematian() { + console.log("Seeding Kelahiran..."); + for (const item of kelahiranJson) { + await prisma.kelahiran.upsert({ + where: { id: item.id }, + update: { + nama: item.nama, + tanggal: new Date(item.tanggal), + jenisKelamin: item.jenisKelamin, + alamat: item.alamat, + }, + create: { + id: item.id, + nama: item.nama, + tanggal: new Date(item.tanggal), + jenisKelamin: item.jenisKelamin, + alamat: item.alamat, + }, + }); + console.log(` Kelahiran: ${item.nama}`); + } + + console.log("Seeding Kematian..."); + for (const item of kematianJson) { + await prisma.kematian.upsert({ + where: { id: item.id }, + update: { + nama: item.nama, + tanggal: new Date(item.tanggal), + jenisKelamin: item.jenisKelamin, + alamat: item.alamat, + penyebab: item.penyebab, + }, + create: { + id: item.id, + nama: item.nama, + tanggal: new Date(item.tanggal), + jenisKelamin: item.jenisKelamin, + alamat: item.alamat, + penyebab: item.penyebab, + }, + }); + console.log(` Kematian: ${item.nama}`); + } + + console.log("Seeding Data Kematian-Kelahiran..."); + for (const item of dataKematianKelahiranJson) { + await prisma.dataKematian_Kelahiran.upsert({ + where: { id: item.id }, + update: { + kematianId: item.kematianId, + kelahiranId: item.kelahiranId, + }, + create: { + id: item.id, + kematianId: item.kematianId, + kelahiranId: item.kelahiranId, + }, + }); + } + + console.log("Kelahiran & Kematian seed selesai"); +} diff --git a/prisma/_seeder_list/landing-page/desa-anti-korupsi/seed_desa_anti_korupsi.ts b/prisma/_seeder_list/landing-page/desa-anti-korupsi/seed_desa_anti_korupsi.ts index 5a1927fa..d35a4409 100644 --- a/prisma/_seeder_list/landing-page/desa-anti-korupsi/seed_desa_anti_korupsi.ts +++ b/prisma/_seeder_list/landing-page/desa-anti-korupsi/seed_desa_anti_korupsi.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import kategoriDesaAntiKorupsi from "../../../data/landing-page/desa-anti-korupsi/kategoriDesaAntiKorupsi.json" -import desaAntiKorupsi from "../../../data/landing-page/desa-anti-korupsi/desaantiKorpusi.json" +import { loadJsonData } from "../../../load-json"; + +const kategoriDesaAntiKorupsi = loadJsonData("landing-page/desa-anti-korupsi/kategoriDesaAntiKorupsi.json"); +const desaAntiKorupsi = loadJsonData("landing-page/desa-anti-korupsi/desaantiKorpusi.json"); export async function seedDesaAntiKorupsi() { for (const k of kategoriDesaAntiKorupsi) { diff --git a/prisma/_seeder_list/landing-page/prestasi-desa/seed_prestasi_desa.ts b/prisma/_seeder_list/landing-page/prestasi-desa/seed_prestasi_desa.ts index 18129dfb..d68131a0 100644 --- a/prisma/_seeder_list/landing-page/prestasi-desa/seed_prestasi_desa.ts +++ b/prisma/_seeder_list/landing-page/prestasi-desa/seed_prestasi_desa.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import prestasiDesa from "../../../data/landing-page/prestasi-desa/prestasi-desa.json" -import kategoriPrestasiDesa from "../../../data/landing-page/prestasi-desa/kategori-prestasi.json" +import { loadJsonData } from "../../../load-json"; + +const prestasiDesa = loadJsonData("landing-page/prestasi-desa/prestasi-desa.json"); +const kategoriPrestasiDesa = loadJsonData("landing-page/prestasi-desa/kategori-prestasi.json"); export async function seedPrestasiDesa() { diff --git a/prisma/_seeder_list/landing-page/profil_landing_page/seed_media_sosial.ts b/prisma/_seeder_list/landing-page/profil_landing_page/seed_media_sosial.ts index 7636202a..968f45e0 100644 --- a/prisma/_seeder_list/landing-page/profil_landing_page/seed_media_sosial.ts +++ b/prisma/_seeder_list/landing-page/profil_landing_page/seed_media_sosial.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import mediaSosial from "../../../data/landing-page/profile/mediaSosial.json" +import { loadJsonData } from "../../../load-json"; + +const mediaSosial = loadJsonData("landing-page/profile/mediaSosial.json"); export async function seedMediaSosial() { console.log("🔄 Seeding Media Sosial..."); diff --git a/prisma/_seeder_list/landing-page/profil_landing_page/seed_profile_lp.ts b/prisma/_seeder_list/landing-page/profil_landing_page/seed_profile_lp.ts index a2f5f7a6..44f2c067 100644 --- a/prisma/_seeder_list/landing-page/profil_landing_page/seed_profile_lp.ts +++ b/prisma/_seeder_list/landing-page/profil_landing_page/seed_profile_lp.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import profilePejabatDesa from "../../../data/landing-page/profile/profile.json"; +import { loadJsonData } from "../../../load-json"; + +const profilePejabatDesa = loadJsonData("landing-page/profile/profile.json"); export async function seedProfileLP() { console.log("🔄 Seeding Pejabat Desa..."); diff --git a/prisma/_seeder_list/landing-page/profil_landing_page/seed_program_inovasi.ts b/prisma/_seeder_list/landing-page/profil_landing_page/seed_program_inovasi.ts index 207045b2..ce1450b0 100644 --- a/prisma/_seeder_list/landing-page/profil_landing_page/seed_program_inovasi.ts +++ b/prisma/_seeder_list/landing-page/profil_landing_page/seed_program_inovasi.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import programInovasi from "../../../data/landing-page/profile/programInovasi.json"; +import { loadJsonData } from "../../../load-json"; + +const programInovasi = loadJsonData("landing-page/profile/programInovasi.json"); export async function seedProgramInovasi() { console.log("🔄 Seeding Program Inovasi..."); diff --git a/prisma/_seeder_list/landing-page/sdgs/seed_sdgs.ts b/prisma/_seeder_list/landing-page/sdgs/seed_sdgs.ts index a8aac2a1..4f301e34 100644 --- a/prisma/_seeder_list/landing-page/sdgs/seed_sdgs.ts +++ b/prisma/_seeder_list/landing-page/sdgs/seed_sdgs.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import sdgsDesa from "../../../data/landing-page/sdgs-desa/sdgs-desa.json"; +import { loadJsonData } from "../../../load-json"; + +const sdgsDesa = loadJsonData("landing-page/sdgs-desa/sdgs-desa.json"); export async function seedSDGSDesa() { console.log("🔄 Seeding SDGS Desa..."); diff --git a/prisma/_seeder_list/lingkungan/seed_data_gotong_royong.ts b/prisma/_seeder_list/lingkungan/seed_data_gotong_royong.ts index c317dad6..62d14b28 100644 --- a/prisma/_seeder_list/lingkungan/seed_data_gotong_royong.ts +++ b/prisma/_seeder_list/lingkungan/seed_data_gotong_royong.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import kategoriGotongRoyong from "../../data/lingkungan/gotong-royong/kategori-gotong-royong.json"; -import gotongRoyong from "../../data/lingkungan/gotong-royong/gotong-royong.json"; +import { loadJsonData } from "../../load-json"; + +const kategoriGotongRoyong = loadJsonData("lingkungan/gotong-royong/kategori-gotong-royong.json"); +const gotongRoyong = loadJsonData("lingkungan/gotong-royong/gotong-royong.json"); export async function seedDataGotongRoyong() { console.log("🔄 Seeding Kategori Gotong Royong..."); diff --git a/prisma/_seeder_list/lingkungan/seed_data_lingkungan_desa.ts b/prisma/_seeder_list/lingkungan/seed_data_lingkungan_desa.ts index a182bf86..3d9b1c2d 100644 --- a/prisma/_seeder_list/lingkungan/seed_data_lingkungan_desa.ts +++ b/prisma/_seeder_list/lingkungan/seed_data_lingkungan_desa.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import dataLingkunganDesa from "../../data/lingkungan/data-lingkungan-desa/data-lingkungan-desa.json"; +import { loadJsonData } from "../../load-json"; + +const dataLingkunganDesa = loadJsonData("lingkungan/data-lingkungan-desa/data-lingkungan-desa.json"); export async function seedDataLingkunganDesa() { console.log("🔄 Seeding Data Lingkungan Desa..."); diff --git a/prisma/_seeder_list/lingkungan/seed_edukasi_lingkungan.ts b/prisma/_seeder_list/lingkungan/seed_edukasi_lingkungan.ts index 5d11b061..1c3a5104 100644 --- a/prisma/_seeder_list/lingkungan/seed_edukasi_lingkungan.ts +++ b/prisma/_seeder_list/lingkungan/seed_edukasi_lingkungan.ts @@ -1,7 +1,9 @@ import prisma from "@/lib/prisma"; -import tujuanEdukasiLingkungan from "../../data/lingkungan/edukasi-lingkungan/tujuan-edukasi-lingkungan.json"; -import materiEdukasiLingkungan from "../../data/lingkungan/edukasi-lingkungan/materi-edukasi-yang-diberikan.json"; -import contohEdukasiLingkungan from "../../data/lingkungan/edukasi-lingkungan/contoh-kegiatan-di-desa-darmasaba.json"; +import { loadJsonData } from "../../load-json"; + +const tujuanEdukasiLingkungan = loadJsonData("lingkungan/edukasi-lingkungan/tujuan-edukasi-lingkungan.json"); +const materiEdukasiLingkungan = loadJsonData("lingkungan/edukasi-lingkungan/materi-edukasi-yang-diberikan.json"); +const contohEdukasiLingkungan = loadJsonData("lingkungan/edukasi-lingkungan/contoh-kegiatan-di-desa-darmasaba.json"); export async function seedEdukasiLingkungan() { for (const e of tujuanEdukasiLingkungan) { diff --git a/prisma/_seeder_list/lingkungan/seed_konservasi_adat_bali.ts b/prisma/_seeder_list/lingkungan/seed_konservasi_adat_bali.ts index 5278fbc5..36bb49cd 100644 --- a/prisma/_seeder_list/lingkungan/seed_konservasi_adat_bali.ts +++ b/prisma/_seeder_list/lingkungan/seed_konservasi_adat_bali.ts @@ -1,7 +1,9 @@ import prisma from "@/lib/prisma"; -import filosofiTriHita from "../../data/lingkungan/konservasi-adat-bali/filosofi-tri-hita.json"; -import bentukKonservasiBerdasarkanAdat from "../../data/lingkungan/konservasi-adat-bali/bentuk-konservasi.json"; -import nilaiKonservasiAdat from "../../data/lingkungan/konservasi-adat-bali/nilai-konservasi-adat.json"; +import { loadJsonData } from "../../load-json"; + +const filosofiTriHita = loadJsonData("lingkungan/konservasi-adat-bali/filosofi-tri-hita.json"); +const bentukKonservasiBerdasarkanAdat = loadJsonData("lingkungan/konservasi-adat-bali/bentuk-konservasi.json"); +const nilaiKonservasiAdat = loadJsonData("lingkungan/konservasi-adat-bali/nilai-konservasi-adat.json"); export async function seedKonservasiAdatBali() { for (const f of filosofiTriHita) { diff --git a/prisma/_seeder_list/lingkungan/seed_pengelolaan_sampah.ts b/prisma/_seeder_list/lingkungan/seed_pengelolaan_sampah.ts index 5940c79b..599e951c 100644 --- a/prisma/_seeder_list/lingkungan/seed_pengelolaan_sampah.ts +++ b/prisma/_seeder_list/lingkungan/seed_pengelolaan_sampah.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import pengelolaanSampah from "../../data/lingkungan/pengelolaan-sampah/pengelolaan-sampah.json"; -import keteranganBankSampah from "../../data/lingkungan/pengelolaan-sampah/keterangan-bank-sampah.json"; +import { loadJsonData } from "../../load-json"; + +const pengelolaanSampah = loadJsonData("lingkungan/pengelolaan-sampah/pengelolaan-sampah.json"); +const keteranganBankSampah = loadJsonData("lingkungan/pengelolaan-sampah/keterangan-bank-sampah.json"); export async function seedPengelolaanSampah() { console.log("🔄 Seeding Pengelolaan Sampah..."); diff --git a/prisma/_seeder_list/lingkungan/seed_program_penghijauan.ts b/prisma/_seeder_list/lingkungan/seed_program_penghijauan.ts index 0dbd8bc5..ac64eb43 100644 --- a/prisma/_seeder_list/lingkungan/seed_program_penghijauan.ts +++ b/prisma/_seeder_list/lingkungan/seed_program_penghijauan.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import programPenghijauan from "../../data/lingkungan/program-penghijauan/program-penghijauan.json"; +import { loadJsonData } from "../../load-json"; + +const programPenghijauan = loadJsonData("lingkungan/program-penghijauan/program-penghijauan.json"); export async function seedProgramPenghijauan() { console.log("🔄 Seeding Program Penghijauan..."); diff --git a/prisma/_seeder_list/pendidikan/seed_beasiswa_pendaftar.ts b/prisma/_seeder_list/pendidikan/seed_beasiswa_pendaftar.ts new file mode 100644 index 00000000..039f6290 --- /dev/null +++ b/prisma/_seeder_list/pendidikan/seed_beasiswa_pendaftar.ts @@ -0,0 +1,58 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const beasiswaJson = loadJsonData("pendidikan/beasiswa-pendaftar/beasiswa-pendaftar.json"); + +export async function seedBeasiswaPendaftar() { + console.log("Seeding Beasiswa Pendaftar..."); + + for (const item of beasiswaJson) { + await prisma.beasiswaPendaftar.upsert({ + where: { id: item.id }, + update: { + namaLengkap: item.namaLengkap, + nis: item.nis, + kelas: item.kelas, + jenisKelamin: item.jenisKelamin, + alamatDomisili: item.alamatDomisili, + tempatLahir: item.tempatLahir, + tanggalLahir: new Date(item.tanggalLahir), + namaOrtu: item.namaOrtu, + nik: item.nik, + pekerjaanOrtu: item.pekerjaanOrtu, + penghasilan: item.penghasilan, + noHp: item.noHp, + kewarganegaraan: item.kewarganegaraan, + agama: item.agama, + alamatKTP: item.alamatKTP, + email: item.email, + statusPernikahan: item.statusPernikahan, + ukuranBaju: item.ukuranBaju, + }, + create: { + id: item.id, + namaLengkap: item.namaLengkap, + nis: item.nis, + kelas: item.kelas, + jenisKelamin: item.jenisKelamin, + alamatDomisili: item.alamatDomisili, + tempatLahir: item.tempatLahir, + tanggalLahir: new Date(item.tanggalLahir), + namaOrtu: item.namaOrtu, + nik: item.nik, + pekerjaanOrtu: item.pekerjaanOrtu, + penghasilan: item.penghasilan, + noHp: item.noHp, + kewarganegaraan: item.kewarganegaraan, + agama: item.agama, + alamatKTP: item.alamatKTP, + email: item.email, + statusPernikahan: item.statusPernikahan, + ukuranBaju: item.ukuranBaju, + }, + }); + console.log(` Beasiswa: ${item.namaLengkap} (NIS: ${item.nis})`); + } + + console.log("Beasiswa Pendaftar seed selesai"); +} diff --git a/prisma/_seeder_list/pendidikan/seed_bimbingan_belajar.ts b/prisma/_seeder_list/pendidikan/seed_bimbingan_belajar.ts index e6e927c0..ebbdf68e 100644 --- a/prisma/_seeder_list/pendidikan/seed_bimbingan_belajar.ts +++ b/prisma/_seeder_list/pendidikan/seed_bimbingan_belajar.ts @@ -1,7 +1,9 @@ import prisma from "@/lib/prisma"; -import tujuanBimbinganBelajarDesa from "../../data/pendidikan/bimbingan-belajar-desa/tujuan-bimbingan-belajar-desa.json"; -import lokasiJadwalBimbinganBelajarDesa from "../../data/pendidikan/bimbingan-belajar-desa/lokasi-dan-jadwal.json"; -import fasilitasBimbinganBelajarDesa from "../../data/pendidikan/bimbingan-belajar-desa/fasilitas-yang-disediakan.json"; +import { loadJsonData } from "../../load-json"; + +const tujuanBimbinganBelajarDesa = loadJsonData("pendidikan/bimbingan-belajar-desa/tujuan-bimbingan-belajar-desa.json"); +const lokasiJadwalBimbinganBelajarDesa = loadJsonData("pendidikan/bimbingan-belajar-desa/lokasi-dan-jadwal.json"); +const fasilitasBimbinganBelajarDesa = loadJsonData("pendidikan/bimbingan-belajar-desa/fasilitas-yang-disediakan.json"); export async function seedBimbinganBelajar() { for (const t of tujuanBimbinganBelajarDesa) { diff --git a/prisma/_seeder_list/pendidikan/seed_data_pendidikan.ts b/prisma/_seeder_list/pendidikan/seed_data_pendidikan.ts index 632243f3..9e1f1a56 100644 --- a/prisma/_seeder_list/pendidikan/seed_data_pendidikan.ts +++ b/prisma/_seeder_list/pendidikan/seed_data_pendidikan.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import dataPendidikan from "../../data/pendidikan/data-pendidikan/data-pendidikan.json"; +import { loadJsonData } from "../../load-json"; + +const dataPendidikan = loadJsonData("pendidikan/data-pendidikan/data-pendidikan.json"); export async function seedDataPendidikan() { console.log("🔄 Seeding Data pendidikan..."); diff --git a/prisma/_seeder_list/pendidikan/seed_data_perpustakaan.ts b/prisma/_seeder_list/pendidikan/seed_data_perpustakaan.ts index 5ee80718..cbc57aac 100644 --- a/prisma/_seeder_list/pendidikan/seed_data_perpustakaan.ts +++ b/prisma/_seeder_list/pendidikan/seed_data_perpustakaan.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import dataPerpustakaan from "../../data/pendidikan/perpustakaan-digital/perpustakaan-digital.json"; -import kategoriBuku from "../../data/pendidikan/perpustakaan-digital/kategori-buku.json"; +import { loadJsonData } from "../../load-json"; + +const dataPerpustakaan = loadJsonData("pendidikan/perpustakaan-digital/perpustakaan-digital.json"); +const kategoriBuku = loadJsonData("pendidikan/perpustakaan-digital/kategori-buku.json"); export async function seedDataPerpustakaan() { console.log("🔄 Seeding Kategori Buku..."); diff --git a/prisma/_seeder_list/pendidikan/seed_info_program_pendidikan.ts b/prisma/_seeder_list/pendidikan/seed_info_program_pendidikan.ts index cfa7798c..364d829b 100644 --- a/prisma/_seeder_list/pendidikan/seed_info_program_pendidikan.ts +++ b/prisma/_seeder_list/pendidikan/seed_info_program_pendidikan.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import tujuanProgram from "../../data/pendidikan/program-pendidikan-anak/tujuan-program.json"; -import programUnggulan from "../../data/pendidikan/program-pendidikan-anak/program-unggulan.json"; +import { loadJsonData } from "../../load-json"; + +const tujuanProgram = loadJsonData("pendidikan/program-pendidikan-anak/tujuan-program.json"); +const programUnggulan = loadJsonData("pendidikan/program-pendidikan-anak/program-unggulan.json"); export async function seedInfoProgramPendidikan() { for (const t of tujuanProgram) { diff --git a/prisma/_seeder_list/pendidikan/seed_info_sekolah.ts b/prisma/_seeder_list/pendidikan/seed_info_sekolah.ts index 39ba1154..32e2b34b 100644 --- a/prisma/_seeder_list/pendidikan/seed_info_sekolah.ts +++ b/prisma/_seeder_list/pendidikan/seed_info_sekolah.ts @@ -1,8 +1,10 @@ import prisma from "@/lib/prisma"; -import jenjangPendidikan from "../../data/pendidikan/info-sekolah/jenjang-pendidikan.json"; -import lembagaPendidikan from "../../data/pendidikan/info-sekolah/lembaga.json"; -import siswa from "../../data/pendidikan/info-sekolah/siswa.json"; -import pengajar from "../../data/pendidikan/info-sekolah/pengajar.json"; +import { loadJsonData } from "../../load-json"; + +const jenjangPendidikan = loadJsonData("pendidikan/info-sekolah/jenjang-pendidikan.json"); +const lembagaPendidikan = loadJsonData("pendidikan/info-sekolah/lembaga.json"); +const siswa = loadJsonData("pendidikan/info-sekolah/siswa.json"); +const pengajar = loadJsonData("pendidikan/info-sekolah/pengajar.json"); export async function seedInfoSekolah() { for (const j of jenjangPendidikan) { diff --git a/prisma/_seeder_list/pendidikan/seed_keunggulan_program.ts b/prisma/_seeder_list/pendidikan/seed_keunggulan_program.ts new file mode 100644 index 00000000..5bc79013 --- /dev/null +++ b/prisma/_seeder_list/pendidikan/seed_keunggulan_program.ts @@ -0,0 +1,32 @@ +import prisma from "@/lib/prisma"; +import { readFileSync } from "fs"; +import { join } from "path"; + +const keunggulanJson = JSON.parse( + readFileSync( + join(process.cwd(), "prisma/data/pendidikan/keunggulan-program/keunggulan-program.json"), + "utf-8" + ) +); + +export async function seedKeunggulanProgram() { + console.log("Seeding Keunggulan Program..."); + + for (const item of keunggulanJson) { + await prisma.keunggulanProgram.upsert({ + where: { id: item.id }, + update: { + judul: item.judul, + deskripsi: item.deskripsi, + }, + create: { + id: item.id, + judul: item.judul, + deskripsi: item.deskripsi, + }, + }); + console.log(` Keunggulan: ${item.judul}`); + } + + console.log("Keunggulan Program seed selesai"); +} diff --git a/prisma/_seeder_list/pendidikan/seed_pendidikan_non_formal.ts b/prisma/_seeder_list/pendidikan/seed_pendidikan_non_formal.ts index 151c8dbc..021a47c7 100644 --- a/prisma/_seeder_list/pendidikan/seed_pendidikan_non_formal.ts +++ b/prisma/_seeder_list/pendidikan/seed_pendidikan_non_formal.ts @@ -1,7 +1,9 @@ import prisma from "@/lib/prisma"; -import tujuanProgram from "../../data/pendidikan/pendidikan-non-formal/tujuan-program2.json"; -import tempatKegiatan from "../../data/pendidikan/pendidikan-non-formal/tempat-kegiatan.json"; -import jenisProgramYangDiselenggarakan from "../../data/pendidikan/pendidikan-non-formal/jenis-program-yang-diselenggarakan.json"; +import { loadJsonData } from "../../load-json"; + +const tujuanProgram = loadJsonData("pendidikan/pendidikan-non-formal/tujuan-program2.json"); +const tempatKegiatan = loadJsonData("pendidikan/pendidikan-non-formal/tempat-kegiatan.json"); +const jenisProgramYangDiselenggarakan = loadJsonData("pendidikan/pendidikan-non-formal/jenis-program-yang-diselenggarakan.json"); export async function seedPendidikanNonFormal() { for (const t of tujuanProgram) { diff --git a/prisma/_seeder_list/ppid/daftar-informasi-publik-ppid/seed_daftar_informasi_publik_ppid.ts b/prisma/_seeder_list/ppid/daftar-informasi-publik-ppid/seed_daftar_informasi_publik_ppid.ts index 3bf6b77b..2aef39df 100644 --- a/prisma/_seeder_list/ppid/daftar-informasi-publik-ppid/seed_daftar_informasi_publik_ppid.ts +++ b/prisma/_seeder_list/ppid/daftar-informasi-publik-ppid/seed_daftar_informasi_publik_ppid.ts @@ -1,8 +1,10 @@ import prisma from "@/lib/prisma"; -import daftarInformasiPublik from "../../../data/ppid/daftar-informasi-publik-desa-darmasaba/daftarInformasi.json" -import jenisInformasiDiminta from "../../../data/list-jenisInfromasi.json" -import caraMemperolehInformasi from "../../../data/list-caraMemperolehInformasi.json" -import caraMemperolehSalinanInformasi from "../../../data/list-caraMemperolehSalinanInformasi.json" +import { loadJsonData } from "../../../load-json"; + +const daftarInformasiPublik = loadJsonData("ppid/daftar-informasi-publik-desa-darmasaba/daftarInformasi.json"); +const jenisInformasiDiminta = loadJsonData("list-jenisInfromasi.json"); +const caraMemperolehInformasi = loadJsonData("list-caraMemperolehInformasi.json"); +const caraMemperolehSalinanInformasi = loadJsonData("list-caraMemperolehSalinanInformasi.json"); export async function seedDaftarInformasiPublikPpid() { diff --git a/prisma/_seeder_list/ppid/dasar-hukum-ppid/seed_dasar_hukum_ppid.ts b/prisma/_seeder_list/ppid/dasar-hukum-ppid/seed_dasar_hukum_ppid.ts index 7d14359a..cfef0116 100644 --- a/prisma/_seeder_list/ppid/dasar-hukum-ppid/seed_dasar_hukum_ppid.ts +++ b/prisma/_seeder_list/ppid/dasar-hukum-ppid/seed_dasar_hukum_ppid.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import dasarHukumPPID from "../../../data/ppid/dasar-hukum-ppid/dasarhukumPPID.json" +import { loadJsonData } from "../../../load-json"; + +const dasarHukumPPID = loadJsonData("ppid/dasar-hukum-ppid/dasarhukumPPID.json"); export async function seedDasarHukumPpid() { for (const v of dasarHukumPPID) { diff --git a/prisma/_seeder_list/ppid/ikm/seed_ikm.ts b/prisma/_seeder_list/ppid/ikm/seed_ikm.ts index 905b4f4d..b44346d7 100644 --- a/prisma/_seeder_list/ppid/ikm/seed_ikm.ts +++ b/prisma/_seeder_list/ppid/ikm/seed_ikm.ts @@ -1,7 +1,9 @@ import prisma from "@/lib/prisma"; -import jenisKelamin from "../../../data/ppid/ikm/jenis-kelamin/jenis-kelamin.json"; -import pilihanRatingResponden from "../../../data/ppid/ikm/pilihan-rating-responden/rating-responden.json"; -import umurResponden from "../../../data/ppid/ikm/umur-responden/umur-responden.json"; +import { loadJsonData } from "../../../load-json"; + +const jenisKelamin = loadJsonData("ppid/ikm/jenis-kelamin/jenis-kelamin.json"); +const pilihanRatingResponden = loadJsonData("ppid/ikm/pilihan-rating-responden/rating-responden.json"); +const umurResponden = loadJsonData("ppid/ikm/umur-responden/umur-responden.json"); export async function seedIkmPpid() { for (const j of jenisKelamin) { diff --git a/prisma/_seeder_list/ppid/profil-ppid/seed_profil_ppd.ts b/prisma/_seeder_list/ppid/profil-ppid/seed_profil_ppd.ts index bf666e2d..2d87f920 100644 --- a/prisma/_seeder_list/ppid/profil-ppid/seed_profil_ppd.ts +++ b/prisma/_seeder_list/ppid/profil-ppid/seed_profil_ppd.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import profilPpd from "../../../data/ppid/profile-ppid/profilePPid.json" +import { loadJsonData } from "../../../load-json"; + +const profilPpd = loadJsonData("ppid/profile-ppid/profilePPid.json"); export async function seedProfilPpd() { console.log("🔄 Seeding Profil PPD..."); diff --git a/prisma/_seeder_list/ppid/seed_ppid_extra.ts b/prisma/_seeder_list/ppid/seed_ppid_extra.ts new file mode 100644 index 00000000..5c404a42 --- /dev/null +++ b/prisma/_seeder_list/ppid/seed_ppid_extra.ts @@ -0,0 +1,161 @@ +import prisma from "@/lib/prisma"; +import { loadJsonData } from "../../load-json"; + +const strukturOrganisasiPpidJson = loadJsonData("ppid/struktur-organisasi-ppid/struktur-organisasi-ppid.json"); +const formulirPermohonanKeberatanJson = loadJsonData("ppid/formulir-permohonan-keberatan/formulir-permohonan-keberatan.json"); +const ikmJson = loadJsonData("ppid/ikm/indeks-kepuasan-masyarakat/indeks-kepuasan-masyarakat.json"); +const grafikJenisKelaminJson = loadJsonData("ppid/ikm/grafik-jenis-kelamin/grafik-jenis-kelamin.json"); +const grafikRespondenJson = loadJsonData("ppid/ikm/grafik-responden/grafik-responden.json"); +const grafikUmurJson = loadJsonData("ppid/ikm/grafik-umur/grafik-umur.json"); + +export async function seedStrukturOrganisasiPpid() { + console.log("🔄 Seeding StrukturOrganisasiPPID..."); + + for (const item of strukturOrganisasiPpidJson) { + await prisma.strukturOrganisasiPPID.upsert({ + where: { id: item.id }, + update: { + posisiOrganisasiId: item.posisiOrganisasiId, + pegawaiId: item.pegawaiId, + hubunganOrganisasiId: item.hubunganOrganisasiId, + }, + create: { + id: item.id, + posisiOrganisasiId: item.posisiOrganisasiId, + pegawaiId: item.pegawaiId, + hubunganOrganisasiId: item.hubunganOrganisasiId, + }, + }); + + console.log(`✅ StrukturOrganisasiPPID seeded: ${item.id}`); + } + + console.log("🎉 StrukturOrganisasiPPID seed selesai"); +} + +export async function seedFormulirPermohonanKeberatan() { + console.log("🔄 Seeding FormulirPermohonanKeberatan..."); + + for (const item of formulirPermohonanKeberatanJson) { + await prisma.formulirPermohonanKeberatan.upsert({ + where: { id: item.id }, + update: { + name: item.name, + email: item.email, + notelp: item.notelp, + alasan: item.alasan, + }, + create: { + id: item.id, + name: item.name, + email: item.email, + notelp: item.notelp, + alasan: item.alasan, + }, + }); + + console.log(`✅ FormulirPermohonanKeberatan seeded: ${item.name}`); + } + + console.log("🎉 FormulirPermohonanKeberatan seed selesai"); +} + +export async function seedIndeksKepuasanMasyarakat() { + console.log("🔄 Seeding IndeksKepuasanMasyarakat..."); + + for (const item of ikmJson) { + await prisma.indeksKepuasanMasyarakat.upsert({ + where: { id: item.id }, + update: { + label: item.label, + kepuasan: item.kepuasan, + }, + create: { + id: item.id, + label: item.label, + kepuasan: item.kepuasan, + }, + }); + + console.log(`✅ IndeksKepuasanMasyarakat seeded: ${item.label}`); + } + + console.log("🎉 IndeksKepuasanMasyarakat seed selesai"); +} + +export async function seedGrafikBerdasarkanJenisKelamin() { + console.log("🔄 Seeding GrafikBerdasarkanJenisKelamin..."); + + for (const item of grafikJenisKelaminJson) { + await prisma.grafikBerdasarkanJenisKelamin.upsert({ + where: { id: item.id }, + update: { + perempuan: item.perempuan, + laki: item.laki, + }, + create: { + id: item.id, + perempuan: item.perempuan, + laki: item.laki, + }, + }); + + console.log(`✅ GrafikBerdasarkanJenisKelamin seeded: ${item.id}`); + } + + console.log("🎉 GrafikBerdasarkanJenisKelamin seed selesai"); +} + +export async function seedGrafikBerdasarkanResponden() { + console.log("🔄 Seeding GrafikBerdasarkanResponden..."); + + for (const item of grafikRespondenJson) { + await prisma.grafikBerdasarkanResponden.upsert({ + where: { id: item.id }, + update: { + sangatbaik: item.sangatbaik, + baik: item.baik, + kurangbaik: item.kurangbaik, + tidakbaik: item.tidakbaik, + }, + create: { + id: item.id, + sangatbaik: item.sangatbaik, + baik: item.baik, + kurangbaik: item.kurangbaik, + tidakbaik: item.tidakbaik, + }, + }); + + console.log(`✅ GrafikBerdasarkanResponden seeded: ${item.id}`); + } + + console.log("🎉 GrafikBerdasarkanResponden seed selesai"); +} + +export async function seedGrafikBerdasarkanUmur() { + console.log("🔄 Seeding GrafikBerdasarkanUmur..."); + + for (const item of grafikUmurJson) { + await prisma.grafikBerdasarkanUmur.upsert({ + where: { id: item.id }, + update: { + remaja: item.remaja, + dewasa: item.dewasa, + orangtua: item.orangtua, + lansia: item.lansia, + }, + create: { + id: item.id, + remaja: item.remaja, + dewasa: item.dewasa, + orangtua: item.orangtua, + lansia: item.lansia, + }, + }); + + console.log(`✅ GrafikBerdasarkanUmur seeded: ${item.id}`); + } + + console.log("🎉 GrafikBerdasarkanUmur seed selesai"); +} diff --git a/prisma/_seeder_list/ppid/struktur-ppid/seed_struktur_ppid.ts b/prisma/_seeder_list/ppid/struktur-ppid/seed_struktur_ppid.ts index e2141e91..efc45dd4 100644 --- a/prisma/_seeder_list/ppid/struktur-ppid/seed_struktur_ppid.ts +++ b/prisma/_seeder_list/ppid/struktur-ppid/seed_struktur_ppid.ts @@ -1,6 +1,8 @@ import prisma from "@/lib/prisma"; -import pegawaiPpid from "../../../data/ppid/struktur-ppid/pegawai-PPID.json" -import posisiOrganisasiPPID from "../../../data/ppid/struktur-ppid/posisi-organisasi-PPID.json" +import { loadJsonData } from "../../../load-json"; + +const pegawaiPpid = loadJsonData("ppid/struktur-ppid/pegawai-PPID.json"); +const posisiOrganisasiPPID = loadJsonData("ppid/struktur-ppid/posisi-organisasi-PPID.json"); export async function seedPegawaiPpid() { diff --git a/prisma/_seeder_list/ppid/visi-misi-ppid/seed_visi_misi_ppid.ts b/prisma/_seeder_list/ppid/visi-misi-ppid/seed_visi_misi_ppid.ts index e99087e3..a519181e 100644 --- a/prisma/_seeder_list/ppid/visi-misi-ppid/seed_visi_misi_ppid.ts +++ b/prisma/_seeder_list/ppid/visi-misi-ppid/seed_visi_misi_ppid.ts @@ -1,5 +1,7 @@ import prisma from "@/lib/prisma"; -import visiMisiPPID from "../../../data/ppid/visi-misi-ppid/visimisiPPID.json" +import { loadJsonData } from "../../../load-json"; + +const visiMisiPPID = loadJsonData("ppid/visi-misi-ppid/visimisiPPID.json"); export async function seedVisiMisiPpid() { for (const v of visiMisiPPID) { diff --git a/prisma/data/core/app-menu-child.json b/prisma/data/core/app-menu-child.json new file mode 100644 index 00000000..bd8357e1 --- /dev/null +++ b/prisma/data/core/app-menu-child.json @@ -0,0 +1,44 @@ +[ + { + "id": "menu-child-001", + "name": "Sejarah Desa", + "link": "/profil-desa/sejarah", + "isActive": true, + "appMenuId": "menu-002" + }, + { + "id": "menu-child-002", + "name": "Visi Misi", + "link": "/profil-desa/visi-misi", + "isActive": true, + "appMenuId": "menu-002" + }, + { + "id": "menu-child-003", + "name": "Surat Keterangan", + "link": "/layanan/surat-keterangan", + "isActive": true, + "appMenuId": "menu-003" + }, + { + "id": "menu-child-004", + "name": "Perizinan", + "link": "/layanan/perizinan", + "isActive": true, + "appMenuId": "menu-003" + }, + { + "id": "menu-child-005", + "name": "Berita Desa", + "link": "/informasi/berita", + "isActive": true, + "appMenuId": "menu-004" + }, + { + "id": "menu-child-006", + "name": "Pengumuman", + "link": "/informasi/pengumuman", + "isActive": true, + "appMenuId": "menu-004" + } +] diff --git a/prisma/data/core/app-menu.json b/prisma/data/core/app-menu.json new file mode 100644 index 00000000..d21e7a7a --- /dev/null +++ b/prisma/data/core/app-menu.json @@ -0,0 +1,32 @@ +[ + { + "id": "menu-001", + "name": "Beranda", + "link": "/", + "isActive": true + }, + { + "id": "menu-002", + "name": "Profil Desa", + "link": "/profil-desa", + "isActive": true + }, + { + "id": "menu-003", + "name": "Layanan", + "link": "/layanan", + "isActive": true + }, + { + "id": "menu-004", + "name": "Informasi", + "link": "/informasi", + "isActive": true + }, + { + "id": "menu-005", + "name": "Kontak", + "link": "/kontak", + "isActive": true + } +] diff --git a/prisma/data/core/landingpage-layanan.json b/prisma/data/core/landingpage-layanan.json new file mode 100644 index 00000000..2dc45178 --- /dev/null +++ b/prisma/data/core/landingpage-layanan.json @@ -0,0 +1,6 @@ +[ + { + "id": "lp-layanan-001", + "deksripsi": "Melayani masyarakat Desa Darmasaba dengan sepenuh hati untuk memberikan pelayanan terbaik dalam bidang administrasi, kesehatan, pendidikan, dan keamanan." + } +] diff --git a/prisma/data/core/layanan.json b/prisma/data/core/layanan.json new file mode 100644 index 00000000..a62fd980 --- /dev/null +++ b/prisma/data/core/layanan.json @@ -0,0 +1,22 @@ +[ + { + "id": "layanan-001", + "name": "Administrasi" + }, + { + "id": "layanan-002", + "name": "Kesehatan" + }, + { + "id": "layanan-003", + "name": "Pendidikan" + }, + { + "id": "layanan-004", + "name": "Keamanan" + }, + { + "id": "layanan-005", + "name": "Lingkungan" + } +] diff --git a/prisma/data/core/potensi.json b/prisma/data/core/potensi.json new file mode 100644 index 00000000..90d644bc --- /dev/null +++ b/prisma/data/core/potensi.json @@ -0,0 +1,22 @@ +[ + { + "id": "potensi-001", + "name": "Pertanian" + }, + { + "id": "potensi-002", + "name": "Peternakan" + }, + { + "id": "potensi-003", + "name": "Perikanan" + }, + { + "id": "potensi-004", + "name": "Kerajinan" + }, + { + "id": "potensi-005", + "name": "Pariwisata" + } +] diff --git a/prisma/data/desa/musik-desa/musik-desa.json b/prisma/data/desa/musik-desa/musik-desa.json new file mode 100644 index 00000000..5230ab4f --- /dev/null +++ b/prisma/data/desa/musik-desa/musik-desa.json @@ -0,0 +1,41 @@ +[ + { + "id": "cmk-musik-001", + "judul": "Darmasaba Swara", + "artis": "Gamelan Desa Darmasaba", + "deskripsi": "Lagu tradisional Bali yang dibawakan oleh grup gamelan desa Darmasaba. Lagu ini menceritakan keindahan alam dan kearifan lokal desa.", + "durasi": "04:32", + "audioFileId": null, + "audioFileName": null, + "coverImageId": null, + "coverImageName": "TDQReg1lQ73s39crXW0ra-mobile.webp", + "genre": "Gamelan Tradisional", + "tahunRilis": 2024 + }, + { + "id": "cmk-musik-002", + "judul": "Mekar di Badung", + "artis": "Kadek Wira & Darmasaba Band", + "deskripsi": "Lagu pop Bali modern yang mengangkat tema semangat pemuda desa dalam membangun kampung halaman.", + "durasi": "03:45", + "audioFileId": null, + "audioFileName": null, + "coverImageId": null, + "coverImageName": "EcQIGOF6LW1dIKE53vmba-mobile.webp", + "genre": "Pop Bali", + "tahunRilis": 2025 + }, + { + "id": "cmk-musik-003", + "judul": "Tri Hita Karana", + "artis": "Sekaa Gong Darmasaba", + "deskripsi": "Komposisi gamelan yang terinspirasi dari filosofi Tri Hita Karana - tiga penyebab kebahagiaan dalam kehidupan masyarakat Bali.", + "durasi": "05:18", + "audioFileId": null, + "audioFileName": null, + "coverImageId": null, + "coverImageName": "Gc79mlIlGuoRQuTqskFj--mobile.webp", + "genre": "Gamelan Kontemporer", + "tahunRilis": 2024 + } +] diff --git a/prisma/data/ekonomi/apbdes/apbdes-items.json b/prisma/data/ekonomi/apbdes/apbdes-items.json new file mode 100644 index 00000000..5aa77d12 --- /dev/null +++ b/prisma/data/ekonomi/apbdes/apbdes-items.json @@ -0,0 +1,252 @@ +[ + { + "id": "cmk-apbdes-item-001", + "kode": "4", + "uraian": "Pendapatan Desa", + "anggaran": 1500000000, + "tipe": "pendapatan", + "level": 1, + "parentId": null, + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-002", + "kode": "4.1", + "uraian": "Pendapatan Asli Desa", + "anggaran": 350000000, + "tipe": "pendapatan", + "level": 2, + "parentId": "cmk-apbdes-item-001", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-003", + "kode": "4.1.1", + "uraian": "Hasil Usaha Desa", + "anggaran": 150000000, + "tipe": "pendapatan", + "level": 3, + "parentId": "cmk-apbdes-item-002", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-004", + "kode": "4.1.2", + "uraian": "Hasil Aset Desa", + "anggaran": 100000000, + "tipe": "pendapatan", + "level": 3, + "parentId": "cmk-apbdes-item-002", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-005", + "kode": "4.1.3", + "uraian": "Swa Daya dan Partisipasi", + "anggaran": 100000000, + "tipe": "pendapatan", + "level": 3, + "parentId": "cmk-apbdes-item-002", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-006", + "kode": "4.2", + "uraian": "Dana Desa (APBN)", + "anggaran": 800000000, + "tipe": "pendapatan", + "level": 2, + "parentId": "cmk-apbdes-item-001", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-007", + "kode": "4.3", + "uraian": "Bagi Hasil Pajak dan Retribusi", + "anggaran": 200000000, + "tipe": "pendapatan", + "level": 2, + "parentId": "cmk-apbdes-item-001", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-008", + "kode": "4.4", + "uraian": "Bantuan Keuangan Provinsi/Kabupaten", + "anggaran": 150000000, + "tipe": "pendapatan", + "level": 2, + "parentId": "cmk-apbdes-item-001", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-010", + "kode": "5", + "uraian": "Belanja Desa", + "anggaran": 1500000000, + "tipe": "belanja", + "level": 1, + "parentId": null, + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-011", + "kode": "5.1", + "uraian": "Bidang Penyelenggaraan Pemerintahan Desa", + "anggaran": 400000000, + "tipe": "belanja", + "level": 2, + "parentId": "cmk-apbdes-item-010", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-012", + "kode": "5.1.1", + "uraian": "Penyelenggaraan Kegiatan Pemerintahan Desa", + "anggaran": 250000000, + "tipe": "belanja", + "level": 3, + "parentId": "cmk-apbdes-item-011", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-013", + "kode": "5.1.2", + "uraian": "Penghasilan Tetap Perbekel dan Perangkat Desa", + "anggaran": 150000000, + "tipe": "belanja", + "level": 3, + "parentId": "cmk-apbdes-item-011", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-014", + "kode": "5.2", + "uraian": "Bidang Pelaksanaan Pembangunan Desa", + "anggaran": 500000000, + "tipe": "belanja", + "level": 2, + "parentId": "cmk-apbdes-item-010", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-015", + "kode": "5.2.1", + "uraian": "Pembangunan Infrastruktur Desa", + "anggaran": 300000000, + "tipe": "belanja", + "level": 3, + "parentId": "cmk-apbdes-item-014", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-016", + "kode": "5.2.2", + "uraian": "Pembangunan Gedung dan Bangunan", + "anggaran": 200000000, + "tipe": "belanja", + "level": 3, + "parentId": "cmk-apbdes-item-014", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-017", + "kode": "5.3", + "uraian": "Bidang Pembinaan Kemasyarakatan", + "anggaran": 300000000, + "tipe": "belanja", + "level": 2, + "parentId": "cmk-apbdes-item-010", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-018", + "kode": "5.3.1", + "uraian": "Kegiatan Kesehatan Masyarakat", + "anggaran": 100000000, + "tipe": "belanja", + "level": 3, + "parentId": "cmk-apbdes-item-017", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-019", + "kode": "5.3.2", + "uraian": "Kegiatan Pendidikan dan Kebudayaan", + "anggaran": 120000000, + "tipe": "belanja", + "level": 3, + "parentId": "cmk-apbdes-item-017", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-020", + "kode": "5.3.3", + "uraian": "Kegiatan Keagamaan dan Adat", + "anggaran": 80000000, + "tipe": "belanja", + "level": 3, + "parentId": "cmk-apbdes-item-017", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-021", + "kode": "5.4", + "uraian": "Bidang Pemberdayaan Masyarakat", + "anggaran": 300000000, + "tipe": "belanja", + "level": 2, + "parentId": "cmk-apbdes-item-010", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-022", + "kode": "5.4.1", + "uraian": "Pelatihan dan Pengembangan UMKM", + "anggaran": 150000000, + "tipe": "belanja", + "level": 3, + "parentId": "cmk-apbdes-item-021", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-023", + "kode": "5.4.2", + "uraian": "Program Ketahanan Pangan", + "anggaran": 150000000, + "tipe": "belanja", + "level": 3, + "parentId": "cmk-apbdes-item-021", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-030", + "kode": "6", + "uraian": "Pembiayaan Desa", + "anggaran": 350000000, + "tipe": "pembiayaan", + "level": 1, + "parentId": null, + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-031", + "kode": "6.1", + "uraian": "SILPA Tahun Sebelumnya", + "anggaran": 200000000, + "tipe": "pembiayaan", + "level": 2, + "parentId": "cmk-apbdes-item-030", + "apbdesId": "cmk-apbdes-001" + }, + { + "id": "cmk-apbdes-item-032", + "kode": "6.2", + "uraian": "Pencairan Dana Cadangan", + "anggaran": 150000000, + "tipe": "pembiayaan", + "level": 2, + "parentId": "cmk-apbdes-item-030", + "apbdesId": "cmk-apbdes-001" + } +] diff --git a/prisma/data/ekonomi/apbdes/apbdes.json b/prisma/data/ekonomi/apbdes/apbdes.json new file mode 100644 index 00000000..6cf599d0 --- /dev/null +++ b/prisma/data/ekonomi/apbdes/apbdes.json @@ -0,0 +1,12 @@ +[ + { + "id": "cmk-apbdes-001", + "tahun": 2025, + "name": "APBDes Desa Darmasaba Tahun 2025", + "deskripsi": "Anggaran Pendapatan dan Belanja Desa Darmasaba Tahun Anggaran 2025", + "jumlah": "1.850.000.000", + "imageId": null, + "imageName": "TDQReg1lQ73s39crXW0ra-mobile.webp", + "fileId": null + } +] diff --git a/prisma/data/ekonomi/apbdes/realisasi-items.json b/prisma/data/ekonomi/apbdes/realisasi-items.json new file mode 100644 index 00000000..4641f8b7 --- /dev/null +++ b/prisma/data/ekonomi/apbdes/realisasi-items.json @@ -0,0 +1,58 @@ +[ + { + "id": "cmk-realisasi-001", + "kode": "R-4.1.1-01", + "apbdesItemId": "cmk-apbdes-item-003", + "jumlah": 45000000, + "tanggal": "2025-02-15", + "keterangan": "Realisasi Q1 hasil usaha BUMDes" + }, + { + "id": "cmk-realisasi-002", + "kode": "R-4.1.1-02", + "apbdesItemId": "cmk-apbdes-item-003", + "jumlah": 52000000, + "tanggal": "2025-05-10", + "keterangan": "Realisasi Q2 hasil usaha BUMDes" + }, + { + "id": "cmk-realisasi-003", + "kode": "R-4.1.2-01", + "apbdesItemId": "cmk-apbdes-item-004", + "jumlah": 35000000, + "tanggal": "2025-03-01", + "keterangan": "Sewa tanah kas desa" + }, + { + "id": "cmk-realisasi-004", + "kode": "R-5.1.1-01", + "apbdesItemId": "cmk-apbdes-item-012", + "jumlah": 120000000, + "tanggal": "2025-01-31", + "keterangan": "Operasional pemerintahan semester 1" + }, + { + "id": "cmk-realisasi-005", + "kode": "R-5.2.1-01", + "apbdesItemId": "cmk-apbdes-item-015", + "jumlah": 150000000, + "tanggal": "2025-04-20", + "keterangan": "Pembangunan jalan desa tahap 1" + }, + { + "id": "cmk-realisasi-006", + "kode": "R-5.3.1-01", + "apbdesItemId": "cmk-apbdes-item-018", + "jumlah": 40000000, + "tanggal": "2025-03-15", + "keterangan": "Program posyandu dan imunisasi" + }, + { + "id": "cmk-realisasi-007", + "kode": "R-5.4.1-01", + "apbdesItemId": "cmk-apbdes-item-022", + "jumlah": 75000000, + "tanggal": "2025-05-01", + "keterangan": "Pelatihan UMKM warga" + } +] diff --git a/prisma/data/kependudukan/data-banjar/data-banjar.json b/prisma/data/kependudukan/data-banjar/data-banjar.json new file mode 100644 index 00000000..120719ba --- /dev/null +++ b/prisma/data/kependudukan/data-banjar/data-banjar.json @@ -0,0 +1,98 @@ +[ + { + "id": "cmk-banjar-001", + "nama": "Banjar Adat Kauh", + "penduduk": 450, + "kk": 120, + "miskin": 25, + "tahun": 2026 + }, + { + "id": "cmk-banjar-002", + "nama": "Banjar Adat Kangin", + "penduduk": 520, + "kk": 145, + "miskin": 30, + "tahun": 2026 + }, + { + "id": "cmk-banjar-003", + "nama": "Banjar Adat Tengah", + "penduduk": 380, + "kk": 105, + "miskin": 20, + "tahun": 2026 + }, + { + "id": "cmk-banjar-004", + "nama": "Banjar Dinas Cabe", + "penduduk": 290, + "kk": 85, + "miskin": 15, + "tahun": 2026 + }, + { + "id": "cmk-banjar-005", + "nama": "Banjar Dinas Menesa", + "penduduk": 310, + "kk": 90, + "miskin": 18, + "tahun": 2026 + }, + { + "id": "cmk-banjar-006", + "nama": "Banjar Dinas Penenjoan", + "penduduk": 275, + "kk": 78, + "miskin": 12, + "tahun": 2026 + }, + { + "id": "cmk-banjar-007", + "nama": "Banjar Dinas Telanga", + "penduduk": 340, + "kk": 95, + "miskin": 22, + "tahun": 2026 + }, + { + "id": "cmk-banjar-008", + "nama": "Banjar Dinas Baler Pasar", + "penduduk": 405, + "kk": 115, + "miskin": 28, + "tahun": 2026 + }, + { + "id": "cmk-banjar-009", + "nama": "Banjar Dinas Bucu", + "penduduk": 260, + "kk": 75, + "miskin": 14, + "tahun": 2026 + }, + { + "id": "cmk-banjar-010", + "nama": "Banjar Dinas Gulingan", + "penduduk": 295, + "kk": 82, + "miskin": 16, + "tahun": 2026 + }, + { + "id": "cmk-banjar-011", + "nama": "Banjar Dinas Bersih", + "penduduk": 320, + "kk": 88, + "miskin": 19, + "tahun": 2026 + }, + { + "id": "cmk-banjar-012", + "nama": "Banjar Dinas Umahanyar", + "penduduk": 355, + "kk": 98, + "miskin": 21, + "tahun": 2026 + } +] diff --git a/prisma/data/kependudukan/dinamika-penduduk/dinamika-penduduk.json b/prisma/data/kependudukan/dinamika-penduduk/dinamika-penduduk.json new file mode 100644 index 00000000..b30b7f4a --- /dev/null +++ b/prisma/data/kependudukan/dinamika-penduduk/dinamika-penduduk.json @@ -0,0 +1,26 @@ +[ + { + "id": "cmk-dinamika-001", + "tahun": 2026, + "kelahiran": 45, + "kematian": 18, + "masuk": 22, + "keluar": 15 + }, + { + "id": "cmk-dinamika-002", + "tahun": 2025, + "kelahiran": 52, + "kematian": 21, + "masuk": 18, + "keluar": 12 + }, + { + "id": "cmk-dinamika-003", + "tahun": 2024, + "kelahiran": 48, + "kematian": 19, + "masuk": 25, + "keluar": 20 + } +] diff --git a/prisma/data/kependudukan/distribusi-agama/distribusi-agama.json b/prisma/data/kependudukan/distribusi-agama/distribusi-agama.json new file mode 100644 index 00000000..785cfa81 --- /dev/null +++ b/prisma/data/kependudukan/distribusi-agama/distribusi-agama.json @@ -0,0 +1,38 @@ +[ + { + "id": "cmk-agama-001", + "agama": "HINDU", + "jumlah": 3850, + "tahun": 2026 + }, + { + "id": "cmk-agama-002", + "agama": "ISLAM", + "jumlah": 285, + "tahun": 2026 + }, + { + "id": "cmk-agama-003", + "agama": "KRISTEN_PROTESTAN", + "jumlah": 42, + "tahun": 2026 + }, + { + "id": "cmk-agama-004", + "agama": "KRISTEN_KATOLIK", + "jumlah": 28, + "tahun": 2026 + }, + { + "id": "cmk-agama-005", + "agama": "BUDDHA", + "jumlah": 8, + "tahun": 2026 + }, + { + "id": "cmk-agama-006", + "agama": "KONGHUCU", + "jumlah": 2, + "tahun": 2026 + } +] diff --git a/prisma/data/kependudukan/distribusi-umur/distribusi-umur.json b/prisma/data/kependudukan/distribusi-umur/distribusi-umur.json new file mode 100644 index 00000000..45b28e78 --- /dev/null +++ b/prisma/data/kependudukan/distribusi-umur/distribusi-umur.json @@ -0,0 +1,32 @@ +[ + { + "id": "cmk-umur-001", + "rentangUmur": "0-14", + "jumlah": 820, + "tahun": 2026 + }, + { + "id": "cmk-umur-002", + "rentangUmur": "15-24", + "jumlah": 650, + "tahun": 2026 + }, + { + "id": "cmk-umur-003", + "rentangUmur": "25-54", + "jumlah": 1680, + "tahun": 2026 + }, + { + "id": "cmk-umur-004", + "rentangUmur": "55-64", + "jumlah": 520, + "tahun": 2026 + }, + { + "id": "cmk-umur-005", + "rentangUmur": "65+", + "jumlah": 545, + "tahun": 2026 + } +] diff --git a/prisma/data/kependudukan/migrasi-penduduk/migrasi-penduduk.json b/prisma/data/kependudukan/migrasi-penduduk/migrasi-penduduk.json new file mode 100644 index 00000000..ba54d3a7 --- /dev/null +++ b/prisma/data/kependudukan/migrasi-penduduk/migrasi-penduduk.json @@ -0,0 +1,56 @@ +[ + { + "id": "cmk-migrasi-001", + "nama": "I Ketut Sudarma", + "jenis": "MASUK", + "tanggal": "2025-01-15", + "asal": "Denpasar, Bali", + "tujuan": null, + "alasan": "Pekerjaan" + }, + { + "id": "cmk-migrasi-002", + "nama": "Ni Luh Ayu Wati", + "jenis": "KELUAR", + "tanggal": "2025-02-10", + "asal": null, + "tujuan": "Tabanan, Bali", + "alasan": "Menikah" + }, + { + "id": "cmk-migrasi-003", + "nama": "I Made Surya", + "jenis": "MASUK", + "tanggal": "2025-03-05", + "asal": "Gianyar, Bali", + "tujuan": null, + "alasan": "Pendidikan" + }, + { + "id": "cmk-migrasi-004", + "nama": "Ni Wayan Sari", + "jenis": "KELUAR", + "tanggal": "2025-03-20", + "asal": null, + "tujuan": "Jakarta", + "alasan": "Pekerjaan" + }, + { + "id": "cmk-migrasi-005", + "nama": "I Komang Pratama", + "jenis": "MASUK", + "tanggal": "2025-04-12", + "asal": "Karangasem, Bali", + "tujuan": null, + "alasan": "Keluarga" + }, + { + "id": "cmk-migrasi-006", + "nama": "I Wayan Putra", + "jenis": "KELUAR", + "tanggal": "2025-05-08", + "asal": null, + "tujuan": "Surabaya", + "alasan": "Pekerjaan" + } +] diff --git a/prisma/data/kesehatan/artikel-kesehatan/artikel-kesehatan.json b/prisma/data/kesehatan/artikel-kesehatan/artikel-kesehatan.json new file mode 100644 index 00000000..7f6db1cf --- /dev/null +++ b/prisma/data/kesehatan/artikel-kesehatan/artikel-kesehatan.json @@ -0,0 +1,28 @@ +[ + { + "id": "cmk-artikel-001", + "title": "Demam Berdarah Dengue (DBD): Kenali Gejala dan Cara Pencegahannya", + "content": "

Demam Berdarah Dengue (DBD) adalah penyakit yang disebabkan oleh virus dengue yang ditularkan melalui gigitan nyamuk Aedes aegypti. Penyakit ini masih menjadi masalah kesehatan utama di Indonesia, termasuk di Bali. Setiap tahunnya, terutama pada musim hujan, kasus DBD cenderung meningkat.

Di Desa Darmasaba, upaya pencegahan dilakukan melalui program 3M Plus (Menguras, Menutup, Mengubur) serta fogging pada area yang terdampak. Artikel ini akan membantu Anda mengenali gejala, cara pencegahan, dan pertolongan pertama jika terinfeksi.

", + "imageId": null, + "imageName": "TDQReg1lQ73s39crXW0ra-mobile.webp", + "introductionId": "cmk-intro-001", + "symptomId": "cmk-symptom-001", + "preventionId": "cmk-prevention-001", + "firstAidId": "cmk-firstaid-001", + "mythVsFactId": "cmk-myth-001", + "doctorSignId": "cmk-doctor-001" + }, + { + "id": "cmk-artikel-002", + "title": "Diare pada Anak: Penyebab, Gejala, dan Cara Mengatasinya", + "content": "

Diare merupakan salah satu penyakit yang sering menyerang anak-anak, terutama di daerah tropis seperti Indonesia. Diare pada anak bisa disebabkan oleh infeksi virus, bakteri, atau parasit yang masuk melalui makanan dan minuman yang tidak bersih.

Dehidrasi adalah komplikasi paling berbahaya dari diare pada anak. Oleh karena itu, pemberian cairan yang cukup sangat penting. Artikel ini membahas tanda-tanda diare, cara pencegahan, dan pertolongan pertama yang bisa dilakukan orang tua di rumah.

", + "imageId": null, + "imageName": "EcQIGOF6LW1dIKE53vmba-mobile.webp", + "introductionId": "cmk-intro-002", + "symptomId": "cmk-symptom-002", + "preventionId": "cmk-prevention-002", + "firstAidId": "cmk-firstaid-002", + "mythVsFactId": "cmk-myth-002", + "doctorSignId": "cmk-doctor-002" + } +] diff --git a/prisma/data/kesehatan/artikel-kesehatan/doctor-sign.json b/prisma/data/kesehatan/artikel-kesehatan/doctor-sign.json new file mode 100644 index 00000000..73cca377 --- /dev/null +++ b/prisma/data/kesehatan/artikel-kesehatan/doctor-sign.json @@ -0,0 +1,10 @@ +[ + { + "id": "cmk-doctor-001", + "content": "

Kapan harus ke dokter?

Jangan tunda untuk berobat ke fasilitas kesehatan terdekat. Penanganan dini sangat penting untuk mencegah komplikasi yang lebih serius.

Dokter yang bisa dihubungi:

" + }, + { + "id": "cmk-doctor-002", + "content": "

Kapan harus ke dokter?

Dehidrasi adalah komplikasi paling berbahaya dari diare. Jangan menunggu sampai kondisi anak memburuk.

Fasilitas kesehatan terdekat:

" + } +] diff --git a/prisma/data/kesehatan/artikel-kesehatan/first-aid.json b/prisma/data/kesehatan/artikel-kesehatan/first-aid.json new file mode 100644 index 00000000..9f5dbccb --- /dev/null +++ b/prisma/data/kesehatan/artikel-kesehatan/first-aid.json @@ -0,0 +1,12 @@ +[ + { + "id": "cmk-firstaid-001", + "title": "Pertolongan Pertama DBD", + "content": "
  1. Beri banyak minum - air putih, oralit, jus buah untuk mencegah dehidrasi
  2. Kompres dengan air hangat untuk menurunkan demam
  3. Beri parasetamol untuk menurunkan demam dan meredakan nyeri (hindari aspirin dan ibuprofen karena dapat meningkatkan risiko pendarahan)
  4. Istirahat total
  5. Pantau tanda-tanda bahaya: muntah terus-menerus, pendarahan, lemas ekstrem, nyeri perut hebat
  6. Segera bawa ke fasilitas kesehatan jika demam lebih dari 3 hari atau muncul tanda bahaya
  7. Pemeriksaan darah untuk mengecek trombosit dan hematokrit

Catatan: Tidak ada obat spesifik untuk DBD. Pengobatan bersifat suportif (mengatasi gejala). Yang terpenting adalah menjaga cairan tubuh dan memantau perkembangan pasien.

" + }, + { + "id": "cmk-firstaid-002", + "title": "Pertolongan Pertama Diare pada Anak", + "content": "
  1. Beri oralit (larutan gula dan garam) untuk mengganti cairan dan elektrolit yang hilang. Dosis: anak < 1 tahun: 50-100 ml per BAB, anak > 1 tahun: 100-200 ml per BAB
  2. Tetap berikan ASI atau susu formula
  3. Beri makanan lunak seperti bubur, pisang, atau nasi tim
  4. Hindari jus buah manis dan minuman bersoda karena dapat memperparah diare
  5. Beri suplemen zinc selama 10 hari (dosis sesuai anjuran dokter)
  6. Pantau tanda dehidrasi: mulut kering, mata cekung, jarang BAK
  7. Jangan berikan obat anti-diare tanpa resep dokter untuk anak
  8. Segera bawa ke dokter jika: diare lebih dari 3 hari, ada darah di tinja, demam tinggi, anak tampak sangat lemas
" + } +] diff --git a/prisma/data/kesehatan/artikel-kesehatan/introduction.json b/prisma/data/kesehatan/artikel-kesehatan/introduction.json new file mode 100644 index 00000000..b6532cf4 --- /dev/null +++ b/prisma/data/kesehatan/artikel-kesehatan/introduction.json @@ -0,0 +1,10 @@ +[ + { + "id": "cmk-intro-001", + "content": "

Demam Berdarah Dengue (DBD) adalah penyakit yang ditularkan melalui gigitan nyamuk Aedes aegypti betina yang terinfeksi virus dengue. Virus ini memiliki 4 serotipe (DEN-1, DEN-2, DEN-3, DEN-4). Seseorang yang terinfeksi satu serotipe akan memiliki kekebalan seumur hidup terhadap serotipe tersebut, namun tetap rentan terhadap serotipe lainnya.

Penyakit ini endemis di lebih dari 100 negara, termasuk Indonesia. Di Bali, kasus DBD biasanya meningkat pada musim penghujan (Oktober - Maret) ketika genangan air menjadi media perkembangbiakan nyamuk.

Penyakit ini dapat menyerang semua kalangan, namun anak-anak dan remaja merupakan kelompok yang paling rentan. Tanpa penanganan yang tepat, DBD dapat berkembang menjadi Dengue Shock Syndrome (DSS) yang berpotensi fatal.

" + }, + { + "id": "cmk-intro-002", + "content": "

Diare adalah kondisi buang air besar dengan frekuensi lebih sering dari biasanya dan disertai perubahan konsistensi tinja menjadi lebih encer. Pada anak-anak, diare umumnya disebabkan oleh infeksi rotavirus, norovirus, bakteri E. coli, atau parasit Giardia.

Menurut data WHO, diare masih menjadi penyebab utama kematian pada anak di bawah 5 tahun di negara berkembang. Penularan umumnya terjadi melalui makanan dan minuman yang terkontaminasi, serta kebersihan tangan dan lingkungan yang kurang terjaga.

Di Desa Darmasaba, kasus diare pada anak sering terjadi terutama pada musim pancaroba. Pencegahan melalui pola hidup bersih dan sehat (PHBS) menjadi kunci utama.

" + } +] diff --git a/prisma/data/kesehatan/artikel-kesehatan/myth-vs-fact.json b/prisma/data/kesehatan/artikel-kesehatan/myth-vs-fact.json new file mode 100644 index 00000000..70ae4859 --- /dev/null +++ b/prisma/data/kesehatan/artikel-kesehatan/myth-vs-fact.json @@ -0,0 +1,14 @@ +[ + { + "id": "cmk-myth-001", + "title": "Mitos vs Fakta: Demam Berdarah Dengue", + "mitos": "Jus daun jambu biji dapat menyembuhkan DBD secara total", + "fakta": "Jus daun jambu biji memang mengandung senyawa yang dapat membantu meningkatkan trombosit, namun tidak dapat menggantikan perawatan medis. Pasien DBD tetap memerlukan penanganan medis yang tepat, terutama pemantauan trombosit dan hidrasi. Jus daun jambu bisa menjadi terapi pendamping, bukan pengganti pengobatan." + }, + { + "id": "cmk-myth-002", + "title": "Mitos vs Fakta: Diare pada Anak", + "mitos": "Obat anti-diare dapat diberikan untuk anak agar cepat sembuh", + "fakta": "Obat anti-diare tidak boleh diberikan pada anak tanpa resep dokter. Diare pada anak sebenarnya adalah cara tubuh mengeluarkan kuman penyebab infeksi. Pemberian obat anti-diare justru bisa menahan kuman di dalam usus dan memperparah infeksi. Yang terpenting adalah pemberian oralit dan cairan yang cukup." + } +] diff --git a/prisma/data/kesehatan/artikel-kesehatan/prevention.json b/prisma/data/kesehatan/artikel-kesehatan/prevention.json new file mode 100644 index 00000000..e2c7049d --- /dev/null +++ b/prisma/data/kesehatan/artikel-kesehatan/prevention.json @@ -0,0 +1,12 @@ +[ + { + "id": "cmk-prevention-001", + "title": "Pencegahan Demam Berdarah", + "content": "" + }, + { + "id": "cmk-prevention-002", + "title": "Pencegahan Diare pada Anak", + "content": "" + } +] diff --git a/prisma/data/kesehatan/artikel-kesehatan/symptom.json b/prisma/data/kesehatan/artikel-kesehatan/symptom.json new file mode 100644 index 00000000..5d99f535 --- /dev/null +++ b/prisma/data/kesehatan/artikel-kesehatan/symptom.json @@ -0,0 +1,12 @@ +[ + { + "id": "cmk-symptom-001", + "title": "Gejala Demam Berdarah Dengue", + "content": "

Tanda bahaya (waspada): Muntah terus-menerus, sakit perut hebat, pendarahan hebat, penurunan kesadaran, tangan dan kaki dingin. Segera bawa ke fasilitas kesehatan jika muncul tanda-tanda ini.

" + }, + { + "id": "cmk-symptom-002", + "title": "Gejala Diare pada Anak", + "content": "

Tanda dehidrasi berat: Anak tampak sangat lemas, mata sangat cekung, kulit perut kembali lambat saat dicubit, tidak buang air kecil lebih dari 6 jam. Segera bawa ke dokter jika tanda ini muncul.

" + } +] diff --git a/prisma/data/kesehatan/fasilitas-kesehatan/dokter-tenaga-medis.json b/prisma/data/kesehatan/fasilitas-kesehatan/dokter-tenaga-medis.json new file mode 100644 index 00000000..c0ed10ae --- /dev/null +++ b/prisma/data/kesehatan/fasilitas-kesehatan/dokter-tenaga-medis.json @@ -0,0 +1,35 @@ +[ + { + "id": "cmk-dokter-001", + "name": "dr. I Wayan Suardana, Sp.PD", + "specialist": "Spesialis Penyakit Dalam", + "jadwal": "Senin - Jumat: 08:00 - 12:00 WITA", + "jadwalLibur": "Sabtu: 08:00 - 11:00 WITA", + "jamBukaOperasional": "08:00", + "jamTutupOperasional": "12:00", + "jamBukaLibur": "08:00", + "jamTutupLibur": "11:00" + }, + { + "id": "cmk-dokter-002", + "name": "dr. Ni Made Aryani", + "specialist": "Dokter Umum", + "jadwal": "Senin - Jumat: 08:00 - 14:00 WITA", + "jadwalLibur": null, + "jamBukaOperasional": "08:00", + "jamTutupOperasional": "14:00", + "jamBukaLibur": null, + "jamTutupLibur": null + }, + { + "id": "cmk-dokter-003", + "name": "dr. I Ketut Wirawan, Sp.A", + "specialist": "Spesialis Anak", + "jadwal": "Selasa & Kamis: 09:00 - 13:00 WITA", + "jadwalLibur": null, + "jamBukaOperasional": "09:00", + "jamTutupOperasional": "13:00", + "jamBukaLibur": null, + "jamTutupLibur": null + } +] diff --git a/prisma/data/kesehatan/fasilitas-kesehatan/fasilitas-kesehatan.json b/prisma/data/kesehatan/fasilitas-kesehatan/fasilitas-kesehatan.json new file mode 100644 index 00000000..1842a68e --- /dev/null +++ b/prisma/data/kesehatan/fasilitas-kesehatan/fasilitas-kesehatan.json @@ -0,0 +1,11 @@ +[ + { + "id": "cmk-faskes-001", + "name": "Puskesmas Darmasaba", + "informasiUmumId": "cmk-info-001", + "layananUnggulanId": "cmk-layanan-001", + "fasilitasPendukungId": "cmk-fasilitas-001", + "prosedurPendaftaranId": "cmk-prosedur-001", + "imageName": null + } +] diff --git a/prisma/data/kesehatan/fasilitas-kesehatan/fasilitas-pendukung.json b/prisma/data/kesehatan/fasilitas-kesehatan/fasilitas-pendukung.json new file mode 100644 index 00000000..e838a200 --- /dev/null +++ b/prisma/data/kesehatan/fasilitas-kesehatan/fasilitas-pendukung.json @@ -0,0 +1,6 @@ +[ + { + "id": "cmk-fasilitas-001", + "content": "" + } +] diff --git a/prisma/data/kesehatan/fasilitas-kesehatan/informasi-umum.json b/prisma/data/kesehatan/fasilitas-kesehatan/informasi-umum.json new file mode 100644 index 00000000..77689fe6 --- /dev/null +++ b/prisma/data/kesehatan/fasilitas-kesehatan/informasi-umum.json @@ -0,0 +1,8 @@ +[ + { + "id": "cmk-info-001", + "fasilitas": "Puskesmas Darmasaba", + "alamat": "Jl. Raya Darmasaba No. 15, Desa Darmasaba, Kecamatan Abiansemal, Badung, Bali 80352", + "jamOperasional": "Senin - Jumat: 08:00 - 14:00 WITA, Sabtu: 08:00 - 12:00 WITA" + } +] diff --git a/prisma/data/kesehatan/fasilitas-kesehatan/layanan-unggulan.json b/prisma/data/kesehatan/fasilitas-kesehatan/layanan-unggulan.json new file mode 100644 index 00000000..c9c5e05a --- /dev/null +++ b/prisma/data/kesehatan/fasilitas-kesehatan/layanan-unggulan.json @@ -0,0 +1,6 @@ +[ + { + "id": "cmk-layanan-001", + "content": "" + } +] diff --git a/prisma/data/kesehatan/fasilitas-kesehatan/prosedur-pendaftaran.json b/prisma/data/kesehatan/fasilitas-kesehatan/prosedur-pendaftaran.json new file mode 100644 index 00000000..1c7df0bd --- /dev/null +++ b/prisma/data/kesehatan/fasilitas-kesehatan/prosedur-pendaftaran.json @@ -0,0 +1,6 @@ +[ + { + "id": "cmk-prosedur-001", + "content": "
  1. Pendaftaran: Datang ke loket pendaftaran dengan membawa KTP/Kartu Keluarga dan BPJS (jika ada)
  2. Pemeriksaan Awal: Pemeriksaan tanda vital (tensi, suhu, berat badan) oleh perawat
  3. Poli Tujuan: Menuju poli sesuai keluhan (Umum, Gigi, Anak, KIA)
  4. Pemeriksaan Dokter: Konsultasi dan pemeriksaan oleh dokter
  5. Resep dan Obat: Mengambil resep di apotek
  6. Tindak Lanjut: Jika diperlukan, dijadwalkan untuk kontrol ulang atau rujukan

Pasien BPJS dapat langsung ke loket khusus BPJS dengan menunjukkan kartu BPJS dan surat rujukan dari Faskes 1.

" + } +] diff --git a/prisma/data/kesehatan/fasilitas-kesehatan/tarif-layanan.json b/prisma/data/kesehatan/fasilitas-kesehatan/tarif-layanan.json new file mode 100644 index 00000000..1bbc1562 --- /dev/null +++ b/prisma/data/kesehatan/fasilitas-kesehatan/tarif-layanan.json @@ -0,0 +1,32 @@ +[ + { + "id": "cmk-tarif-001", + "layanan": "Pemeriksaan Umum", + "tarif": "Gratis (BPJS) / Rp 25.000 (Umum)" + }, + { + "id": "cmk-tarif-002", + "layanan": "Pemeriksaan Gigi", + "tarif": "Gratis (BPJS) / Rp 35.000 (Umum)" + }, + { + "id": "cmk-tarif-003", + "layanan": "Laboratorium (Tes Darah)", + "tarif": "Gratis (BPJS) / Rp 50.000 - Rp 150.000 (Umum)" + }, + { + "id": "cmk-tarif-004", + "layanan": "Konsultasi Gizi", + "tarif": "Gratis (BPJS) / Rp 30.000 (Umum)" + }, + { + "id": "cmk-tarif-005", + "layanan": "Imunisasi Anak", + "tarif": "Gratis (Program Nasional)" + }, + { + "id": "cmk-tarif-006", + "layanan": "KB (Keluarga Berencana)", + "tarif": "Gratis (BPJS) / Rp 20.000 - Rp 100.000 (Umum)" + } +] diff --git a/prisma/data/kesehatan/grafik-kepuasan/grafik-kepuasan.json b/prisma/data/kesehatan/grafik-kepuasan/grafik-kepuasan.json new file mode 100644 index 00000000..391de776 --- /dev/null +++ b/prisma/data/kesehatan/grafik-kepuasan/grafik-kepuasan.json @@ -0,0 +1,42 @@ +[ + { + "id": "cmk-kepuasan-001", + "nama": "I Wayan Sudiana", + "tanggal": "2025-03-15", + "jenisKelamin": "Laki-laki", + "alamat": "Banjar Adat Kauh, Desa Darmasaba", + "penyakit": "Hipertensi" + }, + { + "id": "cmk-kepuasan-002", + "nama": "Ni Luh Sri Dewi", + "tanggal": "2025-03-18", + "jenisKelamin": "Perempuan", + "alamat": "Banjar Adat Kangin, Desa Darmasaba", + "penyakit": "Diabetes Tipe 2" + }, + { + "id": "cmk-kepuasan-003", + "nama": "I Ketut Arya", + "tanggal": "2025-03-20", + "jenisKelamin": "Laki-laki", + "alamat": "Banjar Adat Tengah, Desa Darmasaba", + "penyakit": "ISPA" + }, + { + "id": "cmk-kepuasan-004", + "nama": "Ni Made Wati", + "tanggal": "2025-04-02", + "jenisKelamin": "Perempuan", + "alamat": "Banjar Adat Kauh, Desa Darmasaba", + "penyakit": "Rematik" + }, + { + "id": "cmk-kepuasan-005", + "nama": "I Komang Suartawan", + "tanggal": "2025-04-10", + "jenisKelamin": "Laki-laki", + "alamat": "Banjar Adat Kangin, Desa Darmasaba", + "penyakit": "Asam Urat" + } +] diff --git a/prisma/data/kesehatan/jadwal-kegiatan/deskripsi-jadwal.json b/prisma/data/kesehatan/jadwal-kegiatan/deskripsi-jadwal.json new file mode 100644 index 00000000..de92f3b2 --- /dev/null +++ b/prisma/data/kesehatan/jadwal-kegiatan/deskripsi-jadwal.json @@ -0,0 +1,10 @@ +[ + { + "id": "cmk-desk-jadwal-001", + "deskripsi": "

Posyandu balita dan ibu hamil merupakan kegiatan rutin bulanan yang meliputi:

" + }, + { + "id": "cmk-desk-jadwal-002", + "deskripsi": "

Kegiatan senam dan pemeriksaan kesehatan lansia meliputi:

" + } +] diff --git a/prisma/data/kesehatan/jadwal-kegiatan/dokumen-jadwal.json b/prisma/data/kesehatan/jadwal-kegiatan/dokumen-jadwal.json new file mode 100644 index 00000000..07a2fc94 --- /dev/null +++ b/prisma/data/kesehatan/jadwal-kegiatan/dokumen-jadwal.json @@ -0,0 +1,10 @@ +[ + { + "id": "cmk-dokumen-jadwal-001", + "content": "" + }, + { + "id": "cmk-dokumen-jadwal-002", + "content": "" + } +] diff --git a/prisma/data/kesehatan/jadwal-kegiatan/informasi-jadwal.json b/prisma/data/kesehatan/jadwal-kegiatan/informasi-jadwal.json new file mode 100644 index 00000000..a7b5b20a --- /dev/null +++ b/prisma/data/kesehatan/jadwal-kegiatan/informasi-jadwal.json @@ -0,0 +1,16 @@ +[ + { + "id": "cmk-info-jadwal-001", + "name": "Posyandu Balita & Ibu Hamil", + "tanggal": "Setiap minggu ke-2", + "waktu": "08:00 - 12:00 WITA", + "lokasi": "Posyandu Pudak Amara, Desa Darmasaba" + }, + { + "id": "cmk-info-jadwal-002", + "name": "Senam & Pemeriksaan Kesehatan Lansia", + "tanggal": "Setiap Jumat minggu ke-1", + "waktu": "06:30 - 09:00 WITA", + "lokasi": "Balai Desa Darmasaba" + } +] diff --git a/prisma/data/kesehatan/jadwal-kegiatan/jadwal-kegiatan.json b/prisma/data/kesehatan/jadwal-kegiatan/jadwal-kegiatan.json new file mode 100644 index 00000000..d8e0800e --- /dev/null +++ b/prisma/data/kesehatan/jadwal-kegiatan/jadwal-kegiatan.json @@ -0,0 +1,22 @@ +[ + { + "id": "cmk-jadwal-001", + "content": "

Jadwal kegiatan posyandu dan program kesehatan di Desa Darmasaba dilaksanakan secara rutin setiap bulan. Kegiatan ini meliputi penimbangan balita, imunisasi, pemeriksaan ibu hamil, dan program kesehatan lainnya.

", + "informasiJadwalKegiatanId": "cmk-info-jadwal-001", + "deskripsiJadwalKegiatanId": "cmk-desk-jadwal-001", + "layananJadwalKegiatanId": "cmk-layanan-jadwal-001", + "syaratKetentuanJadwalKegiatanId": "cmk-syarat-jadwal-001", + "dokumenJadwalKegiatanId": "cmk-dokumen-jadwal-001", + "pendaftaranJadwalKegiatanId": "cmk-daftar-jadwal-001" + }, + { + "id": "cmk-jadwal-002", + "content": "

Program senam bersama dan pemeriksaan kesehatan lansia dilaksanakan setiap hari Jumat minggu pertama di Balai Desa Darmasaba. Kegiatan ini bertujuan untuk menjaga kesehatan dan kebugaran warga lansia.

", + "informasiJadwalKegiatanId": "cmk-info-jadwal-002", + "deskripsiJadwalKegiatanId": "cmk-desk-jadwal-002", + "layananJadwalKegiatanId": "cmk-layanan-jadwal-002", + "syaratKetentuanJadwalKegiatanId": "cmk-syarat-jadwal-002", + "dokumenJadwalKegiatanId": "cmk-dokumen-jadwal-002", + "pendaftaranJadwalKegiatanId": "cmk-daftar-jadwal-002" + } +] diff --git a/prisma/data/kesehatan/jadwal-kegiatan/layanan-jadwal.json b/prisma/data/kesehatan/jadwal-kegiatan/layanan-jadwal.json new file mode 100644 index 00000000..e97687b4 --- /dev/null +++ b/prisma/data/kesehatan/jadwal-kegiatan/layanan-jadwal.json @@ -0,0 +1,10 @@ +[ + { + "id": "cmk-layanan-jadwal-001", + "content": "" + }, + { + "id": "cmk-layanan-jadwal-002", + "content": "" + } +] diff --git a/prisma/data/kesehatan/jadwal-kegiatan/pendaftaran-jadwal.json b/prisma/data/kesehatan/jadwal-kegiatan/pendaftaran-jadwal.json new file mode 100644 index 00000000..7d929905 --- /dev/null +++ b/prisma/data/kesehatan/jadwal-kegiatan/pendaftaran-jadwal.json @@ -0,0 +1,20 @@ +[ + { + "id": "cmk-daftar-jadwal-001", + "name": "Ni Luh Ayu Sri Wati", + "tanggal": "2025-06-10", + "namaOrtu": "-", + "nomor": "081234567890", + "alamat": "Banjar Adat Kauh, Desa Darmasaba", + "catatan": "Ibu hamil anak ke-2, usia kehamilan 20 minggu" + }, + { + "id": "cmk-daftar-jadwal-002", + "name": "I Ketut Suardana", + "tanggal": "2025-06-06", + "namaOrtu": "-", + "nomor": "081987654321", + "alamat": "Banjar Adat Kangin, Desa Darmasaba", + "catatan": "Lansia 72 tahun, riwayat hipertensi" + } +] diff --git a/prisma/data/kesehatan/jadwal-kegiatan/syarat-ketentuan.json b/prisma/data/kesehatan/jadwal-kegiatan/syarat-ketentuan.json new file mode 100644 index 00000000..6cea0a07 --- /dev/null +++ b/prisma/data/kesehatan/jadwal-kegiatan/syarat-ketentuan.json @@ -0,0 +1,10 @@ +[ + { + "id": "cmk-syarat-jadwal-001", + "content": "" + }, + { + "id": "cmk-syarat-jadwal-002", + "content": "" + } +] diff --git a/prisma/data/kesehatan/kelahiran/kelahiran.json b/prisma/data/kesehatan/kelahiran/kelahiran.json new file mode 100644 index 00000000..ca546df1 --- /dev/null +++ b/prisma/data/kesehatan/kelahiran/kelahiran.json @@ -0,0 +1,30 @@ +[ + { + "id": "cmk-kelahiran-001", + "nama": "Baby Komang Arya Putrama", + "tanggal": "2025-01-15", + "jenisKelamin": "Laki-laki", + "alamat": "Banjar Adat Kauh, Desa Darmasaba" + }, + { + "id": "cmk-kelahiran-002", + "nama": "Baby Ni Luh Putri Ayu", + "tanggal": "2025-02-20", + "jenisKelamin": "Perempuan", + "alamat": "Banjar Adat Kangin, Desa Darmasaba" + }, + { + "id": "cmk-kelahiran-003", + "nama": "Baby I Made Dewa Kencana", + "tanggal": "2025-03-10", + "jenisKelamin": "Laki-laki", + "alamat": "Banjar Adat Tengah, Desa Darmasaba" + }, + { + "id": "cmk-kelahiran-004", + "nama": "Baby Ni Wayan Sari", + "tanggal": "2025-04-05", + "jenisKelamin": "Perempuan", + "alamat": "Banjar Adat Kauh, Desa Darmasaba" + } +] diff --git a/prisma/data/kesehatan/kematian-kelahiran/data-kematian-kelahiran.json b/prisma/data/kesehatan/kematian-kelahiran/data-kematian-kelahiran.json new file mode 100644 index 00000000..8cbf1e26 --- /dev/null +++ b/prisma/data/kesehatan/kematian-kelahiran/data-kematian-kelahiran.json @@ -0,0 +1,17 @@ +[ + { + "id": "cmk-data-001", + "kematianId": "cmk-kematian-001", + "kelahiranId": "cmk-kelahiran-001" + }, + { + "id": "cmk-data-002", + "kematianId": "cmk-kematian-002", + "kelahiranId": "cmk-kelahiran-002" + }, + { + "id": "cmk-data-003", + "kematianId": "cmk-kematian-003", + "kelahiranId": "cmk-kelahiran-003" + } +] diff --git a/prisma/data/kesehatan/kematian/kematian.json b/prisma/data/kesehatan/kematian/kematian.json new file mode 100644 index 00000000..612dc68a --- /dev/null +++ b/prisma/data/kesehatan/kematian/kematian.json @@ -0,0 +1,26 @@ +[ + { + "id": "cmk-kematian-001", + "nama": "I Ketut Sudarma", + "tanggal": "2025-01-25", + "jenisKelamin": "Laki-laki", + "alamat": "Banjar Adat Kauh, Desa Darmasaba", + "penyebab": "Sakit tua" + }, + { + "id": "cmk-kematian-002", + "nama": "Ni Made Sari", + "tanggal": "2025-03-18", + "jenisKelamin": "Perempuan", + "alamat": "Banjar Adat Kangin, Desa Darmasaba", + "penyebab": "Gagal jantung" + }, + { + "id": "cmk-kematian-003", + "nama": "I Wayan Sura", + "tanggal": "2025-04-12", + "jenisKelamin": "Laki-laki", + "alamat": "Banjar Adat Tengah, Desa Darmasaba", + "penyebab": "Stroke" + } +] diff --git a/prisma/data/pendidikan/beasiswa-pendaftar/beasiswa-pendaftar.json b/prisma/data/pendidikan/beasiswa-pendaftar/beasiswa-pendaftar.json new file mode 100644 index 00000000..eb64fc27 --- /dev/null +++ b/prisma/data/pendidikan/beasiswa-pendaftar/beasiswa-pendaftar.json @@ -0,0 +1,65 @@ +[ + { + "id": "cmk-beasiswa-001", + "namaLengkap": "I Komang Wahyu Pratama", + "nis": "2024001", + "kelas": "X IPA", + "jenisKelamin": "LAKI_LAKI", + "alamatDomisili": "Banjar Adat Kauh, Desa Darmasaba", + "tempatLahir": "Badung", + "tanggalLahir": "2009-05-15", + "namaOrtu": "I Ketut Pratama", + "nik": "5106123456780001", + "pekerjaanOrtu": "Petani", + "penghasilan": "Rp 1.500.000/bulan", + "noHp": "081234567891", + "kewarganegaraan": "Indonesia", + "agama": "HINDU", + "alamatKTP": "Banjar Adat Kauh, Desa Darmasaba, Badung, Bali", + "email": "komang.wahyu@email.com", + "statusPernikahan": "BELUM_MENIKAH", + "ukuranBaju": "M" + }, + { + "id": "cmk-beasiswa-002", + "namaLengkap": "Ni Luh Putu Ayu Dewi", + "nis": "2024002", + "kelas": "XI IPS", + "jenisKelamin": "PEREMPUAN", + "alamatDomisili": "Banjar Adat Kangin, Desa Darmasaba", + "tempatLahir": "Badung", + "tanggalLahir": "2008-08-22", + "namaOrtu": "Ni Made Dewi", + "nik": "5106123456780002", + "pekerjaanOrtu": "Pedagang", + "penghasilan": "Rp 2.000.000/bulan", + "noHp": "081234567892", + "kewarganegaraan": "Indonesia", + "agama": "HINDU", + "alamatKTP": "Banjar Adat Kangin, Desa Darmasaba, Badung, Bali", + "email": "niluh.dw@email.com", + "statusPernikahan": "BELUM_MENIKAH", + "ukuranBaju": "S" + }, + { + "id": "cmk-beasiswa-003", + "namaLengkap": "I Made Agung Setiawan", + "nis": "2024003", + "kelas": "IX", + "jenisKelamin": "LAKI_LAKI", + "alamatDomisili": "Banjar Adat Tengah, Desa Darmasaba", + "tempatLahir": "Badung", + "tanggalLahir": "2011-03-10", + "namaOrtu": "I Wayan Setiawan", + "nik": "5106123456780003", + "pekerjaanOrtu": "Buruh", + "penghasilan": "Rp 1.200.000/bulan", + "noHp": "081234567893", + "kewarganegaraan": "Indonesia", + "agama": "HINDU", + "alamatKTP": "Banjar Adat Tengah, Desa Darmasaba, Badung, Bali", + "email": "made.agung@email.com", + "statusPernikahan": "BELUM_MENIKAH", + "ukuranBaju": "M" + } +] diff --git a/prisma/data/pendidikan/keunggulan-program/keunggulan-program.json b/prisma/data/pendidikan/keunggulan-program/keunggulan-program.json new file mode 100644 index 00000000..0a809b49 --- /dev/null +++ b/prisma/data/pendidikan/keunggulan-program/keunggulan-program.json @@ -0,0 +1,27 @@ +[ + { + "id": "cmk-keunggulan-001", + "judul": "Program Beasiswa Berprestasi", + "deskripsi": "Program beasiswa bagi siswa berprestasi dari keluarga kurang mampu di Desa Darmasaba. Beasiswa mencakup biaya sekolah, seragam, buku, dan transportasi. Program ini bekerja sama dengan pemerintah kabupaten dan donatur swasta." + }, + { + "id": "cmk-keunggulan-002", + "judul": "Bimbingan Belajar Gratis", + "deskripsi": "Program bimbingan belajar gratis untuk siswa SD, SMP, dan SMA yang diselenggarakan di Balai Desa Darmasaba setiap hari Sabtu. Pengajar merupakan volunteers dari mahasiswa dan alumni desa yang berprestasi." + }, + { + "id": "cmk-keunggulan-003", + "judul": "Kursus Keterampilan Digital", + "deskripsi": "Pelatihan keterampilan digital meliputi desain grafis, pemrograman dasar, dan digital marketing untuk pemuda dan warga desa. Dilengkapi dengan laboratorium komputer dan koneksi internet cepat." + }, + { + "id": "cmk-keunggulan-004", + "judul": "Program Bahasa Asing", + "deskripsi": "Kursus bahasa Inggris dan Mandarin gratis untuk warga desa, terutama yang bekerja di sektor pariwisata. Program ini bertujuan meningkatkan daya saing tenaga kerja lokal di era global." + }, + { + "id": "cmk-keunggulan-005", + "judul": "Pelestarian Seni dan Budaya Bali", + "deskripsi": "Program pelestarian seni dan budaya Bali melalui kursus tari, gamelan, dan kerajinan tradisional untuk generasi muda. Instruktur merupakan seniman dan budayawan lokal yang berpengalaman." + } +] diff --git a/prisma/data/ppid/formulir-permohonan-keberatan/formulir-permohonan-keberatan.json b/prisma/data/ppid/formulir-permohonan-keberatan/formulir-permohonan-keberatan.json new file mode 100644 index 00000000..03e5433e --- /dev/null +++ b/prisma/data/ppid/formulir-permohonan-keberatan/formulir-permohonan-keberatan.json @@ -0,0 +1,9 @@ +[ + { + "id": "formulir-001", + "name": "John Doe", + "email": "john@example.com", + "notelp": "081234567890", + "alasan": "Memohon informasi terkait anggaran desa" + } +] diff --git a/prisma/data/ppid/ikm/grafik-jenis-kelamin/grafik-jenis-kelamin.json b/prisma/data/ppid/ikm/grafik-jenis-kelamin/grafik-jenis-kelamin.json new file mode 100644 index 00000000..f5143f0f --- /dev/null +++ b/prisma/data/ppid/ikm/grafik-jenis-kelamin/grafik-jenis-kelamin.json @@ -0,0 +1,7 @@ +[ + { + "id": "grafik-jk-001", + "perempuan": "45%", + "laki": "55%" + } +] diff --git a/prisma/data/ppid/ikm/grafik-responden/grafik-responden.json b/prisma/data/ppid/ikm/grafik-responden/grafik-responden.json new file mode 100644 index 00000000..07cee6db --- /dev/null +++ b/prisma/data/ppid/ikm/grafik-responden/grafik-responden.json @@ -0,0 +1,9 @@ +[ + { + "id": "grafik-responden-001", + "sangatbaik": "40%", + "baik": "35%", + "kurangbaik": "15%", + "tidakbaik": "10%" + } +] diff --git a/prisma/data/ppid/ikm/grafik-umur/grafik-umur.json b/prisma/data/ppid/ikm/grafik-umur/grafik-umur.json new file mode 100644 index 00000000..d05b3ca5 --- /dev/null +++ b/prisma/data/ppid/ikm/grafik-umur/grafik-umur.json @@ -0,0 +1,9 @@ +[ + { + "id": "grafik-umur-001", + "remaja": "15%", + "dewasa": "45%", + "orangtua": "25%", + "lansia": "15%" + } +] diff --git a/prisma/data/ppid/ikm/indeks-kepuasan-masyarakat/indeks-kepuasan-masyarakat.json b/prisma/data/ppid/ikm/indeks-kepuasan-masyarakat/indeks-kepuasan-masyarakat.json new file mode 100644 index 00000000..b7d3fa33 --- /dev/null +++ b/prisma/data/ppid/ikm/indeks-kepuasan-masyarakat/indeks-kepuasan-masyarakat.json @@ -0,0 +1,17 @@ +[ + { + "id": "ikm-001", + "label": "Kepuasan Pelayanan Administrasi", + "kepuasan": "85%" + }, + { + "id": "ikm-002", + "label": "Kepuasan Pelayanan Kesehatan", + "kepuasan": "90%" + }, + { + "id": "ikm-003", + "label": "Kepuasan Pelayanan Pendidikan", + "kepuasan": "88%" + } +] diff --git a/prisma/data/ppid/struktur-organisasi-ppid/struktur-organisasi-ppid.json b/prisma/data/ppid/struktur-organisasi-ppid/struktur-organisasi-ppid.json new file mode 100644 index 00000000..b63819e3 --- /dev/null +++ b/prisma/data/ppid/struktur-organisasi-ppid/struktur-organisasi-ppid.json @@ -0,0 +1,8 @@ +[ + { + "id": "struktur-org-ppid-001", + "posisiOrganisasiId": "posisi-001", + "pegawaiId": "pegawai-001", + "hubunganOrganisasiId": "hubungan-001" + } +] diff --git a/prisma/load-json.ts b/prisma/load-json.ts new file mode 100644 index 00000000..3b86d7c1 --- /dev/null +++ b/prisma/load-json.ts @@ -0,0 +1,13 @@ +import { readFileSync } from "fs"; +import { join } from "path"; + +/** + * Load JSON file dynamically from prisma/data directory + * @param relativePath - Relative path from prisma/data (e.g., 'pendidikan/beasiswa-pendaftar/beasiswa-pendaftar.json') + * @returns Parsed JSON data + */ +export function loadJsonData(relativePath: string): T { + const fullPath = join(process.cwd(), "prisma/data", relativePath); + const content = readFileSync(fullPath, "utf-8"); + return JSON.parse(content); +} diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 4519bad8..da495dc4 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -2300,6 +2300,95 @@ model UserMenuAccess { @@unique([userId, menuId]) // Satu user tidak bisa punya akses menu yang sama dua kali } +// ========================================= KEPENDUDUKAN ========================================= // +// ========================================= DATA BANJAR ========================================= // +model DataBanjar { + id String @id @default(cuid()) + nama String // Nama banjar + penduduk Int // Jumlah penduduk + kk Int // Jumlah kepala keluarga + miskin Int // Jumlah penduduk miskin + tahun Int // Tahun data + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deletedAt DateTime? + isActive Boolean @default(true) + + @@index([tahun]) + @@index([isActive]) +} + +// ========================================= DISTRIBUSI AGAMA ========================================= // +model DistribusiAgama { + id String @id @default(cuid()) + agama String // Nama agama + jumlah Int // Jumlah penganut + tahun Int // Tahun data + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deletedAt DateTime? + isActive Boolean @default(true) + + @@index([tahun]) + @@index([isActive]) +} + +// ========================================= DISTRIBUSI UMUR ========================================= // +model DistribusiUmur { + id String @id @default(cuid()) + rentangUmur String // Rentang umur (e.g., "0-14", "15-24", "25-54", "55-64", "65+") + jumlah Int // Jumlah penduduk + tahun Int // Tahun data + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deletedAt DateTime? + isActive Boolean @default(true) + + @@index([tahun]) + @@index([isActive]) +} + +// ========================================= MIGRASI PENDUDUK ========================================= // +model MigrasiPenduduk { + id String @id @default(cuid()) + nama String // Nama penduduk + jenis JenisMigrasi // MASUK atau KELUAR + tanggal DateTime // Tanggal migrasi + asal String? // Asal (untuk masuk) + tujuan String? // Tujuan (untuk keluar) + alasan String? // Alasan migrasi + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deletedAt DateTime? + isActive Boolean @default(true) + + @@index([tanggal]) + @@index([isActive]) +} + +enum JenisMigrasi { + MASUK + KELUAR +} + +// ========================================= DINAMIKA PENDUDUK ========================================= // +model DinamikaPenduduk { + id String @id @default(cuid()) + tahun Int // Tahun data + kelahiran Int // Jumlah kelahiran + kematian Int // Jumlah kematian + masuk Int // Jumlah penduduk masuk + keluar Int // Jumlah penduduk keluar + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + deletedAt DateTime? + isActive Boolean @default(true) + + @@index([tahun]) + @@index([isActive]) + @@unique([tahun]) +} + // ========================================= MUSIK DESA ========================================= // model MusikDesa { id String @id @default(cuid()) diff --git a/prisma/seed.ts b/prisma/seed.ts index 3c645b5b..85bb4ffe 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,71 +1,85 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-unused-vars */ import prisma from "@/lib/prisma"; +import { seedBerita } from "./_seeder_list/desa/berita/seed_berita"; +import { seedFoto } from "./_seeder_list/desa/gallery/foto/seed_foto"; import { seedVideo } from "./_seeder_list/desa/gallery/video/seed_video"; import { seedLayanan } from "./_seeder_list/desa/layanan/seed_layanan"; +import { seedMusikDesa } from "./_seeder_list/desa/musik-desa/seed_musik_desa"; import { seedPenghargaan } from "./_seeder_list/desa/penghargaan/penghargaan"; import { seedPengumuman } from "./_seeder_list/desa/pengumuman/seed_pengumuman"; import { seedPotensi } from "./_seeder_list/desa/potensi/seed_potensi"; import { seedProfileDesa } from "./_seeder_list/desa/profile-desa/seed_profile_desa"; import { seedProfilePerbekel } from "./_seeder_list/desa/profile-desa/seed_profile_perbekel"; +import { seedAPBDes } from "./_seeder_list/ekonomi/seed_apbdes"; +import { seedAPBDesItem } from "./_seeder_list/ekonomi/seed_apbdes_item"; +import { seedDemografiPekerjaan } from "./_seeder_list/ekonomi/seed_demografi_pekerjaan"; +import { seedJumlahPendudukMiskin } from "./_seeder_list/ekonomi/seed_jumlah_penduduk_miskin"; +import { seedJumlahPengangguran } from "./_seeder_list/ekonomi/seed_jumlah_pengangguran"; +import { seedLowonganKerjaLokal } from "./_seeder_list/ekonomi/seed_lowongan_kerja_lokal"; +import { seedPasarDesa } from "./_seeder_list/ekonomi/seed_pasar_desa"; +import { seedPendapatanAsli } from "./_seeder_list/ekonomi/seed_pendapatan_asli"; +import { seedPendudukUsiaKerjaYangMenganggur } from "./_seeder_list/ekonomi/seed_penduduk_usia_kerja_yang_menganggur"; +import { seedProgramKemiskinan } from "./_seeder_list/ekonomi/seed_program_kemiskinan"; +import { seedSektorUnggulanDesa } from "./_seeder_list/ekonomi/seed_sektor_unggulan_desa"; +import { seedStrukturBumdes } from "./_seeder_list/ekonomi/seed_struktur_bumdes"; +import { seedAjukan } from "./_seeder_list/inovasi/seed_ajukan"; +import { seedDesaDigital } from "./_seeder_list/inovasi/seed_desa_digital"; +import { seedInfoTeknologi } from "./_seeder_list/inovasi/seed_info_teknologi"; +import { seedKolaborasiInovasi } from "./_seeder_list/inovasi/seed_kolaborasi_inovasi"; +import { seedLayananOnlineDesa } from "./_seeder_list/inovasi/seed_layanan_online_desa"; +import { seedProgramKreatifDesa } from "./_seeder_list/inovasi/seed_program_kreatif_desa"; +import { seedKeamananLingkungan } from "./_seeder_list/keamanan/seed_keamanan_lingkungan"; +import { seedKontakDaruratKeamanan } from "./_seeder_list/keamanan/seed_kontak_darurat"; +import { seedLaporanPublik } from "./_seeder_list/keamanan/seed_laporan_publik"; +import { seedPencegahanKriminalitas } from "./_seeder_list/keamanan/seed_pencegahan_kriminalitas"; +import { seedPolsekTerdekat } from "./_seeder_list/keamanan/seed_polsek_terdekat"; +import { seedArtikelKesehatan } from "./_seeder_list/kesehatan/artikel-kesehatan/seed_artikel_kesehatan"; +import { seedFasilitasKesehatan } from "./_seeder_list/kesehatan/fasilitas-kesehatan/seed_fasilitas_kesehatan"; +import { seedInfoWabahPenyakit } from "./_seeder_list/kesehatan/info-wabah-penyakit/seed_info_wabah_penyakit"; +import { seedJadwalKegiatan } from "./_seeder_list/kesehatan/jadwal-kegiatan/seed_jadwal_kegiatan"; +import { seedKontakDarurat } from "./_seeder_list/kesehatan/kontak-darurat/seed_kontak_darurat"; +import { seedPenangananDarurat } from "./_seeder_list/kesehatan/penanganan-darurat/seed_penanganan_darurat"; +import { seedPosyandu } from "./_seeder_list/kesehatan/posyandu/seed_posyandu"; +import { seedProgramKesehatan } from "./_seeder_list/kesehatan/program-kesehatan/seed_program_kesehatan"; +import { seedPuskesmas } from "./_seeder_list/kesehatan/puskesmas/seed_puskesmas"; +import { seedGrafikKepuasan } from "./_seeder_list/kesehatan/seed_grafik_kepuasan"; +import { seedKelahiranKematian } from "./_seeder_list/kesehatan/seed_kelahiran_kematian"; import { seedDesaAntiKorupsi } from "./_seeder_list/landing-page/desa-anti-korupsi/seed_desa_anti_korupsi"; import { seedPrestasiDesa } from "./_seeder_list/landing-page/prestasi-desa/seed_prestasi_desa"; import { seedMediaSosial } from "./_seeder_list/landing-page/profil_landing_page/seed_media_sosial"; import { seedProfileLP } from "./_seeder_list/landing-page/profil_landing_page/seed_profile_lp"; import { seedProgramInovasi } from "./_seeder_list/landing-page/profil_landing_page/seed_program_inovasi"; import { seedSDGSDesa } from "./_seeder_list/landing-page/sdgs/seed_sdgs"; +import { seedDataGotongRoyong } from "./_seeder_list/lingkungan/seed_data_gotong_royong"; +import { seedDataLingkunganDesa } from "./_seeder_list/lingkungan/seed_data_lingkungan_desa"; +import { seedEdukasiLingkungan } from "./_seeder_list/lingkungan/seed_edukasi_lingkungan"; +import { seedKonservasiAdatBali } from "./_seeder_list/lingkungan/seed_konservasi_adat_bali"; +import { seedPengelolaanSampah } from "./_seeder_list/lingkungan/seed_pengelolaan_sampah"; +import { seedProgramPenghijauan } from "./_seeder_list/lingkungan/seed_program_penghijauan"; +import { seedBeasiswaPendaftar } from "./_seeder_list/pendidikan/seed_beasiswa_pendaftar"; +import { seedBimbinganBelajar } from "./_seeder_list/pendidikan/seed_bimbingan_belajar"; +import { seedDataPendidikan } from "./_seeder_list/pendidikan/seed_data_pendidikan"; +import { seedDataPerpustakaan } from "./_seeder_list/pendidikan/seed_data_perpustakaan"; +import { seedInfoProgramPendidikan } from "./_seeder_list/pendidikan/seed_info_program_pendidikan"; +import { seedInfoSekolah } from "./_seeder_list/pendidikan/seed_info_sekolah"; +import { seedKeunggulanProgram } from "./_seeder_list/pendidikan/seed_keunggulan_program"; +import { seedPendidikanNonFormal } from "./_seeder_list/pendidikan/seed_pendidikan_non_formal"; +import { seedDataBanjar } from "./_seeder_list/kependudukan/seed_data_banjar"; +import { seedDinamikaPenduduk } from "./_seeder_list/kependudukan/seed_dinamika_penduduk"; +import { seedDistribusiAgama } from "./_seeder_list/kependudukan/seed_distribusi_agama"; +import { seedDistribusiUmur } from "./_seeder_list/kependudukan/seed_distribusi_umur"; +import { seedMigrasiPenduduk } from "./_seeder_list/kependudukan/seed_migrasi_penduduk"; import { seedDaftarInformasiPublikPpid } from "./_seeder_list/ppid/daftar-informasi-publik-ppid/seed_daftar_informasi_publik_ppid"; import { seedDasarHukumPpid } from "./_seeder_list/ppid/dasar-hukum-ppid/seed_dasar_hukum_ppid"; import { seedIkmPpid } from "./_seeder_list/ppid/ikm/seed_ikm"; +import { seedProfilPpd } from "./_seeder_list/ppid/profil-ppid/seed_profil_ppd"; import { seedPegawaiPpid } from "./_seeder_list/ppid/struktur-ppid/seed_struktur_ppid"; import { seedVisiMisiPpid } from "./_seeder_list/ppid/visi-misi-ppid/seed_visi_misi_ppid"; -import dataPendidikan from "./data/pendidikan/data-pendidikan/data-pendidikan.json"; import roles from "./data/user/roles.json"; import users from "./data/user/users.json"; import { safeSeedUnique } from "./safeseedUnique"; import seedAssets from "./seed_assets"; -import { seedBerita } from "./_seeder_list/desa/berita/seed_berita"; -import { seedFoto } from "./_seeder_list/desa/gallery/foto/seed_foto"; -import { seedPosyandu } from "./_seeder_list/kesehatan/posyandu/seed_posyandu"; -import { seedPuskesmas } from "./_seeder_list/kesehatan/puskesmas/seed_puskesmas"; -import { seedProgramKesehatan } from "./_seeder_list/kesehatan/program-kesehatan/seed_program_kesehatan"; -import { seedPenangananDarurat } from "./_seeder_list/kesehatan/penanganan-darurat/seed_penanganan_darurat"; -import { seedKontakDarurat } from "./_seeder_list/kesehatan/kontak-darurat/seed_kontak_darurat"; -import { seedInfoWabahPenyakit } from "./_seeder_list/kesehatan/info-wabah-penyakit/seed_info_wabah_penyakit"; -import { seedKeamananLingkungan } from "./_seeder_list/keamanan/seed_keamanan_lingkungan"; -import { seedPolsekTerdekat } from "./_seeder_list/keamanan/seed_polsek_terdekat"; -import { seedKontakDaruratKeamanan } from "./_seeder_list/keamanan/seed_kontak_darurat"; -import { seedPencegahanKriminalitas } from "./_seeder_list/keamanan/seed_pencegahan_kriminalitas"; -import { seedLaporanPublik } from "./_seeder_list/keamanan/seed_laporan_publik"; -import { seedPasarDesa } from "./_seeder_list/ekonomi/seed_pasar_desa"; -import { seedLowonganKerjaLokal } from "./_seeder_list/ekonomi/seed_lowongan_kerja_lokal"; -import { seedDemografiPekerjaan } from "./_seeder_list/ekonomi/seed_demografi_pekerjaan"; -import { seedSektorUnggulanDesa } from "./_seeder_list/ekonomi/seed_sektor_unggulan_desa"; -import { seedProgramKemiskinan } from "./_seeder_list/ekonomi/seed_program_kemiskinan"; -import { seedJumlahPendudukMiskin } from "./_seeder_list/ekonomi/seed_jumlah_penduduk_miskin"; -import { seedPendudukUsiaKerjaYangMenganggur } from "./_seeder_list/ekonomi/seed_penduduk_usia_kerja_yang_menganggur"; -import { seedJumlahPengangguran } from "./_seeder_list/ekonomi/seed_jumlah_pengangguran"; -import { seedPendapatanAsli } from "./_seeder_list/ekonomi/seed_pendapatan_asli"; -import { seedStrukturBumdes } from "./_seeder_list/ekonomi/seed_struktur_bumdes"; -import { seedAjukan } from "./_seeder_list/inovasi/seed_ajukan"; -import { seedDesaDigital } from "./_seeder_list/inovasi/seed_desa_digital"; -import { seedLayananOnlineDesa } from "./_seeder_list/inovasi/seed_layanan_online_desa"; -import { seedProgramKreatifDesa } from "./_seeder_list/inovasi/seed_program_kreatif_desa"; -import { seedKolaborasiInovasi } from "./_seeder_list/inovasi/seed_kolaborasi_inovasi"; -import { seedInfoTeknologi } from "./_seeder_list/inovasi/seed_info_teknologi"; -import { seedPengelolaanSampah } from "./_seeder_list/lingkungan/seed_pengelolaan_sampah"; -import { seedProgramPenghijauan } from "./_seeder_list/lingkungan/seed_program_penghijauan"; -import { seedDataLingkunganDesa } from "./_seeder_list/lingkungan/seed_data_lingkungan_desa"; -import { seedDataGotongRoyong } from "./_seeder_list/lingkungan/seed_data_gotong_royong"; -import { seedEdukasiLingkungan } from "./_seeder_list/lingkungan/seed_edukasi_lingkungan"; -import { seedKonservasiAdatBali } from "./_seeder_list/lingkungan/seed_konservasi_adat_bali"; -import { seedInfoSekolah } from "./_seeder_list/pendidikan/seed_info_sekolah"; -import { seedInfoProgramPendidikan } from "./_seeder_list/pendidikan/seed_info_program_pendidikan"; -import { seedBimbinganBelajar } from "./_seeder_list/pendidikan/seed_bimbingan_belajar"; -import { seedDataPendidikan } from "./_seeder_list/pendidikan/seed_data_pendidikan"; -import { seedPendidikanNonFormal } from "./_seeder_list/pendidikan/seed_pendidikan_non_formal"; -import { seedDataPerpustakaan } from "./_seeder_list/pendidikan/seed_data_perpustakaan"; -import { seedProfilPpd } from "./_seeder_list/ppid/profil-ppid/seed_profil_ppd"; (async () => { // Always run seedAssets to handle new images without duplication @@ -344,6 +358,32 @@ import { seedProfilPpd } from "./_seeder_list/ppid/profil-ppid/seed_profil_ppd"; // =========== SUBMENU DATA PENDIDIKAN ===================== await seedDataPendidikan(); + + // =========== NEW SEEDERS ===================== + // ===== KESEHATAN ===== + await seedFasilitasKesehatan(); + await seedArtikelKesehatan(); + await seedJadwalKegiatan(); + await seedKelahiranKematian(); + await seedGrafikKepuasan(); + + // ===== EKONOMI ===== + await seedAPBDes(); + await seedAPBDesItem(); + + // ===== PENDIDIKAN ===== + await seedKeunggulanProgram(); + await seedBeasiswaPendaftar(); + + // ===== DESA ===== + await seedMusikDesa(); + + // ===== KEPENDUDUKAN ===== + await seedDataBanjar(); + await seedDistribusiAgama(); + await seedDistribusiUmur(); + await seedMigrasiPenduduk(); + await seedDinamikaPenduduk(); })() .then(() => prisma.$disconnect()) .catch((e) => { diff --git a/src/app/admin/(dashboard)/_state/kependudukan/dashboard.ts b/src/app/admin/(dashboard)/_state/kependudukan/dashboard.ts new file mode 100644 index 00000000..894ccbee --- /dev/null +++ b/src/app/admin/(dashboard)/_state/kependudukan/dashboard.ts @@ -0,0 +1,27 @@ +import ApiFetch from "@/lib/api-fetch"; +import { proxy } from "valtio"; + +const kependudukanDashboard = proxy({ + summary: { + data: null as any, + loading: false, + async load() { + kependudukanDashboard.summary.loading = true; + try { + const res = await ApiFetch.api.kependudukan.dashboard.summary.get(); + if (res.status === 200 && res.data?.success) { + kependudukanDashboard.summary.data = res.data.data; + } else { + kependudukanDashboard.summary.data = null; + } + } catch (err) { + console.error("Gagal fetch dashboard summary:", err); + kependudukanDashboard.summary.data = null; + } finally { + kependudukanDashboard.summary.loading = false; + } + }, + }, +}); + +export default kependudukanDashboard; diff --git a/src/app/admin/(dashboard)/_state/kependudukan/data-banjar.ts b/src/app/admin/(dashboard)/_state/kependudukan/data-banjar.ts new file mode 100644 index 00000000..d1240f3c --- /dev/null +++ b/src/app/admin/(dashboard)/_state/kependudukan/data-banjar.ts @@ -0,0 +1,208 @@ +import ApiFetch from "@/lib/api-fetch"; +import { proxy } from "valtio"; +import { toast } from "react-toastify"; +import { z } from "zod"; + +const templateDataBanjar = z.object({ + nama: z.string().min(1, "Nama banjar harus diisi"), + penduduk: z.number().min(0, "Jumlah penduduk harus diisi"), + kk: z.number().min(0, "Jumlah KK harus diisi"), + miskin: z.number().min(0, "Jumlah penduduk miskin harus diisi"), + tahun: z.number().min(2000, "Tahun harus diisi"), +}); + +const dataBanjar = proxy({ + create: { + form: { + nama: "", + penduduk: 0, + kk: 0, + miskin: 0, + tahun: new Date().getFullYear(), + }, + loading: false, + async create() { + const cek = templateDataBanjar.safeParse(dataBanjar.create.form); + if (!cek.success) { + const err = `[${cek.error.issues.map((v) => `${v.path.join(".")}`).join("\n")}] required`; + toast.error(err); + return null; + } + try { + dataBanjar.create.loading = true; + const res = await ApiFetch.api.kependudukan.databanjar["create"].post(dataBanjar.create.form); + + if (res.status === 200) { + const id = res.data?.data?.id; + if (id) { + toast.success("Sukses menambahkan data banjar"); + dataBanjar.create.form = { nama: "", penduduk: 0, kk: 0, miskin: 0, tahun: new Date().getFullYear() }; + dataBanjar.findMany.load(); + return id; + } + } + toast.error("Gagal menambahkan data"); + return null; + } catch (error) { + console.log((error as Error).message); + return null; + } finally { + dataBanjar.create.loading = false; + } + }, + }, + + findMany: { + data: null as any[] | null, + page: 1, + totalPages: 1, + loading: false, + search: "", + tahun: undefined as number | undefined, + load: async (page = 1, limit = 10, search = "", tahun?: number) => { + dataBanjar.findMany.loading = true; + dataBanjar.findMany.page = page; + dataBanjar.findMany.search = search; + dataBanjar.findMany.tahun = tahun; + + try { + const query: any = { page, limit }; + if (search) query.search = search; + if (tahun) query.tahun = tahun; + + const res = await ApiFetch.api.kependudukan.databanjar["find-many"].get({ query }); + + if (res.status === 200 && res.data?.success) { + dataBanjar.findMany.data = res.data.data ?? []; + dataBanjar.findMany.totalPages = res.data.totalPages ?? 1; + } else { + dataBanjar.findMany.data = []; + dataBanjar.findMany.totalPages = 1; + } + } catch (err) { + console.error("Gagal fetch data banjar paginated:", err); + dataBanjar.findMany.data = []; + dataBanjar.findMany.totalPages = 1; + } finally { + dataBanjar.findMany.loading = false; + } + }, + }, + + findUnique: { + data: null as any | null, + async load(id: string) { + try { + const res = await fetch(`/api/kependudukan/databanjar/${id}`); + if (res.ok) { + const data = await res.json(); + dataBanjar.findUnique.data = data.data ?? null; + } else { + console.error("Failed to fetch data banjar:", res.statusText); + dataBanjar.findUnique.data = null; + } + } catch (error) { + console.error("Error fetching data banjar:", error); + dataBanjar.findUnique.data = null; + } + }, + }, + + update: { + id: "", + form: { + nama: "", + penduduk: 0, + kk: 0, + miskin: 0, + tahun: new Date().getFullYear(), + }, + loading: false, + async submit() { + const id = this.id; + if (!id) { + toast.warn("ID tidak valid"); + return null; + } + + const formData = { + nama: this.form.nama, + penduduk: this.form.penduduk, + kk: this.form.kk, + miskin: this.form.miskin, + tahun: this.form.tahun, + }; + + const cek = templateDataBanjar.safeParse(formData); + if (!cek.success) { + const err = `[${cek.error.issues.map((v) => `${v.path.join(".")}`).join("\n")}] required`; + toast.error(err); + return null; + } + + try { + this.loading = true; + const res = await fetch(`/api/kependudukan/databanjar/${id}`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(formData), + }); + + const result = await res.json(); + + if (!res.ok || !result?.success) { + throw new Error(result?.message || "Gagal update data"); + } + + toast.success("Berhasil update data!"); + await dataBanjar.findMany.load(); + return result.data; + } catch (error) { + console.error("Update error:", error); + toast.error("Gagal update data banjar"); + throw error; + } finally { + this.loading = false; + } + }, + }, + + delete: { + loading: false, + async byId(id: string) { + if (!id) return toast.warn("ID tidak valid"); + + try { + dataBanjar.delete.loading = true; + + const response = await fetch( + `/api/kependudukan/databanjar/del/${id}`, + { + method: "DELETE", + headers: { + "Content-Type": "application/json", + }, + } + ); + + const result = await response.json(); + + if (response.ok && result?.success) { + toast.success(result.message || "Data banjar berhasil dihapus"); + await dataBanjar.findMany.load(); + } else { + toast.error(result?.message || "Gagal menghapus data banjar"); + } + } catch (error) { + console.error("Gagal delete:", error); + toast.error("Terjadi kesalahan saat menghapus data banjar"); + } finally { + dataBanjar.delete.loading = false; + } + }, + }, +}); + +export default dataBanjar; diff --git a/src/app/admin/(dashboard)/_state/kependudukan/distribusi-agama.ts b/src/app/admin/(dashboard)/_state/kependudukan/distribusi-agama.ts new file mode 100644 index 00000000..84dad8bf --- /dev/null +++ b/src/app/admin/(dashboard)/_state/kependudukan/distribusi-agama.ts @@ -0,0 +1,198 @@ +import ApiFetch from "@/lib/api-fetch"; +import { proxy } from "valtio"; +import { toast } from "react-toastify"; +import { z } from "zod"; + +const templateDistribusiAgama = z.object({ + agama: z.string().min(1, "Agama harus diisi"), + jumlah: z.number().min(0, "Jumlah harus diisi"), + tahun: z.number().min(2000, "Tahun harus diisi"), +}); + +const distribusiAgama = proxy({ + create: { + form: { + agama: "", + jumlah: 0, + tahun: new Date().getFullYear(), + }, + loading: false, + async create() { + const cek = templateDistribusiAgama.safeParse(distribusiAgama.create.form); + if (!cek.success) { + const err = `[${cek.error.issues.map((v) => `${v.path.join(".")}`).join("\n")}] required`; + toast.error(err); + return null; + } + try { + distribusiAgama.create.loading = true; + const res = await ApiFetch.api.kependudukan.distribusiagama["create"].post(distribusiAgama.create.form); + + if (res.status === 200) { + const id = res.data?.data?.id; + if (id) { + toast.success("Sukses menambahkan distribusi agama"); + distribusiAgama.create.form = { agama: "", jumlah: 0, tahun: new Date().getFullYear() }; + distribusiAgama.findMany.load(); + return id; + } + } + toast.error("Gagal menambahkan data"); + return null; + } catch (error) { + console.log((error as Error).message); + return null; + } finally { + distribusiAgama.create.loading = false; + } + }, + }, + + findMany: { + data: null as any[] | null, + page: 1, + totalPages: 1, + loading: false, + search: "", + load: async (page = 1, limit = 10, search = "", tahun?: number) => { + distribusiAgama.findMany.loading = true; + distribusiAgama.findMany.page = page; + distribusiAgama.findMany.search = search; + + try { + const query: any = { page, limit }; + if (tahun) query.tahun = tahun; + if (search) query.search = search; + + const res = await ApiFetch.api.kependudukan.distribusiagama["find-many"].get({ query }); + + if (res.status === 200 && res.data?.success) { + distribusiAgama.findMany.data = res.data.data ?? []; + distribusiAgama.findMany.totalPages = res.data.totalPages ?? 1; + } else { + distribusiAgama.findMany.data = []; + distribusiAgama.findMany.totalPages = 1; + } + } catch (err) { + console.error("Gagal fetch distribusi agama paginated:", err); + distribusiAgama.findMany.data = []; + distribusiAgama.findMany.totalPages = 1; + } finally { + distribusiAgama.findMany.loading = false; + } + }, + }, + + findUnique: { + data: null as any | null, + async load(id: string) { + try { + const res = await fetch(`/api/kependudukan/distribusiagama/${id}`); + if (res.ok) { + const data = await res.json(); + distribusiAgama.findUnique.data = data.data ?? null; + } else { + console.error("Failed to fetch distribusiAgama:", res.statusText); + distribusiAgama.findUnique.data = null; + } + } catch (error) { + console.error("Error fetching distribusiAgama:", error); + distribusiAgama.findUnique.data = null; + } + }, + }, + + update: { + id: "", + form: { + agama: "", + jumlah: 0, + tahun: new Date().getFullYear(), + }, + loading: false, + async submit() { + const id = this.id; + if (!id) { + toast.warn("ID tidak valid"); + return null; + } + + const formData = { + agama: this.form.agama, + jumlah: this.form.jumlah, + tahun: this.form.tahun, + }; + + const cek = templateDistribusiAgama.safeParse(formData); + if (!cek.success) { + const err = `[${cek.error.issues.map((v) => `${v.path.join(".")}`).join("\n")}] required`; + toast.error(err); + return null; + } + + try { + this.loading = true; + const res = await fetch(`/api/kependudukan/distribusiagama/${id}`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(formData), + }); + + const result = await res.json(); + + if (!res.ok || !result?.success) { + throw new Error(result?.message || "Gagal update data"); + } + + toast.success("Berhasil update data!"); + await distribusiAgama.findMany.load(); + return result.data; + } catch (error) { + console.error("Update error:", error); + toast.error("Gagal update data distribusi agama"); + throw error; + } finally { + this.loading = false; + } + }, + }, + + delete: { + loading: false, + async byId(id: string) { + if (!id) return toast.warn("ID tidak valid"); + + try { + distribusiAgama.delete.loading = true; + + const response = await fetch( + `/api/kependudukan/distribusiagama/del/${id}`, + { + method: "DELETE", + headers: { + "Content-Type": "application/json", + }, + } + ); + + const result = await response.json(); + + if (response.ok && result?.success) { + toast.success(result.message || "Distribusi agama berhasil dihapus"); + await distribusiAgama.findMany.load(); + } else { + toast.error(result?.message || "Gagal menghapus distribusi agama"); + } + } catch (error) { + console.error("Gagal delete:", error); + toast.error("Terjadi kesalahan saat menghapus distribusi agama"); + } finally { + distribusiAgama.delete.loading = false; + } + }, + }, +}); + +export default distribusiAgama; diff --git a/src/app/admin/(dashboard)/_state/kependudukan/distribusi-umur.ts b/src/app/admin/(dashboard)/_state/kependudukan/distribusi-umur.ts new file mode 100644 index 00000000..665f2f50 --- /dev/null +++ b/src/app/admin/(dashboard)/_state/kependudukan/distribusi-umur.ts @@ -0,0 +1,198 @@ +import ApiFetch from "@/lib/api-fetch"; +import { proxy } from "valtio"; +import { toast } from "react-toastify"; +import { z } from "zod"; + +const templateDistribusiUmur = z.object({ + rentangUmur: z.string().min(1, "Rentang umur harus diisi"), + jumlah: z.number().min(0, "Jumlah harus diisi"), + tahun: z.number().min(2000, "Tahun harus diisi"), +}); + +const distribusiUmur = proxy({ + create: { + form: { + rentangUmur: "", + jumlah: 0, + tahun: new Date().getFullYear(), + }, + loading: false, + async create() { + const cek = templateDistribusiUmur.safeParse(distribusiUmur.create.form); + if (!cek.success) { + const err = `[${cek.error.issues.map((v) => `${v.path.join(".")}`).join("\n")}] required`; + toast.error(err); + return null; + } + try { + distribusiUmur.create.loading = true; + const res = await ApiFetch.api.kependudukan.distribusiumur["create"].post(distribusiUmur.create.form); + + if (res.status === 200) { + const id = res.data?.data?.id; + if (id) { + toast.success("Sukses menambahkan distribusi umur"); + distribusiUmur.create.form = { rentangUmur: "", jumlah: 0, tahun: new Date().getFullYear() }; + distribusiUmur.findMany.load(); + return id; + } + } + toast.error("Gagal menambahkan data"); + return null; + } catch (error) { + console.log((error as Error).message); + return null; + } finally { + distribusiUmur.create.loading = false; + } + }, + }, + + findMany: { + data: null as any[] | null, + page: 1, + totalPages: 1, + loading: false, + search: "", + load: async (page = 1, limit = 10, search = "", tahun?: number) => { + distribusiUmur.findMany.loading = true; + distribusiUmur.findMany.page = page; + distribusiUmur.findMany.search = search; + + try { + const query: any = { page, limit }; + if (tahun) query.tahun = tahun; + if (search) query.search = search; + + const res = await ApiFetch.api.kependudukan.distribusiumur["find-many"].get({ query }); + + if (res.status === 200 && res.data?.success) { + distribusiUmur.findMany.data = res.data.data ?? []; + distribusiUmur.findMany.totalPages = res.data.totalPages ?? 1; + } else { + distribusiUmur.findMany.data = []; + distribusiUmur.findMany.totalPages = 1; + } + } catch (err) { + console.error("Gagal fetch distribusi umur paginated:", err); + distribusiUmur.findMany.data = []; + distribusiUmur.findMany.totalPages = 1; + } finally { + distribusiUmur.findMany.loading = false; + } + }, + }, + + findUnique: { + data: null as any | null, + async load(id: string) { + try { + const res = await fetch(`/api/kependudukan/distribusiumur/${id}`); + if (res.ok) { + const data = await res.json(); + distribusiUmur.findUnique.data = data.data ?? null; + } else { + console.error("Failed to fetch distribusi umur:", res.statusText); + distribusiUmur.findUnique.data = null; + } + } catch (error) { + console.error("Error fetching distribusi umur:", error); + distribusiUmur.findUnique.data = null; + } + }, + }, + + update: { + id: "", + form: { + rentangUmur: "", + jumlah: 0, + tahun: new Date().getFullYear(), + }, + loading: false, + async submit() { + const id = this.id; + if (!id) { + toast.warn("ID tidak valid"); + return null; + } + + const formData = { + rentangUmur: this.form.rentangUmur, + jumlah: this.form.jumlah, + tahun: this.form.tahun, + }; + + const cek = templateDistribusiUmur.safeParse(formData); + if (!cek.success) { + const err = `[${cek.error.issues.map((v) => `${v.path.join(".")}`).join("\n")}] required`; + toast.error(err); + return null; + } + + try { + this.loading = true; + const res = await fetch(`/api/kependudukan/distribusiumur/${id}`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(formData), + }); + + const result = await res.json(); + + if (!res.ok || !result?.success) { + throw new Error(result?.message || "Gagal update data"); + } + + toast.success("Berhasil update data!"); + await distribusiUmur.findMany.load(); + return result.data; + } catch (error) { + console.error("Update error:", error); + toast.error("Gagal update data distribusi umur"); + throw error; + } finally { + this.loading = false; + } + }, + }, + + delete: { + loading: false, + async byId(id: string) { + if (!id) return toast.warn("ID tidak valid"); + + try { + distribusiUmur.delete.loading = true; + + const response = await fetch( + `/api/kependudukan/distribusiumur/del/${id}`, + { + method: "DELETE", + headers: { + "Content-Type": "application/json", + }, + } + ); + + const result = await response.json(); + + if (response.ok && result?.success) { + toast.success(result.message || "Distribusi umur berhasil dihapus"); + await distribusiUmur.findMany.load(); + } else { + toast.error(result?.message || "Gagal menghapus distribusi umur"); + } + } catch (error) { + console.error("Gagal delete:", error); + toast.error("Terjadi kesalahan saat menghapus distribusi umur"); + } finally { + distribusiUmur.delete.loading = false; + } + }, + }, +}); + +export default distribusiUmur; diff --git a/src/app/admin/(dashboard)/_state/kependudukan/migrasi-penduduk.ts b/src/app/admin/(dashboard)/_state/kependudukan/migrasi-penduduk.ts new file mode 100644 index 00000000..0e7d32e3 --- /dev/null +++ b/src/app/admin/(dashboard)/_state/kependudukan/migrasi-penduduk.ts @@ -0,0 +1,210 @@ +import ApiFetch from "@/lib/api-fetch"; +import { proxy } from "valtio"; +import { toast } from "react-toastify"; +import { z } from "zod"; + +const templateMigrasiPenduduk = z.object({ + jenis: z.string().min(1, "Jenis migrasi harus diisi"), + nama: z.string().min(1, "Nama harus diisi"), + tanggal: z.string().min(1, "Tanggal harus diisi"), + asalTujuan: z.string().min(1, "Asal/Tujuan harus diisi"), + alasan: z.string().optional(), + jenisKelamin: z.string().optional(), +}); + +const migrasiPenduduk = proxy({ + create: { + form: { + jenis: "", + nama: "", + tanggal: "", + asalTujuan: "", + alasan: "", + jenisKelamin: "", + }, + loading: false, + async create() { + const cek = templateMigrasiPenduduk.safeParse(migrasiPenduduk.create.form); + if (!cek.success) { + const err = `[${cek.error.issues.map((v) => `${v.path.join(".")}`).join("\n")}] required`; + toast.error(err); + return null; + } + try { + migrasiPenduduk.create.loading = true; + const res = await ApiFetch.api.kependudukan.migrasipenduduk["create"].post(migrasiPenduduk.create.form); + + if (res.status === 200) { + const id = res.data?.data?.id; + if (id) { + toast.success("Sukses menambahkan data migrasi penduduk"); + migrasiPenduduk.create.form = { jenis: "", nama: "", tanggal: "", asalTujuan: "", alasan: "", jenisKelamin: "" }; + migrasiPenduduk.findMany.load(); + return id; + } + } + toast.error("Gagal menambahkan data"); + return null; + } catch (error) { + console.log((error as Error).message); + return null; + } finally { + migrasiPenduduk.create.loading = false; + } + }, + }, + + findMany: { + data: null as any[] | null, + page: 1, + totalPages: 1, + loading: false, + search: "", + load: async (page = 1, limit = 10, search = "", tahun?: number) => { + migrasiPenduduk.findMany.loading = true; + migrasiPenduduk.findMany.page = page; + migrasiPenduduk.findMany.search = search; + + try { + const query: any = { page, limit }; + if (tahun) query.tahun = tahun; + if (search) query.search = search; + + const res = await ApiFetch.api.kependudukan.migrasipenduduk["find-many"].get({ query }); + + if (res.status === 200 && res.data?.success) { + migrasiPenduduk.findMany.data = res.data.data ?? []; + migrasiPenduduk.findMany.totalPages = res.data.totalPages ?? 1; + } else { + migrasiPenduduk.findMany.data = []; + migrasiPenduduk.findMany.totalPages = 1; + } + } catch (err) { + console.error("Gagal fetch migrasi penduduk paginated:", err); + migrasiPenduduk.findMany.data = []; + migrasiPenduduk.findMany.totalPages = 1; + } finally { + migrasiPenduduk.findMany.loading = false; + } + }, + }, + + findUnique: { + data: null as any | null, + async load(id: string) { + try { + const res = await fetch(`/api/kependudukan/migrasipenduduk/${id}`); + if (res.ok) { + const data = await res.json(); + migrasiPenduduk.findUnique.data = data.data ?? null; + } else { + console.error("Failed to fetch migrasi penduduk:", res.statusText); + migrasiPenduduk.findUnique.data = null; + } + } catch (error) { + console.error("Error fetching migrasi penduduk:", error); + migrasiPenduduk.findUnique.data = null; + } + }, + }, + + update: { + id: "", + form: { + jenis: "", + nama: "", + tanggal: "", + asalTujuan: "", + alasan: "", + jenisKelamin: "", + }, + loading: false, + async submit() { + const id = this.id; + if (!id) { + toast.warn("ID tidak valid"); + return null; + } + + const formData = { + jenis: this.form.jenis, + nama: this.form.nama, + tanggal: this.form.tanggal, + asalTujuan: this.form.asalTujuan, + alasan: this.form.alasan, + jenisKelamin: this.form.jenisKelamin, + }; + + const cek = templateMigrasiPenduduk.safeParse(formData); + if (!cek.success) { + const err = `[${cek.error.issues.map((v) => `${v.path.join(".")}`).join("\n")}] required`; + toast.error(err); + return null; + } + + try { + this.loading = true; + const res = await fetch(`/api/kependudukan/migrasipenduduk/${id}`, { + method: "PUT", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify(formData), + }); + + const result = await res.json(); + + if (!res.ok || !result?.success) { + throw new Error(result?.message || "Gagal update data"); + } + + toast.success("Berhasil update data!"); + await migrasiPenduduk.findMany.load(); + return result.data; + } catch (error) { + console.error("Update error:", error); + toast.error("Gagal update data migrasi penduduk"); + throw error; + } finally { + this.loading = false; + } + }, + }, + + delete: { + loading: false, + async byId(id: string) { + if (!id) return toast.warn("ID tidak valid"); + + try { + migrasiPenduduk.delete.loading = true; + + const response = await fetch( + `/api/kependudukan/migrasipenduduk/del/${id}`, + { + method: "DELETE", + headers: { + "Content-Type": "application/json", + }, + } + ); + + const result = await response.json(); + + if (response.ok && result?.success) { + toast.success(result.message || "Data migrasi penduduk berhasil dihapus"); + await migrasiPenduduk.findMany.load(); + } else { + toast.error(result?.message || "Gagal menghapus data migrasi penduduk"); + } + } catch (error) { + console.error("Gagal delete:", error); + toast.error("Terjadi kesalahan saat menghapus data migrasi penduduk"); + } finally { + migrasiPenduduk.delete.loading = false; + } + }, + }, +}); + +export default migrasiPenduduk; diff --git a/src/app/admin/(dashboard)/kependudukan/_components/YearFilter.tsx b/src/app/admin/(dashboard)/kependudukan/_components/YearFilter.tsx new file mode 100644 index 00000000..41ef78b3 --- /dev/null +++ b/src/app/admin/(dashboard)/kependudukan/_components/YearFilter.tsx @@ -0,0 +1,43 @@ +import { Select, Group } from '@mantine/core'; +import { IconCalendar } from '@tabler/icons-react'; + +interface YearFilterProps { + value?: number; + onChange: (year: number | undefined) => void; + minYear?: number; + maxYear?: number; +} + +export function YearFilter({ + value, + onChange, + minYear = 2020, + maxYear = new Date().getFullYear() + 1, +}: YearFilterProps) { + const years = Array.from( + { length: maxYear - minYear + 1 }, + (_, i) => maxYear - i + ); + + const options = [ + { value: '', label: 'Semua Tahun' }, + ...years.map((year) => ({ + value: year.toString(), + label: year.toString(), + })), + ]; + + return ( + + + + + { + stateDistribusiAgama.create.form.agama = val || ''; + }} + required + searchable + /> + + { + stateDistribusiAgama.create.form.jumlah = Number(val || 0); + }} + min={0} + required + /> + + + + + + { + stateDistribusiUmur.create.form.rentangUmur = val || ''; + }} + required + searchable + /> + + { + stateDistribusiUmur.create.form.jumlah = Number(val || 0); + }} + min={0} + required + /> + + + + + + { + setFormData((prev) => ({ + ...prev, + tanggal: val || '', + })); + }} + required + /> + + + +