Skip to content

Commit f9628e7

Browse files
authored
Merge pull request #16 from Dan6erbond/develop
2 parents 44ee2db + 3944c2c commit f9628e7

21 files changed

+496
-7
lines changed

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"embla-carousel-react": "^8.0.0-rc03",
2929
"eslint": "8.39.0",
3030
"eslint-config-next": "13.3.4",
31+
"meilisearch": "^0.32.3",
3132
"next": "13.3.4",
3233
"pocketbase": "^0.14.3",
3334
"react": "18.2.0",

search/.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.env
2+
meili_data

search/docker-compose.yml

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
version: '3.9'
2+
3+
services:
4+
meilisearch:
5+
image: 'getmeili/meilisearch:v1.1'
6+
volumes:
7+
- './meili_data:/meili_data'
8+
environment:
9+
- MEILI_MASTER_KEY=$MEILI_MASTER_KEY
10+
ports:
11+
- '7700:7700'
12+
tty: true
13+
stdin_open: true

server/.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,6 @@ go.work
2222

2323
# pocketbase
2424
pb_data
25+
26+
# custom
27+
.env

server/go.mod

+7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99

1010
require (
1111
github.com/AlecAivazis/survey/v2 v2.3.6 // indirect
12+
github.com/andybalholm/brotli v1.0.5 // indirect
1213
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
1314
github.com/aws/aws-sdk-go v1.44.249 // indirect
1415
github.com/aws/aws-sdk-go-v2 v1.18.0 // indirect
@@ -45,17 +46,23 @@ require (
4546
github.com/googleapis/gax-go/v2 v2.8.0 // indirect
4647
github.com/inconshreveable/mousetrap v1.1.0 // indirect
4748
github.com/jmespath/go-jmespath v0.4.0 // indirect
49+
github.com/joho/godotenv v1.5.1 // indirect
50+
github.com/josharian/intern v1.0.0 // indirect
4851
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
52+
github.com/klauspost/compress v1.16.5 // indirect
4953
github.com/labstack/echo/v5 v5.0.0-20220201181537-ed2888cfa198 // indirect
54+
github.com/mailru/easyjson v0.7.7 // indirect
5055
github.com/mattn/go-colorable v0.1.13 // indirect
5156
github.com/mattn/go-isatty v0.0.18 // indirect
5257
github.com/mattn/go-sqlite3 v1.14.16 // indirect
58+
github.com/meilisearch/meilisearch-go v0.24.0 // indirect
5359
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
5460
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
5561
github.com/spf13/cast v1.5.0 // indirect
5662
github.com/spf13/cobra v1.7.0 // indirect
5763
github.com/spf13/pflag v1.0.5 // indirect
5864
github.com/valyala/bytebufferpool v1.0.0 // indirect
65+
github.com/valyala/fasthttp v1.47.0 // indirect
5966
github.com/valyala/fasttemplate v1.2.2 // indirect
6067
go.opencensus.io v0.24.0 // indirect
6168
gocloud.dev v0.29.0 // indirect

server/go.sum

+21
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,9 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5
519519
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
520520
github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0=
521521
github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk=
522+
github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
523+
github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
524+
github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
522525
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
523526
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
524527
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
@@ -1037,6 +1040,7 @@ github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP
10371040
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
10381041
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
10391042
github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
1043+
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
10401044
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
10411045
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
10421046
github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
@@ -1347,8 +1351,11 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw
13471351
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
13481352
github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8=
13491353
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
1354+
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
1355+
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
13501356
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
13511357
github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
1358+
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
13521359
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
13531360
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
13541361
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -1376,7 +1383,11 @@ github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs
13761383
github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
13771384
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
13781385
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
1386+
github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
13791387
github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
1388+
github.com/klauspost/compress v1.15.6/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
1389+
github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI=
1390+
github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
13801391
github.com/kolo/xmlrpc v0.0.0-20201022064351-38db28db192b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
13811392
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
13821393
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -1419,6 +1430,7 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN
14191430
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
14201431
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
14211432
github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
1433+
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
14221434
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
14231435
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
14241436
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
@@ -1456,6 +1468,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182aff
14561468
github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
14571469
github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
14581470
github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
1471+
github.com/meilisearch/meilisearch-go v0.24.0 h1:GTP8LWZmkMYrGgX5BRZdkC2Txyp0mFYLzXYMlVV7cSQ=
1472+
github.com/meilisearch/meilisearch-go v0.24.0/go.mod h1:SxuSqDcPBIykjWz1PX+KzsYzArNLSCadQodWs8extS0=
14591473
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
14601474
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
14611475
github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
@@ -1787,6 +1801,8 @@ github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
17871801
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
17881802
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
17891803
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
1804+
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
1805+
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
17901806
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
17911807
github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0=
17921808
github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
@@ -1809,8 +1825,12 @@ github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtX
18091825
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
18101826
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
18111827
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
1828+
github.com/valyala/fasthttp v1.37.1-0.20220607072126-8a320890c08d/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I=
1829+
github.com/valyala/fasthttp v1.47.0 h1:y7moDoxYzMooFpT5aHgNgVOQDrS3qlkfiP9mDtGGK9c=
1830+
github.com/valyala/fasthttp v1.47.0/go.mod h1:k2zXd82h/7UZc3VOdJ2WaUqt1uZ/XpXAfE9i+HBC3lA=
18121831
github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=
18131832
github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
1833+
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
18141834
github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
18151835
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
18161836
github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
@@ -1986,6 +2006,7 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
19862006
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
19872007
golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
19882008
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
2009+
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
19892010
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
19902011
golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
19912012
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=

server/main.go

+20
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ package main
22

33
import (
44
"log"
5+
"os"
56

7+
_ "github.com/joho/godotenv/autoload"
68
"github.com/pocketbase/pocketbase"
79
"github.com/pocketbase/pocketbase/core"
810
"github.com/pocketbase/pocketbase/plugins/migratecmd"
911

1012
// uncomment once you have at least one .go migration file in the "migrations" directory
1113
_ "github.com/Dan6erbond/share-me/migrations"
14+
"github.com/Dan6erbond/share-me/pkg/meilisearch"
1215
)
1316

1417
func main() {
@@ -18,6 +21,23 @@ func main() {
1821
Automigrate: true, // auto creates migration files when making collection changes
1922
})
2023

24+
if os.Getenv("MEILISEARCH_HOST") != "" && os.Getenv("MEILISEARCH_ADMIN_API_KEY") != "" {
25+
app.Settings()
26+
client := meilisearch.NewClient(os.Getenv("MEILISEARCH_HOST"), os.Getenv("MEILISEARCH_ADMIN_API_KEY"))
27+
key, _ := meilisearch.GetReadOnlyKey(client)
28+
if key != "" {
29+
app.OnBeforeServe().Add(func(e *core.ServeEvent) error {
30+
if app.IsDebug() {
31+
log.Println("MeiliSearch configured")
32+
}
33+
log.Println("MeiliSearch read-only key:", key)
34+
return nil
35+
})
36+
}
37+
meilisearch.RegisterCommands(app, client)
38+
meilisearch.RegisterHooks(app, client)
39+
}
40+
2141
app.OnRecordAfterDeleteRequest("posts", "delete").Add(func(e *core.RecordDeleteEvent) error {
2242
if e.Record.Collection().Name != "posts" {
2343
return nil

server/pkg/meilisearch/client.go

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package meilisearch
2+
3+
import (
4+
"github.com/meilisearch/meilisearch-go"
5+
)
6+
7+
func NewClient(host, apiKey string) *meilisearch.Client {
8+
return meilisearch.NewClient(meilisearch.ClientConfig{
9+
Host: host,
10+
APIKey: apiKey,
11+
})
12+
}

server/pkg/meilisearch/commands.go

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package meilisearch
2+
3+
import (
4+
"log"
5+
6+
"github.com/meilisearch/meilisearch-go"
7+
"github.com/pocketbase/pocketbase"
8+
"github.com/spf13/cobra"
9+
)
10+
11+
func RegisterCommands(app *pocketbase.PocketBase, client *meilisearch.Client) {
12+
searchCmd := &cobra.Command{
13+
Use: "search",
14+
Run: func(command *cobra.Command, args []string) {
15+
print("Runs commands to interact with MeiliSearch")
16+
},
17+
}
18+
19+
searchCmd.AddCommand(&cobra.Command{
20+
Use: "key",
21+
Run: func(command *cobra.Command, args []string) {
22+
key, err := GetReadOnlyKey(client)
23+
24+
if err != nil {
25+
log.Println("Error retrieving key:", err)
26+
}
27+
28+
if key != "" {
29+
log.Println("MeiliSearch read-only key:", key)
30+
} else {
31+
log.Println("No read-only key was found")
32+
}
33+
},
34+
})
35+
36+
indexCmd := &cobra.Command{
37+
Use: "index",
38+
Run: func(command *cobra.Command, args []string) {
39+
print("Runs commands to interact with MeiliSearch")
40+
},
41+
}
42+
43+
searchCmd.AddCommand(indexCmd)
44+
45+
indexCmd.AddCommand(&cobra.Command{
46+
Use: "clear",
47+
Run: func(command *cobra.Command, args []string) {
48+
_, _ = client.Index("posts").DeleteAllDocuments()
49+
},
50+
})
51+
52+
indexCmd.AddCommand(&cobra.Command{
53+
Use: "sync",
54+
Run: func(command *cobra.Command, args []string) {
55+
posts, err := app.Dao().FindRecordsByExpr("posts")
56+
57+
if err != nil {
58+
panic(err)
59+
}
60+
61+
var documents []map[string]interface{}
62+
for _, p := range posts {
63+
if !p.GetBool("public") {
64+
continue
65+
}
66+
67+
postDocument, _ := getPostDocument(app, p)
68+
documents = append(documents, postDocument)
69+
}
70+
_, err = client.Index("posts").AddDocuments(documents)
71+
72+
if err != nil {
73+
panic(err)
74+
}
75+
},
76+
})
77+
78+
app.RootCmd.AddCommand(searchCmd)
79+
}

server/pkg/meilisearch/hooks.go

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package meilisearch
2+
3+
import (
4+
"github.com/meilisearch/meilisearch-go"
5+
"github.com/pocketbase/dbx"
6+
"github.com/pocketbase/pocketbase"
7+
"github.com/pocketbase/pocketbase/core"
8+
)
9+
10+
func RegisterHooks(app *pocketbase.PocketBase, client *meilisearch.Client) {
11+
app.OnRecordAfterCreateRequest().Add(func(e *core.RecordCreateEvent) error {
12+
switch e.Record.Collection().Name {
13+
case "posts":
14+
if !e.Record.GetBool("public") {
15+
return nil
16+
}
17+
postDocument, _ := getPostDocument(app, e.Record)
18+
_, _ = client.Index("posts").AddDocuments([]map[string]interface{}{postDocument})
19+
case "files":
20+
post, _ := app.Dao().FindRecordsByExpr("posts", dbx.NewExp("{:file} IN files", dbx.Params{"file": e.Record.Id}))
21+
if len(post) == 0 || !post[0].GetBool("public") {
22+
return nil
23+
}
24+
postDocument, _ := getPostDocument(app, post[0])
25+
_, _ = client.Index("posts").AddDocuments([]map[string]interface{}{postDocument})
26+
}
27+
return nil
28+
})
29+
30+
app.OnRecordAfterUpdateRequest().Add(func(e *core.RecordUpdateEvent) error {
31+
switch e.Record.Collection().Name {
32+
case "posts":
33+
if !e.Record.GetBool("public") {
34+
return nil
35+
}
36+
postDocument, _ := getPostDocument(app, e.Record)
37+
_, _ = client.Index("posts").AddDocuments([]map[string]interface{}{postDocument})
38+
case "files":
39+
post, _ := app.Dao().FindRecordsByExpr("posts", dbx.NewExp("{:file} IN files", dbx.Params{"file": e.Record.Id}))
40+
if len(post) == 0 || !post[0].GetBool("public") {
41+
return nil
42+
}
43+
postDocument, _ := getPostDocument(app, post[0])
44+
_, _ = client.Index("posts").AddDocuments([]map[string]interface{}{postDocument})
45+
}
46+
return nil
47+
})
48+
49+
app.OnRecordAfterDeleteRequest().Add(func(e *core.RecordDeleteEvent) error {
50+
switch e.Record.Collection().Name {
51+
case "posts":
52+
client.Index("posts").DeleteDocument(e.Record.Id)
53+
case "files":
54+
post, _ := app.Dao().FindRecordsByExpr("posts", dbx.NewExp("{:file} IN files", dbx.Params{"file": e.Record.Id}))
55+
if len(post) == 0 || !post[0].GetBool("public") {
56+
return nil
57+
}
58+
postDocument, _ := getPostDocument(app, post[0])
59+
_, _ = client.Index("posts").AddDocuments([]map[string]interface{}{postDocument})
60+
}
61+
return nil
62+
})
63+
}

server/pkg/meilisearch/keys.go

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package meilisearch
2+
3+
import "github.com/meilisearch/meilisearch-go"
4+
5+
func GetReadOnlyKey(client *meilisearch.Client) (string, error) {
6+
keys, err := client.GetKeys(&meilisearch.KeysQuery{})
7+
8+
if err != nil {
9+
return "", err
10+
}
11+
12+
for _, key := range keys.Results {
13+
if len(key.Actions) == 1 && key.Actions[0] == "search" {
14+
return key.Key, nil
15+
}
16+
}
17+
18+
return "", nil
19+
}

0 commit comments

Comments
 (0)