Skip to content

Denbec/automation review#146

Merged
denbec merged 7 commits intomainfrom
denbec/automation-review
Feb 26, 2026
Merged

Denbec/automation review#146
denbec merged 7 commits intomainfrom
denbec/automation-review

Conversation

@denbec
Copy link
Collaborator

@denbec denbec commented Feb 26, 2026

Refactored tickets and AI automation code after code review from @Jan0707.

denbec and others added 6 commits February 13, 2026 10:57
Replace email-based admin notifications with Slack messages when speakers submit their information. This aligns with the existing pattern used across other CMS hooks (deploy, publication, transcripts, etc.) where all admin notifications go through Slack. The message includes a direct link to the speaker record in Directus for easy access.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Add Slack notifications to member matching on failures

Member matching now alerts the team when:
- No speaker names are found in a transcript (transcript format issue)
- No members can be matched to speakers (missing database entries)
- A general error occurs during matching

Also added support for triggering on podcast creation (previously only on update), ensuring member matching works even when transcript_text is included at creation time. Fixed Jest config to resolve ESM .js imports to .ts source files.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

* Use .ts import extension for postSlackMessage to match codebase convention

Removes the jest.config.ts moduleNameMapper change that was only needed
because the imports used .js extensions. All other files in the codebase
import postSlackMessage with .ts, so this aligns with that convention.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
Address all code review points: remove unused prompt files, extract shared LLM utilities, remove fallback prompts and dangerous environment variable fallbacks, add Slack failure notifications with Directus links, handle content unapproval, fix asset regeneration to avoid broken references, and use Directus date-created for generated_at timestamps.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Merge multiple token-based approaches into a single authenticated Directus composable (useAuthenticatedDirectus) to centralize CMS operations. Unify directusAdminToken + directusTicketToken into a single directusApiToken.

Fix race condition in webhook idempotency by restoring atomic filter-based updates. Extend type definitions to include missing speaker portal and ticket fields, removing unnecessary 'as any' casts. Move ticket Directus types to directus.ts and ticket checkout types to items.ts (deleted tickets.ts). Consolidate all validation schemas into a single schema.ts file (deleted ticketSchemas.ts).

Net reduction of 266 lines of code.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Replace external Wix.com ticket links with internal /konferenzen/[slug]/tickets
route. Remove obsolete fields (tickets, tickets_url, tickets_on_sale) from
DirectusConferenceItem. Use ticketing_enabled flag and conference end_on date
to control ticket section visibility. Enable server-side ticketing_enabled guard
in checkout endpoint.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Centralizes the VAT rate (19%) into config.ts constants (VAT_RATE and VAT_RATE_PERCENT), adds an optional VAT ID input field to company billing info with proper schema validation, and refactors the checkout endpoint into typed helper functions for better maintainability.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@vercel
Copy link

vercel bot commented Feb 26, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
programmierbar-website Ready Ready Preview, Comment Feb 26, 2026 1:39pm

Request Review

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors ticketing, speaker portal, and Directus extension automation by consolidating schemas/types, switching to a unified authenticated Directus client for server operations, and improving operational notifications (Slack) + generated content metadata handling.

Changes:

  • Moved ticketing schemas into a shared server schema module and reorganized ticket-related TypeScript types across types/.
  • Introduced a server-side authenticated Directus SDK helper and updated ticket/speaker-portal endpoints to use it.
  • Refactored Directus extension bundle utilities (Gemini + template rendering), added Slack notifications, and adjusted generated content/asset metadata fields.

Reviewed changes

Copilot reviewed 39 out of 39 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
nuxt-app/types/tickets.ts Removed legacy ticket type definitions (migrated elsewhere).
nuxt-app/types/items.ts Added checkout-flow request/response types and related DTOs.
nuxt-app/types/index.ts Stopped exporting removed tickets types module.
nuxt-app/types/directus.ts Updated Directus item types (ticketing + speaker portal fields).
nuxt-app/services/directus.ts Added ticket_settings to the typed Directus collections map.
nuxt-app/server/utils/ticketSettings.ts Kept pricing helpers; updated imports to new type location.
nuxt-app/server/utils/ticketSchemas.ts Removed dedicated ticket schema file (moved to shared schema).
nuxt-app/server/utils/schema.ts Centralized Zod schemas for speaker portal + ticket checkout + discount validation.
nuxt-app/server/utils/index.ts Exported new authenticated Directus helper; removed old ticketSchemas export.
nuxt-app/server/utils/authenticatedDirectus.ts Added authenticated Directus SDK wrapper for server-side Directus operations.
nuxt-app/server/api/tickets/webhook.post.ts Switched Directus update logic to authenticated SDK helper for idempotent updates.
nuxt-app/server/api/tickets/validate-discount.post.ts Uses centralized schema + authenticated Directus ticket settings fetch.
nuxt-app/server/api/tickets/settings.get.ts Removed public settings endpoint (frontend fetches settings directly from Directus).
nuxt-app/server/api/tickets/create-checkout.post.ts Refactored checkout creation: shared schemas, authenticated Directus, VAT constants, helper builders.
nuxt-app/server/api/speaker-portal/validate.get.ts Uses authenticated Directus helper instead of raw fetch + admin token.
nuxt-app/server/api/speaker-portal/submit.post.ts Uses centralized schema + authenticated Directus helper for read/update/upload.
nuxt-app/pages/konferenzen/[slug]/index.vue Replaced Wix ticket link logic with internal ticket route + ticketing enabled/ended gating.
nuxt-app/nuxt.config.ts Consolidated Directus server token config into directusApiToken.
nuxt-app/config.ts Added VAT constants for reuse across frontend/server.
nuxt-app/composables/useTicketCheckoutStore.ts Uses shared VAT config; fetches public ticket settings directly via Directus composable.
nuxt-app/composables/useDirectus.ts Requests new ticketing_enabled field; fetches ticket settings directly from Directus singleton.
nuxt-app/components/tickets/TicketStepQuantity.vue Uses VAT percent from config for UI text.
nuxt-app/components/tickets/TicketStepBilling.vue Added VAT ID input for company billing.
nuxt-app/components/tickets/TicketPurchaseFlow.vue Updated props typing (removed discount code field).
nuxt-app/components/tickets/TicketPricingSummary.vue Uses VAT percent from config for UI text.
directus-cms/schema.json Updated schema metadata to mark fields as date-created.
directus-cms/prompts/social-media.md Removed prompt templates from repo (now expected from CMS).
directus-cms/prompts/shownotes.md Removed prompt templates from repo (now expected from CMS).
directus-cms/extensions/.../speaker-portal-notifications/index.ts Switched admin notification from email to Slack message.
directus-cms/extensions/.../shared/templateRenderer.ts Extracted reusable template renderer into shared utility.
directus-cms/extensions/.../shared/gemini.ts Extracted reusable Gemini helpers (text/image + JSON extraction).
directus-cms/extensions/.../member-matching/matchMembers.ts Added Slack notifications on missing matches / failures.
directus-cms/extensions/.../member-matching/index.ts Expanded hook to run on create+update; added Slack notification on failure.
directus-cms/extensions/.../heise-integration/index.ts Stopped manually setting generated_at (now handled by schema).
directus-cms/extensions/.../content-generation/index.ts Added Slack notification on hook failures.
directus-cms/extensions/.../content-generation/generateContent.ts Enforced required prompts from CMS; moved shared helpers to shared module.
directus-cms/extensions/.../content-approval/index.ts Added “unapproval” handling to revert podcast status when content is unapproved.
directus-cms/extensions/.../asset-generation/index.ts Added Slack notifications for asset generation failures.
directus-cms/extensions/.../asset-generation/generateAssets.ts Moved shared helpers to shared module; made storage selection explicit; improved regeneration safety.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Contributor

Copilot AI commented Feb 26, 2026

@denbec I've opened a new pull request, #147, to work on those changes. Once the pull request is ready, I'll request review from you.

…endpoint (#147)

* Initial plan

* Fix: Return 404 when conference not found in create-checkout endpoint

Co-authored-by: denbec <193931+denbec@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: denbec <193931+denbec@users.noreply.github.com>
@denbec denbec merged commit 4037c5a into main Feb 26, 2026
3 checks passed
@denbec denbec deleted the denbec/automation-review branch February 26, 2026 17:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants