-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
#146 add disable user account #185
Merged
Merged
Changes from all commits
Commits
Show all changes
25 commits
Select commit
Hold shift + click to select a range
53a136a
disableUserAccountRequests コレクションのドキュメントモデルの定義
haterain0203 b46002a
ログインしている場合に限り、ドロワーに「退会する」ボタンを表示する
haterain0203 e6fcf03
退会確認ダイアログの追加
haterain0203 81af8bb
controllerを作成し、ListTileのonTap処理をcontrollerへ移管
haterain0203 e2a15ab
Serviceクラスの作成とuserIdを渡す処理の修正
haterain0203 9ce0155
DisableUserAccountRequestRepositoryの定義
haterain0203 bb7180e
ドキュメントモデルの修正(複数形「s」の削除)
haterain0203 c85225a
ドキュメントモデル修正に伴うRepositoryの修正
haterain0203 a69d8d5
_exportの更新
haterain0203 cea463e
firestore_repositoryの更新
haterain0203 dbcfdf3
_exportの修正
haterain0203 99e7ed7
Serviceクラスの更新
haterain0203 c3d7849
TODO追加
haterain0203 4dcec12
Merge branch 'main' of https://github.com/KosukeSaigusa/mottai-flutte…
haterain0203 590db5b
Visibilityを削除し、AuthDependentBuilderに変更
haterain0203 ca7cc8a
reformat
haterain0203 abc8a41
onCreateDisableUserAccountRequest の追加
haterain0203 1d3e8cf
onCreateDisableUserAccountRequest を index.ts に追加
haterain0203 9c7d232
disable にしたのち、サインアウトさせる
haterain0203 4e1c5b1
Serviceクラスの修正
haterain0203 2aa240d
エラーハンドリング追加
haterain0203 885cfde
importすべきパッケージの修正
haterain0203 e70647b
退会処理が完了したことをユーザーに通知するダイアログを表示する 処理の追加
haterain0203 f74b636
退会処理後(disableにした後)にそのアカウントでログインしようとした際のエラーハンドリング追加
haterain0203 ee6ee8a
Merge branch 'main' of https://github.com/KosukeSaigusa/mottai-flutte…
haterain0203 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
19 changes: 19 additions & 0 deletions
19
functions/src/development/disableUserAccount/onCreateDisableUserAccountRequest.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import * as admin from 'firebase-admin' | ||
import * as functions from 'firebase-functions' | ||
|
||
/** | ||
* 新しい disableUserAccountRequest ドキュメントが作成されたときに発火する。 | ||
* disableUserAccountRequest を作成したユーザーを disable にする。 | ||
*/ | ||
export const onCreateDisableUserAccountRequest = functions | ||
.region(`asia-northeast1`) | ||
.firestore.document(`/disableUserAccountRequests/{disableUserAccountRequest}`) | ||
.onCreate(async (snapshot) => { | ||
const disableUserAccountRequest = snapshot.data() | ||
const userId = disableUserAccountRequest.userId | ||
try { | ||
await admin.auth().updateUser(userId, { disabled: true }); | ||
} catch (e) { | ||
functions.logger.error(`退会処理に失敗しました。${e}`) | ||
} | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
packages/firebase_common/lib/src/firestore_documents/_export.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
packages/firebase_common/lib/src/firestore_documents/disable_user_account_request.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
import 'package:cloud_firestore/cloud_firestore.dart'; | ||
import 'package:flutterfire_gen_annotation/flutterfire_gen_annotation.dart'; | ||
|
||
part 'disable_user_account_request.flutterfire_gen.dart'; | ||
|
||
@FirestoreDocument( | ||
path: 'disableUserAccountRequests', | ||
documentName: 'disableUserAccountRequest', | ||
) | ||
class DisableUserAccountRequest { | ||
const DisableUserAccountRequest({ | ||
required this.userId, | ||
this.createdAt, | ||
}); | ||
|
||
final String userId; | ||
|
||
@AlwaysUseFieldValueServerTimestampWhenCreating() | ||
final DateTime? createdAt; | ||
} |
261 changes: 261 additions & 0 deletions
261
...base_common/lib/src/firestore_documents/disable_user_account_request.flutterfire_gen.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,261 @@ | ||
// coverage:ignore-file | ||
// ignore_for_file: type=lint | ||
// ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark | ||
|
||
part of 'disable_user_account_request.dart'; | ||
|
||
class ReadDisableUserAccountRequest { | ||
const ReadDisableUserAccountRequest({ | ||
required this.disableUserAccountRequestId, | ||
required this.path, | ||
required this.userId, | ||
required this.createdAt, | ||
}); | ||
|
||
final String disableUserAccountRequestId; | ||
|
||
final String path; | ||
|
||
final String userId; | ||
|
||
final DateTime? createdAt; | ||
|
||
factory ReadDisableUserAccountRequest._fromJson(Map<String, dynamic> json) { | ||
return ReadDisableUserAccountRequest( | ||
disableUserAccountRequestId: | ||
json['disableUserAccountRequestId'] as String, | ||
path: json['path'] as String, | ||
userId: json['userId'] as String, | ||
createdAt: (json['createdAt'] as Timestamp?)?.toDate(), | ||
); | ||
} | ||
|
||
factory ReadDisableUserAccountRequest.fromDocumentSnapshot( | ||
DocumentSnapshot ds) { | ||
final data = ds.data()! as Map<String, dynamic>; | ||
return ReadDisableUserAccountRequest._fromJson(<String, dynamic>{ | ||
...data, | ||
'disableUserAccountRequestId': ds.id, | ||
'path': ds.reference.path, | ||
}); | ||
} | ||
} | ||
|
||
class CreateDisableUserAccountRequest { | ||
const CreateDisableUserAccountRequest({ | ||
required this.userId, | ||
}); | ||
|
||
final String userId; | ||
|
||
Map<String, dynamic> toJson() { | ||
return { | ||
'userId': userId, | ||
'createdAt': FieldValue.serverTimestamp(), | ||
}; | ||
} | ||
} | ||
|
||
class UpdateDisableUserAccountRequest { | ||
const UpdateDisableUserAccountRequest({ | ||
this.userId, | ||
this.createdAt, | ||
}); | ||
|
||
final String? userId; | ||
final DateTime? createdAt; | ||
|
||
Map<String, dynamic> toJson() { | ||
return { | ||
if (userId != null) 'userId': userId, | ||
if (createdAt != null) 'createdAt': createdAt, | ||
}; | ||
} | ||
} | ||
|
||
class DeleteDisableUserAccountRequest {} | ||
|
||
/// Provides a reference to the disableUserAccountRequests collection for reading. | ||
final readDisableUserAccountRequestCollectionReference = FirebaseFirestore | ||
.instance | ||
.collection('disableUserAccountRequests') | ||
.withConverter<ReadDisableUserAccountRequest>( | ||
fromFirestore: (ds, _) => | ||
ReadDisableUserAccountRequest.fromDocumentSnapshot(ds), | ||
toFirestore: (_, __) => throw UnimplementedError(), | ||
); | ||
|
||
/// Provides a reference to a disableUserAccountRequest document for reading. | ||
DocumentReference<ReadDisableUserAccountRequest> | ||
readDisableUserAccountRequestDocumentReference({ | ||
required String disableUserAccountRequestId, | ||
}) => | ||
readDisableUserAccountRequestCollectionReference | ||
.doc(disableUserAccountRequestId); | ||
|
||
/// Provides a reference to the disableUserAccountRequests collection for creating. | ||
final createDisableUserAccountRequestCollectionReference = FirebaseFirestore | ||
.instance | ||
.collection('disableUserAccountRequests') | ||
.withConverter<CreateDisableUserAccountRequest>( | ||
fromFirestore: (_, __) => throw UnimplementedError(), | ||
toFirestore: (obj, _) => obj.toJson(), | ||
); | ||
|
||
/// Provides a reference to a disableUserAccountRequest document for creating. | ||
DocumentReference<CreateDisableUserAccountRequest> | ||
createDisableUserAccountRequestDocumentReference({ | ||
required String disableUserAccountRequestId, | ||
}) => | ||
createDisableUserAccountRequestCollectionReference | ||
.doc(disableUserAccountRequestId); | ||
|
||
/// Provides a reference to the disableUserAccountRequests collection for updating. | ||
final updateDisableUserAccountRequestCollectionReference = FirebaseFirestore | ||
.instance | ||
.collection('disableUserAccountRequests') | ||
.withConverter<UpdateDisableUserAccountRequest>( | ||
fromFirestore: (_, __) => throw UnimplementedError(), | ||
toFirestore: (obj, _) => obj.toJson(), | ||
); | ||
|
||
/// Provides a reference to a disableUserAccountRequest document for updating. | ||
DocumentReference<UpdateDisableUserAccountRequest> | ||
updateDisableUserAccountRequestDocumentReference({ | ||
required String disableUserAccountRequestId, | ||
}) => | ||
updateDisableUserAccountRequestCollectionReference | ||
.doc(disableUserAccountRequestId); | ||
|
||
/// Provides a reference to the disableUserAccountRequests collection for deleting. | ||
final deleteDisableUserAccountRequestCollectionReference = FirebaseFirestore | ||
.instance | ||
.collection('disableUserAccountRequests') | ||
.withConverter<DeleteDisableUserAccountRequest>( | ||
fromFirestore: (_, __) => throw UnimplementedError(), | ||
toFirestore: (_, __) => throw UnimplementedError(), | ||
); | ||
|
||
/// Provides a reference to a disableUserAccountRequest document for deleting. | ||
DocumentReference<DeleteDisableUserAccountRequest> | ||
deleteDisableUserAccountRequestDocumentReference({ | ||
required String disableUserAccountRequestId, | ||
}) => | ||
deleteDisableUserAccountRequestCollectionReference | ||
.doc(disableUserAccountRequestId); | ||
|
||
/// Manages queries against the disableUserAccountRequests collection. | ||
class DisableUserAccountRequestQuery { | ||
/// Fetches [ReadDisableUserAccountRequest] documents. | ||
Future<List<ReadDisableUserAccountRequest>> fetchDocuments({ | ||
GetOptions? options, | ||
Query<ReadDisableUserAccountRequest>? Function( | ||
Query<ReadDisableUserAccountRequest> query)? | ||
queryBuilder, | ||
int Function(ReadDisableUserAccountRequest lhs, | ||
ReadDisableUserAccountRequest rhs)? | ||
compare, | ||
}) async { | ||
Query<ReadDisableUserAccountRequest> query = | ||
readDisableUserAccountRequestCollectionReference; | ||
if (queryBuilder != null) { | ||
query = queryBuilder(query)!; | ||
} | ||
final qs = await query.get(options); | ||
final result = qs.docs.map((qds) => qds.data()).toList(); | ||
if (compare != null) { | ||
result.sort(compare); | ||
} | ||
return result; | ||
} | ||
|
||
/// Subscribes [DisableUserAccountRequest] documents. | ||
Stream<List<ReadDisableUserAccountRequest>> subscribeDocuments({ | ||
Query<ReadDisableUserAccountRequest>? Function( | ||
Query<ReadDisableUserAccountRequest> query)? | ||
queryBuilder, | ||
int Function(ReadDisableUserAccountRequest lhs, | ||
ReadDisableUserAccountRequest rhs)? | ||
compare, | ||
bool includeMetadataChanges = false, | ||
bool excludePendingWrites = false, | ||
}) { | ||
Query<ReadDisableUserAccountRequest> query = | ||
readDisableUserAccountRequestCollectionReference; | ||
if (queryBuilder != null) { | ||
query = queryBuilder(query)!; | ||
} | ||
var streamQs = | ||
query.snapshots(includeMetadataChanges: includeMetadataChanges); | ||
if (excludePendingWrites) { | ||
streamQs = streamQs.where((qs) => !qs.metadata.hasPendingWrites); | ||
} | ||
return streamQs.map((qs) { | ||
final result = qs.docs.map((qds) => qds.data()).toList(); | ||
if (compare != null) { | ||
result.sort(compare); | ||
} | ||
return result; | ||
}); | ||
} | ||
|
||
/// Fetches a specific [ReadDisableUserAccountRequest] document. | ||
Future<ReadDisableUserAccountRequest?> fetchDocument({ | ||
required String disableUserAccountRequestId, | ||
GetOptions? options, | ||
}) async { | ||
final ds = await readDisableUserAccountRequestDocumentReference( | ||
disableUserAccountRequestId: disableUserAccountRequestId, | ||
).get(options); | ||
return ds.data(); | ||
} | ||
|
||
/// Subscribes a specific [DisableUserAccountRequest] document. | ||
Stream<ReadDisableUserAccountRequest?> subscribeDocument({ | ||
required String disableUserAccountRequestId, | ||
bool includeMetadataChanges = false, | ||
bool excludePendingWrites = false, | ||
}) { | ||
var streamDs = readDisableUserAccountRequestDocumentReference( | ||
disableUserAccountRequestId: disableUserAccountRequestId, | ||
).snapshots(includeMetadataChanges: includeMetadataChanges); | ||
if (excludePendingWrites) { | ||
streamDs = streamDs.where((ds) => !ds.metadata.hasPendingWrites); | ||
} | ||
return streamDs.map((ds) => ds.data()); | ||
} | ||
|
||
/// Adds a [DisableUserAccountRequest] document. | ||
Future<DocumentReference<CreateDisableUserAccountRequest>> add({ | ||
required CreateDisableUserAccountRequest createDisableUserAccountRequest, | ||
}) => | ||
createDisableUserAccountRequestCollectionReference | ||
.add(createDisableUserAccountRequest); | ||
|
||
/// Sets a [DisableUserAccountRequest] document. | ||
Future<void> set({ | ||
required String disableUserAccountRequestId, | ||
required CreateDisableUserAccountRequest createDisableUserAccountRequest, | ||
SetOptions? options, | ||
}) => | ||
createDisableUserAccountRequestDocumentReference( | ||
disableUserAccountRequestId: disableUserAccountRequestId, | ||
).set(createDisableUserAccountRequest, options); | ||
|
||
/// Updates a specific [DisableUserAccountRequest] document. | ||
Future<void> update({ | ||
required String disableUserAccountRequestId, | ||
required UpdateDisableUserAccountRequest updateDisableUserAccountRequest, | ||
}) => | ||
updateDisableUserAccountRequestDocumentReference( | ||
disableUserAccountRequestId: disableUserAccountRequestId, | ||
).update(updateDisableUserAccountRequest.toJson()); | ||
|
||
/// Deletes a specific [DisableUserAccountRequest] document. | ||
Future<void> delete({ | ||
required String disableUserAccountRequestId, | ||
}) => | ||
deleteDisableUserAccountRequestDocumentReference( | ||
disableUserAccountRequestId: disableUserAccountRequestId, | ||
).delete(); | ||
} |
1 change: 1 addition & 0 deletions
1
packages/firebase_common/lib/src/firestore_repositories/_export.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
packages/firebase_common/lib/src/firestore_repositories/disable_user_account_request.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
import '../firestore_documents/disable_user_account_request.dart'; | ||
|
||
class DisableUserAccountRequestRepository { | ||
final _query = DisableUserAccountRequestQuery(); | ||
|
||
/// [DisableUserAccountRequest] を作成する。 | ||
Future<void> setDisableUserAccountRequest({ | ||
required String userId, | ||
}) => | ||
_query.set( | ||
disableUserAccountRequestId: userId, | ||
createDisableUserAccountRequest: CreateDisableUserAccountRequest( | ||
userId: userId, | ||
), | ||
); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
退会済みのアカウントでログインしようとした場合に、無効であることを通知するようにしてみました!
(冒頭に動画を添付しているので参照ください)