Skip to content

Commit 98fdc56

Browse files
committed
refactor: 서버 사이드에서 Auth가 제거되면 자동으로 Firestore 데이터가 제거되도록 개선
1 parent b3e3cb4 commit 98fdc56

4 files changed

Lines changed: 16 additions & 40 deletions

File tree

DevLog/Data/Repository/AuthenticationRepositoryImpl.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ final class AuthenticationRepositoryImpl: AuthenticationRepository {
8080
}
8181
}
8282

83-
try await authService.deleteFirestoreUserData()
8483
try await authService.deleteCurrentUser()
8584
try await authService.clearCurrentSession()
8685
}

DevLog/Infra/Service/AuthService.swift

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77

88
import FirebaseAuth
99
import FirebaseFirestore
10-
import FirebaseFunctions
1110
import FirebaseMessaging
1211

1312
final class AuthService {
1413
private let store = Firestore.firestore()
15-
private let functions = Functions.functions(region: "asia-northeast3")
1614
private let messaging = Messaging.messaging()
1715
private let logger = Logger(category: "AuthService")
1816

@@ -47,18 +45,6 @@ final class AuthService {
4745
}
4846
}
4947

50-
func deleteFirestoreUserData() async throws {
51-
logger.info("Deleting Firestore user data")
52-
53-
do {
54-
let deleteFunction = functions.httpsCallable("deleteUserFirestoreData")
55-
_ = try await deleteFunction.call()
56-
} catch {
57-
logger.error("Failed to delete Firestore user data", error: error)
58-
throw error
59-
}
60-
}
61-
6248
func deleteCurrentUser() async throws {
6349
logger.info("Deleting FirebaseAuth current user")
6450

Firebase/functions/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {
2121
// } from "./auth/google";
2222

2323
import {
24-
deleteUserFirestoreData
24+
cleanupDeletedUserFirestoreData
2525
} from "./user/delete";
2626

2727
import {
@@ -65,7 +65,7 @@ export {
6565
// Google 인증 함수들 (나중에 구현되면 추가)
6666

6767
export {
68-
deleteUserFirestoreData
68+
cleanupDeletedUserFirestoreData
6969
};
7070

7171
// FCM 관련 함수들 내보내기
Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,24 @@
1-
import { onCall, HttpsError } from "firebase-functions/v2/https";
1+
import * as functions from "firebase-functions/v1";
22
import * as admin from "firebase-admin";
33
import * as logger from "firebase-functions/logger";
44

5-
export const deleteUserFirestoreData = onCall({
6-
cors: true,
7-
maxInstances: 10,
8-
region: "asia-northeast3"
9-
},
10-
async (request) => {
11-
if (!request.auth?.uid) {
12-
logger.error("deleteUserFirestoreData called without authenticated uid", {
13-
auth: request.auth ?? null
14-
});
15-
throw new HttpsError("unauthenticated", "로그인 필요");
16-
}
17-
18-
const uid = request.auth.uid;
5+
export const cleanupDeletedUserFirestoreData = functions
6+
.region("asia-northeast3")
7+
.auth
8+
.user()
9+
.onDelete(async (user) => {
10+
const uid = user.uid;
1911

2012
try {
2113
const userDocRef = admin.firestore().doc(`users/${uid}`);
2214
await admin.firestore().recursiveDelete(userDocRef);
23-
24-
// Firestore의 recursiveDelete API 사용 (firebase-tools v9.12.0+)
25-
// 실제로는 admin SDK엔 없고, 아래처럼 functions에서 사용할 수 있음
26-
// https://firebase.google.com/docs/firestore/solutions/delete-collections?hl=ko#cloud-functions
27-
// @ts-ignore
28-
return { success: true }
29-
} catch (err: any) {
30-
throw new HttpsError("internal", `삭제 중 오류: ${err.message || err}`);
15+
logger.info("Deleted Firestore user data after Auth user deletion", { uid });
16+
} catch (error) {
17+
logger.error("Failed to delete Firestore user data after Auth user deletion", {
18+
uid,
19+
error
20+
});
21+
throw error;
3122
}
3223
}
3324
);

0 commit comments

Comments
 (0)