diff --git a/src/openapi/customers/notifications-crud.yaml b/src/openapi/customers/notifications-crud.yaml index 9e06e5e..22821dd 100644 --- a/src/openapi/customers/notifications-crud.yaml +++ b/src/openapi/customers/notifications-crud.yaml @@ -31,6 +31,12 @@ paths: schema: type: integer description: Filter by customer profile ID + - name: ovPayTokenId + in: query + required: false + schema: + type: integer + description: Filter by OV Pay token ID - name: isCurrentlyActive in: query required: false @@ -44,6 +50,13 @@ paths: type: integer default: 1 description: Limit the number of subscription activities returned per subscription (default is 1) + - name: expand + in: query + schema: + type: string + enum: [none, notificationPreference, eventTypeChannel] + default: none + description: "Expand nested attributes. Possible values: `none`, `notificationPreference`, and `eventTypeChannel`." responses: "200": description: A list of notification subscriptions @@ -53,17 +66,21 @@ paths: $ref: "#/components/schemas/GetNotificationSubscriptionsResponse" examples: emptyNotificationSubscriptionResponse: + summary: No notification subscriptions found value: notificationSubscriptions: [] href: null - fullNotificationSubscriptionResponse: + notificationSubscriptionResponse?expand=none: + summary: Return notification subscriptions without nested attributes (expand=none) value: notificationSubscriptions: - notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 notificationCategory: notificationCategoryId: 1 name: Mijn Reizen + groupName: Mijn Passen customerProfileId: 1337 + ovPayTokenId: 42 subscriptionActivities: - subscriptionActivityId: 30b32657-1ba1-44e0-8868-4db807695387 user: "1001337" @@ -77,7 +94,9 @@ paths: notificationCategory: notificationCategoryId: 2 name: Nieuwsbrief aanmelding + groupName: Marketing customerProfileId: 1338 + ovPayTokenId: null subscriptionActivities: - subscriptionActivityId: 7fae0d2c-1e20-4f3e-b25d-fd8505a381c4 user: "1001338" @@ -88,6 +107,113 @@ paths: timestamp: "2025-10-02T14:00:00Z" isActive: true href: null + notificationSubscriptionResponse?expand=notificationPreference: + summary: Return notification subscriptions with nested notification preferences (expand=notificationPreference) + value: + notificationSubscriptions: + - notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + notificationCategory: + notificationCategoryId: 1 + name: Mijn Reizen + groupName: Mijn Passen + customerProfileId: 1337 + ovPayTokenId: 42 + subscriptionActivities: + - subscriptionActivityId: 30b32657-1ba1-44e0-8868-4db807695387 + user: "1001337" + timestamp: "2025-10-02T15:00:00Z" + isActive: true + - subscriptionActivityId: f78bc171-a50e-4b88-88d3-a76585bffd54 + user: "1001337" + timestamp: "2025-10-02T14:00:00Z" + isActive: false + notificationPreferences: + - notificationPreferenceId: d4e5f6a7-b8c9-40d1-ef01-234567890abc + eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173 + resourceIdentifier: null + - notificationPreferenceId: e5f6a7b8-c9d0-41e2-f012-34567890abcd + eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d + resourceIdentifier: 44 + - notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd + notificationCategory: + notificationCategoryId: 2 + name: Nieuwsbrief aanmelding + groupName: Marketing + customerProfileId: 1338 + ovPayTokenId: null + subscriptionActivities: + - subscriptionActivityId: 7fae0d2c-1e20-4f3e-b25d-fd8505a381c4 + user: "1001338" + timestamp: "2025-10-02T15:00:00Z" + isActive: false + - subscriptionActivityId: cb2fc1d3-f143-4dd7-8608-4538e5637e3a + user: "1001338" + timestamp: "2025-10-02T14:00:00Z" + isActive: true + notificationPreferences: [] + href: null + notificationSubscriptionResponse?expand=eventTypeChannel: + summary: Return notification subscriptions with nested event type channels (expand=eventTypeChannel) + value: + notificationSubscriptions: + - notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + notificationCategory: + notificationCategoryId: 1 + name: Mijn Reizen + groupName: Mijn Passen + customerProfileId: 1337 + ovPayTokenId: 42 + subscriptionActivities: + - subscriptionActivityId: 30b32657-1ba1-44e0-8868-4db807695387 + user: "1001337" + timestamp: "2025-10-02T15:00:00Z" + isActive: true + - subscriptionActivityId: f78bc171-a50e-4b88-88d3-a76585bffd54 + user: "1001337" + timestamp: "2025-10-02T14:00:00Z" + isActive: false + notificationPreferences: + - notificationPreferenceId: d4e5f6a7-b8c9-40d1-ef01-234567890abc + eventTypeChannel: + eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173 + channel: + channelId: 1 + name: push + resourceName: + resourceNameId: 8 + name: devices + isDefault: true + isMandatory: false + resourceIdentifier: null + - notificationPreferenceId: e5f6a7b8-c9d0-41e2-f012-34567890abcd + eventTypeChannelId: + eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d + channel: + channelId: 2 + name: email + resourceName: + resourceNameId: 4 + name: customers + isDefault: false + isMandatory: false + resourceIdentifier: 44 + - notificationSubscriptionId: 39e8d8e6-5c85-49b6-ba4b-62e47fa4f7fd + notificationCategory: + notificationCategoryId: 2 + name: Nieuwsbrief aanmelding + groupName: Marketing + customerProfileId: 1338 + ovPayTokenId: null + subscriptionActivities: + - subscriptionActivityId: 7fae0d2c-1e20-4f3e-b25d-fd8505a381c4 + user: "1001338" + timestamp: "2025-10-02T15:00:00Z" + isActive: false + - subscriptionActivityId: cb2fc1d3-f143-4dd7-8608-4538e5637e3a + user: "1001338" + timestamp: "2025-10-02T14:00:00Z" + isActive: true + notificationPreferences: [] "400": description: Bad request content: @@ -175,18 +301,71 @@ paths: type: object $ref: "#/components/schemas/500Response" /notificationsubscriptions/{notificationSubscriptionId}: + parameters: + - name: notificationSubscriptionId + in: path + required: true + schema: + type: string + format: uuid + example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + patch: + summary: Update a notification subscription by ID + tags: + - Notification Subscriptions + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PatchNotificationSubscriptionRequest" + examples: + updateNotificationSubscriptionRequest: + value: + ovPayTokenId: 43 + responses: + "200": + description: Notification subscription updated successfully + content: + application/json: + schema: + $ref: "#/components/schemas/PatchNotificationSubscriptionResponse" + examples: + updateNotificationSubscriptionResponse: + value: + notificationSubscriptionId: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + "400": + description: Bad request + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/400Response" + "401": + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/401Response" + "404": + description: Not found + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/404Response" + "500": + description: Internal server error + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/500Response" delete: summary: Delete a notification subscription by ID tags: - Notification Subscriptions - parameters: - - name: notificationSubscriptionId - in: path - required: true - schema: - type: string - format: uuid - example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 responses: "204": description: No content @@ -282,12 +461,196 @@ paths: schema: type: object $ref: "#/components/schemas/500Response" + /notificationsubscriptions/{notificationSubscriptionId}/notificationpreferences: + parameters: + - name: notificationSubscriptionId + in: path + required: true + schema: + type: string + format: uuid + example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + post: + summary: Add a notification preference to a notification subscription + tags: + - Notification Preferences + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PostNotificationPreferenceRequest" + examples: + addNotificationPreferenceNotNull: + summary: With non-null resource identifier + value: + eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173 + resourceIdentifier: 44 + addNotificationPreferenceNull: + summary: With null resource identifier + value: + eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173 + resourceIdentifier: null + responses: + "201": + description: Notification preference added successfully + content: + application/json: + schema: + $ref: "#/components/schemas/PostNotificationPreferenceResponse" + examples: + addNotificationPreferenceResponse: + value: + notificationPreferenceId: d4e5f6a7-b8c9-40d1-ef01-234567890abc + "400": + description: Bad request + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/400Response" + "401": + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/401Response" + "404": + description: Not found + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/404Response" + "500": + description: Internal server error + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/500Response" + /notificationpreferences/{notificationPreferenceId}: + parameters: + - name: notificationPreferenceId + in: path + required: true + schema: + type: string + format: uuid + example: d4e5f6a7-b8c9-40d1-ef01-234567890abc + patch: + summary: Update a notification preference by ID + tags: + - Notification Preferences + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/PatchNotificationPreferenceRequest" + examples: + updateNotificationPreferenceRequest: + value: + resourceIdentifier: 55 + responses: + "200": + description: Notification preference updated successfully + content: + application/json: + schema: + $ref: "#/components/schemas/PatchNotificationPreferenceResponse" + examples: + updateNotificationPreferenceResponse: + value: + notificationPreferenceId: d4e5f6a7-b8c9-40d1-ef01-234567890abc + "400": + description: Bad request + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/400Response" + "401": + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/401Response" + "404": + description: Not found + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/404Response" + "500": + description: Internal server error + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/500Response" + delete: + summary: Delete a notification preference by ID + tags: + - Notification Preferences + responses: + "204": + description: No content + "400": + description: Bad request + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/400Response" + "401": + description: Unauthorized + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/401Response" + "404": + description: Not found + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/404Response" + "500": + description: Internal server error + content: + application/json: + schema: + type: object + $ref: "#/components/schemas/500Response" /notificationcategories: get: tags: - Notification Categories summary: Get all notification categories. parameters: + - name: notificationCategoryId + in: query + required: false + schema: + type: integer + description: Filter by notification category ID + - name: name + in: query + required: false + schema: + type: integer + description: Filter by notification category name (case-insensitive, partial match) + - name: groupName + in: query + required: false + schema: + type: integer + description: Filter by notification category group name (case-insensitive, partial match) - name: expand in: query schema: @@ -309,35 +672,48 @@ paths: notificationCategories: - notificationCategoryId: 1 name: Mijn Reizen + groupName: Mijn Passen - notificationCategoryId: 2 name: Nieuwsbrief aanmelding + groupName: Marketing - notificationCategoryId: 3 - name: Mijn Passen + name: Serviceberichten + groupName: Mijn Passen getNotifactionCategories?expand=eventType: summary: Return all the notification categories with nested event types (expand=eventType) value: notificationCategories: - notificationCategoryId: 1 name: Mijn Reizen + groupName: Mijn Passen eventTypes: - eventTypeId: 2 eventOrigin: eventOriginId: 1 name: GBO - name: ALERTS, TRAVEL_SCHEME - subName: CI - prettyName: Check In + name: TRIPS + subName: CKI + prettyName: Normal Check-in optinRequired: false + originSubscription: + originSubscriptionId: a1b2c3d4-e5f6-4789-abcd-1234567890ab + name: GBO_TRIPS + externalSubscriptionId: fedcba98-7654-3210-fedc-ba9876543210 - eventTypeId: 3 eventOrigin: eventOriginId: 1 name: GBO - name: ALERTS, PAD - subName: null - prettyName: Profielgegevens op de pas + name: PAD + subName: AMEND + prettyName: PAD Wijzigen/Aanvullen optinRequired: false + originSubscription: + originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc + name: GBO_PAD + externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f - notificationCategoryId: 2 name: Nieuwsbrief aanmelding + groupName: Marketing eventTypes: - eventTypeId: 1 eventOrigin: @@ -347,76 +723,108 @@ paths: subName: null prettyName: HTM nieuwsbrief optinRequired: false + originSubscription: null - notificationCategoryId: 3 - name: Mijn Passen + name: Serviceberichten + groupName: Mijn Passen eventTypes: - eventTypeId: 4 eventOrigin: eventOriginId: 1 name: GBO - name: ALERTS, CARD - subName: null - prettyName: Mijn passen + name: PRODUCT + subName: ACTIVATE + prettyName: Product Geactiveerd optinRequired: false + originSubscription: + originSubscriptionId: f1a2b3c4-d5e6-4789-abcd-3456789012de + name: GBO_PRODUCT + externalSubscriptionId: 12345678-90ab-cdef-1234-567890abcdef - eventTypeId: 5 eventOrigin: eventOriginId: 1 name: GBO - name: ALERTS, PAD - subName: null - prettyName: Profielgegevens op de pas + name: PAD + subName: MARK + prettyName: PAD Markering optinRequired: false + originSubscription: + originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc + name: GBO_PAD + externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f getNotifactionCategories?expand=eventTypeChannel: summary: Return all the notification categories with all nested attributes (expand=eventTypeChannel) value: notificationCategories: - notificationCategoryId: 1 name: Mijn Reizen + groupName: Mijn Passen eventTypes: - eventTypeId: 2 eventOrigin: eventOriginId: 1 name: GBO - name: ALERTS, TRAVEL_SCHEME - subName: CI - prettyName: Check In + name: TRIPS + subName: CKI + prettyName: Normal Check-in optinRequired: false + originSubscription: + originSubscriptionId: a1b2c3d4-e5f6-4789-abcd-1234567890ab + name: GBO_TRIPS + externalSubscriptionId: fedcba98-7654-3210-fedc-ba9876543210 eventTypeChannels: - eventTypeChannelId: ccc8c025-06b5-4928-a632-23e1c55cd173 channel: channelId: 1 name: push + resourceName: + resourceNameId: 8 + name: devices isDefault: true isMandatory: false - eventTypeChannelId: da2deb4c-ce77-4b5f-aecc-ddebfd14349d channel: channelId: 2 name: email + resourceName: + resourceNameId: 4 + name: customers isDefault: false isMandatory: false - eventTypeId: 3 eventOrigin: eventOriginId: 1 name: GBO - name: ALERTS, PAD - subName: null - prettyName: Profielgegevens op de pas + name: PAD + subName: AMEND + prettyName: PAD Wijzigen/Aanvullen optinRequired: false + originSubscription: + originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc + name: GBO_PAD + externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f eventTypeChannels: - eventTypeChannelId: 8e7df8f1-7e50-482f-8301-d399e75fd432 channel: channelId: 1 name: push + resourceName: + resourceNameId: 8 + name: devices isDefault: true isMandatory: false - eventTypeChannelId: 72960a92-1855-469f-9cfd-5d72f57106f2 channel: channelId: 2 name: email + resourceName: + resourceNameId: 4 + name: customers isDefault: false isMandatory: false - notificationCategoryId: 2 name: Nieuwsbrief aanmelding + groupName: Marketing eventTypes: - eventTypeId: 1 eventOrigin: @@ -426,56 +834,81 @@ paths: subName: null prettyName: HTM nieuwsbrief optinRequired: false + originSubscription: null eventTypeChannels: - eventTypeChannelId: 447a1116-6cd7-4645-8c3d-43237b6186cd channel: channelId: 2 name: email + resourceName: + resourceNameId: 4 + name: customers isDefault: true isMandatory: false - notificationCategoryId: 3 - name: Mijn Passen + name: Serviceberichten + groupName: Mijn Passen eventTypes: - eventTypeId: 4 eventOrigin: eventOriginId: 1 name: GBO - name: ALERTS, CARD - subName: null - prettyName: Mijn passen + name: PRODUCT + subName: ACTIVATE + prettyName: Product Geactiveerd optinRequired: false + originSubscription: + originSubscriptionId: f1a2b3c4-d5e6-4789-abcd-3456789012de + name: GBO_PRODUCT + externalSubscriptionId: 12345678-90ab-cdef-1234-567890abcdef eventTypeChannels: - eventTypeChannelId: be07c7bb-714b-4637-acf5-a67025ad8e60 channel: channelId: 1 name: push + resourceName: + resourceNameId: 8 + name: devices isDefault: true isMandatory: false - eventTypeChannelId: 0c797b5a-ed34-494b-8c64-0a832830d392 channel: channelId: 2 name: email + resourceName: + resourceNameId: 4 + name: customers isDefault: false isMandatory: false - eventTypeId: 5 eventOrigin: eventOriginId: 1 name: GBO - name: ALERTS, PAD - subName: null - prettyName: Profielgegevens op de pas + name: PAD + subName: MARK + prettyName: PAD Markering optinRequired: false + originSubscription: + originSubscriptionId: b2c3d4e5-f678-49ab-bcde-2345678901bc + name: GBO_PAD + externalSubscriptionId: edcba987-6543-210f-edcb-a9876543210f eventTypeChannels: - eventTypeChannelId: b910368f-c045-4e8e-b01d-bcbc78708bac channel: channelId: 1 name: push + resourceName: + resourceNameId: 8 + name: devices isDefault: true isMandatory: false - eventTypeChannelId: 93e773da-ba3b-48da-9a0e-ee478eaa752f channel: channelId: 2 name: email + resourceName: + resourceNameId: 4 + name: customers isDefault: false isMandatory: false "400": @@ -596,12 +1029,24 @@ paths: channels: - channelId: 1 name: push + resourceName: + resourceNameId: 8 + name: devices - channelId: 2 name: email + resourceName: + resourceNameId: 4 + name: customers - channelId: 3 name: sms + resourceName: + resourceNameId: 4 + name: customers - channelId: 4 name: mail + resourceName: + resourceNameId: 4 + name: customers "400": description: Bad request content: @@ -750,6 +1195,7 @@ paths: notificationCategory: notificationCategoryId: 1 name: Mijn Reizen + groupName: Mijn Passen - eventType: eventTypeId: 16 eventOrigin: @@ -762,6 +1208,7 @@ paths: notificationCategory: notificationCategoryId: 1 name: Mijn Reizen + groupName: Mijn Passen "400": description: Bad request content: @@ -827,6 +1274,9 @@ paths: channel: channelId: 1 name: push + resourceName: + resourceNameId: 8 + name: devices isDefault: true isMandatory: false - eventTypeChannelId: c4729ad4-46ef-4329-94f9-5079be21dfc5 @@ -842,6 +1292,9 @@ paths: channel: channelId: 1 name: push + resourceName: + resourceNameId: 8 + name: devices isDefault: true isMandatory: false "400": @@ -962,6 +1415,24 @@ components: type: string format: uuid example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 + PatchNotificationSubscriptionRequest: + type: object + properties: + notificationCategoryId: + type: integer + example: 1 + customerProfileId: + type: integer + example: 1337 + required: + - notificationCategoryId + PatchNotificationSubscriptionResponse: + type: object + properties: + notificationSubscriptionId: + type: string + format: uuid + example: 5bedce29-af0c-4f3c-b182-2caa8a1f9377 PostSubscriptionActivityRequest: type: object properties: @@ -986,6 +1457,40 @@ components: type: string format: uuid example: 30b32657-1ba1-44e0-8868-4db807695387 + PostNotificationPreferenceRequest: + type: object + properties: + eventTypeChannelId: + type: string + format: uuid + example: 22a9ab1cb-b1a3-482e-bae3-9a517a8cfb4f + resourceIdentifier: + type: string + format: uuid + example: d4e5f678-49ab-bcde-2345-678901bcdef0 + required: + - eventTypeChannelId + PostNotificationPreferenceResponse: + type: object + properties: + notificationPreferenceId: + type: string + format: uuid + example: d4e5f678-49ab-bcde-2345-678901bcdef0 + PatchNotificationPreferenceRequest: + type: object + properties: + resourceIdentifier: + type: string + format: uuid + example: d4e5f678-49ab-bcde-2345-678901bcdef0 + PatchNotificationPreferenceResponse: + type: object + properties: + notificationPreferenceId: + type: string + format: uuid + example: d4e5f678-49ab-bcde-2345-678901bcdef0 GetEventOriginsResponse: type: object properties: @@ -1076,6 +1581,24 @@ components: optInRequired: type: boolean example: true + originSubscription: + type: object + properties: + originSubscriptionId: + type: string + format: uuid + example: a1b2c3d4-e5f6-4789-abcd-1234567890ab + name: + type: string + example: GBO_TRIPS + externalSubscriptionId: + type: string + format: uuid + example: fedcba98-7654-3210-fedc-ba9876543210 + required: + - originSubscriptionId + - name + - externalSubscriptionId eventTypeChannels: type: array items: @@ -1107,9 +1630,22 @@ components: name: type: string example: push + resourceName: + type: object + properties: + resourceNameId: + type: integer + example: 8 + name: + type: string + example: devices + required: + - resourceNameId + - name required: - channelId - name + - resourceName NotificationCategory: type: object properties: @@ -1119,6 +1655,9 @@ components: name: type: string example: Mijn Reizen + groupName: + type: string + example: Mijn Passen eventTypes: type: array items: