diff options
| author | tamaina <tamaina@hotmail.co.jp> | 2022-12-18 01:59:59 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-18 01:59:59 +0900 |
| commit | 4ecc42744c3c8b68e38f58bfe03919bf437f137a (patch) | |
| tree | 094230a6992c05cf39136913d02400fae27931d7 /packages/backend/src/server/api/endpoints/sw/update-registration.ts | |
| parent | fix(server): GitHubログインしようとするとreply.setCookie is not a ... (diff) | |
| download | sharkey-4ecc42744c3c8b68e38f58bfe03919bf437f137a.tar.gz sharkey-4ecc42744c3c8b68e38f58bfe03919bf437f137a.tar.bz2 sharkey-4ecc42744c3c8b68e38f58bfe03919bf437f137a.zip | |
enhance: Implement the toggle to (or not to) close push notifications when notifications or messages are read (#9219)
* create file
* wip
* fix
* wip
* tabun dekita
* :v:
* implement subscribe push notification button to tutorial
* check-exists→show-registration
* add column sendReadMessage
* fix migration file
* sw api
* change PushNotificationService
* wip
* :v:
* fix tutorial footer flex
Diffstat (limited to 'packages/backend/src/server/api/endpoints/sw/update-registration.ts')
| -rw-r--r-- | packages/backend/src/server/api/endpoints/sw/update-registration.ts | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/sw/update-registration.ts b/packages/backend/src/server/api/endpoints/sw/update-registration.ts new file mode 100644 index 0000000000..9f08c8148d --- /dev/null +++ b/packages/backend/src/server/api/endpoints/sw/update-registration.ts @@ -0,0 +1,82 @@ +import { Inject, Injectable } from '@nestjs/common'; +import type { SwSubscriptionsRepository } from '@/models/index.js'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { DI } from '@/di-symbols.js'; +import { ApiError } from '../../error.js'; + +export const meta = { + tags: ['account'], + + requireCredential: true, + + description: 'Update push notification registration.', + + res: { + type: 'object', + optional: false, nullable: false, + properties: { + userId: { + type: 'string', + optional: false, nullable: false, + }, + endpoint: { + type: 'string', + optional: false, nullable: false, + }, + sendReadMessage: { + type: 'boolean', + optional: false, nullable: false, + }, + }, + }, + errors: { + noSuchRegistration: { + message: 'No such registration.', + code: 'NO_SUCH_REGISTRATION', + id: ' b09d8066-8064-5613-efb6-0e963b21d012', + }, + } +} as const; + +export const paramDef = { + type: 'object', + properties: { + endpoint: { type: 'string' }, + sendReadMessage: { type: 'boolean' }, + }, + required: ['endpoint'], +} as const; + +// eslint-disable-next-line import/no-default-export +@Injectable() +export default class extends Endpoint<typeof meta, typeof paramDef> { + constructor( + @Inject(DI.swSubscriptionsRepository) + private swSubscriptionsRepository: SwSubscriptionsRepository, + ) { + super(meta, paramDef, async (ps, me) => { + const swSubscription = await this.swSubscriptionsRepository.findOneBy({ + userId: me.id, + endpoint: ps.endpoint, + }); + + if (swSubscription === null) { + throw new ApiError(meta.errors.noSuchRegistration); + } + + if (ps.sendReadMessage !== undefined) { + swSubscription.sendReadMessage = ps.sendReadMessage; + } + + await this.swSubscriptionsRepository.update(swSubscription.id, { + sendReadMessage: swSubscription.sendReadMessage, + }); + + return { + userId: swSubscription.userId, + endpoint: swSubscription.endpoint, + sendReadMessage: swSubscription.sendReadMessage, + }; + }); + } +} |