summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-03-07 09:53:41 +0530
committerBobby <[email protected]>2026-03-07 09:53:41 +0530
commit9d37256e004cb381edc7b0b7c0c05ecf1674ee4d (patch)
tree2c24fad5235886ebbde060675c41943fd29a0ed0 /scripts
parentaf1e0dcda976a8f45a792f91507eb32b8259d3ed (diff)
downloadpagoda-9d37256e004cb381edc7b0b7c0c05ecf1674ee4d.tar.xz
pagoda-9d37256e004cb381edc7b0b7c0c05ecf1674ee4d.zip
feat(council): implement user sorting functionality and enhance user list display
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/seed.sh61
1 files changed, 61 insertions, 0 deletions
diff --git a/scripts/seed.sh b/scripts/seed.sh
new file mode 100755
index 0000000..59971dc
--- /dev/null
+++ b/scripts/seed.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+set -euo pipefail
+
+DB_PATH="shrine/pagoda.db"
+
+if [ ! -f "$DB_PATH" ]; then
+ echo "Database not found at $DB_PATH"
+ exit 1
+fi
+
+HASH=$(npx -y bcryptjs-cli password 2>/dev/null)
+OWNER_DATE=$(date -v-4m +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || date -d "4 months ago" +"%Y-%m-%dT%H:%M:%SZ")
+
+echo "Generating 99 unique citizens..."
+npx -y @faker-js/cli firstName >/dev/null 2>&1
+FAKER_MODULES=$(find ~/.npm/_npx -path "*/@faker-js/cli/bin/faker.js" -print -quit 2>/dev/null)
+FAKER_MODULES="${FAKER_MODULES%/@faker-js/cli/bin/faker.js}"
+
+NAMES=$(NODE_PATH="$FAKER_MODULES" node -e "
+var f = require('@faker-js/faker').faker;
+var now = Date.now();
+var threeMonthsAgo = new Date(now);
+threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3);
+var range = now - threeMonthsAgo.getTime();
+var seen = new Set();
+while (seen.size < 99) {
+ var first = f.person.firstName();
+ var username = first.toLowerCase().replace(/[^a-z]/g, '');
+ if (username.length >= 3 && username.length <= 32 && !seen.has(username)) {
+ seen.add(username);
+ var last = f.person.lastName();
+ var joinDate = new Date(threeMonthsAgo.getTime() + Math.random() * range).toISOString().replace(/\.\d{3}Z/, 'Z');
+ console.log(username + '|' + first + ' ' + last + '|' + joinDate);
+ }
+}
+")
+
+SQL_FILE=$(mktemp)
+trap "rm -f $SQL_FILE" EXIT
+
+printf '%s' "INSERT OR IGNORE INTO users (username, email, password_hash, display_name, role, email_verified, created_at, updated_at) VALUES " > "$SQL_FILE"
+printf '%s' "('cr', '[email protected]', '${HASH}', 'Bobby', 'owner', 1, '${OWNER_DATE}', '${OWNER_DATE}')" >> "$SQL_FILE"
+
+COUNT=0
+
+while IFS='|' read -r USERNAME DISPLAY JOIN_DATE; do
+ DISPLAY=$(echo "$DISPLAY" | sed "s/'/''/g")
+
+ printf '%s' ", ('${USERNAME}', '${USERNAME}@pagoda.local', '${HASH}', '${DISPLAY}', 'member', 1, '${JOIN_DATE}', '${JOIN_DATE}')" >> "$SQL_FILE"
+
+ COUNT=$((COUNT + 1))
+ echo " [$COUNT/99] $USERNAME ($DISPLAY)"
+done <<< "$NAMES"
+
+echo ";" >> "$SQL_FILE"
+
+echo "Inserting into database..."
+sqlite3 "$DB_PATH" < "$SQL_FILE"
+
+TOTAL=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM users;")
+echo "Done. Total users: $TOTAL" \ No newline at end of file