From 12444083e3866f7cb47582f3bd055d938873c732 Mon Sep 17 00:00:00 2001 From: Jan Gregor Emge-Triebel Date: Fri, 9 Jan 2026 16:42:33 +0100 Subject: [PATCH 01/14] Introduced basic rating setup --- nuxt-app/composables/useDirectus.ts | 36 +++++++++++++++++------- nuxt-app/server/middleware/feedback.ts | 39 ++++++++++++++++++++++++++ nuxt-app/services/directus.ts | 3 +- nuxt-app/types/directus.ts | 10 +++++++ 4 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 nuxt-app/server/middleware/feedback.ts diff --git a/nuxt-app/composables/useDirectus.ts b/nuxt-app/composables/useDirectus.ts index 233ef54..fd5e542 100644 --- a/nuxt-app/composables/useDirectus.ts +++ b/nuxt-app/composables/useDirectus.ts @@ -1,17 +1,17 @@ import { - aggregate, - createUser, - readItems, - readMe, - readProviders, - readSingleton, - rest, - type QueryFilter, -} from '@directus/sdk' + aggregate, + createUser, + readItems, + readMe, + readProviders, + readSingleton, + rest, + type QueryFilter, createItem, +} from '@directus/sdk'; import type { ConferenceItem, DirectusMemberItem, - DirectusPickOfTheDayItem, + DirectusPickOfTheDayItem, DirectusPodcastItem, DirectusProfileItem, DirectusTagItem, DirectusTranscriptItem, @@ -840,6 +840,21 @@ export function useDirectus() { } } + async function createRating(vote: "up" | "down", podcast: DirectusPodcastItem) { + try { + const result = await directus.request(createItem('ratings', { + up_or_down: vote, + target: { + target_collection: 'podcasts', + target: podcast.id + }, + })) + } catch (e: unknown) { + console.error('Error while persisting new feedback', e) + return e + } + } + return { getHomepage, getPodcastPage, @@ -880,5 +895,6 @@ export function useDirectus() { registerNewUser, getProfileById, getTestimonials, + createRating, } } diff --git a/nuxt-app/server/middleware/feedback.ts b/nuxt-app/server/middleware/feedback.ts new file mode 100644 index 0000000..a924bc3 --- /dev/null +++ b/nuxt-app/server/middleware/feedback.ts @@ -0,0 +1,39 @@ +import { useDirectus } from '~/composables/useDirectus' + +export default eventHandler(async function(event) { + const requestPath = event.path; + if (!requestPath.startsWith('/podcast/')) { + return; + } + + // Path pattern "/podcast/[slug]/[up|down]" + const regex = /^\/podcast\/([^/]+)\/(up|down)$/; + const match = requestPath.match(regex); + if (!match) { + return; + } + + console.log(`Received feedback for "${match[1]}" with vote "${match[2]}".`); + + let slug = match[1]; + let vote = match[2]; + + const directus = useDirectus() + + let podcast = await directus.getPodcastBySlug(slug); + + if (!podcast) { + throw createError({ statusCode: 404, message: 'Podcast not found' }); + } + + // @ts-ignore (Type-safety is enforced by regex) + directus.createRating(vote, podcast); + + // Set the response status and location header for redirection + // And end the response to complete the redirection + event.node.res.writeHead(302, { + Location: '/podcast/' + podcast.slug, + }); + + event.node.res.end(); +}); diff --git a/nuxt-app/services/directus.ts b/nuxt-app/services/directus.ts index 41f7799..3833dc8 100644 --- a/nuxt-app/services/directus.ts +++ b/nuxt-app/services/directus.ts @@ -24,7 +24,7 @@ import type { DirectusSpeakerItem, DirectusTagItem, DirectusProfileItem, - DirectusTranscriptItem, DirectusTestimonialItem, DirectusCocktailMenu, + DirectusTranscriptItem, DirectusTestimonialItem, DirectusCocktailMenu, DirectusRatingItem, } from '../types'; export type Collections = { @@ -51,6 +51,7 @@ export type Collections = { speakers: DirectusSpeakerItem[] picks_of_the_day: DirectusPickOfTheDayItem[] profiles: DirectusProfileItem[], + ratings: DirectusRatingItem[], tags: DirectusTagItem[] testimonials: DirectusTestimonialItem[] transcripts: DirectusTranscriptItem[] diff --git a/nuxt-app/types/directus.ts b/nuxt-app/types/directus.ts index 2358d6a..8669323 100644 --- a/nuxt-app/types/directus.ts +++ b/nuxt-app/types/directus.ts @@ -264,6 +264,16 @@ export interface DirectusPickOfTheDayItem { )[] } +export interface DirectusRatingItem { + id: string + target: { + target_collection: string, + target: string + }, + //target: DirectusPodcastItem + up_or_down: 'up' | 'down' +} + export interface DirectusTagItem { id: string name: string From 22cbab56d762f0b845c33ce506b45b6abfb6e2e7 Mon Sep 17 00:00:00 2001 From: Jan Gregor Emge-Triebel Date: Tue, 13 Jan 2026 12:03:10 +0100 Subject: [PATCH 02/14] Added basic ratings persistence --- directus-cms/schema.json | 2469 ++++++++++++++++++++++----- nuxt-app/composables/useDirectus.ts | 10 +- nuxt-app/types/directus.ts | 3 +- 3 files changed, 2066 insertions(+), 416 deletions(-) diff --git a/directus-cms/schema.json b/directus-cms/schema.json index b43e016..fa83726 100644 --- a/directus-cms/schema.json +++ b/directus-cms/schema.json @@ -196,7 +196,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 7, + "sort": 8, "sort_field": null, "translations": null, "unarchive_value": "draft", @@ -224,7 +224,7 @@ "note": null, "preview_url": null, "singleton": false, - "sort": 1, + "sort": 3, "sort_field": null, "translations": null, "unarchive_value": "draft", @@ -252,7 +252,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 11, + "sort": 12, "sort_field": null, "translations": [ { @@ -267,6 +267,34 @@ "name": "coc_page" } }, + { + "collection": "cocktail_menu", + "meta": { + "accountability": "all", + "archive_app_filter": true, + "archive_field": "status", + "archive_value": "archived", + "collapse": "open", + "collection": "cocktail_menu", + "color": null, + "display_template": null, + "group": "Pages", + "hidden": false, + "icon": "wine_bar", + "item_duplication_fields": null, + "note": null, + "preview_url": null, + "singleton": true, + "sort": 5, + "sort_field": null, + "translations": null, + "unarchive_value": "draft", + "versioning": false + }, + "schema": { + "name": "cocktail_menu" + } + }, { "collection": "conference_page", "meta": { @@ -334,14 +362,14 @@ "collection": "conferences_directus_files", "color": null, "display_template": null, - "group": null, + "group": "Relations", "hidden": true, "icon": "import_export", "item_duplication_fields": null, "note": null, "preview_url": null, "singleton": false, - "sort": 6, + "sort": 18, "sort_field": null, "translations": null, "unarchive_value": null, @@ -362,14 +390,14 @@ "collection": "conferences_partners", "color": null, "display_template": null, - "group": null, + "group": "Relations", "hidden": true, "icon": "import_export", "item_duplication_fields": null, "note": null, "preview_url": null, "singleton": false, - "sort": 11, + "sort": 15, "sort_field": null, "translations": null, "unarchive_value": null, @@ -390,14 +418,14 @@ "collection": "conferences_speakers", "color": null, "display_template": "{{speakers_id.first_name}} {{speakers_id.last_name}} at {{conferences_id.title}}", - "group": null, + "group": "Relations", "hidden": true, "icon": "import_export", "item_duplication_fields": null, "note": null, "preview_url": null, "singleton": false, - "sort": 7, + "sort": 17, "sort_field": null, "translations": null, "unarchive_value": null, @@ -418,14 +446,14 @@ "collection": "conferences_talks", "color": null, "display_template": null, - "group": null, + "group": "Relations", "hidden": true, "icon": "import_export", "item_duplication_fields": null, "note": null, "preview_url": null, "singleton": false, - "sort": 10, + "sort": 14, "sort_field": null, "translations": null, "unarchive_value": null, @@ -453,7 +481,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 8, + "sort": 9, "sort_field": null, "translations": null, "unarchive_value": "draft", @@ -509,7 +537,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 5, + "sort": 6, "sort_field": null, "translations": null, "unarchive_value": "draft", @@ -558,14 +586,14 @@ "collection": "home_page_highlights", "color": null, "display_template": null, - "group": null, + "group": "Relations", "hidden": true, "icon": "import_export", "item_duplication_fields": null, "note": null, "preview_url": null, "singleton": false, - "sort": 5, + "sort": 21, "sort_field": null, "translations": null, "unarchive_value": null, @@ -621,7 +649,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 9, + "sort": 10, "sort_field": null, "translations": null, "unarchive_value": "draft", @@ -677,7 +705,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 13, + "sort": 14, "sort_field": null, "translations": null, "unarchive_value": "draft", @@ -855,6 +883,34 @@ "name": "meetups" } }, + { + "collection": "meetups_talks", + "meta": { + "accountability": "all", + "archive_app_filter": true, + "archive_field": null, + "archive_value": null, + "collapse": "open", + "collection": "meetups_talks", + "color": null, + "display_template": null, + "group": "Relations", + "hidden": true, + "icon": "import_export", + "item_duplication_fields": null, + "note": null, + "preview_url": null, + "singleton": false, + "sort": 20, + "sort_field": null, + "translations": null, + "unarchive_value": null, + "versioning": false + }, + "schema": { + "name": "meetups_talks" + } + }, { "collection": "member_tags", "meta": { @@ -957,7 +1013,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 6, + "sort": 7, "sort_field": null, "translations": null, "unarchive_value": "draft", @@ -1181,7 +1237,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 10, + "sort": 11, "sort_field": null, "translations": null, "unarchive_value": "draft", @@ -1209,7 +1265,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 14, + "sort": 15, "sort_field": null, "translations": null, "unarchive_value": "draft", @@ -1321,7 +1377,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 15, + "sort": 16, "sort_field": null, "translations": null, "unarchive_value": null, @@ -1331,6 +1387,62 @@ "name": "raffle_page" } }, + { + "collection": "ratings", + "meta": { + "accountability": "all", + "archive_app_filter": true, + "archive_field": "status", + "archive_value": "archived", + "collapse": "open", + "collection": "ratings", + "color": null, + "display_template": null, + "group": "WIP", + "hidden": false, + "icon": "thumbs_up_down", + "item_duplication_fields": null, + "note": null, + "preview_url": null, + "singleton": false, + "sort": 1, + "sort_field": "sort", + "translations": null, + "unarchive_value": "draft", + "versioning": false + }, + "schema": { + "name": "ratings" + } + }, + { + "collection": "ratings_target", + "meta": { + "accountability": "all", + "archive_app_filter": true, + "archive_field": null, + "archive_value": null, + "collapse": "open", + "collection": "ratings_target", + "color": null, + "display_template": null, + "group": "Relations", + "hidden": true, + "icon": "import_export", + "item_duplication_fields": null, + "note": null, + "preview_url": null, + "singleton": false, + "sort": 23, + "sort_field": null, + "translations": null, + "unarchive_value": null, + "versioning": false + }, + "schema": { + "name": "ratings_target" + } + }, { "collection": "recordings_page", "meta": { @@ -1349,7 +1461,7 @@ "note": null, "preview_url": null, "singleton": true, - "sort": 12, + "sort": 13, "sort_field": null, "translations": null, "unarchive_value": "draft", @@ -1377,7 +1489,7 @@ "note": null, "preview_url": null, "singleton": false, - "sort": 14, + "sort": 19, "sort_field": "sort", "translations": null, "unarchive_value": null, @@ -1482,14 +1594,14 @@ "collection": "talks_members", "color": null, "display_template": null, - "group": null, + "group": "Relations", "hidden": true, "icon": "import_export", "item_duplication_fields": null, "note": null, "preview_url": null, "singleton": false, - "sort": 8, + "sort": 22, "sort_field": null, "translations": null, "unarchive_value": null, @@ -1510,14 +1622,14 @@ "collection": "talks_speakers", "color": null, "display_template": null, - "group": null, + "group": "Relations", "hidden": true, "icon": "import_export", "item_duplication_fields": null, "note": null, "preview_url": null, "singleton": false, - "sort": 9, + "sort": 16, "sort_field": null, "translations": null, "unarchive_value": null, @@ -3188,11 +3300,11 @@ } }, { - "collection": "conference_page", + "collection": "cocktail_menu", "field": "id", "type": "uuid", "meta": { - "collection": "conference_page", + "collection": "cocktail_menu", "conditions": null, "display": null, "display_options": null, @@ -3215,7 +3327,7 @@ }, "schema": { "name": "id", - "table": "conference_page", + "table": "cocktail_menu", "data_type": "uuid", "default_value": null, "max_length": null, @@ -3233,11 +3345,11 @@ } }, { - "collection": "conference_page", + "collection": "cocktail_menu", "field": "status", "type": "string", "meta": { - "collection": "conference_page", + "collection": "cocktail_menu", "conditions": null, "display": "labels", "display_options": { @@ -3301,7 +3413,7 @@ }, "schema": { "name": "status", - "table": "conference_page", + "table": "cocktail_menu", "data_type": "character varying", "default_value": "draft", "max_length": 255, @@ -3319,11 +3431,11 @@ } }, { - "collection": "conference_page", + "collection": "cocktail_menu", "field": "user_created", "type": "uuid", "meta": { - "collection": "conference_page", + "collection": "cocktail_menu", "conditions": null, "display": "user", "display_options": null, @@ -3333,11 +3445,11 @@ "interface": "select-dropdown-m2o", "note": null, "options": { - "template": "{{avatar.$thumbnail}} {{first_name}} {{last_name}}" + "template": "{{avatar}} {{first_name}} {{last_name}}" }, "readonly": true, "required": false, - "sort": 5, + "sort": 3, "special": [ "user-created" ], @@ -3348,7 +3460,7 @@ }, "schema": { "name": "user_created", - "table": "conference_page", + "table": "cocktail_menu", "data_type": "uuid", "default_value": null, "max_length": null, @@ -3366,11 +3478,11 @@ } }, { - "collection": "conference_page", + "collection": "cocktail_menu", "field": "date_created", "type": "timestamp", "meta": { - "collection": "conference_page", + "collection": "cocktail_menu", "conditions": null, "display": "datetime", "display_options": { @@ -3384,7 +3496,7 @@ "options": null, "readonly": true, "required": false, - "sort": 6, + "sort": 4, "special": [ "date-created" ], @@ -3395,7 +3507,7 @@ }, "schema": { "name": "date_created", - "table": "conference_page", + "table": "cocktail_menu", "data_type": "timestamp with time zone", "default_value": null, "max_length": null, @@ -3413,11 +3525,11 @@ } }, { - "collection": "conference_page", + "collection": "cocktail_menu", "field": "user_updated", "type": "uuid", "meta": { - "collection": "conference_page", + "collection": "cocktail_menu", "conditions": null, "display": "user", "display_options": null, @@ -3427,11 +3539,11 @@ "interface": "select-dropdown-m2o", "note": null, "options": { - "template": "{{avatar.$thumbnail}} {{first_name}} {{last_name}}" + "template": "{{avatar}} {{first_name}} {{last_name}}" }, "readonly": true, "required": false, - "sort": 3, + "sort": 5, "special": [ "user-updated" ], @@ -3442,7 +3554,7 @@ }, "schema": { "name": "user_updated", - "table": "conference_page", + "table": "cocktail_menu", "data_type": "uuid", "default_value": null, "max_length": null, @@ -3460,11 +3572,11 @@ } }, { - "collection": "conference_page", + "collection": "cocktail_menu", "field": "date_updated", "type": "timestamp", "meta": { - "collection": "conference_page", + "collection": "cocktail_menu", "conditions": null, "display": "datetime", "display_options": { @@ -3478,7 +3590,7 @@ "options": null, "readonly": true, "required": false, - "sort": 4, + "sort": 6, "special": [ "date-updated" ], @@ -3489,7 +3601,7 @@ }, "schema": { "name": "date_updated", - "table": "conference_page", + "table": "cocktail_menu", "data_type": "timestamp with time zone", "default_value": null, "max_length": null, @@ -3507,35 +3619,37 @@ } }, { - "collection": "conference_page", - "field": "meta_title", - "type": "string", + "collection": "cocktail_menu", + "field": "menu", + "type": "json", "meta": { - "collection": "conference_page", + "collection": "cocktail_menu", "conditions": null, "display": null, "display_options": null, - "field": "meta_title", + "field": "menu", "group": null, "hidden": false, - "interface": "input", + "interface": "input-code", "note": null, "options": null, "readonly": false, - "required": false, - "sort": 8, - "special": null, + "required": true, + "sort": 7, + "special": [ + "cast-json" + ], "translations": null, "validation": null, "validation_message": null, "width": "full" }, "schema": { - "name": "meta_title", - "table": "conference_page", - "data_type": "character varying", - "default_value": null, - "max_length": 255, + "name": "menu", + "table": "cocktail_menu", + "data_type": "json", + "default_value": {}, + "max_length": null, "numeric_precision": null, "numeric_scale": null, "is_nullable": true, @@ -3551,40 +3665,42 @@ }, { "collection": "conference_page", - "field": "meta_description", - "type": "text", + "field": "id", + "type": "uuid", "meta": { "collection": "conference_page", "conditions": null, "display": null, "display_options": null, - "field": "meta_description", + "field": "id", "group": null, - "hidden": false, - "interface": "input-multiline", + "hidden": true, + "interface": "input", "note": null, "options": null, - "readonly": false, + "readonly": true, "required": false, - "sort": 9, - "special": null, + "sort": 1, + "special": [ + "uuid" + ], "translations": null, "validation": null, "validation_message": null, "width": "full" }, "schema": { - "name": "meta_description", + "name": "id", "table": "conference_page", - "data_type": "text", + "data_type": "uuid", "default_value": null, "max_length": null, "numeric_precision": null, "numeric_scale": null, - "is_nullable": true, - "is_unique": false, + "is_nullable": false, + "is_unique": true, "is_indexed": false, - "is_primary_key": false, + "is_primary_key": true, "is_generated": false, "generation_expression": null, "has_auto_increment": false, @@ -3594,92 +3710,214 @@ }, { "collection": "conference_page", - "field": "divider-al6oeo", - "type": "alias", + "field": "status", + "type": "string", "meta": { "collection": "conference_page", "conditions": null, - "display": null, - "display_options": null, - "field": "divider-al6oeo", - "group": null, - "hidden": false, - "interface": "presentation-divider", - "note": null, - "options": { - "title": "Intro" - }, - "readonly": false, - "required": false, - "sort": 10, - "special": [ - "alias", - "no-data" - ], - "translations": null, - "validation": null, + "display": "labels", + "display_options": { + "choices": [ + { + "background": "var(--theme--primary-background)", + "color": "var(--theme--primary)", + "foreground": "var(--theme--primary)", + "text": "$t:published", + "value": "published" + }, + { + "background": "var(--theme--background-normal)", + "color": "var(--theme--foreground)", + "foreground": "var(--theme--foreground)", + "text": "$t:draft", + "value": "draft" + }, + { + "background": "var(--theme--warning-background)", + "color": "var(--theme--warning)", + "foreground": "var(--theme--warning)", + "text": "$t:archived", + "value": "archived" + } + ], + "showAsDot": true + }, + "field": "status", + "group": null, + "hidden": false, + "interface": "select-dropdown", + "note": null, + "options": { + "choices": [ + { + "color": "var(--theme--primary)", + "text": "$t:published", + "value": "published" + }, + { + "color": "var(--theme--foreground)", + "text": "$t:draft", + "value": "draft" + }, + { + "color": "var(--theme--warning)", + "text": "$t:archived", + "value": "archived" + } + ] + }, + "readonly": false, + "required": false, + "sort": 2, + "special": null, + "translations": null, + "validation": null, "validation_message": null, "width": "full" + }, + "schema": { + "name": "status", + "table": "conference_page", + "data_type": "character varying", + "default_value": "draft", + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null } }, { "collection": "conference_page", - "field": "divider-jxppq-", - "type": "alias", + "field": "user_created", + "type": "uuid", "meta": { "collection": "conference_page", "conditions": null, - "display": null, + "display": "user", "display_options": null, - "field": "divider-jxppq-", + "field": "user_created", "group": null, - "hidden": false, - "interface": "presentation-divider", + "hidden": true, + "interface": "select-dropdown-m2o", "note": null, "options": { - "title": "Meta" + "template": "{{avatar.$thumbnail}} {{first_name}} {{last_name}}" }, - "readonly": false, + "readonly": true, "required": false, - "sort": 7, + "sort": 5, "special": [ - "alias", - "no-data" + "user-created" ], "translations": null, "validation": null, "validation_message": null, - "width": "full" + "width": "half" + }, + "schema": { + "name": "user_created", + "table": "conference_page", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "directus_users", + "foreign_key_column": "id" } }, { "collection": "conference_page", - "field": "cover_image", + "field": "date_created", + "type": "timestamp", + "meta": { + "collection": "conference_page", + "conditions": null, + "display": "datetime", + "display_options": { + "relative": true + }, + "field": "date_created", + "group": null, + "hidden": true, + "interface": "datetime", + "note": null, + "options": null, + "readonly": true, + "required": false, + "sort": 6, + "special": [ + "date-created" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "date_created", + "table": "conference_page", + "data_type": "timestamp with time zone", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "conference_page", + "field": "user_updated", "type": "uuid", "meta": { "collection": "conference_page", "conditions": null, - "display": null, + "display": "user", "display_options": null, - "field": "cover_image", + "field": "user_updated", "group": null, - "hidden": false, - "interface": "file-image", + "hidden": true, + "interface": "select-dropdown-m2o", "note": null, - "options": null, - "readonly": false, + "options": { + "template": "{{avatar.$thumbnail}} {{first_name}} {{last_name}}" + }, + "readonly": true, "required": false, - "sort": 11, + "sort": 3, "special": [ - "file" + "user-updated" ], "translations": null, "validation": null, "validation_message": null, - "width": "full" + "width": "half" }, "schema": { - "name": "cover_image", + "name": "user_updated", "table": "conference_page", "data_type": "uuid", "default_value": null, @@ -3693,40 +3931,44 @@ "is_generated": false, "generation_expression": null, "has_auto_increment": false, - "foreign_key_table": "directus_files", + "foreign_key_table": "directus_users", "foreign_key_column": "id" } }, { "collection": "conference_page", - "field": "conference_heading", - "type": "string", + "field": "date_updated", + "type": "timestamp", "meta": { "collection": "conference_page", "conditions": null, - "display": null, - "display_options": null, - "field": "conference_heading", + "display": "datetime", + "display_options": { + "relative": true + }, + "field": "date_updated", "group": null, - "hidden": false, - "interface": "input", + "hidden": true, + "interface": "datetime", "note": null, "options": null, - "readonly": false, + "readonly": true, "required": false, - "sort": 12, - "special": null, + "sort": 4, + "special": [ + "date-updated" + ], "translations": null, "validation": null, "validation_message": null, - "width": "full" + "width": "half" }, "schema": { - "name": "conference_heading", + "name": "date_updated", "table": "conference_page", - "data_type": "character varying", + "data_type": "timestamp with time zone", "default_value": null, - "max_length": 255, + "max_length": null, "numeric_precision": null, "numeric_scale": null, "is_nullable": true, @@ -3742,14 +3984,14 @@ }, { "collection": "conference_page", - "field": "intro_heading", + "field": "meta_title", "type": "string", "meta": { "collection": "conference_page", "conditions": null, "display": null, "display_options": null, - "field": "intro_heading", + "field": "meta_title", "group": null, "hidden": false, "interface": "input", @@ -3757,7 +3999,7 @@ "options": null, "readonly": false, "required": false, - "sort": 13, + "sort": 8, "special": null, "translations": null, "validation": null, @@ -3765,7 +4007,7 @@ "width": "full" }, "schema": { - "name": "intro_heading", + "name": "meta_title", "table": "conference_page", "data_type": "character varying", "default_value": null, @@ -3785,22 +4027,22 @@ }, { "collection": "conference_page", - "field": "intro_text_1", + "field": "meta_description", "type": "text", "meta": { "collection": "conference_page", "conditions": null, "display": null, "display_options": null, - "field": "intro_text_1", + "field": "meta_description", "group": null, "hidden": false, - "interface": "input-rich-text-html", + "interface": "input-multiline", "note": null, "options": null, "readonly": false, "required": false, - "sort": 14, + "sort": 9, "special": null, "translations": null, "validation": null, @@ -3808,7 +4050,7 @@ "width": "full" }, "schema": { - "name": "intro_text_1", + "name": "meta_description", "table": "conference_page", "data_type": "text", "default_value": null, @@ -3828,24 +4070,24 @@ }, { "collection": "conference_page", - "field": "divider-knhoxi", + "field": "divider-al6oeo", "type": "alias", "meta": { "collection": "conference_page", "conditions": null, "display": null, "display_options": null, - "field": "divider-knhoxi", + "field": "divider-al6oeo", "group": null, "hidden": false, "interface": "presentation-divider", "note": null, "options": { - "title": "FAQs" + "title": "Intro" }, "readonly": false, "required": false, - "sort": 15, + "sort": 10, "special": [ "alias", "no-data" @@ -3858,19 +4100,253 @@ }, { "collection": "conference_page", - "field": "faqs_heading", - "type": "string", + "field": "divider-jxppq-", + "type": "alias", "meta": { "collection": "conference_page", "conditions": null, "display": null, "display_options": null, - "field": "faqs_heading", + "field": "divider-jxppq-", "group": null, "hidden": false, - "interface": "input", + "interface": "presentation-divider", "note": null, - "options": null, + "options": { + "title": "Meta" + }, + "readonly": false, + "required": false, + "sort": 7, + "special": [ + "alias", + "no-data" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + } + }, + { + "collection": "conference_page", + "field": "cover_image", + "type": "uuid", + "meta": { + "collection": "conference_page", + "conditions": null, + "display": null, + "display_options": null, + "field": "cover_image", + "group": null, + "hidden": false, + "interface": "file-image", + "note": null, + "options": null, + "readonly": false, + "required": false, + "sort": 11, + "special": [ + "file" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "cover_image", + "table": "conference_page", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "directus_files", + "foreign_key_column": "id" + } + }, + { + "collection": "conference_page", + "field": "conference_heading", + "type": "string", + "meta": { + "collection": "conference_page", + "conditions": null, + "display": null, + "display_options": null, + "field": "conference_heading", + "group": null, + "hidden": false, + "interface": "input", + "note": null, + "options": null, + "readonly": false, + "required": false, + "sort": 12, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "conference_heading", + "table": "conference_page", + "data_type": "character varying", + "default_value": null, + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "conference_page", + "field": "intro_heading", + "type": "string", + "meta": { + "collection": "conference_page", + "conditions": null, + "display": null, + "display_options": null, + "field": "intro_heading", + "group": null, + "hidden": false, + "interface": "input", + "note": null, + "options": null, + "readonly": false, + "required": false, + "sort": 13, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "intro_heading", + "table": "conference_page", + "data_type": "character varying", + "default_value": null, + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "conference_page", + "field": "intro_text_1", + "type": "text", + "meta": { + "collection": "conference_page", + "conditions": null, + "display": null, + "display_options": null, + "field": "intro_text_1", + "group": null, + "hidden": false, + "interface": "input-rich-text-html", + "note": null, + "options": null, + "readonly": false, + "required": false, + "sort": 14, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "intro_text_1", + "table": "conference_page", + "data_type": "text", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "conference_page", + "field": "divider-knhoxi", + "type": "alias", + "meta": { + "collection": "conference_page", + "conditions": null, + "display": null, + "display_options": null, + "field": "divider-knhoxi", + "group": null, + "hidden": false, + "interface": "presentation-divider", + "note": null, + "options": { + "title": "FAQs" + }, + "readonly": false, + "required": false, + "sort": 15, + "special": [ + "alias", + "no-data" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + } + }, + { + "collection": "conference_page", + "field": "faqs_heading", + "type": "string", + "meta": { + "collection": "conference_page", + "conditions": null, + "display": null, + "display_options": null, + "field": "faqs_heading", + "group": null, + "hidden": false, + "interface": "input", + "note": null, + "options": null, "readonly": false, "required": false, "sort": 16, @@ -4633,6 +5109,7 @@ "note": null, "options": { "enableCreate": false, + "limit": 30, "template": "{{speakers_id.first_name}} {{speakers_id.last_name}}" }, "readonly": false, @@ -4989,11 +5466,13 @@ "field": "gallery_images", "group": null, "hidden": false, - "interface": "list-m2m", + "interface": "files", "note": null, "options": { "enableCreate": false, - "filter": null + "filter": null, + "folder": "e132fe08-d7c6-478c-9b75-68676be8783d", + "template": "{{directus_files_id.$thumbnail}}" }, "readonly": false, "required": false, @@ -5023,6 +5502,7 @@ "note": null, "options": { "enableCreate": false, + "limit": 30, "template": "{{talk.title}}" }, "readonly": false, @@ -11463,7 +11943,7 @@ "options": null, "readonly": true, "required": false, - "sort": 19, + "sort": 21, "special": [ "uuid" ], @@ -11582,7 +12062,7 @@ "options": null, "readonly": false, "required": false, - "sort": 20, + "sort": 22, "special": null, "translations": null, "validation": null, @@ -11627,7 +12107,7 @@ }, "readonly": true, "required": false, - "sort": 21, + "sort": 23, "special": [ "user-created" ], @@ -11674,7 +12154,7 @@ "options": null, "readonly": true, "required": false, - "sort": 22, + "sort": 24, "special": [ "date-created" ], @@ -11721,7 +12201,7 @@ }, "readonly": true, "required": false, - "sort": 23, + "sort": 25, "special": [ "user-updated" ], @@ -11768,7 +12248,7 @@ "options": null, "readonly": true, "required": false, - "sort": 24, + "sort": 26, "special": [ "date-updated" ], @@ -11858,7 +12338,7 @@ }, "readonly": false, "required": false, - "sort": 25, + "sort": 27, "special": null, "translations": null, "validation": null, @@ -12156,7 +12636,7 @@ }, "readonly": false, "required": false, - "sort": 10, + "sort": 12, "special": null, "translations": null, "validation": null, @@ -12201,7 +12681,7 @@ }, "readonly": false, "required": false, - "sort": 12, + "sort": 14, "special": null, "translations": null, "validation": null, @@ -12256,7 +12736,7 @@ }, "readonly": false, "required": false, - "sort": 11, + "sort": 13, "special": null, "translations": null, "validation": null, @@ -12302,7 +12782,7 @@ }, "readonly": false, "required": false, - "sort": 14, + "sort": 16, "special": [ "alias", "no-data" @@ -12360,7 +12840,7 @@ "options": null, "readonly": false, "required": false, - "sort": 18, + "sort": 20, "special": [ "alias", "no-data" @@ -12461,7 +12941,7 @@ "options": null, "readonly": false, "required": false, - "sort": 13, + "sort": 15, "special": [ "files" ], @@ -12486,11 +12966,11 @@ "interface": "list-m2m", "note": null, "options": { - "template": "{{member.first_name}} {{member.last_name}}" + "template": "{{member.first_name}} {{member.last_name}}" }, "readonly": false, "required": false, - "sort": 15, + "sort": 17, "special": [ "m2m" ], @@ -12515,11 +12995,11 @@ "interface": "list-m2m", "note": null, "options": { - "template": "{{speaker.first_name}} {{speaker.last_name}}" + "template": "{{speaker.first_name}} {{speaker.last_name}}" }, "readonly": false, "required": false, - "sort": 16, + "sort": 18, "special": [ "m2m" ], @@ -12548,7 +13028,7 @@ }, "readonly": false, "required": false, - "sort": 17, + "sort": 19, "special": [ "m2m" ], @@ -12559,11 +13039,98 @@ } }, { - "collection": "member_tags", + "collection": "meetups", + "field": "intro", + "type": "text", + "meta": { + "collection": "meetups", + "conditions": null, + "display": null, + "display_options": null, + "field": "intro", + "group": null, + "hidden": false, + "interface": "input-rich-text-html", + "note": null, + "options": { + "toolbar": [ + "bold", + "italic", + "underline", + "numlist", + "bullist", + "removeformat", + "blockquote", + "customLink", + "code", + "fullscreen" + ] + }, + "readonly": false, + "required": false, + "sort": 10, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "intro", + "table": "meetups", + "data_type": "text", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "meetups", + "field": "talks", + "type": "alias", + "meta": { + "collection": "meetups", + "conditions": null, + "display": null, + "display_options": { + "template": "{{talk.title}}" + }, + "field": "talks", + "group": null, + "hidden": false, + "interface": "list-m2m", + "note": null, + "options": { + "template": "{{talk.title}}" + }, + "readonly": false, + "required": false, + "sort": 11, + "special": [ + "m2m" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + } + }, + { + "collection": "meetups_talks", "field": "id", "type": "integer", "meta": { - "collection": "member_tags", + "collection": "meetups_talks", "conditions": null, "display": null, "display_options": null, @@ -12575,7 +13142,7 @@ "options": null, "readonly": false, "required": false, - "sort": null, + "sort": 1, "special": null, "translations": null, "validation": null, @@ -12584,9 +13151,9 @@ }, "schema": { "name": "id", - "table": "member_tags", + "table": "meetups_talks", "data_type": "integer", - "default_value": "nextval('member_tags_id_seq'::regclass)", + "default_value": "nextval('meetups_talks_id_seq'::regclass)", "max_length": null, "numeric_precision": 32, "numeric_scale": 0, @@ -12602,15 +13169,15 @@ } }, { - "collection": "member_tags", - "field": "member", + "collection": "meetups_talks", + "field": "meetup", "type": "uuid", "meta": { - "collection": "member_tags", + "collection": "meetups_talks", "conditions": null, "display": null, "display_options": null, - "field": "member", + "field": "meetup", "group": null, "hidden": true, "interface": null, @@ -12618,7 +13185,7 @@ "options": null, "readonly": false, "required": false, - "sort": null, + "sort": 2, "special": null, "translations": null, "validation": null, @@ -12626,8 +13193,8 @@ "width": "full" }, "schema": { - "name": "member", - "table": "member_tags", + "name": "meetup", + "table": "meetups_talks", "data_type": "uuid", "default_value": null, "max_length": null, @@ -12640,20 +13207,20 @@ "is_generated": false, "generation_expression": null, "has_auto_increment": false, - "foreign_key_table": "members", + "foreign_key_table": "meetups", "foreign_key_column": "id" } }, { - "collection": "member_tags", - "field": "tag", + "collection": "meetups_talks", + "field": "talk", "type": "uuid", "meta": { - "collection": "member_tags", + "collection": "meetups_talks", "conditions": null, "display": null, "display_options": null, - "field": "tag", + "field": "talk", "group": null, "hidden": true, "interface": null, @@ -12661,7 +13228,7 @@ "options": null, "readonly": false, "required": false, - "sort": null, + "sort": 3, "special": null, "translations": null, "validation": null, @@ -12669,8 +13236,8 @@ "width": "full" }, "schema": { - "name": "tag", - "table": "member_tags", + "name": "talk", + "table": "meetups_talks", "data_type": "uuid", "default_value": null, "max_length": null, @@ -12683,28 +13250,28 @@ "is_generated": false, "generation_expression": null, "has_auto_increment": false, - "foreign_key_table": "tags", + "foreign_key_table": "talks", "foreign_key_column": "id" } }, { - "collection": "member_tags", + "collection": "meetups_talks", "field": "sort", "type": "integer", "meta": { - "collection": "member_tags", + "collection": "meetups_talks", "conditions": null, "display": null, "display_options": null, "field": "sort", "group": null, "hidden": false, - "interface": null, + "interface": "input", "note": null, "options": null, "readonly": false, "required": false, - "sort": null, + "sort": 4, "special": null, "translations": null, "validation": null, @@ -12713,7 +13280,7 @@ }, "schema": { "name": "sort", - "table": "member_tags", + "table": "meetups_talks", "data_type": "integer", "default_value": null, "max_length": null, @@ -12731,26 +13298,24 @@ } }, { - "collection": "members", + "collection": "member_tags", "field": "id", - "type": "uuid", + "type": "integer", "meta": { - "collection": "members", + "collection": "member_tags", "conditions": null, "display": null, "display_options": null, "field": "id", "group": null, "hidden": true, - "interface": "input", + "interface": null, "note": null, "options": null, - "readonly": true, + "readonly": false, "required": false, - "sort": 29, - "special": [ - "uuid" - ], + "sort": null, + "special": null, "translations": null, "validation": null, "validation_message": null, @@ -12758,115 +13323,84 @@ }, "schema": { "name": "id", - "table": "members", - "data_type": "uuid", - "default_value": null, + "table": "member_tags", + "data_type": "integer", + "default_value": "nextval('member_tags_id_seq'::regclass)", "max_length": null, - "numeric_precision": null, - "numeric_scale": null, + "numeric_precision": 32, + "numeric_scale": 0, "is_nullable": false, "is_unique": true, "is_indexed": false, "is_primary_key": true, "is_generated": false, "generation_expression": null, - "has_auto_increment": false, + "has_auto_increment": true, "foreign_key_table": null, "foreign_key_column": null } }, { - "collection": "members", - "field": "status", - "type": "string", + "collection": "member_tags", + "field": "member", + "type": "uuid", "meta": { - "collection": "members", + "collection": "member_tags", "conditions": null, - "display": "labels", - "display_options": { - "choices": [ - { - "background": "#00C897", - "value": "published" - }, - { - "background": "#D3DAE4", - "value": "draft" - }, - { - "background": "#F7971C", - "value": "archived" - } - ], - "showAsDot": true - }, - "field": "status", + "display": null, + "display_options": null, + "field": "member", "group": null, - "hidden": false, - "interface": "select-dropdown", + "hidden": true, + "interface": null, "note": null, - "options": { - "choices": [ - { - "text": "$t:published", - "value": "published" - }, - { - "text": "$t:draft", - "value": "draft" - }, - { - "text": "$t:archived", - "value": "archived" - } - ] - }, + "options": null, "readonly": false, "required": false, - "sort": 3, + "sort": null, "special": null, "translations": null, "validation": null, "validation_message": null, - "width": "half" + "width": "full" }, "schema": { - "name": "status", - "table": "members", - "data_type": "character varying", - "default_value": "draft", - "max_length": 255, + "name": "member", + "table": "member_tags", + "data_type": "uuid", + "default_value": null, + "max_length": null, "numeric_precision": null, "numeric_scale": null, - "is_nullable": false, + "is_nullable": true, "is_unique": false, "is_indexed": false, "is_primary_key": false, "is_generated": false, "generation_expression": null, "has_auto_increment": false, - "foreign_key_table": null, - "foreign_key_column": null + "foreign_key_table": "members", + "foreign_key_column": "id" } }, { - "collection": "members", - "field": "sort", - "type": "integer", + "collection": "member_tags", + "field": "tag", + "type": "uuid", "meta": { - "collection": "members", + "collection": "member_tags", "conditions": null, "display": null, "display_options": null, - "field": "sort", + "field": "tag", "group": null, - "hidden": false, - "interface": "input", + "hidden": true, + "interface": null, "note": null, "options": null, "readonly": false, "required": false, - "sort": 5, + "sort": null, "special": null, "translations": null, "validation": null, @@ -12874,9 +13408,214 @@ "width": "full" }, "schema": { - "name": "sort", - "table": "members", - "data_type": "integer", + "name": "tag", + "table": "member_tags", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "tags", + "foreign_key_column": "id" + } + }, + { + "collection": "member_tags", + "field": "sort", + "type": "integer", + "meta": { + "collection": "member_tags", + "conditions": null, + "display": null, + "display_options": null, + "field": "sort", + "group": null, + "hidden": false, + "interface": null, + "note": null, + "options": null, + "readonly": false, + "required": false, + "sort": null, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "sort", + "table": "member_tags", + "data_type": "integer", + "default_value": null, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "members", + "field": "id", + "type": "uuid", + "meta": { + "collection": "members", + "conditions": null, + "display": null, + "display_options": null, + "field": "id", + "group": null, + "hidden": true, + "interface": "input", + "note": null, + "options": null, + "readonly": true, + "required": false, + "sort": 29, + "special": [ + "uuid" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "id", + "table": "members", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": true, + "is_indexed": false, + "is_primary_key": true, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "members", + "field": "status", + "type": "string", + "meta": { + "collection": "members", + "conditions": null, + "display": "labels", + "display_options": { + "choices": [ + { + "background": "#00C897", + "value": "published" + }, + { + "background": "#D3DAE4", + "value": "draft" + }, + { + "background": "#F7971C", + "value": "archived" + } + ], + "showAsDot": true + }, + "field": "status", + "group": null, + "hidden": false, + "interface": "select-dropdown", + "note": null, + "options": { + "choices": [ + { + "text": "$t:published", + "value": "published" + }, + { + "text": "$t:draft", + "value": "draft" + }, + { + "text": "$t:archived", + "value": "archived" + } + ] + }, + "readonly": false, + "required": false, + "sort": 3, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "status", + "table": "members", + "data_type": "character varying", + "default_value": "draft", + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "members", + "field": "sort", + "type": "integer", + "meta": { + "collection": "members", + "conditions": null, + "display": null, + "display_options": null, + "field": "sort", + "group": null, + "hidden": false, + "interface": "input", + "note": null, + "options": null, + "readonly": false, + "required": false, + "sort": 5, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "sort", + "table": "members", + "data_type": "integer", "default_value": null, "max_length": null, "numeric_precision": 32, @@ -16216,7 +16955,7 @@ "interface": "select-dropdown-m2o", "note": null, "options": { - "template": "{{first_name}} {{last_name}}" + "template": "{{first_name}} {{last_name}}" }, "readonly": false, "required": false, @@ -16263,7 +17002,7 @@ "interface": "select-dropdown-m2o", "note": null, "options": { - "template": "{{first_name}} {{last_name}}" + "template": "{{first_name}} {{last_name}}" }, "readonly": false, "required": false, @@ -18310,7 +19049,21 @@ "type": "string", "meta": { "collection": "podcasts", - "conditions": null, + "conditions": [ + { + "name": "If published", + "required": true, + "rule": { + "_and": [ + { + "status": { + "_eq": "published" + } + } + ] + } + } + ], "display": null, "display_options": null, "field": "slug", @@ -18465,22 +19218,18 @@ "rule": { "_and": [ { - "_and": [ - { - "status": { - "_eq": "published" - } - }, - { - "type": { - "_in": [ - "deep_dive", - "cto_special", - "news" - ] - } - } - ] + "status": { + "_eq": "published" + } + }, + { + "type": { + "_in": [ + "deep_dive", + "cto_special", + "news" + ] + } } ] } @@ -18787,7 +19536,7 @@ "translations": null, "validation": null, "validation_message": null, - "width": "half" + "width": "full" }, "schema": { "name": "audio_file", @@ -18819,7 +19568,7 @@ "display_options": null, "field": "audio_url", "group": null, - "hidden": false, + "hidden": true, "interface": "input", "note": null, "options": { @@ -18879,7 +19628,7 @@ "display_options": null, "field": "transcript", "group": null, - "hidden": false, + "hidden": true, "interface": "input-multiline", "note": null, "options": { @@ -18924,7 +19673,7 @@ "display_options": null, "field": "apple_url", "group": null, - "hidden": false, + "hidden": true, "interface": "input", "note": null, "options": { @@ -18969,7 +19718,7 @@ "display_options": null, "field": "google_url", "group": null, - "hidden": false, + "hidden": true, "interface": "input", "note": null, "options": { @@ -19014,7 +19763,7 @@ "display_options": null, "field": "spotify_url", "group": null, - "hidden": false, + "hidden": true, "interface": "input", "note": null, "options": { @@ -19333,7 +20082,7 @@ "interface": "list-m2m", "note": null, "options": { - "template": "{{member.first_name}} {{member.last_name}}" + "template": "{{member.first_name}} {{member.last_name}}" }, "readonly": false, "required": false, @@ -19362,7 +20111,7 @@ "interface": "list-m2m", "note": null, "options": { - "template": "{{speaker.first_name}} {{speaker.last_name}}" + "template": "{{speaker.first_name}} {{speaker.last_name}}" }, "readonly": false, "required": false, @@ -21908,13 +22657,519 @@ "display_options": null, "field": "tags_id", "group": null, - "hidden": true, - "interface": null, + "hidden": true, + "interface": null, + "note": null, + "options": null, + "readonly": false, + "required": false, + "sort": 3, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "tags_id", + "table": "profiles_tags", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "tags", + "foreign_key_column": "id" + } + }, + { + "collection": "raffle_page", + "field": "id", + "type": "integer", + "meta": { + "collection": "raffle_page", + "conditions": null, + "display": null, + "display_options": null, + "field": "id", + "group": null, + "hidden": true, + "interface": "input", + "note": null, + "options": null, + "readonly": true, + "required": false, + "sort": 1, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "id", + "table": "raffle_page", + "data_type": "integer", + "default_value": "nextval('raffle_page_id_seq'::regclass)", + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": false, + "is_unique": true, + "is_indexed": false, + "is_primary_key": true, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": true, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "raffle_page", + "field": "user_created", + "type": "uuid", + "meta": { + "collection": "raffle_page", + "conditions": null, + "display": "user", + "display_options": null, + "field": "user_created", + "group": null, + "hidden": true, + "interface": "select-dropdown-m2o", + "note": null, + "options": { + "template": "{{avatar.$thumbnail}} {{first_name}} {{last_name}}" + }, + "readonly": true, + "required": false, + "sort": 5, + "special": [ + "user-created" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "user_created", + "table": "raffle_page", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "directus_users", + "foreign_key_column": "id" + } + }, + { + "collection": "raffle_page", + "field": "date_created", + "type": "timestamp", + "meta": { + "collection": "raffle_page", + "conditions": null, + "display": "datetime", + "display_options": { + "relative": true + }, + "field": "date_created", + "group": null, + "hidden": true, + "interface": "datetime", + "note": null, + "options": null, + "readonly": true, + "required": false, + "sort": 6, + "special": [ + "date-created" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "date_created", + "table": "raffle_page", + "data_type": "timestamp with time zone", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "raffle_page", + "field": "user_updated", + "type": "uuid", + "meta": { + "collection": "raffle_page", + "conditions": null, + "display": "user", + "display_options": null, + "field": "user_updated", + "group": null, + "hidden": true, + "interface": "select-dropdown-m2o", + "note": null, + "options": { + "template": "{{avatar.$thumbnail}} {{first_name}} {{last_name}}" + }, + "readonly": true, + "required": false, + "sort": 7, + "special": [ + "user-updated" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "user_updated", + "table": "raffle_page", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "directus_users", + "foreign_key_column": "id" + } + }, + { + "collection": "raffle_page", + "field": "date_updated", + "type": "timestamp", + "meta": { + "collection": "raffle_page", + "conditions": null, + "display": "datetime", + "display_options": { + "relative": true + }, + "field": "date_updated", + "group": null, + "hidden": true, + "interface": "datetime", + "note": null, + "options": null, + "readonly": true, + "required": false, + "sort": 8, + "special": [ + "date-updated" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "date_updated", + "table": "raffle_page", + "data_type": "timestamp with time zone", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "raffle_page", + "field": "heading", + "type": "string", + "meta": { + "collection": "raffle_page", + "conditions": null, + "display": null, + "display_options": null, + "field": "heading", + "group": null, + "hidden": false, + "interface": "input", + "note": null, + "options": null, + "readonly": false, + "required": true, + "sort": 3, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "heading", + "table": "raffle_page", + "data_type": "character varying", + "default_value": null, + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "raffle_page", + "field": "text", + "type": "text", + "meta": { + "collection": "raffle_page", + "conditions": null, + "display": null, + "display_options": null, + "field": "text", + "group": null, + "hidden": false, + "interface": "input-rich-text-html", + "note": null, + "options": null, + "readonly": false, + "required": true, + "sort": 4, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "text", + "table": "raffle_page", + "data_type": "text", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "raffle_page", + "field": "status", + "type": "string", + "meta": { + "collection": "raffle_page", + "conditions": null, + "display": null, + "display_options": null, + "field": "status", + "group": null, + "hidden": false, + "interface": "select-dropdown", + "note": null, + "options": { + "choices": [ + { + "text": "Published", + "value": "published" + }, + { + "text": "Draft", + "value": "draft" + }, + { + "text": "Archived", + "value": "archived" + } + ] + }, + "readonly": false, + "required": true, + "sort": 2, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "status", + "table": "raffle_page", + "data_type": "character varying", + "default_value": "draft", + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ratings", + "field": "id", + "type": "uuid", + "meta": { + "collection": "ratings", + "conditions": null, + "display": null, + "display_options": null, + "field": "id", + "group": null, + "hidden": true, + "interface": "input", + "note": null, + "options": null, + "readonly": true, + "required": false, + "sort": 1, + "special": [ + "uuid" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "id", + "table": "ratings", + "data_type": "uuid", + "default_value": null, + "max_length": null, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": false, + "is_unique": true, + "is_indexed": false, + "is_primary_key": true, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ratings", + "field": "status", + "type": "string", + "meta": { + "collection": "ratings", + "conditions": null, + "display": "labels", + "display_options": { + "choices": [ + { + "background": "var(--theme--primary-background)", + "color": "var(--theme--primary)", + "foreground": "var(--theme--primary)", + "text": "$t:published", + "value": "published" + }, + { + "background": "var(--theme--background-normal)", + "color": "var(--theme--foreground)", + "foreground": "var(--theme--foreground)", + "text": "$t:draft", + "value": "draft" + }, + { + "background": "var(--theme--warning-background)", + "color": "var(--theme--warning)", + "foreground": "var(--theme--warning)", + "text": "$t:archived", + "value": "archived" + } + ], + "showAsDot": true + }, + "field": "status", + "group": null, + "hidden": false, + "interface": "select-dropdown", "note": null, - "options": null, + "options": { + "choices": [ + { + "color": "var(--theme--primary)", + "text": "$t:published", + "value": "published" + }, + { + "color": "var(--theme--foreground)", + "text": "$t:draft", + "value": "draft" + }, + { + "color": "var(--theme--warning)", + "text": "$t:archived", + "value": "archived" + } + ] + }, "readonly": false, "required": false, - "sort": 3, + "sort": 2, "special": null, "translations": null, "validation": null, @@ -21922,42 +23177,42 @@ "width": "full" }, "schema": { - "name": "tags_id", - "table": "profiles_tags", - "data_type": "uuid", - "default_value": null, - "max_length": null, + "name": "status", + "table": "ratings", + "data_type": "character varying", + "default_value": "draft", + "max_length": 255, "numeric_precision": null, "numeric_scale": null, - "is_nullable": true, + "is_nullable": false, "is_unique": false, "is_indexed": false, "is_primary_key": false, "is_generated": false, "generation_expression": null, "has_auto_increment": false, - "foreign_key_table": "tags", - "foreign_key_column": "id" + "foreign_key_table": null, + "foreign_key_column": null } }, { - "collection": "raffle_page", - "field": "id", + "collection": "ratings", + "field": "sort", "type": "integer", "meta": { - "collection": "raffle_page", + "collection": "ratings", "conditions": null, "display": null, "display_options": null, - "field": "id", + "field": "sort", "group": null, "hidden": true, "interface": "input", "note": null, "options": null, - "readonly": true, + "readonly": false, "required": false, - "sort": 1, + "sort": 3, "special": null, "translations": null, "validation": null, @@ -21965,30 +23220,30 @@ "width": "full" }, "schema": { - "name": "id", - "table": "raffle_page", + "name": "sort", + "table": "ratings", "data_type": "integer", - "default_value": "nextval('raffle_page_id_seq'::regclass)", + "default_value": null, "max_length": null, "numeric_precision": 32, "numeric_scale": 0, - "is_nullable": false, - "is_unique": true, + "is_nullable": true, + "is_unique": false, "is_indexed": false, - "is_primary_key": true, + "is_primary_key": false, "is_generated": false, "generation_expression": null, - "has_auto_increment": true, + "has_auto_increment": false, "foreign_key_table": null, "foreign_key_column": null } }, { - "collection": "raffle_page", + "collection": "ratings", "field": "user_created", "type": "uuid", "meta": { - "collection": "raffle_page", + "collection": "ratings", "conditions": null, "display": "user", "display_options": null, @@ -21998,11 +23253,11 @@ "interface": "select-dropdown-m2o", "note": null, "options": { - "template": "{{avatar.$thumbnail}} {{first_name}} {{last_name}}" + "template": "{{avatar}} {{first_name}} {{last_name}}" }, "readonly": true, "required": false, - "sort": 5, + "sort": 4, "special": [ "user-created" ], @@ -22013,7 +23268,7 @@ }, "schema": { "name": "user_created", - "table": "raffle_page", + "table": "ratings", "data_type": "uuid", "default_value": null, "max_length": null, @@ -22031,11 +23286,11 @@ } }, { - "collection": "raffle_page", + "collection": "ratings", "field": "date_created", "type": "timestamp", "meta": { - "collection": "raffle_page", + "collection": "ratings", "conditions": null, "display": "datetime", "display_options": { @@ -22049,7 +23304,7 @@ "options": null, "readonly": true, "required": false, - "sort": 6, + "sort": 5, "special": [ "date-created" ], @@ -22060,7 +23315,7 @@ }, "schema": { "name": "date_created", - "table": "raffle_page", + "table": "ratings", "data_type": "timestamp with time zone", "default_value": null, "max_length": null, @@ -22078,11 +23333,11 @@ } }, { - "collection": "raffle_page", + "collection": "ratings", "field": "user_updated", "type": "uuid", "meta": { - "collection": "raffle_page", + "collection": "ratings", "conditions": null, "display": "user", "display_options": null, @@ -22092,11 +23347,11 @@ "interface": "select-dropdown-m2o", "note": null, "options": { - "template": "{{avatar.$thumbnail}} {{first_name}} {{last_name}}" + "template": "{{avatar}} {{first_name}} {{last_name}}" }, "readonly": true, "required": false, - "sort": 7, + "sort": 6, "special": [ "user-updated" ], @@ -22107,7 +23362,7 @@ }, "schema": { "name": "user_updated", - "table": "raffle_page", + "table": "ratings", "data_type": "uuid", "default_value": null, "max_length": null, @@ -22125,11 +23380,11 @@ } }, { - "collection": "raffle_page", + "collection": "ratings", "field": "date_updated", "type": "timestamp", "meta": { - "collection": "raffle_page", + "collection": "ratings", "conditions": null, "display": "datetime", "display_options": { @@ -22143,7 +23398,7 @@ "options": null, "readonly": true, "required": false, - "sort": 8, + "sort": 7, "special": [ "date-updated" ], @@ -22154,7 +23409,7 @@ }, "schema": { "name": "date_updated", - "table": "raffle_page", + "table": "ratings", "data_type": "timestamp with time zone", "default_value": null, "max_length": null, @@ -22172,23 +23427,38 @@ } }, { - "collection": "raffle_page", - "field": "heading", + "collection": "ratings", + "field": "up_or_down", "type": "string", "meta": { - "collection": "raffle_page", + "collection": "ratings", "conditions": null, "display": null, "display_options": null, - "field": "heading", + "field": "up_or_down", "group": null, "hidden": false, - "interface": "input", + "interface": "select-dropdown", "note": null, - "options": null, + "options": { + "allowOther": true, + "choices": [ + { + "icon": "thumb_up", + "text": "Up", + "value": "up" + }, + { + "icon": "thumb_down", + "text": "Down", + "value": "down" + } + ], + "icon": "thumbs_up_down" + }, "readonly": false, - "required": true, - "sort": 3, + "required": false, + "sort": 8, "special": null, "translations": null, "validation": null, @@ -22196,14 +23466,14 @@ "width": "full" }, "schema": { - "name": "heading", - "table": "raffle_page", + "name": "up_or_down", + "table": "ratings", "data_type": "character varying", "default_value": null, "max_length": 255, "numeric_precision": null, "numeric_scale": null, - "is_nullable": false, + "is_nullable": true, "is_unique": false, "is_indexed": false, "is_primary_key": false, @@ -22215,23 +23485,52 @@ } }, { - "collection": "raffle_page", - "field": "text", - "type": "text", + "collection": "ratings", + "field": "target", + "type": "alias", "meta": { - "collection": "raffle_page", + "collection": "ratings", "conditions": null, "display": null, "display_options": null, - "field": "text", + "field": "target", "group": null, "hidden": false, - "interface": "input-rich-text-html", + "interface": "list-m2a", "note": null, - "options": null, + "options": { + "enableCreate": false + }, "readonly": false, "required": true, - "sort": 4, + "sort": 9, + "special": [ + "m2a" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + } + }, + { + "collection": "ratings_target", + "field": "id", + "type": "integer", + "meta": { + "collection": "ratings_target", + "conditions": null, + "display": null, + "display_options": null, + "field": "id", + "group": null, + "hidden": true, + "interface": null, + "note": null, + "options": null, + "readonly": false, + "required": false, + "sort": 1, "special": null, "translations": null, "validation": null, @@ -22239,14 +23538,100 @@ "width": "full" }, "schema": { - "name": "text", - "table": "raffle_page", - "data_type": "text", + "name": "id", + "table": "ratings_target", + "data_type": "integer", + "default_value": "nextval('ratings_target_id_seq'::regclass)", + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": false, + "is_unique": true, + "is_indexed": false, + "is_primary_key": true, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": true, + "foreign_key_table": null, + "foreign_key_column": null + } + }, + { + "collection": "ratings_target", + "field": "rating", + "type": "uuid", + "meta": { + "collection": "ratings_target", + "conditions": null, + "display": null, + "display_options": null, + "field": "rating", + "group": null, + "hidden": true, + "interface": null, + "note": null, + "options": null, + "readonly": false, + "required": false, + "sort": 2, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "rating", + "table": "ratings_target", + "data_type": "uuid", "default_value": null, "max_length": null, "numeric_precision": null, "numeric_scale": null, - "is_nullable": false, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": "ratings", + "foreign_key_column": "id" + } + }, + { + "collection": "ratings_target", + "field": "target", + "type": "string", + "meta": { + "collection": "ratings_target", + "conditions": null, + "display": null, + "display_options": null, + "field": "target", + "group": null, + "hidden": true, + "interface": null, + "note": null, + "options": null, + "readonly": false, + "required": false, + "sort": 3, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + }, + "schema": { + "name": "target", + "table": "ratings_target", + "data_type": "character varying", + "default_value": null, + "max_length": 255, + "numeric_precision": null, + "numeric_scale": null, + "is_nullable": true, "is_unique": false, "is_indexed": false, "is_primary_key": false, @@ -22258,38 +23643,23 @@ } }, { - "collection": "raffle_page", - "field": "status", + "collection": "ratings_target", + "field": "target_collection", "type": "string", "meta": { - "collection": "raffle_page", + "collection": "ratings_target", "conditions": null, "display": null, "display_options": null, - "field": "status", + "field": "target_collection", "group": null, - "hidden": false, - "interface": "select-dropdown", + "hidden": true, + "interface": null, "note": null, - "options": { - "choices": [ - { - "text": "Published", - "value": "published" - }, - { - "text": "Draft", - "value": "draft" - }, - { - "text": "Archived", - "value": "archived" - } - ] - }, + "options": null, "readonly": false, - "required": true, - "sort": 2, + "required": false, + "sort": 4, "special": null, "translations": null, "validation": null, @@ -22297,10 +23667,10 @@ "width": "full" }, "schema": { - "name": "status", - "table": "raffle_page", + "name": "target_collection", + "table": "ratings_target", "data_type": "character varying", - "default_value": "draft", + "default_value": null, "max_length": 255, "numeric_precision": null, "numeric_scale": null, @@ -24308,7 +25678,9 @@ "hidden": false, "interface": "list-m2m", "note": null, - "options": null, + "options": { + "template": "{{talk.title}}" + }, "readonly": false, "required": false, "sort": 34, @@ -24989,7 +26361,7 @@ "interface": "list-m2m", "note": null, "options": { - "template": "{{member.first_name}} {{member.last_name}}" + "template": "{{member.first_name}} {{member.last_name}}" }, "readonly": false, "required": false, @@ -25105,7 +26477,7 @@ "interface": "list-m2m", "note": null, "options": { - "template": "{{speaker.first_name}} {{speaker.last_name}}" + "template": "{{speaker.first_name}} {{speaker.last_name}}" }, "readonly": false, "required": false, @@ -25780,7 +27152,9 @@ "collection": "talks", "conditions": null, "display": null, - "display_options": null, + "display_options": { + "template": "{{conference.title}} - {{conference.start_on}}" + }, "field": "conferences", "group": null, "hidden": false, @@ -25801,6 +27175,37 @@ "width": "full" } }, + { + "collection": "talks", + "field": "meetups", + "type": "alias", + "meta": { + "collection": "talks", + "conditions": null, + "display": null, + "display_options": { + "template": "{{meetup.title}}" + }, + "field": "meetups", + "group": null, + "hidden": false, + "interface": "list-m2m", + "note": null, + "options": { + "template": "{{meetup.title}}" + }, + "readonly": false, + "required": false, + "sort": 17, + "special": [ + "m2m" + ], + "translations": null, + "validation": null, + "validation_message": null, + "width": "full" + } + }, { "collection": "talks_members", "field": "id", @@ -26255,7 +27660,7 @@ "translations": null, "validation": null, "validation_message": null, - "width": "full" + "width": "half" }, "schema": { "name": "status", @@ -26293,7 +27698,7 @@ "options": null, "readonly": false, "required": false, - "sort": 3, + "sort": 4, "special": null, "translations": null, "validation": null, @@ -26338,7 +27743,7 @@ }, "readonly": true, "required": false, - "sort": 4, + "sort": 5, "special": [ "user-created" ], @@ -26385,7 +27790,7 @@ "options": null, "readonly": true, "required": false, - "sort": 5, + "sort": 6, "special": [ "date-created" ], @@ -26432,7 +27837,7 @@ }, "readonly": true, "required": false, - "sort": 6, + "sort": 7, "special": [ "user-updated" ], @@ -26479,7 +27884,7 @@ "options": null, "readonly": true, "required": false, - "sort": 7, + "sort": 8, "special": [ "date-updated" ], @@ -26534,7 +27939,7 @@ }, "readonly": false, "required": true, - "sort": 8, + "sort": 9, "special": null, "translations": null, "validation": null, @@ -26579,7 +27984,7 @@ }, "readonly": false, "required": false, - "sort": 9, + "sort": 10, "special": null, "translations": null, "validation": null, @@ -26605,6 +28010,54 @@ "foreign_key_column": null } }, + { + "collection": "testimonials", + "field": "weight", + "type": "integer", + "meta": { + "collection": "testimonials", + "conditions": null, + "display": null, + "display_options": null, + "field": "weight", + "group": null, + "hidden": false, + "interface": "slider", + "note": " Higher number = appears more frequently", + "options": { + "alwaysShowValue": true, + "maxValue": 10, + "minValue": 1, + "stepInterval": 1 + }, + "readonly": false, + "required": true, + "sort": 3, + "special": null, + "translations": null, + "validation": null, + "validation_message": null, + "width": "half" + }, + "schema": { + "name": "weight", + "table": "testimonials", + "data_type": "integer", + "default_value": 5, + "max_length": null, + "numeric_precision": 32, + "numeric_scale": 0, + "is_nullable": true, + "is_unique": false, + "is_indexed": false, + "is_primary_key": false, + "is_generated": false, + "generation_expression": null, + "has_auto_increment": false, + "foreign_key_table": null, + "foreign_key_column": null + } + }, { "collection": "transcripts", "field": "id", @@ -27417,6 +28870,56 @@ "on_delete": "NO ACTION" } }, + { + "collection": "cocktail_menu", + "field": "user_updated", + "related_collection": "directus_users", + "meta": { + "junction_field": null, + "many_collection": "cocktail_menu", + "many_field": "user_updated", + "one_allowed_collections": null, + "one_collection": "directus_users", + "one_collection_field": null, + "one_deselect_action": "nullify", + "one_field": null, + "sort_field": null + }, + "schema": { + "table": "cocktail_menu", + "column": "user_updated", + "foreign_key_table": "directus_users", + "foreign_key_column": "id", + "constraint_name": "cocktail_menu_user_updated_foreign", + "on_update": "NO ACTION", + "on_delete": "NO ACTION" + } + }, + { + "collection": "cocktail_menu", + "field": "user_created", + "related_collection": "directus_users", + "meta": { + "junction_field": null, + "many_collection": "cocktail_menu", + "many_field": "user_created", + "one_allowed_collections": null, + "one_collection": "directus_users", + "one_collection_field": null, + "one_deselect_action": "nullify", + "one_field": null, + "sort_field": null + }, + "schema": { + "table": "cocktail_menu", + "column": "user_created", + "foreign_key_table": "directus_users", + "foreign_key_column": "id", + "constraint_name": "cocktail_menu_user_created_foreign", + "on_update": "NO ACTION", + "on_delete": "NO ACTION" + } + }, { "collection": "conference_page", "field": "user_updated", @@ -28612,6 +30115,56 @@ "on_delete": "SET NULL" } }, + { + "collection": "meetups_talks", + "field": "talk", + "related_collection": "talks", + "meta": { + "junction_field": "meetup", + "many_collection": "meetups_talks", + "many_field": "talk", + "one_allowed_collections": null, + "one_collection": "talks", + "one_collection_field": null, + "one_deselect_action": "nullify", + "one_field": "meetups", + "sort_field": null + }, + "schema": { + "table": "meetups_talks", + "column": "talk", + "foreign_key_table": "talks", + "foreign_key_column": "id", + "constraint_name": "meetups_talks_talk_foreign", + "on_update": "NO ACTION", + "on_delete": "SET NULL" + } + }, + { + "collection": "meetups_talks", + "field": "meetup", + "related_collection": "meetups", + "meta": { + "junction_field": "talk", + "many_collection": "meetups_talks", + "many_field": "meetup", + "one_allowed_collections": null, + "one_collection": "meetups", + "one_collection_field": null, + "one_deselect_action": "nullify", + "one_field": "talks", + "sort_field": "sort" + }, + "schema": { + "table": "meetups_talks", + "column": "meetup", + "foreign_key_table": "meetups", + "foreign_key_column": "id", + "constraint_name": "meetups_talks_meetup_foreign", + "on_update": "NO ACTION", + "on_delete": "SET NULL" + } + }, { "collection": "member_tags", "field": "tag", @@ -29737,6 +31290,102 @@ "on_delete": "NO ACTION" } }, + { + "collection": "ratings", + "field": "user_created", + "related_collection": "directus_users", + "meta": { + "junction_field": null, + "many_collection": "ratings", + "many_field": "user_created", + "one_allowed_collections": null, + "one_collection": "directus_users", + "one_collection_field": null, + "one_deselect_action": "nullify", + "one_field": null, + "sort_field": null + }, + "schema": { + "table": "ratings", + "column": "user_created", + "foreign_key_table": "directus_users", + "foreign_key_column": "id", + "constraint_name": "ratings_user_created_foreign", + "on_update": "NO ACTION", + "on_delete": "NO ACTION" + } + }, + { + "collection": "ratings", + "field": "user_updated", + "related_collection": "directus_users", + "meta": { + "junction_field": null, + "many_collection": "ratings", + "many_field": "user_updated", + "one_allowed_collections": null, + "one_collection": "directus_users", + "one_collection_field": null, + "one_deselect_action": "nullify", + "one_field": null, + "sort_field": null + }, + "schema": { + "table": "ratings", + "column": "user_updated", + "foreign_key_table": "directus_users", + "foreign_key_column": "id", + "constraint_name": "ratings_user_updated_foreign", + "on_update": "NO ACTION", + "on_delete": "NO ACTION" + } + }, + { + "collection": "ratings_target", + "field": "target", + "related_collection": null, + "meta": { + "junction_field": "rating", + "many_collection": "ratings_target", + "many_field": "target", + "one_allowed_collections": [ + "podcasts", + "meetups", + "talks", + "conferences" + ], + "one_collection": null, + "one_collection_field": "target_collection", + "one_deselect_action": "nullify", + "one_field": null, + "sort_field": null + } + }, + { + "collection": "ratings_target", + "field": "rating", + "related_collection": "ratings", + "meta": { + "junction_field": "target", + "many_collection": "ratings_target", + "many_field": "rating", + "one_allowed_collections": null, + "one_collection": "ratings", + "one_collection_field": null, + "one_deselect_action": "nullify", + "one_field": "target", + "sort_field": null + }, + "schema": { + "table": "ratings_target", + "column": "rating", + "foreign_key_table": "ratings", + "foreign_key_column": "id", + "constraint_name": "ratings_target_rating_foreign", + "on_update": "NO ACTION", + "on_delete": "SET NULL" + } + }, { "collection": "recordings_page", "field": "user_created", diff --git a/nuxt-app/composables/useDirectus.ts b/nuxt-app/composables/useDirectus.ts index fd5e542..3684034 100644 --- a/nuxt-app/composables/useDirectus.ts +++ b/nuxt-app/composables/useDirectus.ts @@ -844,10 +844,12 @@ export function useDirectus() { try { const result = await directus.request(createItem('ratings', { up_or_down: vote, - target: { - target_collection: 'podcasts', - target: podcast.id - }, + target: [ + { + target_collection: 'podcasts', + target: podcast.id + } + ], })) } catch (e: unknown) { console.error('Error while persisting new feedback', e) diff --git a/nuxt-app/types/directus.ts b/nuxt-app/types/directus.ts index 8669323..15913f0 100644 --- a/nuxt-app/types/directus.ts +++ b/nuxt-app/types/directus.ts @@ -269,8 +269,7 @@ export interface DirectusRatingItem { target: { target_collection: string, target: string - }, - //target: DirectusPodcastItem + }[], up_or_down: 'up' | 'down' } From 9a34df09d47fb3aad569aa8799bc825291ead048 Mon Sep 17 00:00:00 2001 From: Jan Gregor Emge-Triebel Date: Tue, 13 Jan 2026 18:37:55 +0100 Subject: [PATCH 03/14] Added flash message --- nuxt-app/components/PodcastRating.vue | 13 +++++++ nuxt-app/composables/useDirectus.ts | 3 ++ nuxt-app/composables/useFlashMessage.ts | 35 +++++++++++++++++++ nuxt-app/pages/podcast/[slug].vue | 2 ++ .../middleware/{feedback.ts => rating.ts} | 14 ++++++-- nuxt-app/types/directus.ts | 1 + 6 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 nuxt-app/components/PodcastRating.vue create mode 100644 nuxt-app/composables/useFlashMessage.ts rename nuxt-app/server/middleware/{feedback.ts => rating.ts} (72%) diff --git a/nuxt-app/components/PodcastRating.vue b/nuxt-app/components/PodcastRating.vue new file mode 100644 index 0000000..9847e36 --- /dev/null +++ b/nuxt-app/components/PodcastRating.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/nuxt-app/composables/useDirectus.ts b/nuxt-app/composables/useDirectus.ts index 3684034..3e071e2 100644 --- a/nuxt-app/composables/useDirectus.ts +++ b/nuxt-app/composables/useDirectus.ts @@ -851,6 +851,9 @@ export function useDirectus() { } ], })) + + return result; + } catch (e: unknown) { console.error('Error while persisting new feedback', e) return e diff --git a/nuxt-app/composables/useFlashMessage.ts b/nuxt-app/composables/useFlashMessage.ts new file mode 100644 index 0000000..7cd0437 --- /dev/null +++ b/nuxt-app/composables/useFlashMessage.ts @@ -0,0 +1,35 @@ +interface FlashMessage { + type: "rating" + text: string + payload: { } +} + +export const useFlashMessage = () => { + const flashCookie = useCookie('flash-message'); + const message = useState('flash-message', () => { + const cookieValue = flashCookie.value; + // Clear the cookie immediately after reading it so it only shows once + if (cookieValue) { + flashCookie.value = null; + } + return cookieValue; + }); + + const setMessage = (text: string, type: "rating", payload: { } ) => { + message.value = { + text, + type, + payload + }; + }; + + const clearMessage = () => { + message.value = null; + }; + + return { + message, + setMessage, + clearMessage, + }; +}; diff --git a/nuxt-app/pages/podcast/[slug].vue b/nuxt-app/pages/podcast/[slug].vue index daddaa8..69be3bd 100644 --- a/nuxt-app/pages/podcast/[slug].vue +++ b/nuxt-app/pages/podcast/[slug].vue @@ -13,6 +13,8 @@ Shownotes + + Date: Thu, 15 Jan 2026 10:54:26 +0100 Subject: [PATCH 04/14] Added rating ui to podcast page --- nuxt-app/assets/icons/thumb-down.svg | 3 +++ nuxt-app/assets/icons/thumb-up.svg | 3 +++ nuxt-app/components/PodcastRating.vue | 34 +++++++++++++++++++++++-- nuxt-app/composables/useFlashMessage.ts | 2 +- nuxt-app/pages/podcast/[slug].vue | 2 +- 5 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 nuxt-app/assets/icons/thumb-down.svg create mode 100644 nuxt-app/assets/icons/thumb-up.svg diff --git a/nuxt-app/assets/icons/thumb-down.svg b/nuxt-app/assets/icons/thumb-down.svg new file mode 100644 index 0000000..907879f --- /dev/null +++ b/nuxt-app/assets/icons/thumb-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/nuxt-app/assets/icons/thumb-up.svg b/nuxt-app/assets/icons/thumb-up.svg new file mode 100644 index 0000000..e2231dd --- /dev/null +++ b/nuxt-app/assets/icons/thumb-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/nuxt-app/components/PodcastRating.vue b/nuxt-app/components/PodcastRating.vue index 9847e36..e1d40d8 100644 --- a/nuxt-app/components/PodcastRating.vue +++ b/nuxt-app/components/PodcastRating.vue @@ -1,11 +1,41 @@