58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
# PocketBase Collection Creation Script
|
|
# Create all collections needed for a Firebase migration.
|
|
# Run from the Docker host: python3 create_collections.py
|
|
|
|
import urllib.request
|
|
import json
|
|
|
|
BASE = "http://127.0.0.1:8091"
|
|
EMAIL = "admin@example.com"
|
|
PASS = "your-admin-password"
|
|
|
|
def api(method, path, data=None, token=None):
|
|
headers = {"Content-Type": "application/json"}
|
|
if token: headers["Authorization"] = token
|
|
req = urllib.request.Request(f"{BASE}{path}",
|
|
data=json.dumps(data).encode() if data else None,
|
|
headers=headers, method=method)
|
|
try:
|
|
resp = urllib.request.urlopen(req)
|
|
return json.loads(resp.read())
|
|
except urllib.error.HTTPError as e:
|
|
body = e.read().decode()
|
|
if "exists" in body.lower() or "unique" in body.lower():
|
|
return None # Already exists, OK
|
|
print(f" ERROR {method} {path}: HTTP {e.code} — {body[:300]}")
|
|
return None
|
|
|
|
# Auth
|
|
auth = api("POST", "/api/collections/_superusers/auth-with-password",
|
|
{"identity": EMAIL, "password": PASS})
|
|
token = auth["token"]
|
|
|
|
# Define your collections — add our app's collections
|
|
COLLECTIONS = [
|
|
("repairOrders", [{"name": "userId", "type": "text", "required": True}]),
|
|
("appointments", [{"name": "userId", "type": "text", "required": True}]),
|
|
("quotes", [{"name": "userId", "type": "text", "required": True}]),
|
|
("tasks", [{"name": "userId", "type": "text", "required": True}]),
|
|
("services", [{"name": "userId", "type": "text", "required": True}]),
|
|
("customers", [{"name": "userId", "type": "text", "required": True}]),
|
|
("settings", [
|
|
{"name": "userId", "type": "text", "required": True},
|
|
{"name": "name", "type": "text", "required": True},
|
|
]),
|
|
]
|
|
|
|
# Create collections (empty rules first — rules fail if they reference fields before schema exists)
|
|
for name, schema in COLLECTIONS:
|
|
result = api("POST", "/api/collections", {
|
|
"name": name, "type": "base", "schema": schema,
|
|
"listRule": "", "viewRule": "", "createRule": "",
|
|
"updateRule": "", "deleteRule": ""
|
|
}, token)
|
|
if result: print(f"Created: {name}")
|
|
else: print(f"Skipped: {name} (exists or error)")
|
|
|
|
print("Done!")
|