diff --git a/db/migrations/17347160210_created_notifications.go b/db/migrations/17347160210_created_notifications.go
deleted file mode 100644
index 73925333..00000000
--- a/db/migrations/17347160210_created_notifications.go
+++ /dev/null
@@ -1,120 +0,0 @@
-package migrations
-
-import (
- "encoding/json"
-
- "github.com/pocketbase/dbx"
- "github.com/pocketbase/pocketbase/daos"
- m "github.com/pocketbase/pocketbase/migrations"
- "github.com/pocketbase/pocketbase/models"
-)
-
-func init() {
- m.Register(func(db dbx.Builder) error {
- jsonData := `{
- "id": "khrcci2uqknny8h",
- "created": "2024-12-20 17:33:49.887Z",
- "updated": "2024-12-20 17:33:49.887Z",
- "name": "notifications",
- "type": "base",
- "system": false,
- "schema": [
- {
- "system": false,
- "id": "b57prsbu",
- "name": "type",
- "type": "select",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "maxSelect": 1,
- "values": [
- "trail_create",
- "list_create",
- "new_follower",
- "trail_comment"
- ]
- }
- },
- {
- "system": false,
- "id": "1i2ycgle",
- "name": "metadata",
- "type": "json",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {
- "maxSize": 2000000
- }
- },
- {
- "system": false,
- "id": "pyimxu85",
- "name": "seen",
- "type": "bool",
- "required": false,
- "presentable": false,
- "unique": false,
- "options": {}
- },
- {
- "system": false,
- "id": "tmghd4vo",
- "name": "recipient",
- "type": "relation",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "collectionId": "_pb_users_auth_",
- "cascadeDelete": false,
- "minSelect": null,
- "maxSelect": 1,
- "displayFields": null
- }
- },
- {
- "system": false,
- "id": "exqo1whj",
- "name": "author",
- "type": "relation",
- "required": true,
- "presentable": false,
- "unique": false,
- "options": {
- "collectionId": "_pb_users_auth_",
- "cascadeDelete": false,
- "minSelect": null,
- "maxSelect": 1,
- "displayFields": null
- }
- }
- ],
- "indexes": [],
- "listRule": null,
- "viewRule": null,
- "createRule": null,
- "updateRule": null,
- "deleteRule": null,
- "options": {}
- }`
-
- collection := &models.Collection{}
- if err := json.Unmarshal([]byte(jsonData), &collection); err != nil {
- return err
- }
-
- return daos.New(db).SaveCollection(collection)
- }, func(db dbx.Builder) error {
- dao := daos.New(db);
-
- collection, err := dao.FindCollectionByNameOrId("khrcci2uqknny8h")
- if err != nil {
- return err
- }
-
- return dao.DeleteCollection(collection)
- })
-}
diff --git a/db/migrations/1735901837_updated_notifications.go b/db/migrations/1735901837_updated_notifications.go
new file mode 100644
index 00000000..90f9ac82
--- /dev/null
+++ b/db/migrations/1735901837_updated_notifications.go
@@ -0,0 +1,34 @@
+package migrations
+
+import (
+ "github.com/pocketbase/dbx"
+ "github.com/pocketbase/pocketbase/daos"
+ m "github.com/pocketbase/pocketbase/migrations"
+ "github.com/pocketbase/pocketbase/tools/types"
+)
+
+func init() {
+ m.Register(func(db dbx.Builder) error {
+ dao := daos.New(db);
+
+ collection, err := dao.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ collection.UpdateRule = types.Pointer("@request.auth.id = recipient && (@request.data.type = null||@request.data.type = type) && (@request.data.metadata = null||@request.data.metadata = metadata) && (@request.data.recipient = null||@request.data.recipient = recipient) && (@request.data.author = null||@request.data.author = author) && @request.data.seen = true")
+
+ return dao.SaveCollection(collection)
+ }, func(db dbx.Builder) error {
+ dao := daos.New(db);
+
+ collection, err := dao.FindCollectionByNameOrId("khrcci2uqknny8h")
+ if err != nil {
+ return err
+ }
+
+ collection.UpdateRule = types.Pointer("@request.auth.id = recipient && @request.data.type = type && @request.data.metadata = metadata && @request.data.recipient = recipient && @request.data.author = author && @request.data.seen = true")
+
+ return dao.SaveCollection(collection)
+ })
+}
diff --git a/web/src/lib/components/summit_log/summit_log_table_row.svelte b/web/src/lib/components/summit_log/summit_log_table_row.svelte
index 2843ace0..4e7f5f55 100644
--- a/web/src/lib/components/summit_log/summit_log_table_row.svelte
+++ b/web/src/lib/components/summit_log/summit_log_table_row.svelte
@@ -130,7 +130,7 @@
{/if}
{/if}
- {#if showAuthor && log.expand.author}
+ {#if showAuthor && log.expand?.author}
|
{/if}
- {#if showRoute && log.expand.gpx_data}
+ {#if showRoute && log.expand?.gpx_data}
+ photos: z.array(z.string()).default([])
+}) satisfies ZodType>
const SummitLogUpdateSchema = z.object({
date: z.string().date().refine((val) => !val || !isNaN(Date.parse(val)), "invalid-date").optional(),
diff --git a/web/src/lib/models/api/trail_schema.ts b/web/src/lib/models/api/trail_schema.ts
index bc8af214..ee76886e 100644
--- a/web/src/lib/models/api/trail_schema.ts
+++ b/web/src/lib/models/api/trail_schema.ts
@@ -10,21 +10,21 @@ const TrailCreateSchema = z.object({
date: z.string().optional().refine((val) => !val || !isNaN(Date.parse(val)), "invalid-date"),
public: z.boolean(),
difficulty: z.enum(["easy", "moderate", "difficult"]).optional(),
- lat: z.number().optional(),
- lon: z.number().optional(),
+ lat: z.number().min(-90).max(90).optional(),
+ lon: z.number().min(-180).max(180).optional(),
distance: z.number({coerce: true}).nonnegative().optional(),
elevation_gain: z.number({coerce: true}).nonnegative().optional(),
elevation_loss: z.number({coerce: true}).nonnegative().optional(),
duration: z.number({coerce: true}).nonnegative().optional(),
- photos: z.array(z.string()),
+ photos: z.array(z.string()).default([]),
thumbnail: z.number().int().nonnegative().optional(),
- waypoints: z.array(z.string()),
- summit_logs: z.array(z.string()),
- category: z.string().optional(),
+ waypoints: z.array(z.string()).default([]),
+ summit_logs: z.array(z.string()).default([]),
+ category: z.string().length(15).optional(),
gpx: z.string().optional(),
author: z.string().length(15),
-}) satisfies ZodType
+}) satisfies ZodType>
const TrailUpdateSchema = z.object({
name: z.string(),
@@ -33,13 +33,15 @@ const TrailUpdateSchema = z.object({
date: z.string().optional().refine((val) => !val || !isNaN(Date.parse(val)), "invalid-date"),
public: z.boolean().optional(),
difficulty: z.enum(["easy", "moderate", "difficult"]).optional(),
- lat: z.number().optional(),
- lon: z.number().optional(),
+ lat: z.number().min(-90).max(90).optional(),
+ lon: z.number().min(-180).max(180).optional(),
distance: z.number({coerce: true}).nonnegative().optional(),
elevation_gain: z.number({coerce: true}).nonnegative().optional(),
elevation_loss: z.number({coerce: true}).nonnegative().optional(),
duration: z.number({coerce: true}).nonnegative().optional(),
photos: z.array(z.string()).optional(),
+ "photos-": z.string().optional(),
+ "photos+": z.string().optional(),
thumbnail: z.number().int().nonnegative().optional(),
waypoints: z.array(z.string()).optional(),
summit_logs: z.array(z.string()).optional(),
diff --git a/web/src/lib/models/api/user_schema.ts b/web/src/lib/models/api/user_schema.ts
index 485f5521..27bbeec0 100644
--- a/web/src/lib/models/api/user_schema.ts
+++ b/web/src/lib/models/api/user_schema.ts
@@ -7,7 +7,7 @@ const UserCreateSchema = (z.object({
password: z.string().min(8, "must-be-at-least-n-characters-long"),
passwordConfirm: z.string().optional()
-}) satisfies ZodType).refine((data) => data.password === data.passwordConfirm, {
+}) satisfies ZodType>).refine((data) => data.password === data.passwordConfirm, {
message: "passwords-must-match",
path: ["passwordConfirm"],
})
diff --git a/web/src/lib/models/api/waypoint_schema.ts b/web/src/lib/models/api/waypoint_schema.ts
index 5581aefa..91d1e1c8 100644
--- a/web/src/lib/models/api/waypoint_schema.ts
+++ b/web/src/lib/models/api/waypoint_schema.ts
@@ -5,22 +5,20 @@ const WaypointCreateSchema = z.object({
id: z.string().length(15).optional(),
name: z.string().optional(),
description: z.string().optional(),
- text: z.string().optional(),
- lat: z.number(),
- lon: z.number(),
+ lat: z.number({coerce: true}).min(-90).max(90),
+ lon: z.number({coerce: true}).min(-180).max(180),
icon: z.string().optional(),
author: z.string().length(15),
- photos: z.array(z.string()),
-}) satisfies ZodType
+ photos: z.array(z.string()).default([]),
+}) satisfies ZodType>
const WaypointUpdateSchema = z.object({
name: z.string().optional(),
description: z.string().optional(),
- text: z.string().optional(),
- lat: z.number({coerce: true}).optional(),
- lon: z.number({coerce: true}).optional(),
+ lat: z.number({coerce: true}).min(-90).max(90).optional(),
+ lon: z.number({coerce: true}).min(-180).max(180).optional(),
icon: z.string().optional(),
- photos: z.array(z.string()),
+ photos: z.array(z.string()).optional(),
"photos-": z.string().optional(),
"photos+": z.string().optional(),
}) satisfies ZodType>
diff --git a/web/src/routes/api/v1/summit-log/+server.ts b/web/src/routes/api/v1/summit-log/+server.ts
index c590f6f2..55507ccc 100644
--- a/web/src/routes/api/v1/summit-log/+server.ts
+++ b/web/src/routes/api/v1/summit-log/+server.ts
@@ -1,9 +1,8 @@
import { SummitLogCreateSchema } from '$lib/models/api/summit_log_schema';
import type { SummitLog } from '$lib/models/summit_log';
import { pb } from '$lib/pocketbase';
-import { create, handleError } from '$lib/util/api_util';
-import { Collection, list } from '$lib/util/api_util';
-import { error, json, type RequestEvent } from '@sveltejs/kit';
+import { Collection, create, handleError, list } from '$lib/util/api_util';
+import { json, type RequestEvent } from '@sveltejs/kit';
export async function GET(event: RequestEvent) {
try {
@@ -29,6 +28,6 @@ export async function PUT(event: RequestEvent) {
const r = await create(event, SummitLogCreateSchema, Collection.summit_logs)
return json(r);
} catch (e: any) {
- throw error(e.status, e)
+ throw handleError(e)
}
}
|