From 0989cbdbb35f515bcf6d42900c608bbbba2a74f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8A=E3=81=8A=E3=81=A1=E3=82=93?= <118029.ichikama@gmail.com> Date: Sun, 14 Sep 2025 12:32:54 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E3=81=8D=E3=81=A3=E3=81=A8?= =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/app/profile/page.tsx | 6 + client/components/PostcardDetailModal.tsx | 225 ++++++++++++++ client/components/PushNotificationManager.tsx | 199 +++++++++++++ client/hooks/usePushNotification.ts | 138 +++++++++ client/public/sw.js | 116 +++++++- client/src/api/client.gen.ts | 1 + infra/environments/dev/main.tf | 10 + infra/environments/dev/outputs.tf | 11 + infra/environments/dev/variables.tf | 8 + infra/modules/iam/main.tf | 7 + infra/modules/iam/variables.tf | 6 + infra/modules/sns/main.tf | 47 +++ infra/modules/sns/outputs.tf | 19 ++ infra/modules/sns/variables.tf | 22 ++ scripts/generate-vapid-keys.js | 65 ++++ server/database/client.py | 14 +- server/database/users.py | 50 +++- server/main.py | 18 +- server/models/__init__.py | 2 + server/models/user.py | 6 + server/pyproject.toml | 1 + server/routers/postcards.py | 34 +++ server/routers/users.py | 71 +++++ server/services/__init__.py | 1 + server/services/sns_service.py | 134 +++++++++ server/uv.lock | 281 ++++++++++++++++++ 26 files changed, 1452 insertions(+), 40 deletions(-) create mode 100644 client/components/PostcardDetailModal.tsx create mode 100644 client/components/PushNotificationManager.tsx create mode 100644 client/hooks/usePushNotification.ts create mode 100644 infra/modules/sns/main.tf create mode 100644 infra/modules/sns/outputs.tf create mode 100644 infra/modules/sns/variables.tf create mode 100644 scripts/generate-vapid-keys.js create mode 100644 server/services/__init__.py create mode 100644 server/services/sns_service.py diff --git a/client/app/profile/page.tsx b/client/app/profile/page.tsx index e57197e..fa16abc 100644 --- a/client/app/profile/page.tsx +++ b/client/app/profile/page.tsx @@ -20,6 +20,7 @@ import { import { getAuthToken, getAccessToken } from "@/src/utils/auth"; import { checkUserExists } from "@/src/utils/user"; import type { UserProfile } from "@/src/api/types.gen"; +import { PushNotificationManager } from "@/components/PushNotificationManager"; Amplify.configure(outputs); @@ -173,6 +174,11 @@ export default function ProfilePage() { + {/* Push Notification Settings */} + + {/* Actions */}