-
Notifications
You must be signed in to change notification settings - Fork 10
feat: give president to other people #616
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
base: development
Are you sure you want to change the base?
Changes from all commits
19d5859
fe17df0
ebb05fc
1da6a96
cfad1fa
1aea885
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -34,7 +34,8 @@ | |||||||||||||
| "profile": { | ||||||||||||||
| "name": { | ||||||||||||||
| "label": "Название группы", | ||||||||||||||
| "hint": "ИнфоТим (Infoteam)" | ||||||||||||||
| "hint": "ИнфоТим (Infoteam)", | ||||||||||||||
| "sameNameError": "Имя группы уже существует" | ||||||||||||||
| } | ||||||||||||||
| }, | ||||||||||||||
| "introduce": { | ||||||||||||||
|
|
@@ -87,7 +88,8 @@ | |||||||||||||
| "header": "Обновить ссылку на страницу Notion", | ||||||||||||||
| "hintText": "Введите ссылку на Notion", | ||||||||||||||
| "loading": "Загрузка Notion...", | ||||||||||||||
| "error": "Не удалось загрузить ссылку на Notion" | ||||||||||||||
| "error": "Не удалось загрузить ссылку на Notion", | ||||||||||||||
| "empty": "Пожалуйста, введите ссылку на Notion" | ||||||||||||||
| }, | ||||||||||||||
| "invite": { | ||||||||||||||
| "header": "Создать ссылку для приглашения", | ||||||||||||||
|
|
@@ -106,10 +108,13 @@ | |||||||||||||
| "memberCard": { | ||||||||||||||
| "role": { | ||||||||||||||
| "role": "Роль", | ||||||||||||||
| "president": "президент", | ||||||||||||||
| "admin": "Администратор", | ||||||||||||||
| "manager": "Менеджер", | ||||||||||||||
| "member": "член" | ||||||||||||||
| }, | ||||||||||||||
| "changePresidentTitle": "? $name", | ||||||||||||||
| "changePresidentDescription": "?", | ||||||||||||||
| "banish": "Исключить", | ||||||||||||||
|
Comment on lines
+116
to
118
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [중요] 변경 모달 러시아어 번역 누락(‘?’) 사용자 노출 문자열이 ‘?’로 남아있습니다. 아래처럼 자연스러운 문구로 교체해주세요. - "changePresidentTitle": "? $name",
- "changePresidentDescription": "?",
+ "changePresidentTitle": "Назначить $name президентом группы?",
+ "changePresidentDescription": "Ваша роль будет изменена на «Администратор»."📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||
| "banishTitle": "Вы уверены, что хотите исключить этого участника?", | ||||||||||||||
| "banishDescription": "Это действие нельзя отменить." | ||||||||||||||
|
|
||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,14 @@ | ||
| import 'package:freezed_annotation/freezed_annotation.dart'; | ||
|
|
||
| part 'update_president_model.freezed.dart'; | ||
| part 'update_president_model.g.dart'; | ||
|
|
||
| @freezed | ||
| sealed class UpdatePresidentModel with _$UpdatePresidentModel { | ||
| factory UpdatePresidentModel( | ||
| String newPresidentUuid, | ||
| ) = _UpdatePresidentModel; | ||
|
|
||
| factory UpdatePresidentModel.fromJson(Map<String, dynamic> json) => | ||
| _$UpdatePresidentModelFromJson(json); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| class AuthorityEntity { | ||
| final List<String> authorities; | ||
| final List<String> permissions; | ||
|
|
||
| AuthorityEntity({required this.authorities}); | ||
| AuthorityEntity({required this.permissions}); | ||
| } |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -4,21 +4,29 @@ import 'package:injectable/injectable.dart'; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import 'package:ziggle/app/modules/groups/data/enums/group_member_role.dart'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import 'package:ziggle/app/modules/groups/domain/entities/member_entity.dart'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import 'package:ziggle/app/modules/groups/domain/repository/group_repository.dart'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import 'package:ziggle/app/modules/user/data/repositories/groups_rest_auth_repository.dart'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import 'package:ziggle/app/modules/user/data/repositories/rest_auth_repository.dart'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| part 'group_member_bloc.freezed.dart'; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @injectable | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| class GroupMemberBloc extends Bloc<GroupMemberEvent, GroupMemberState> { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| final GroupRepository _repository; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| final RestAuthRepository _authRepository; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GroupMemberBloc(this._repository) : super(_Initial()) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GroupMemberBloc(this._repository, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @Named.from(GroupsRestAuthRepository) this._authRepository) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| : super(_Initial()) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| on<_Load>((event, emit) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| emit(_Loading()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| on<_GetMembers>((event, emit) async { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| emit(GroupMemberState.loading()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| final members = await _repository.getMembers(event.uuid); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| emit(GroupMemberState.loaded(members.list)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| final group = await _repository.getGroup(event.uuid); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| final myUuid = await _authRepository.info().then((u) => u.uuid); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| emit( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GroupMemberState.loaded(members.list, myUuid, group.president!.uuid)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
23
to
30
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 예외 처리 누락 + null 강제 연산자 때문에 런타임 크래시 위험
아래처럼 동시 실행 + 견고한 예외 처리 + null 가드로 보완해 주세요. on<_GetMembers>((event, emit) async {
- emit(GroupMemberState.loading());
- final members = await _repository.getMembers(event.uuid);
- final group = await _repository.getGroup(event.uuid);
- final myUuid = await _authRepository.info().then((u) => u.uuid);
- emit(
- GroupMemberState.loaded(members.list, myUuid, group.president!.uuid));
+ emit(GroupMemberState.loading());
+ try {
+ final membersF = _repository.getMembers(event.uuid);
+ final groupF = _repository.getGroup(event.uuid);
+ final meF = _authRepository.info();
+
+ final members = await membersF;
+ final group = await groupF;
+ final myUuid = (await meF).uuid;
+
+ final presidentUuid = group.president?.uuid;
+ if (presidentUuid == null) {
+ emit(const GroupMemberState.error('Group has no president'));
+ return;
+ }
+ emit(GroupMemberState.loaded(members.list, myUuid, presidentUuid));
+ } on Exception catch (e) {
+ emit(GroupMemberState.error(e.toString()));
+ }
});📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| on<_RemoveMember>((event, emit) async { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| emit(GroupMemberState.loading()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -47,6 +55,19 @@ class GroupMemberBloc extends Bloc<GroupMemberEvent, GroupMemberState> { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| emit(GroupMemberState.success()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| add(GroupMemberEvent.getMembers(event.uuid)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| on<_ChangePresident>((event, emit) async { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| emit(GroupMemberState.loading()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| try { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| await _repository.changePresident( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| uuid: event.uuid, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| targetUuid: event.targetUuid, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } on Exception catch (e) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| emit(_Error(e.toString())); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| emit(GroupMemberState.success()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| add(GroupMemberEvent.getMembers(event.uuid)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| }); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+58
to
+70
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. changePresident: 에러 후에도 success 상태를 내보내는 동일한 버그 실패 시에도 성공 상태를 방출합니다. 위 핸들러와 동일 패턴으로 수정 필요합니다. on<_ChangePresident>((event, emit) async {
emit(GroupMemberState.loading());
try {
await _repository.changePresident(
uuid: event.uuid,
targetUuid: event.targetUuid,
);
- } on Exception catch (e) {
- emit(_Error(e.toString()));
- }
- emit(GroupMemberState.success());
- add(GroupMemberEvent.getMembers(event.uuid));
+ emit(GroupMemberState.success());
+ add(GroupMemberEvent.getMembers(event.uuid));
+ } on Exception catch (e) {
+ emit(GroupMemberState.error(e.toString()));
+ }
});📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -58,13 +79,17 @@ class GroupMemberEvent with _$GroupMemberEvent { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| _RemoveMember; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const factory GroupMemberEvent.grantRoleToUser(String uuid, String targetUuid, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| GroupMemberRole role, GroupMemberRole previousRole) = _GrantRoleToUser; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const factory GroupMemberEvent.changePresident( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| String uuid, String targetUuid) = _ChangePresident; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| @freezed | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| class GroupMemberState with _$GroupMemberState { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const factory GroupMemberState.initial() = _Initial; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const factory GroupMemberState.loading() = _Loading; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const factory GroupMemberState.loaded(List<MemberEntity> list) = _Loaded; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const factory GroupMemberState.loaded( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| List<MemberEntity> list, String myUuid, String presidentUuid) = _Loaded; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const factory GroupMemberState.success() = _Success; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| const factory GroupMemberState.error(String error) = _Error; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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.
[중요] JP: 변경 모달 번역 누락(‘?’)
일본어 번역이 미완입니다. 아래처럼 제안드립니다.
📝 Committable suggestion
🤖 Prompt for AI Agents