summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/sw/update-registration.ts
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2022-12-18 01:59:59 +0900
committerGitHub <noreply@github.com>2022-12-18 01:59:59 +0900
commit4ecc42744c3c8b68e38f58bfe03919bf437f137a (patch)
tree094230a6992c05cf39136913d02400fae27931d7 /packages/backend/src/server/api/endpoints/sw/update-registration.ts
parentfix(server): GitHubログインしようとするとreply.setCookie is not a ... (diff)
downloadsharkey-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.ts82
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,
+ };
+ });
+ }
+}