From c765e6391df1b31b46dcbfa1b2546062655cdcff Mon Sep 17 00:00:00 2001 From: Christian Beutel <> Date: Sun, 16 Mar 2025 21:20:05 +0100 Subject: [PATCH] start migration to pocketbase 0.23 --- db/.gitignore | 2 +- db/go.mod | 83 ++-- db/go.sum | 79 ++++ db/integrations/komoot/komoot.go | 39 +- db/integrations/strava/strava.go | 52 ++- db/main.go | 366 ++++++++---------- .../1709593298_collections_snapshot.go | 18 +- db/migrations/1709982456_updated_trails.go | 32 +- db/migrations/1710073788_updated_trails.go | 25 +- db/migrations/1710949270_updated_waypoints.go | 24 +- db/util/meilisearch.go | 14 +- db/util/notification.go | 18 +- web/package-lock.json | 12 +- web/package.json | 2 +- 14 files changed, 390 insertions(+), 376 deletions(-) diff --git a/db/.gitignore b/db/.gitignore index c365cbb3..e056d6fa 100644 --- a/db/.gitignore +++ b/db/.gitignore @@ -1,3 +1,3 @@ .DS_Store -/pb_data +/pb_data* .env \ No newline at end of file diff --git a/db/go.mod b/db/go.mod index be9d0fb7..c8a04abd 100644 --- a/db/go.mod +++ b/db/go.mod @@ -1,54 +1,53 @@ module pocketbase -go 1.22.0 +go 1.23 + +toolchain go1.24.1 require ( github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61 github.com/meilisearch/meilisearch-go v0.29.0 - github.com/pocketbase/dbx v1.10.1 - github.com/pocketbase/pocketbase v0.22.26 + github.com/pocketbase/dbx v1.11.0 + github.com/pocketbase/pocketbase v0.23.12 ) -require ( - github.com/rogpeppe/go-internal v1.13.1 // indirect - github.com/twpayne/go-geom v1.5.7 // indirect -) +require github.com/twpayne/go-geom v1.5.7 // indirect require ( github.com/AlecAivazis/survey/v2 v2.3.7 // indirect github.com/andybalholm/brotli v1.1.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go-v2 v1.32.2 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect - github.com/aws/aws-sdk-go-v2/config v1.27.31 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.30 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 // indirect - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 // indirect + github.com/aws/aws-sdk-go-v2 v1.32.7 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect + github.com/aws/aws-sdk-go-v2/config v1.28.7 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.48 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.44 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 // indirect - github.com/aws/smithy-go v1.22.0 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.71.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 // indirect + github.com/aws/smithy-go v1.22.1 // indirect github.com/disintegration/imaging v1.6.2 // indirect github.com/domodwyer/mailyak/v3 v3.6.2 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/fatih/color v1.17.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.5 // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.7 // indirect github.com/ganigeorgiev/fexpr v0.4.1 // indirect github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect github.com/goccy/go-json v0.10.3 // indirect - github.com/golang-jwt/jwt/v4 v4.5.0 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang-jwt/jwt/v4 v4.5.1 // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/gax-go/v2 v2.13.0 // indirect + github.com/googleapis/gax-go/v2 v2.14.1 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/josharian/intern v1.0.0 // indirect @@ -60,7 +59,7 @@ require ( github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/spf13/cast v1.7.0 // indirect + github.com/spf13/cast v1.7.1 // indirect github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/twpayne/go-gpx v1.4.1 @@ -68,26 +67,26 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect go.opencensus.io v0.24.0 // indirect - gocloud.dev v0.39.0 // indirect + gocloud.dev v0.40.0 // indirect golang.org/x/crypto v0.31.0 // indirect - golang.org/x/image v0.19.0 // indirect + golang.org/x/image v0.23.0 // indirect golang.org/x/net v0.33.0 // indirect - golang.org/x/oauth2 v0.22.0 // indirect + golang.org/x/oauth2 v0.24.0 // indirect golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.28.0 // indirect golang.org/x/term v0.27.0 // indirect golang.org/x/text v0.21.0 // indirect - golang.org/x/time v0.6.0 // indirect - golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 // indirect - google.golang.org/api v0.194.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed // indirect - google.golang.org/grpc v1.65.0 // indirect - google.golang.org/protobuf v1.34.2 // indirect - modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a // indirect + golang.org/x/time v0.8.0 // indirect + golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect + google.golang.org/api v0.214.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb // indirect + google.golang.org/grpc v1.69.2 // indirect + google.golang.org/protobuf v1.36.0 // indirect + modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9 // indirect modernc.org/libc v1.55.3 // indirect modernc.org/mathutil v1.6.0 // indirect modernc.org/memory v1.8.0 // indirect - modernc.org/sqlite v1.32.0 // indirect + modernc.org/sqlite v1.34.4 // indirect modernc.org/strutil v1.2.0 // indirect modernc.org/token v1.1.0 // indirect ) diff --git a/db/go.sum b/db/go.sum index 48459d7f..2e8989f5 100644 --- a/db/go.sum +++ b/db/go.sum @@ -18,6 +18,10 @@ github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1r github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= +github.com/alecthomas/assert/v2 v2.10.0 h1:jjRCHsj6hBJhkmhznrCzoNpbA3zqy0fYiUcYZP/GkPY= +github.com/alecthomas/assert/v2 v2.10.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= +github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= +github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= @@ -27,42 +31,78 @@ github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v1.32.2 h1:AkNLZEyYMLnx/Q/mSKkcMqwNFXMAvFto9bNsHqcTduI= github.com/aws/aws-sdk-go-v2 v1.32.2/go.mod h1:2SK5n0a2karNTv5tbP1SjsX0uhttou00v/HpXKM1ZUo= +github.com/aws/aws-sdk-go-v2 v1.32.7 h1:ky5o35oENWi0JYWUZkB7WYvVPP+bcRF5/Iq7JWSb5Rw= +github.com/aws/aws-sdk-go-v2 v1.32.7/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5LThwgXdSQorVr91L127ttckI9QQU= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc= github.com/aws/aws-sdk-go-v2/config v1.27.31 h1:kxBoRsjhT3pq0cKthgj6RU6bXTm/2SgdoUMyrVw0rAI= github.com/aws/aws-sdk-go-v2/config v1.27.31/go.mod h1:z04nZdSWFPaDwK3DdJOG2r+scLQzMYuJeW0CujEm9FM= +github.com/aws/aws-sdk-go-v2/config v1.28.7 h1:GduUnoTXlhkgnxTD93g1nv4tVPILbdNQOzav+Wpg7AE= +github.com/aws/aws-sdk-go-v2/config v1.28.7/go.mod h1:vZGX6GVkIE8uECSUHB6MWAUsd4ZcG2Yq/dMa4refR3M= github.com/aws/aws-sdk-go-v2/credentials v1.17.30 h1:aau/oYFtibVovr2rDt8FHlU17BTicFEMAi29V1U+L5Q= github.com/aws/aws-sdk-go-v2/credentials v1.17.30/go.mod h1:BPJ/yXV92ZVq6G8uYvbU0gSl8q94UB63nMT5ctNO38g= +github.com/aws/aws-sdk-go-v2/credentials v1.17.48 h1:IYdLD1qTJ0zanRavulofmqut4afs45mOWEI+MzZtTfQ= +github.com/aws/aws-sdk-go-v2/credentials v1.17.48/go.mod h1:tOscxHN3CGmuX9idQ3+qbkzrjVIx32lqDSU1/0d/qXs= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22 h1:kqOrpojG71DxJm/KDPO+Z/y1phm1JlC8/iT+5XRmAn8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.22/go.mod h1:NtSFajXVVL8TA2QNngagVZmUtXciyrHOt7xgz4faS/M= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15 h1:ijB7hr56MngOiELJe0C5aQRaBQ11LveNgWFyG02AUto= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.15/go.mod h1:0QEmQSSWMVfiAk93l1/ayR9DQ9+jwni7gHS2NARZXB0= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.44 h1:2zxMLXLedpB4K1ilbJFxtMKsVKaexOqDttOhc0QGm3Q= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.44/go.mod h1:VuLHdqwjSvgftNC7yqPWyGVhEwPmJpeRi07gOgOfHF8= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 h1:TNyt/+X43KJ9IJJMjKfa3bNTiZbUP7DeCxfbTROESwY= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16/go.mod h1:2DwJF39FlNAUiX5pAc0UNeiz16lK2t7IaFcm0LFHEgc= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26 h1:I/5wmGMffY4happ8NOCuIUEWGUvvFp5NSeQcXl9RHcI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.26/go.mod h1:FR8f4turZtNy6baO0KJ5FJUmXH/cSkI9fOngs0yl6mA= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 h1:jYfy8UPmd+6kJW5YhY0L1/KftReOGxI/4NtVSTh9O/I= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16/go.mod h1:7ZfEPZxkW42Afq4uQB8H2E2e6ebh6mXTueEpYzjCzcs= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26 h1:zXFLuEuMMUOvEARXFUVJdfqZ4bvvSgdGRq/ATcrQxzM= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.26/go.mod h1:3o2Wpy0bogG1kyOPrgkXA8pgIfEEv0+m19O9D5+W8y8= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 h1:mimdLQkIX1zr8GIPY1ZtALdBQGxcASiBd2MOp8m/dMc= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16/go.mod h1:YHk6owoSwrIsok+cAH9PENCOGoH5PU2EllX4vLtSrsY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26 h1:GeNJsIFHB+WW5ap2Tec4K6dzcVTsRbsT1Lra46Hv9ME= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.26/go.mod h1:zfgMpwHDXX2WGoG84xG2H+ZlPTkJUU4YUvx2svLQYWo= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 h1:GckUnpm4EJOAio1c8o25a+b3lVfwVzC9gnSBqiiNmZM= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18/go.mod h1:Br6+bxfG33Dk3ynmkhsW2Z/t9D4+lRqdLDNCKi85w0U= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7 h1:tB4tNw83KcajNAzaIMhkhVI2Nt8fAZd5A5ro113FEMY= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.7/go.mod h1:lvpyBGkZ3tZ9iSsUIcC2EWp+0ywa7aK3BLT+FwZi+mQ= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 h1:tJ5RnkHCiSH0jyd6gROjlJtNwov0eGYNz8s8nFcR0jQ= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18/go.mod h1:++NHzT+nAF7ZPrHPsA+ENvsXkOO8wEu+C6RXltAG4/c= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7 h1:8eUsivBQzZHqe/3FE+cqwfH+0p5Jo8PFM/QYQSmeZ+M= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.7/go.mod h1:kLPQvGUmxn/fqiCrDeohwG33bq2pQpGeY62yRO6Nrh0= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 h1:jg16PhLPUiHIj8zYIW6bqzeQSuHVEiWnGA0Brz5Xv2I= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16/go.mod h1:Uyk1zE1VVdsHSU7096h/rwnXDzOzYQVl+FNPhPw7ShY= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7 h1:Hi0KGbrnr57bEHWM0bJ1QcBzxLrL/k2DHvGYhb8+W1w= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.7/go.mod h1:wKNgWgExdjjrm4qvfbTorkvocEstaoDl4WCvGfeCy9c= github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 h1:mx2ucgtv+MWzJesJY9Ig/8AFHgoE5FwLXwUVgW/FGdI= github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.71.1 h1:aOVVZJgWbaH+EJYPvEgkNhCEbXXvH7+oML36oaPK3zE= +github.com/aws/aws-sdk-go-v2/service/s3 v1.71.1/go.mod h1:r+xl5yzMk9083rMR+sJ5TYj9Tihvf/l1oxzZXDgGj2Q= github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 h1:zCsFCKvbj25i7p1u94imVoO447I/sFv8qq+lGJhRN0c= github.com/aws/aws-sdk-go-v2/service/sso v1.22.5/go.mod h1:ZeDX1SnKsVlejeuz41GiajjZpRSWR7/42q/EyA/QEiM= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.8 h1:CvuUmnXI7ebaUAhbJcDy9YQx8wHR69eZ9I7q5hszt/g= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.8/go.mod h1:XDeGv1opzwm8ubxddF0cgqkZWsyOtw4lr6dxwmb6YQg= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfOz3ngVkD/ERbs5pUnHNI= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7 h1:F2rBfNAL5UyswqoeWv9zs74N/NanhK16ydHW1pahX6E= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.7/go.mod h1:JfyQ0g2JG8+Krq0EuZNnRwX0mU0HrwY/tG6JNfcqh4k= github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 h1:OMsEmCyz2i89XwRwPouAJvhj81wINh+4UK+k/0Yo/q8= github.com/aws/aws-sdk-go-v2/service/sts v1.30.5/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.3 h1:Xgv/hyNgvLda/M9l9qxXc4UFSgppnRczLxlMs5Ae/QY= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.3/go.mod h1:5Gn+d+VaaRgsjewpMvGazt0WfcFO+Md4wLOuBfGR9Bc= github.com/aws/smithy-go v1.22.0 h1:uunKnWlcoL3zO7q+gG2Pk53joueEOsnNB28QdMsmiMM= github.com/aws/smithy-go v1.22.0/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= +github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= +github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= @@ -85,12 +125,16 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4= github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4= +github.com/gabriel-vasile/mimetype v1.4.7 h1:SKFKl7kD0RiPdbht0s7hFtjl489WcQ1VyPW8ZzUMYCA= +github.com/gabriel-vasile/mimetype v1.4.7/go.mod h1:GDlAgAyIRT27BhFl53XNAFtfjzOkLaF35JdEG0P7LtU= github.com/ganigeorgiev/fexpr v0.4.1 h1:hpUgbUEEWIZhSDBtf4M9aUNfQQ0BZkGRaMePy7Gcx5k= github.com/ganigeorgiev/fexpr v0.4.1/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= @@ -106,10 +150,14 @@ github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= +github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -144,8 +192,12 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfF github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= +github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= +github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -184,8 +236,12 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pocketbase/dbx v1.10.1 h1:cw+vsyfCJD8YObOVeqb93YErnlxwYMkNZ4rwN0G0AaA= github.com/pocketbase/dbx v1.10.1/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs= +github.com/pocketbase/dbx v1.11.0 h1:LpZezioMfT3K4tLrqA55wWFw1EtH1pM4tzSVa7kgszU= +github.com/pocketbase/dbx v1.11.0/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs= github.com/pocketbase/pocketbase v0.22.26 h1:8hoD9xCEOaZfDpP23FkFH6A51QDfM0gK+vnxlTCyNXw= github.com/pocketbase/pocketbase v0.22.26/go.mod h1:h2ojT2pqBWH9LLl1aiawkwXiICKtzZA/kjM/8VhydR4= +github.com/pocketbase/pocketbase v0.23.12 h1:HB4THFbzaliF0C3wvpx+kNOZxIwCEMDqN3/17gn5N7E= +github.com/pocketbase/pocketbase v0.23.12/go.mod h1:OcFJNMO0Vzt3f9+lweMbup6iL7V13ckxu1pdEY6FeM0= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -194,6 +250,8 @@ github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWN github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= +github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -236,6 +294,8 @@ go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+ go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= gocloud.dev v0.39.0 h1:EYABYGhAalPUaMrbSKOr5lejxoxvXj99nE8XFtsDgds= gocloud.dev v0.39.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ= +gocloud.dev v0.40.0 h1:f8LgP+4WDqOG/RXoUcyLpeIAGOcAbZrZbDQCUee10ng= +gocloud.dev v0.40.0/go.mod h1:drz+VyYNBvrMTW0KZiBAYEdl8lbNZx+OQ7oQvdrFmSQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= @@ -245,6 +305,8 @@ golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ= golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys= +golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68= +golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -266,6 +328,8 @@ golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= +golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -298,6 +362,7 @@ golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -311,8 +376,12 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9 h1:LLhsEBxRTBLuKlQxFBYUOU8xyFgXv6cOTp2HASDlsDk= golang.org/x/xerrors v0.0.0-20240716161551-93cc26a95ae9/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= +golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.194.0 h1:dztZKG9HgtIpbI35FhfuSNR/zmaMVdxNlntHj1sIS4s= google.golang.org/api v0.194.0/go.mod h1:AgvUFdojGANh3vI+P7EVnxj3AISHllxGCJSFmggmnd0= +google.golang.org/api v0.214.0 h1:h2Gkq07OYi6kusGOaT/9rnNljuXmqPnaig7WGPmKbwA= +google.golang.org/api v0.214.0/go.mod h1:bYPpLG8AyeMWwDU6NXoB00xC0DFkikVvd5MfwoxjLqE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= @@ -325,6 +394,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988 h1: google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988/go.mod h1:4+X6GvPs+25wZKbQq9qyAXrwIRExv7w0Ea6MgZLZiDM= google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed h1:J6izYgfBXAI3xTKLgxzTmUltdYaLsuBxFCgDHWJ/eXg= google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb h1:3oy2tynMOP1QbTC0MsNNAV+Se8M2Bd0A5+x1QHyw+pI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241219192143-6b3ec007d9bb/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -332,6 +403,8 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc v1.69.2 h1:U3S9QEtbXC0bYNvRtcoklF3xGtLViumSYxWykJS+7AU= +google.golang.org/grpc v1.69.2/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -343,6 +416,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.36.0 h1:mjIs9gYtt56AzC4ZaffQuh88TZurBGhIJMBZGSxNerQ= +google.golang.org/protobuf v1.36.0/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -361,6 +436,8 @@ modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw= modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a h1:CfbpOLEo2IwNzJdMvE8aiRbPMxoTpgAJeyePh0SmO8M= modernc.org/gc/v3 v3.0.0-20240801135723-a856999a2e4a/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= +modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9 h1:ovz6yUKX71igz2yvk4NpiCL5fvdjZAI+DhuDEGx1xyU= +modernc.org/gc/v3 v3.0.0-20241213165251-3bc300f6d0c9/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4= modernc.org/libc v1.55.3 h1:AzcW1mhlPNrRtjS5sS+eW2ISCgSOLLNyFzRh/V3Qj/U= modernc.org/libc v1.55.3/go.mod h1:qFXepLhz+JjFThQ4kzwzOjA/y/artDeg+pcYnY+Q83w= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= @@ -373,6 +450,8 @@ modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc= modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss= modernc.org/sqlite v1.32.0 h1:6BM4uGza7bWypsw4fdLRsLxut6bHe4c58VeqjRgST8s= modernc.org/sqlite v1.32.0/go.mod h1:UqoylwmTb9F+IqXERT8bW9zzOWN8qwAIcLdzeBZs4hA= +modernc.org/sqlite v1.34.4 h1:sjdARozcL5KJBvYQvLlZEmctRgW9xqIZc2ncN7PU0P8= +modernc.org/sqlite v1.34.4/go.mod h1:3QQFCG2SEMtc2nv+Wq4cQCH7Hjcg+p/RMlS1XK+zwbk= modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA= modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= diff --git a/db/integrations/komoot/komoot.go b/db/integrations/komoot/komoot.go index 8148f3be..5b10b6bb 100644 --- a/db/integrations/komoot/komoot.go +++ b/db/integrations/komoot/komoot.go @@ -15,15 +15,14 @@ import ( "github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase" - "github.com/pocketbase/pocketbase/forms" - "github.com/pocketbase/pocketbase/models" + "github.com/pocketbase/pocketbase/core" "github.com/pocketbase/pocketbase/tools/filesystem" "github.com/pocketbase/pocketbase/tools/security" "github.com/twpayne/go-gpx" ) func SyncKomoot(app *pocketbase.PocketBase) error { - integrations, err := app.Dao().FindRecordsByExpr("integrations", dbx.NewExp("true")) + integrations, err := app.FindAllRecords("integrations", dbx.NewExp("true")) if err != nil { return err } @@ -178,7 +177,7 @@ func (k *KomootApi) fetchDetailedTour(tour KomootTour) (*DetailedKomootTour, err func syncTrailWithTours(app *pocketbase.PocketBase, k *KomootApi, i KomootIntegration, user string, tours []KomootTour) (bool, error) { hasNewTours := false for _, tour := range tours { - trails, err := app.Dao().FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": strconv.Itoa(int(tour.ID))}) + trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": strconv.Itoa(int(tour.ID))}) if err != nil { return hasNewTours, err } @@ -208,14 +207,12 @@ func syncTrailWithTours(app *pocketbase.PocketBase, k *KomootApi, i KomootIntegr } func createTrailFromTour(app *pocketbase.PocketBase, detailedTour *DetailedKomootTour, gpx *filesystem.File, user string, wpIds []string) error { - collection, err := app.Dao().FindCollectionByNameOrId("trails") + collection, err := app.FindCollectionByNameOrId("trails") if err != nil { return err } - record := models.NewRecord(collection) - - form := forms.NewRecordUpsert(app, record) + record := core.NewRecord(collection) categoryMap := map[string]string{ "hike": "Hiking", @@ -228,7 +225,7 @@ func createTrailFromTour(app *pocketbase.PocketBase, detailedTour *DetailedKomoo "mountaineering": "Hiking", } - category, _ := app.Dao().FindFirstRecordByData("categories", "name", categoryMap[detailedTour.Sport]) + category, _ := app.FindFirstRecordByData("categories", "name", categoryMap[detailedTour.Sport]) categoryId := "" if category != nil { categoryId = category.Id @@ -253,7 +250,7 @@ func createTrailFromTour(app *pocketbase.PocketBase, detailedTour *DetailedKomoo diffculty = "easy" } - form.LoadData(map[string]any{ + record.Load(map[string]any{ "name": detailedTour.Name, "public": detailedTour.Status == "public", "distance": detailedTour.Distance, @@ -271,12 +268,11 @@ func createTrailFromTour(app *pocketbase.PocketBase, detailedTour *DetailedKomoo "author": user, }) - for _, photo := range photos { - form.AddFiles("photos", photo) - } - form.AddFiles("gpx", gpx) + record.Set("photos", photos) - if err := form.Submit(); err != nil { + record.Set("gpx", gpx) + + if err := app.Save(record); err != nil { return err } @@ -284,7 +280,7 @@ func createTrailFromTour(app *pocketbase.PocketBase, detailedTour *DetailedKomoo } func createWaypointsFromTour(app *pocketbase.PocketBase, tour *DetailedKomootTour, user string) ([]string, error) { - collection, err := app.Dao().FindCollectionByNameOrId("waypoints") + collection, err := app.FindCollectionByNameOrId("waypoints") if err != nil { return nil, err } @@ -296,8 +292,7 @@ func createWaypointsFromTour(app *pocketbase.PocketBase, tour *DetailedKomootTou if err != nil { return nil, err } - record := models.NewRecord(collection) - form := forms.NewRecordUpsert(app, record) + record := core.NewRecord(collection) wpDescription := "" if len(wp.Embedded.Reference.Embedded.Tips.Embedded.Items) > 0 { @@ -314,7 +309,7 @@ func createWaypointsFromTour(app *pocketbase.PocketBase, tour *DetailedKomootTou wpLon = tour.StartPoint.Lng } - form.LoadData(map[string]any{ + record.Load(map[string]any{ "name": wp.Embedded.Reference.Name, "description": wpDescription, "lat": wpLat, @@ -324,11 +319,9 @@ func createWaypointsFromTour(app *pocketbase.PocketBase, tour *DetailedKomootTou "distance_from_start": 0, }) - for _, photo := range photos { - form.AddFiles("photos", photo) - } + record.Set("photos", photos) - if err := form.Submit(); err != nil { + if err := app.Save(record); err != nil { return nil, err } diff --git a/db/integrations/strava/strava.go b/db/integrations/strava/strava.go index 82dd848f..0d41780b 100644 --- a/db/integrations/strava/strava.go +++ b/db/integrations/strava/strava.go @@ -13,8 +13,7 @@ import ( "github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase" - "github.com/pocketbase/pocketbase/forms" - "github.com/pocketbase/pocketbase/models" + "github.com/pocketbase/pocketbase/core" "github.com/pocketbase/pocketbase/tools/filesystem" "github.com/pocketbase/pocketbase/tools/security" "github.com/twpayne/go-gpx" @@ -26,7 +25,7 @@ type StravaApi struct { } func SyncStrava(app *pocketbase.PocketBase) error { - integrations, err := app.Dao().FindRecordsByExpr("integrations", dbx.NewExp("true")) + integrations, err := app.FindAllRecords("integrations", dbx.NewExp("true")) if err != nil { return err } @@ -82,7 +81,7 @@ func SyncStrava(app *pocketbase.PocketBase) error { return err } i.Set("strava", string(b)) - err = app.Dao().SaveRecord(i) + err = app.Save(i) if err != nil { return err } @@ -226,7 +225,7 @@ func fetchStravaActivities(accessToken string, page int) ([]StravaActivity, erro func syncTrailsWithRoutes(app *pocketbase.PocketBase, accessToken string, user string, routes []StravaRoute) (bool, error) { hasNewRoutes := false for _, route := range routes { - trails, err := app.Dao().FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": route.IDStr}) + trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": route.IDStr}) if err != nil { return hasNewRoutes, err } @@ -291,14 +290,12 @@ func fetchRouteGPX(route StravaRoute, accessToken string) (*filesystem.File, err } func createTrailFromRoute(app *pocketbase.PocketBase, route StravaRoute, gpx *filesystem.File, user string, wpIds []string) error { - collection, err := app.Dao().FindCollectionByNameOrId("trails") + collection, err := app.FindCollectionByNameOrId("trails") if err != nil { return err } - record := models.NewRecord(collection) - - form := forms.NewRecordUpsert(app, record) + record := core.NewRecord(collection) buf := []byte(route.Map.SummaryPolyline) coords, _, _ := polyline.DecodeCoords(buf) @@ -312,8 +309,8 @@ func createTrailFromRoute(app *pocketbase.PocketBase, route StravaRoute, gpx *fi lat, lon = 0, 0 } - bikeCategory, _ := app.Dao().FindFirstRecordByData("categories", "name", "Biking") - hikeCategory, _ := app.Dao().FindFirstRecordByData("categories", "name", "Walking") + bikeCategory, _ := app.FindFirstRecordByData("categories", "name", "Biking") + hikeCategory, _ := app.FindFirstRecordByData("categories", "name", "Walking") category := "" @@ -323,7 +320,7 @@ func createTrailFromRoute(app *pocketbase.PocketBase, route StravaRoute, gpx *fi category = hikeCategory.Id } - form.LoadData(map[string]any{ + record.Load(map[string]any{ "name": route.Name, "description": route.Description, "public": !route.Private, @@ -341,9 +338,9 @@ func createTrailFromRoute(app *pocketbase.PocketBase, route StravaRoute, gpx *fi "author": user, }) - form.AddFiles("gpx", gpx) + record.Set("gpx", gpx) - if err := form.Submit(); err != nil { + if err := app.Save(record); err != nil { return err } @@ -351,7 +348,7 @@ func createTrailFromRoute(app *pocketbase.PocketBase, route StravaRoute, gpx *fi } func createWaypointsFromRoute(app *pocketbase.PocketBase, route StravaRoute, user string) ([]string, error) { - collection, err := app.Dao().FindCollectionByNameOrId("waypoints") + collection, err := app.FindCollectionByNameOrId("waypoints") if err != nil { return nil, err } @@ -359,7 +356,7 @@ func createWaypointsFromRoute(app *pocketbase.PocketBase, route StravaRoute, use wpIds := make([]string, len(route.Waypoints)) for i, wp := range route.Waypoints { - record := models.NewRecord(collection) + record := core.NewRecord(collection) record.Set("name", strconv.Itoa(i)) record.Set("description", wp.Description) @@ -369,7 +366,7 @@ func createWaypointsFromRoute(app *pocketbase.PocketBase, route StravaRoute, use record.Set("author", user) record.Set("distance_from_start", wp.DistanceIntoRoute) - app.Dao().SaveRecord(record) + app.Save(record) wpIds[i] = record.Id } @@ -380,7 +377,7 @@ func createWaypointsFromRoute(app *pocketbase.PocketBase, route StravaRoute, use func syncTrailsWithActivities(app *pocketbase.PocketBase, accessToken string, user string, activities []StravaActivity) (bool, error) { hasNewActivites := false for _, activity := range activities { - trails, err := app.Dao().FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": strconv.Itoa(int(activity.ID))}) + trails, err := app.FindRecordsByFilter("trails", "external_id = {:id}", "", 1, 0, dbx.Params{"id": strconv.Itoa(int(activity.ID))}) if err != nil { return hasNewActivites, err } @@ -434,7 +431,7 @@ func fetchDetailedActivity(activity StravaActivity, accessToken string) (*Detail } func createTrailFromActivity(app *pocketbase.PocketBase, activity *DetailedStravaActivity, gpx *filesystem.File, user string) error { - collection, err := app.Dao().FindCollectionByNameOrId("trails") + collection, err := app.FindCollectionByNameOrId("trails") if err != nil { return err } @@ -447,9 +444,7 @@ func createTrailFromActivity(app *pocketbase.PocketBase, activity *DetailedStrav } } - record := models.NewRecord(collection) - - form := forms.NewRecordUpsert(app, record) + record := core.NewRecord(collection) activityMap := map[string]string{ "AlpineSki": "Skiing", @@ -491,13 +486,13 @@ func createTrailFromActivity(app *pocketbase.PocketBase, activity *DetailedStrav "Yoga": "Workout", } - category, _ := app.Dao().FindFirstRecordByData("categories", "name", activityMap[activity.Type]) + category, _ := app.FindFirstRecordByData("categories", "name", activityMap[activity.Type]) categoryId := "" if category != nil { categoryId = category.Id } - form.LoadData(map[string]any{ + record.Load(map[string]any{ "name": activity.Name, "description": activity.Description, "public": !activity.Private, @@ -514,12 +509,11 @@ func createTrailFromActivity(app *pocketbase.PocketBase, activity *DetailedStrav "author": user, }) - if photo != nil { - form.AddFiles("photos", photo) - } - form.AddFiles("gpx", gpx) + record.Set("photos", photo) - if err := form.Submit(); err != nil { + record.Set("gpx", gpx) + + if err := app.Save(record); err != nil { return err } diff --git a/db/main.go b/db/main.go index 9a00d0b5..61ec9ede 100644 --- a/db/main.go +++ b/db/main.go @@ -10,23 +10,19 @@ import ( "strconv" "strings" - "github.com/labstack/echo/v5" "github.com/meilisearch/meilisearch-go" "github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase" "github.com/pocketbase/pocketbase/apis" "github.com/pocketbase/pocketbase/core" - "github.com/pocketbase/pocketbase/forms" - "github.com/pocketbase/pocketbase/models" "github.com/pocketbase/pocketbase/plugins/migratecmd" - "github.com/pocketbase/pocketbase/tools/cron" "github.com/pocketbase/pocketbase/tools/filesystem" - "github.com/pocketbase/pocketbase/tools/hook" "github.com/pocketbase/pocketbase/tools/security" "pocketbase/integrations/komoot" "pocketbase/integrations/strava" - _ "pocketbase/migrations" + + // _ "pocketbase/migrations" "pocketbase/util" ) @@ -34,7 +30,7 @@ func main() { app := pocketbase.New() client := initializeMeiliSearch() - registerMigrations(app) + // registerMigrations(app) setupEventHandlers(app, client) if err := app.Start(); err != nil { @@ -57,41 +53,36 @@ func registerMigrations(app *pocketbase.PocketBase) { } func setupEventHandlers(app *pocketbase.PocketBase, client meilisearch.ServiceManager) { - app.OnModelAfterCreate("users").Add(createUserHandler(app, client)) + app.OnRecordAfterCreateSuccess("users").BindFunc(createUserHandler(app, client)) - app.OnModelAfterCreate("trails").Add(createTrailIndexHandler(app, client)) - app.OnModelAfterUpdate("trails").Add(updateTrailIndexHandler(app, client)) - app.OnModelAfterDelete("trails").Add(deleteTrailIndexHandler(client)) + app.OnRecordAfterCreateSuccess("trails").BindFunc(createTrailHandler(app, client)) + app.OnRecordAfterUpdateSuccess("trails").BindFunc(updateTrailHandler(app, client)) + app.OnRecordAfterDeleteSuccess("trails").BindFunc(deleteTrailHandler(client)) - app.OnRecordAfterCreateRequest("trails").Add(createTrailHandler(app)) + app.OnRecordAfterCreateSuccess("trail_share").BindFunc(createTrailShareHandler(app, client)) + app.OnRecordAfterDeleteSuccess("trail_share").BindFunc(deleteTrailShareHandler(client)) - app.OnRecordAfterCreateRequest("trail_share").Add(createTrailShareHandler(app, client)) - app.OnRecordAfterDeleteRequest("trail_share").Add(deleteTrailShareHandler(client)) + app.OnRecordAfterCreateSuccess("lists").BindFunc(createListHandler(app, client)) + app.OnRecordAfterUpdateSuccess("lists").BindFunc(updateListHandler(client)) + app.OnRecordAfterDeleteSuccess("lists").BindFunc(deleteListHandler(client)) - app.OnRecordAfterCreateRequest("lists").Add(createListHandler(app, client)) - app.OnRecordAfterUpdateRequest("lists").Add(updateListHandler(client)) - app.OnRecordAfterDeleteRequest("lists").Add(deleteListHandler(client)) + app.OnRecordAfterCreateSuccess("list_share").BindFunc(createListShareHandler(app, client)) + app.OnRecordAfterDeleteSuccess("list_share").BindFunc(deleteListShareHandler(client)) - app.OnRecordAfterCreateRequest("list_share").Add(createListShareHandler(app, client)) - app.OnRecordAfterDeleteRequest("list_share").Add(deleteListShareHandler(client)) + app.OnRecordAfterCreateSuccess("follows").BindFunc(createFollowHandler(app)) + app.OnRecordAfterCreateSuccess("comments").BindFunc(createCommentHandler(app)) - app.OnRecordAfterCreateRequest("follows").Add(createFollowHandler(app)) - app.OnRecordAfterCreateRequest("comments").Add(createCommentHandler(app)) + app.OnRecordsListRequest("integrations").BindFunc(listIntegrationHandler()) + app.OnRecordCreateRequest("integrations").BindFunc(createIntegrationHandler(app)) + app.OnRecordUpdateRequest("integrations").BindFunc(updateIntegrationHandler(app)) - app.OnRecordsListRequest("integrations").Add(listIntegrationHandler()) - app.OnRecordAfterCreateRequest("integrations").Add(createIntegrationAfterHandler()) - app.OnRecordAfterUpdateRequest("integrations").Add(updateIntegrationAfterHandler()) - app.OnRecordBeforeCreateRequest("integrations").Add(createIntegrationBeforeHandler(app)) - app.OnRecordBeforeUpdateRequest("integrations").Add(updateIntegrationBeforeHandler(app)) - - app.OnRecordBeforeRequestEmailChangeRequest("users").Add(changeUserEmailHandler(app)) - app.OnBeforeServe().Add(onBeforeServeHandler(app, client)) + app.OnRecordRequestEmailChangeRequest("users").BindFunc(changeUserEmailHandler(app)) + app.OnServe().BindFunc(onBeforeServeHandler(app, client)) } -func createUserHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.ModelEvent) error { - return func(e *core.ModelEvent) error { - record := e.Model.(*models.Record) - userId := record.GetId() +func createUserHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + userId := e.Record.Id searchRules := map[string]interface{}{ "lists": map[string]string{ @@ -106,53 +97,48 @@ func createUserHandler(app *pocketbase.PocketBase, client meilisearch.ServiceMan if err != nil { return err } - record.Set("token", token) - if err := app.Dao().SaveRecord(record); err != nil { + e.Record.Set("token", token) + if err := app.Save(e.Record); err != nil { return err } - return createDefaultUserSettings(app, record.Id) + return createDefaultUserSettings(app, e.Record.Id) } } func createDefaultUserSettings(app *pocketbase.PocketBase, userId string) error { - collection, err := app.Dao().FindCollectionByNameOrId("settings") + collection, err := app.FindCollectionByNameOrId("settings") if err != nil { return err } - settings := models.NewRecord(collection) + settings := core.NewRecord(collection) settings.Set("language", "en") settings.Set("unit", "metric") settings.Set("mapFocus", "trails") settings.Set("user", userId) - return app.Dao().SaveRecord(settings) + return app.Save(settings) } -func createTrailIndexHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.ModelEvent) error { - return func(e *core.ModelEvent) error { - record := e.Model.(*models.Record) - author, err := app.Dao().FindRecordById("users", record.GetString(("author"))) +func createTrailHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record + author, err := app.FindRecordById("users", record.GetString(("author"))) if err != nil { return err } if err := util.IndexTrail(record, author, client); err != nil { return err } - return nil - } -} -func createTrailHandler(app *pocketbase.PocketBase) func(e *core.RecordCreateEvent) error { - return func(e *core.RecordCreateEvent) error { - if e.Record.GetBool("public") { + if record.GetBool("public") { notification := util.Notification{ Type: util.TrailCreate, Metadata: map[string]string{ - "id": e.Record.Id, - "trail": e.Record.GetString("name"), + "id": record.Id, + "trail": record.GetString("name"), }, Seen: false, - Author: e.Record.GetString("author"), + Author: record.GetString("author"), } return util.SendNotificationToFollowers(app, notification) } @@ -160,10 +146,10 @@ func createTrailHandler(app *pocketbase.PocketBase) func(e *core.RecordCreateEve } } -func updateTrailIndexHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.ModelEvent) error { - return func(e *core.ModelEvent) error { - record := e.Model.(*models.Record) - author, err := app.Dao().FindRecordById("users", record.GetString(("author"))) +func updateTrailHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record + author, err := app.FindRecordById("users", record.GetString(("author"))) if err != nil { return err } @@ -171,18 +157,20 @@ func updateTrailIndexHandler(app *pocketbase.PocketBase, client meilisearch.Serv } } -func deleteTrailIndexHandler(client meilisearch.ServiceManager) func(e *core.ModelEvent) error { - return func(e *core.ModelEvent) error { - record := e.Model.(*models.Record) +func deleteTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record _, err := client.Index("trails").DeleteDocument(record.Id) return err } } -func createTrailShareHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordCreateEvent) error { - return func(e *core.RecordCreateEvent) error { - trailId := e.Record.GetString("trail") - shares, err := app.Dao().FindRecordsByExpr("trail_share", +func createTrailShareHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record + + trailId := record.GetString("trail") + shares, err := app.FindAllRecords("trail_share", dbx.NewExp("trail = {:trailId}", dbx.Params{"trailId": trailId}), ) if err != nil { @@ -198,10 +186,10 @@ func createTrailShareHandler(app *pocketbase.PocketBase, client meilisearch.Serv return err } - if errs := app.Dao().ExpandRecord(e.Record, []string{"trail", "trail.author"}, nil); len(errs) > 0 { + if errs := app.ExpandRecord(record, []string{"trail", "trail.author"}, nil); len(errs) > 0 { return fmt.Errorf("failed to expand: %v", errs) } - shareTrail := e.Record.ExpandedOne("trail") + shareTrail := record.ExpandedOne("trail") shareTrailAuthor := shareTrail.ExpandedOne("author") notification := util.Notification{ @@ -214,55 +202,62 @@ func createTrailShareHandler(app *pocketbase.PocketBase, client meilisearch.Serv Seen: false, Author: shareTrailAuthor.Id, } - return util.SendNotification(app, notification, e.Record.GetString("user")) + return util.SendNotification(app, notification, record.GetString("user")) } } -func deleteTrailShareHandler(client meilisearch.ServiceManager) func(e *core.RecordDeleteEvent) error { - return func(e *core.RecordDeleteEvent) error { - trailId := e.Record.GetString("trail") +func deleteTrailShareHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record + + trailId := record.GetString("trail") return util.UpdateTrailShares(trailId, []string{}, client) } } -func createListHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordCreateEvent) error { - return func(e *core.RecordCreateEvent) error { - if err := util.IndexList(e.Record, client); err != nil { +func createListHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record + + if err := util.IndexList(record, client); err != nil { return err } - if !e.Record.GetBool("public") { + if !record.GetBool("public") { return nil } notification := util.Notification{ Type: util.ListCreate, Metadata: map[string]string{ - "id": e.Record.Id, - "list": e.Record.GetString("name"), + "id": record.Id, + "list": record.GetString("name"), }, Seen: false, - Author: e.Record.GetString("author"), + Author: record.GetString("author"), } return util.SendNotificationToFollowers(app, notification) } } -func updateListHandler(client meilisearch.ServiceManager) func(e *core.RecordUpdateEvent) error { - return func(e *core.RecordUpdateEvent) error { - return util.UpdateList(e.Record, client) +func updateListHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record + return util.UpdateList(record, client) } } -func deleteListHandler(client meilisearch.ServiceManager) func(e *core.RecordDeleteEvent) error { - return func(e *core.RecordDeleteEvent) error { - _, err := client.Index("lists").DeleteDocument(e.Record.Id) +func deleteListHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record + _, err := client.Index("lists").DeleteDocument(record.Id) return err } } -func createListShareHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordCreateEvent) error { - return func(e *core.RecordCreateEvent) error { - listId := e.Record.GetString("list") - shares, err := app.Dao().FindRecordsByExpr("list_share", +func createListShareHandler(app *pocketbase.PocketBase, client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record + listId := record.GetString("list") + shares, err := app.FindAllRecords("list_share", dbx.NewExp("list = {:listId}", dbx.Params{"listId": listId}), ) if err != nil { @@ -278,10 +273,10 @@ func createListShareHandler(app *pocketbase.PocketBase, client meilisearch.Servi return err } - if errs := app.Dao().ExpandRecord(e.Record, []string{"list", "list.author"}, nil); len(errs) > 0 { + if errs := app.ExpandRecord(record, []string{"list", "list.author"}, nil); len(errs) > 0 { return fmt.Errorf("failed to expand: %v", errs) } - shareList := e.Record.ExpandedOne("list") + shareList := record.ExpandedOne("list") shareListAuthor := shareList.ExpandedOne("author") notification := util.Notification{ @@ -294,23 +289,25 @@ func createListShareHandler(app *pocketbase.PocketBase, client meilisearch.Servi Seen: false, Author: shareListAuthor.Id, } - return util.SendNotification(app, notification, e.Record.GetString("user")) + return util.SendNotification(app, notification, record.GetString("user")) } } -func deleteListShareHandler(client meilisearch.ServiceManager) func(e *core.RecordDeleteEvent) error { - return func(e *core.RecordDeleteEvent) error { - listId := e.Record.GetString("list") +func deleteListShareHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record + listId := record.GetString("list") return util.UpdateListShares(listId, []string{}, client) } } -func createFollowHandler(app *pocketbase.PocketBase) func(e *core.RecordCreateEvent) error { - return func(e *core.RecordCreateEvent) error { - if errs := app.Dao().ExpandRecord(e.Record, []string{"follower"}, nil); len(errs) > 0 { +func createFollowHandler(app *pocketbase.PocketBase) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record + if errs := app.ExpandRecord(record, []string{"follower"}, nil); len(errs) > 0 { return fmt.Errorf("failed to expand: %v", errs) } - follower := e.Record.ExpandedOne("follower") + follower := record.ExpandedOne("follower") notification := util.Notification{ Type: util.NewFollower, @@ -318,20 +315,21 @@ func createFollowHandler(app *pocketbase.PocketBase) func(e *core.RecordCreateEv "follower": follower.GetString("username"), }, Seen: false, - Author: e.Record.GetString("follower"), + Author: record.GetString("follower"), } - return util.SendNotification(app, notification, e.Record.GetString("followee")) + return util.SendNotification(app, notification, record.GetString("followee")) } } -func createCommentHandler(app *pocketbase.PocketBase) func(e *core.RecordCreateEvent) error { - return func(e *core.RecordCreateEvent) error { +func createCommentHandler(app *pocketbase.PocketBase) func(e *core.RecordEvent) error { + return func(e *core.RecordEvent) error { + record := e.Record - if errs := app.Dao().ExpandRecord(e.Record, []string{"trail", "author"}, nil); len(errs) > 0 { + if errs := app.ExpandRecord(record, []string{"trail", "author"}, nil); len(errs) > 0 { return fmt.Errorf("failed to expand: %v", errs) } - commentAuthor := e.Record.ExpandedOne("author") - commentTrail := e.Record.ExpandedOne("trail") + commentAuthor := record.ExpandedOne("author") + commentTrail := record.ExpandedOne("trail") notification := util.Notification{ Type: util.TrailComment, @@ -339,19 +337,18 @@ func createCommentHandler(app *pocketbase.PocketBase) func(e *core.RecordCreateE "id": commentTrail.Id, "author": commentAuthor.GetString("username"), "trail": commentTrail.GetString("name"), - "comment": e.Record.GetString("text"), + "comment": record.GetString("text"), }, Seen: false, - Author: e.Record.GetString("author"), + Author: record.GetString("author"), } return util.SendNotification(app, notification, commentTrail.GetString("author")) } } -func listIntegrationHandler() func(e *core.RecordsListEvent) error { - return func(e *core.RecordsListEvent) error { - info := apis.RequestInfo(e.HttpContext) - if info.Admin != nil { +func listIntegrationHandler() func(e *core.RecordsListRequestEvent) error { + return func(e *core.RecordsListRequestEvent) error { + if e.HasSuperuserAuth() { return nil } for _, r := range e.Records { @@ -366,40 +363,18 @@ func listIntegrationHandler() func(e *core.RecordsListEvent) error { } } -func createIntegrationBeforeHandler(app *pocketbase.PocketBase) func(e *core.RecordCreateEvent) error { - return func(e *core.RecordCreateEvent) error { - err := encryptIntegrationSecrets(app, e.Record) - if err != nil { - return err - } - return nil - } -} - -func createIntegrationAfterHandler() func(e *core.RecordCreateEvent) error { - return func(e *core.RecordCreateEvent) error { - err := censorIntegrationSecrets(e.Record) - if err != nil { - return err - } - return nil - } -} - -func updateIntegrationBeforeHandler(app *pocketbase.PocketBase) func(e *core.RecordUpdateEvent) error { - return func(e *core.RecordUpdateEvent) error { +func createIntegrationHandler(app *pocketbase.PocketBase) func(e *core.RecordRequestEvent) error { + return func(e *core.RecordRequestEvent) error { err := encryptIntegrationSecrets(app, e.Record) if err != nil { return err } - return nil - } -} + if err := e.Next(); err != nil { + return err + } -func updateIntegrationAfterHandler() func(e *core.RecordUpdateEvent) error { - return func(e *core.RecordUpdateEvent) error { - err := censorIntegrationSecrets(e.Record) + err = censorIntegrationSecrets(e.Record) if err != nil { return err } @@ -407,7 +382,25 @@ func updateIntegrationAfterHandler() func(e *core.RecordUpdateEvent) error { } } -func censorIntegrationSecrets(r *models.Record) error { +func updateIntegrationHandler(app *pocketbase.PocketBase) func(e *core.RecordRequestEvent) error { + return func(e *core.RecordRequestEvent) error { + err := encryptIntegrationSecrets(app, e.Record) + if err != nil { + return err + } + + if err := e.Next(); err != nil { + return err + } + + err = censorIntegrationSecrets(e.Record) + if err != nil { + return err + } + return nil + } +} +func censorIntegrationSecrets(r *core.Record) error { secrets := map[string][]string{ "strava": {"clientSecret", "refreshToken", "accessToken", "expiresAt"}, "komoot": {"password"}, @@ -432,7 +425,7 @@ func censorIntegrationSecrets(r *models.Record) error { return nil } -func encryptIntegrationSecrets(app *pocketbase.PocketBase, r *models.Record) error { +func encryptIntegrationSecrets(app *pocketbase.PocketBase, r *core.Record) error { encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY") if len(encryptionKey) == 0 { return apis.NewBadRequestError("POCKETBASE_ENCRYPTION_KEY not set", nil) @@ -443,7 +436,7 @@ func encryptIntegrationSecrets(app *pocketbase.PocketBase, r *models.Record) err "komoot": {"password"}, } - original, _ := app.Dao().FindRecordById("integrations", r.Id) + original, _ := app.FindRecordById("integrations", r.Id) for key, secretKeys := range secrets { if integrationString := r.GetString(key); integrationString != "" { @@ -481,17 +474,14 @@ func encryptIntegrationSecrets(app *pocketbase.PocketBase, r *models.Record) err return nil } -func changeUserEmailHandler(app *pocketbase.PocketBase) func(e *core.RecordRequestEmailChangeEvent) error { - return func(e *core.RecordRequestEmailChangeEvent) error { - form := forms.NewRecordEmailChangeRequest(app, e.Record) - if err := e.HttpContext.Bind(form); err != nil { +func changeUserEmailHandler(app *pocketbase.PocketBase) func(e *core.RecordRequestEmailChangeRequestEvent) error { + return func(e *core.RecordRequestEmailChangeRequestEvent) error { + + e.Record.Set("email", e.Record.Email()) + if err := app.Save(e.Record); err != nil { return err } - e.Record.Set("email", form.NewEmail) - if err := app.Dao().SaveRecord(e.Record); err != nil { - return err - } - return hook.StopPropagation + return nil } } @@ -505,7 +495,7 @@ func onBeforeServeHandler(app *pocketbase.PocketBase, client meilisearch.Service } func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meilisearch.ServiceManager) { - e.Router.GET("/public/search/token", func(c echo.Context) error { + e.Router.GET("/public/search/token", func(e *core.RequestEvent) error { searchRules := map[string]interface{}{ "lists": map[string]string{ "filter": "public = true", @@ -518,21 +508,17 @@ func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meili if err != nil { return err } - return c.JSON(http.StatusOK, map[string]string{"token": token}) + return e.JSON(http.StatusOK, map[string]string{"token": token}) }) - e.Router.GET("/trail/recommend", func(c echo.Context) error { - qSize := c.QueryParam("size") + e.Router.GET("/trail/recommend", func(e *core.RequestEvent) error { + qSize := e.Request.URL.Query().Get("size") size, err := strconv.Atoi(qSize) if err != nil { size = 4 } - user, success := c.Get(apis.ContextAuthRecordKey).(*models.Record) + userId := e.Auth.Id - userId := "" - if success { - userId = user.Id - } - trails, err := app.Dao().FindRecordsByFilter( + trails, err := app.FindRecordsByFilter( "trails", "author = {:userId} || public = true || ({:userId} != '' && trail_share_via_trail.user ?= {:userId})", "", @@ -550,28 +536,24 @@ func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meili trails[i], trails[j] = trails[j], trails[i] }) randomTrails := trails[:size] - return c.JSON(http.StatusOK, randomTrails) + return e.JSON(http.StatusOK, randomTrails) }) - e.Router.POST("/integration/strava/token", func(c echo.Context) error { + e.Router.POST("/integration/strava/token", func(e *core.RequestEvent) error { encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY") if len(encryptionKey) == 0 { return apis.NewBadRequestError("POCKETBASE_ENCRYPTION_KEY not set", nil) } var data strava.TokenRequest - if err := c.Bind(&data); err != nil { + if err := e.BindBody(&data); err != nil { return apis.NewBadRequestError("Failed to read request data", err) } - user, success := c.Get(apis.ContextAuthRecordKey).(*models.Record) - userId := "" - if success { - userId = user.Id - } + userId := e.Auth.Id - integrations, err := app.Dao().FindRecordsByExpr("integrations", dbx.NewExp("user = {:id}", dbx.Params{"id": userId})) + integrations, err := app.FindAllRecords("integrations", dbx.NewExp("user = {:id}", dbx.Params{"id": userId})) if err != nil { return err } @@ -620,26 +602,22 @@ func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meili return err } integration.Set("strava", string(b)) - err = app.Dao().SaveRecord(integration) + err = app.Save(integration) if err != nil { return err } - return c.JSON(http.StatusOK, nil) + return e.JSON(http.StatusOK, nil) }) - e.Router.GET("/integration/komoot/login", func(c echo.Context) error { + e.Router.GET("/integration/komoot/login", func(e *core.RequestEvent) error { encryptionKey := os.Getenv("POCKETBASE_ENCRYPTION_KEY") if len(encryptionKey) == 0 { return apis.NewBadRequestError("POCKETBASE_ENCRYPTION_KEY not set", nil) } - user, success := c.Get(apis.ContextAuthRecordKey).(*models.Record) - userId := "" - if success { - userId = user.Id - } + userId := e.Auth.Id - integrations, err := app.Dao().FindRecordsByExpr("integrations", dbx.NewExp("user = {:id}", dbx.Params{"id": userId})) + integrations, err := app.FindAllRecords("integrations", dbx.NewExp("user = {:id}", dbx.Params{"id": userId})) if err != nil { return err } @@ -668,19 +646,17 @@ func registerRoutes(e *core.ServeEvent, app *pocketbase.PocketBase, client meili return apis.NewUnauthorizedError("invalid credentials", nil) } - return c.JSON(http.StatusOK, nil) + return e.JSON(http.StatusOK, nil) }) } func registerCronJobs(app *pocketbase.PocketBase) { - scheduler := cron.New() - schedule := os.Getenv("POCKETBASE_CRON_SYNC_SCHEDULE") if len(schedule) == 0 { schedule = "0 2 * * *" } - scheduler.MustAdd("integrations", schedule, func() { + app.Cron().MustAdd("integrations", schedule, func() { err := strava.SyncStrava(app) if err != nil { warning := fmt.Sprintf("Error syncing with strava: %v", err) @@ -694,8 +670,6 @@ func registerCronJobs(app *pocketbase.PocketBase) { app.Logger().Error(warning) } }) - - scheduler.Start() } func bootstrapData(app *pocketbase.PocketBase, client meilisearch.ServiceManager) error { @@ -705,33 +679,33 @@ func bootstrapData(app *pocketbase.PocketBase, client meilisearch.ServiceManager } func bootstrapCategories(app *pocketbase.PocketBase) error { - query := app.Dao().RecordQuery("categories") - records := []*models.Record{} + query := app.RecordQuery("categories") + records := []*core.Record{} if err := query.All(&records); err != nil { return err } if len(records) == 0 { - collection, _ := app.Dao().FindCollectionByNameOrId("categories") + collection, _ := app.FindCollectionByNameOrId("categories") categories := []string{"Hiking", "Walking", "Climbing", "Skiing", "Canoeing", "Biking"} for _, element := range categories { - record := models.NewRecord(collection) - form := forms.NewRecordUpsert(app, record) - form.LoadData(map[string]any{ - "name": element, - }) + record := core.NewRecord(collection) + record.Set("name", element) f, _ := filesystem.NewFileFromPath("migrations/initial_data/" + strings.ToLower(element) + ".jpg") - form.AddFiles("img", f) - form.Submit() + record.Set("img", f) + err := app.Save(record) + if err != nil { + return err + } } } return nil } func bootstrapMeilisearchTrails(app *pocketbase.PocketBase, client meilisearch.ServiceManager) error { - query := app.Dao().RecordQuery("trails") - trails := []*models.Record{} + query := app.RecordQuery("trails") + trails := []*core.Record{} if err := query.All(&trails); err != nil { return err @@ -742,7 +716,7 @@ func bootstrapMeilisearchTrails(app *pocketbase.PocketBase, client meilisearch.S return err } for _, trail := range trails { - author, err := app.Dao().FindRecordById("users", trail.GetString(("author"))) + author, err := app.FindRecordById("users", trail.GetString(("author"))) if err != nil { return err } diff --git a/db/migrations/1709593298_collections_snapshot.go b/db/migrations/1709593298_collections_snapshot.go index e9015157..a64f804c 100644 --- a/db/migrations/1709593298_collections_snapshot.go +++ b/db/migrations/1709593298_collections_snapshot.go @@ -1,20 +1,17 @@ package migrations import ( - "encoding/json" "os" "github.com/meilisearch/meilisearch-go" - "github.com/pocketbase/dbx" - "github.com/pocketbase/pocketbase/daos" + "github.com/pocketbase/pocketbase/core" m "github.com/pocketbase/pocketbase/migrations" - "github.com/pocketbase/pocketbase/models" ) func init() { client := meilisearch.New(os.Getenv("MEILI_URL"), meilisearch.WithAPIKey(os.Getenv("MEILI_MASTER_KEY"))) - m.Register(func(db dbx.Builder) error { + m.Register(func(app core.App) error { _, err := client.CreateIndex(&meilisearch.IndexConfig{ Uid: "trails", PrimaryKey: "id", @@ -665,13 +662,6 @@ func init() { } ]` - collections := []*models.Collection{} - if err := json.Unmarshal([]byte(jsonData), &collections); err != nil { - return err - } - - return daos.New(db).ImportCollections(collections, true, nil) - }, func(db dbx.Builder) error { - return nil - }) + return app.ImportCollectionsByMarshaledJSON([]byte(jsonData), true) + }, nil) } diff --git a/db/migrations/1709982456_updated_trails.go b/db/migrations/1709982456_updated_trails.go index df214004..4e7b1beb 100644 --- a/db/migrations/1709982456_updated_trails.go +++ b/db/migrations/1709982456_updated_trails.go @@ -3,26 +3,22 @@ package migrations import ( "encoding/json" - "github.com/pocketbase/dbx" - "github.com/pocketbase/pocketbase/daos" + "github.com/pocketbase/pocketbase/core" m "github.com/pocketbase/pocketbase/migrations" - "github.com/pocketbase/pocketbase/models/schema" ) func init() { - m.Register(func(db dbx.Builder) error { - dao := daos.New(db); - - collection, err := dao.FindCollectionByNameOrId("e864strfxo14pm4") + m.Register(func(app core.App) error { + collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4") if err != nil { return err } // remove - collection.Schema.RemoveField("mcqce8l9") + collection.Fields.RemoveById("mcqce8l9") // add - new_thumbnail := &schema.SchemaField{} + new_thumbnail := &core.NumberField{} json.Unmarshal([]byte(`{ "system": false, "id": "k2giqyjq", @@ -37,19 +33,17 @@ func init() { "noDecimal": false } }`), new_thumbnail) - collection.Schema.AddField(new_thumbnail) + collection.Fields.Add(new_thumbnail) - return dao.SaveCollection(collection) - }, func(db dbx.Builder) error { - dao := daos.New(db); - - collection, err := dao.FindCollectionByNameOrId("e864strfxo14pm4") + return app.Save(collection) + }, func(app core.App) error { + collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4") if err != nil { return err } // add - del_thumbnail := &schema.SchemaField{} + del_thumbnail := &core.TextField{} json.Unmarshal([]byte(`{ "system": false, "id": "mcqce8l9", @@ -64,11 +58,11 @@ func init() { "pattern": "" } }`), del_thumbnail) - collection.Schema.AddField(del_thumbnail) + collection.Fields.Add(del_thumbnail) // remove - collection.Schema.RemoveField("k2giqyjq") + collection.Fields.RemoveById("k2giqyjq") - return dao.SaveCollection(collection) + return app.Save(collection) }) } diff --git a/db/migrations/1710073788_updated_trails.go b/db/migrations/1710073788_updated_trails.go index 0df41445..9c52402e 100644 --- a/db/migrations/1710073788_updated_trails.go +++ b/db/migrations/1710073788_updated_trails.go @@ -3,23 +3,19 @@ package migrations import ( "encoding/json" - "github.com/pocketbase/dbx" - "github.com/pocketbase/pocketbase/daos" + "github.com/pocketbase/pocketbase/core" m "github.com/pocketbase/pocketbase/migrations" - "github.com/pocketbase/pocketbase/models/schema" ) func init() { - m.Register(func(db dbx.Builder) error { - dao := daos.New(db); - - collection, err := dao.FindCollectionByNameOrId("e864strfxo14pm4") + m.Register(func(app core.App) error { + collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4") if err != nil { return err } // add - new_difficulty := &schema.SchemaField{} + new_difficulty := &core.SelectField{} json.Unmarshal([]byte(`{ "system": false, "id": "dywtnynw", @@ -37,20 +33,19 @@ func init() { ] } }`), new_difficulty) - collection.Schema.AddField(new_difficulty) + collection.Fields.Add(new_difficulty) - return dao.SaveCollection(collection) - }, func(db dbx.Builder) error { - dao := daos.New(db); + return app.Save(collection) + }, func(app core.App) error { - collection, err := dao.FindCollectionByNameOrId("e864strfxo14pm4") + collection, err := app.FindCollectionByNameOrId("e864strfxo14pm4") if err != nil { return err } // remove - collection.Schema.RemoveField("dywtnynw") + collection.Fields.RemoveById("dywtnynw") - return dao.SaveCollection(collection) + return app.Save(collection) }) } diff --git a/db/migrations/1710949270_updated_waypoints.go b/db/migrations/1710949270_updated_waypoints.go index 14cc8d94..bde08b82 100644 --- a/db/migrations/1710949270_updated_waypoints.go +++ b/db/migrations/1710949270_updated_waypoints.go @@ -3,23 +3,20 @@ package migrations import ( "encoding/json" - "github.com/pocketbase/dbx" - "github.com/pocketbase/pocketbase/daos" + "github.com/pocketbase/pocketbase/core" m "github.com/pocketbase/pocketbase/migrations" - "github.com/pocketbase/pocketbase/models/schema" ) func init() { - m.Register(func(db dbx.Builder) error { - dao := daos.New(db); + m.Register(func(app core.App) error { - collection, err := dao.FindCollectionByNameOrId("goeo2ubp103rzp9") + collection, err := app.FindCollectionByNameOrId("goeo2ubp103rzp9") if err != nil { return err } // add - new_photo := &schema.SchemaField{} + new_photo := &core.FileField{} json.Unmarshal([]byte(`{ "system": false, "id": "tfhs3juh", @@ -42,20 +39,19 @@ func init() { "protected": false } }`), new_photo) - collection.Schema.AddField(new_photo) + collection.Fields.Add(new_photo) - return dao.SaveCollection(collection) - }, func(db dbx.Builder) error { - dao := daos.New(db); + return app.Save(collection) + }, func(app core.App) error { - collection, err := dao.FindCollectionByNameOrId("goeo2ubp103rzp9") + collection, err := app.FindCollectionByNameOrId("goeo2ubp103rzp9") if err != nil { return err } // remove - collection.Schema.RemoveField("tfhs3juh") + collection.Fields.RemoveById("tfhs3juh") - return dao.SaveCollection(collection) + return app.Save(collection) }) } diff --git a/db/util/meilisearch.go b/db/util/meilisearch.go index cd0b81e3..731f6c3d 100644 --- a/db/util/meilisearch.go +++ b/db/util/meilisearch.go @@ -5,10 +5,10 @@ import ( "log" "github.com/meilisearch/meilisearch-go" - "github.com/pocketbase/pocketbase/models" + "github.com/pocketbase/pocketbase/core" ) -func documentFromTrailRecord(r *models.Record, author *models.Record, includeShares bool) map[string]interface{} { +func documentFromTrailRecord(r *core.Record, author *core.Record, includeShares bool) map[string]interface{} { photos := r.GetStringSlice("photos") thumbnail := "" if len(photos) > 0 { @@ -52,7 +52,7 @@ func documentFromTrailRecord(r *models.Record, author *models.Record, includeSha return document } -func documentFromListRecord(r *models.Record, includeShares bool) map[string]interface{} { +func documentFromListRecord(r *core.Record, includeShares bool) map[string]interface{} { document := map[string]interface{}{ "id": r.Id, "author": r.GetString("author"), @@ -70,7 +70,7 @@ func documentFromListRecord(r *models.Record, includeShares bool) map[string]int return document } -func IndexTrail(r *models.Record, author *models.Record, client meilisearch.ServiceManager) error { +func IndexTrail(r *core.Record, author *core.Record, client meilisearch.ServiceManager) error { documents := []map[string]interface{}{documentFromTrailRecord(r, author, true)} if _, err := client.Index("trails").AddDocuments(documents); err != nil { @@ -80,7 +80,7 @@ func IndexTrail(r *models.Record, author *models.Record, client meilisearch.Serv return nil } -func UpdateTrail(r *models.Record, author *models.Record, client meilisearch.ServiceManager) error { +func UpdateTrail(r *core.Record, author *core.Record, client meilisearch.ServiceManager) error { documents := documentFromTrailRecord(r, author, false) if _, err := client.Index("trails").UpdateDocuments(documents); err != nil { @@ -103,7 +103,7 @@ func UpdateTrailShares(trailId string, shares []string, client meilisearch.Servi return nil } -func IndexList(r *models.Record, client meilisearch.ServiceManager) error { +func IndexList(r *core.Record, client meilisearch.ServiceManager) error { documents := []map[string]interface{}{documentFromListRecord(r, true)} if _, err := client.Index("lists").AddDocuments(documents); err != nil { @@ -113,7 +113,7 @@ func IndexList(r *models.Record, client meilisearch.ServiceManager) error { return nil } -func UpdateList(r *models.Record, client meilisearch.ServiceManager) error { +func UpdateList(r *core.Record, client meilisearch.ServiceManager) error { documents := documentFromListRecord(r, false) if _, err := client.Index("lists").UpdateDocuments(documents); err != nil { diff --git a/db/util/notification.go b/db/util/notification.go index 20c305a7..5e81a287 100644 --- a/db/util/notification.go +++ b/db/util/notification.go @@ -6,7 +6,7 @@ import ( "github.com/pocketbase/dbx" "github.com/pocketbase/pocketbase" - "github.com/pocketbase/pocketbase/models" + "github.com/pocketbase/pocketbase/core" "github.com/pocketbase/pocketbase/tools/mailer" ) @@ -34,7 +34,7 @@ type NotificationSettings struct { } func getNotificationPermissions(app *pocketbase.PocketBase, user string, notificationType NotificationType) (*NotificationSettings, error) { - settings, err := app.Dao().FindFirstRecordByFilter("settings", "user={:user}", dbx.Params{"user": user}) + settings, err := app.FindFirstRecordByFilter("settings", "user={:user}", dbx.Params{"user": user}) if err != nil { return nil, err } @@ -62,34 +62,34 @@ func SendNotification(app *pocketbase.PocketBase, notification Notification, rec return err } - notifications, err := app.Dao().FindCollectionByNameOrId("notifications") + notifications, err := app.FindCollectionByNameOrId("notifications") if err != nil { return err } if permissions.Web { - n := models.NewRecord(notifications) + n := core.NewRecord(notifications) n.Set("type", string(notification.Type)) n.Set("metadata", notification.Metadata) n.Set("seen", notification.Seen) n.Set("recipient", recipient) n.Set("author", notification.Author) - if err := app.Dao().SaveRecord(n); err != nil { + if err := app.Save(n); err != nil { return err } } if permissions.Email { - recipientUser, err := app.Dao().FindRecordById("users", recipient) + recipientUser, err := app.FindAuthRecordByEmail("users", recipient) if err != nil { return err } - authorUser, err := app.Dao().FindRecordById("users", notification.Author) + authorUser, err := app.FindRecordById("users", notification.Author) if err != nil { return err } - html, err := GenerateHTML(app.Settings().Meta.AppUrl, recipientUser.Username(), authorUser.Username(), notification.Type, notification.Metadata) + html, err := GenerateHTML(app.Settings().Meta.AppURL, recipientUser.GetString("username"), authorUser.GetString("username"), notification.Type, notification.Metadata) if err != nil { return err } @@ -110,7 +110,7 @@ func SendNotification(app *pocketbase.PocketBase, notification Notification, rec } func SendNotificationToFollowers(app *pocketbase.PocketBase, notification Notification) error { - followers, err := app.Dao().FindRecordsByFilter("follows", "followee={:user}", "", -1, 0, dbx.Params{"user": notification.Author}) + followers, err := app.FindRecordsByFilter("follows", "followee={:user}", "", -1, 0, dbx.Params{"user": notification.Author}) if err != nil { return err diff --git a/web/package-lock.json b/web/package-lock.json index 7dcce3e9..847232ce 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "wanderer", - "version": "0.14.0", + "version": "0.15.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wanderer", - "version": "0.14.0", + "version": "0.15.2", "dependencies": { "@felte/validator-zod": "^1.0.18", "@fortawesome/fontawesome-free": "^6.5.1", @@ -36,7 +36,7 @@ "nouislider": "^15.7.1", "pdfkit": "^0.15.0", "photoswipe": "^5.4.3", - "pocketbase": "^0.21.0", + "pocketbase": "^0.25.1", "qrcode": "^1.4.4", "svelte-i18n": "^4.0.0", "three": "^0.161.0", @@ -4835,9 +4835,9 @@ } }, "node_modules/pocketbase": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.21.5.tgz", - "integrity": "sha512-bnI/uinnQps+ElSlzxkc4yvwuSFfKcoszDtXH/4QT2FhGq2mJVUvDlxn+rjRXVntUjPfmMG5LEPZ1eGqV6ssog==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.25.2.tgz", + "integrity": "sha512-ONZl1+qHJMnhR2uacBlBJ90lm7njtL/zy0606+1ROfK9hSL4LRBRc8r89rMcNRzPzRqCNyoFTh2Qg/lYXdEC1w==", "license": "MIT" }, "node_modules/possible-typed-array-names": { diff --git a/web/package.json b/web/package.json index df253797..778325a9 100644 --- a/web/package.json +++ b/web/package.json @@ -58,7 +58,7 @@ "nouislider": "^15.7.1", "pdfkit": "^0.15.0", "photoswipe": "^5.4.3", - "pocketbase": "^0.21.0", + "pocketbase": "^0.25.1", "qrcode": "^1.4.4", "svelte-i18n": "^4.0.0", "three": "^0.161.0",