Skip to content

Commit

Permalink
feat: 팀조회 및 팀원추가 api 작업 및 teamDetailController 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
reve74 committed Apr 4, 2024
1 parent ae1b51f commit ecce375
Show file tree
Hide file tree
Showing 27 changed files with 452 additions and 328 deletions.
2 changes: 1 addition & 1 deletion front/analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ linter:
- curly_braces_in_flow_control_structures
- omit_local_variable_types
- annotate_overrides
- sort_constructors_first
# - sort_constructors_first
- unawaited_futures
- directives_ordering
# - unnecessary_final
Expand Down
12 changes: 6 additions & 6 deletions front/lib/app/config/routes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import 'package:front/features/project/presentaion/screen/project_creation.dart'
import 'package:front/features/project/presentaion/screen/project_detail.dart';
import 'package:front/features/project/presentaion/screen/project_update.dart';
import 'package:front/features/task/presentation/screen/task_detail_page.dart';
import 'package:front/features/team/presentation/pages/team/team_create.dart';
import 'package:front/features/team/presentation/pages/team/team_datail.dart';
import 'package:front/features/team/presentation/pages/team/teams_list.dart';
import 'package:front/features/team/presentation/pages/team/team_create_view.dart';
import 'package:front/features/team/presentation/pages/team/team_datail_view.dart';
import 'package:front/features/team/presentation/pages/team/teams_list_view.dart';
import 'package:front/features/user/presentation/component/change_info_list.dart';
import 'package:front/features/user/presentation/screens/email_singin.dart';
import 'package:front/features/user/presentation/screens/login.dart';
Expand Down Expand Up @@ -41,18 +41,18 @@ final router = GoRouter(initialLocation: '/', routes: [
GoRoute(
path: 'teamsList',
name: 'teamsList',
builder: (context, state) => const TeamsListScreen(),
builder: (context, state) => const TeamsListView(),
),
GoRoute(
path: 'teamCreate',
name: 'teamCreate',
builder: (context, state) => const TeamCreateScreen(),
builder: (context, state) => const TeamCreateView(),
),
GoRoute(
path: 'teamDetail/:teamId',
name: 'teamDetail/:teamId',
builder: (context, state) {
return TeamDetailScreen(state.pathParameters['teamId']!);
return TeamDetailView(state.pathParameters['teamId']!);
},
),
GoRoute(
Expand Down
10 changes: 8 additions & 2 deletions front/lib/app/di/team_di.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ import 'package:front/features/team/data/data_source/team_remote_data_source_imp
import 'package:front/features/team/repositories/team_repository.dart';
import 'package:front/features/team/repositories/team_repository_impl.dart';
import 'package:front/features/team/usecases/answer_to_invitation_usecase.dart';
import 'package:front/features/team/usecases/change_teamLeader_usecase.dart';
import 'package:front/features/team/usecases/create_team_usecase.dart';
import 'package:front/features/team/usecases/delete_member_usecase.dart';
import 'package:front/features/team/usecases/get_team_by_id_usecase.dart';
import 'package:front/features/team/usecases/get_teams_use_case.dart';
import 'package:front/features/team/usecases/invitation_notification_usecase.dart';
import 'package:front/features/team/usecases/invite_team_by_email_usecase.dart';


class TeamDependencyInjection {
void init() {
dataSources();
Expand Down Expand Up @@ -67,6 +67,11 @@ class TeamDependencyInjection {
teamRepository,
),
)
..registerFactory<ChangeTeamLeaderUseCase>(
() => ChangeTeamLeaderUseCase(
teamRepository,
),
)
..registerFactory<AnswerToInvitationUseCase>(
() => AnswerToInvitationUseCase(
teamRepository,
Expand All @@ -75,6 +80,7 @@ class TeamDependencyInjection {
}

void setupLocator() {
locator.registerSingleton<FlutterSecureStorage>(const FlutterSecureStorage());
locator
.registerSingleton<FlutterSecureStorage>(const FlutterSecureStorage());
}
}
2 changes: 2 additions & 0 deletions front/lib/app/locator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:front/app/di/team_di.dart';
import 'package:front/features/team/data/data_source/team_remote_data_source.dart';
import 'package:front/features/team/repositories/team_repository.dart';
import 'package:front/features/team/usecases/answer_to_invitation_usecase.dart';
import 'package:front/features/team/usecases/change_teamLeader_usecase.dart';
import 'package:front/features/team/usecases/create_team_usecase.dart';
import 'package:front/features/team/usecases/delete_member_usecase.dart';
import 'package:front/features/team/usecases/get_team_by_id_usecase.dart';
Expand All @@ -23,6 +24,7 @@ final answerToInvitationUseCase = locator<AnswerToInvitationUseCase>();
final deleteMemberUseCase = locator<DeleteMemberUseCase>();
final invitationNotificationUseCase = locator<InvitationNotificationUseCase>();
final inviteTeamByEmailUseCase = locator<InviteTeamByEmailUseCase>();
final changeTeamLeaderUseCase = locator<ChangeTeamLeaderUseCase>();

final getStorage = locator<FlutterSecureStorage>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,7 @@ class LoggerInterceptor implements Interceptor {
ResponseInterceptorHandler handler,
) {
log('⬅️ Received network response');
if (response.data['status'] != null) {
log('${'✅ ${response.data['status']} ✅'} ${response.requestOptions.baseUrl}${response.requestOptions.path}');
} else {
log('${'✅ ${response.statusCode} ✅'} ${response.requestOptions.baseUrl}${response.requestOptions.path}');
}
log('${'✅ ${response.statusCode} ✅'} ${response.requestOptions.baseUrl}${response.requestOptions.path}');
log('Query params: ${response.requestOptions.queryParameters}');
log('Response Data: ${response.data}');
log('-------------------------');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,11 @@ class TokenInterceptor implements InterceptorsWrapper {

if (!accessToken) return handler.next(options);

final token = await storage.read(key: accessTokenKey); // accessTokenKey는 토큰을 저장할 때 사용한 키
final token = await storage.read(key: accessTokenKey);

if (token != null) {
options.headers['Authorization'] = 'Bearer $token';
}

return handler.next(options);
}

Expand All @@ -32,43 +31,4 @@ class TokenInterceptor implements InterceptorsWrapper {
void onResponse(Response response, ResponseInterceptorHandler handler) {
handler.next(response);
}
}


// import 'package:dio/dio.dart';
// import 'package:front/core/const/const.dart';
//
//
// class TokenInterceptor implements Interceptor {
//
// @override
// onRequest(RequestOptions options, RequestInterceptorHandler handler) async {
// final accessToken = options.headers.remove('accessToken') == 'true';
//
// if (!accessToken) return handler.next(options);
//
// final token = await storage.read(key: accessTokenKey);
//
// print('access token $token');
//
// if (token != null) {
// options.headers['Authorization'] = 'Bearer $token';
// }
//
// return handler.next(options);
// }
//
// @override
// void onError(DioException err, ErrorInterceptorHandler handler) {
// // TODO: 토큰 유효하지 않을 경우 로그아웃 로직 넣기
// return handler.next(err);
// }
//
// @override
// void onResponse(
// Response<dynamic> response,
// ResponseInterceptorHandler handler,
// ) {
// return handler.next(response);
// }
// }
}
24 changes: 11 additions & 13 deletions front/lib/core/utils/api_response.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:front/features/team/data/models/team.dart';

part 'api_response.g.dart';

@JsonSerializable()
class ApiResponse<T> {
final Map<String, dynamic> result;
final dynamic result;
final int resultCode;
final String resultMsg;

Expand All @@ -15,15 +14,14 @@ class ApiResponse<T> {
required this.resultMsg,
});

factory ApiResponse.fromJson(Map<String, dynamic> json) =>
_$ApiResponseFromJson(json);

// TeamModel toTeamModel(Map<String, dynamic> json) {
// return TeamModel(
// id: json['result']['id'],
// name: json['result']['name'],
// inviteLink: json['result']['inviteLink'],
// createdAt: json['result']['name'],
// );
// }
factory ApiResponse.fromJson(Map<String, dynamic> json) {
dynamic result = json['result'];
if (result is Map<String, dynamic>) {
} else if (result is List<dynamic>) {}
return ApiResponse(
result: result,
resultCode: json['resultCode'] as int,
resultMsg: json['resultMsg'] as String,
);
}
}
7 changes: 7 additions & 0 deletions front/lib/features/team/data/api/team_api.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:dio/dio.dart' hide Headers;
import 'package:front/features/team/data/models/change_teamLeader.dart';
import 'package:front/features/team/data/models/invite_response.dart';
import 'package:front/features/team/data/models/invite_team.dart';
import 'package:front/features/team/data/models/team.dart';
Expand Down Expand Up @@ -49,4 +50,10 @@ abstract class TeamAPI {
Future<ApiResponse> answerToInvitation(
@Body() InviteResponse inviteResponse,
);

@POST('/team/{teamId}/changeLeader')
@Headers({'accessToken': 'true'})
Future<ApiResponse> changeTeamLeader(
@Body() ChangeTeamLeaderModel changeTeamLeaderModel,
);
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:front/features/team/data/models/change_teamLeader.dart';
import 'package:front/features/team/data/models/invite_response.dart';
import 'package:front/features/team/data/models/invite_team.dart';
import 'package:front/features/team/data/models/team.dart';
Expand All @@ -21,4 +22,6 @@ abstract class TeamRemoteDataSource {
Future<ApiResponse> invitationNotification();

Future<ApiResponse> answerToInvitation(InviteResponse inviteResponse);

Future<ApiResponse> changeTeamLeader(ChangeTeamLeaderModel changeTeamLeaderModel);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:front/core/network_handling/app_dio.dart';
import 'package:front/features/team/data/api/team_api.dart';
import 'package:front/features/team/data/models/change_teamLeader.dart';
import 'package:front/features/team/data/models/invite_response.dart';
import 'package:front/features/team/data/models/invite_team.dart';
import 'package:front/features/team/data/models/team.dart';
Expand Down Expand Up @@ -43,11 +44,17 @@ final class TeamRemoteDataSourceImpl implements TeamRemoteDataSource {

@override
Future<ApiResponse> inviteTeamByEmail(InviteTeam inviteTeam) {
throw _teamAPI.inviteTeamByEmail(inviteTeam);
return _teamAPI.inviteTeamByEmail(inviteTeam);
}

@override
Future<ApiResponse<List<TeamModel>>> getTeams() {
return _teamAPI.getTeams();
}

@override
Future<ApiResponse> changeTeamLeader(ChangeTeamLeaderModel changeTeamLeaderModel) {
return _teamAPI.changeTeamLeader(changeTeamLeaderModel);
}

}
16 changes: 16 additions & 0 deletions front/lib/features/team/data/models/change_teamLeader.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import 'package:freezed_annotation/freezed_annotation.dart';

part 'change_teamLeader.g.dart';

@JsonSerializable()
class ChangeTeamLeaderModel {
final int teamId;
final int inviteState;

ChangeTeamLeaderModel({
required this.teamId,
required this.inviteState,
});

Map<String, dynamic> toJson() => _$ChangeTeamLeaderModelToJson(this);
}
5 changes: 2 additions & 3 deletions front/lib/features/team/data/models/invite_response.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@ part 'invite_response.g.dart';

@JsonSerializable()
class InviteResponse {
// 카멜 케이스로 수정
final int team_id;
final int teamId;
final int inviteState;

InviteResponse({
required this.team_id,
required this.teamId,
required this.inviteState,
});

Expand Down
5 changes: 2 additions & 3 deletions front/lib/features/team/data/models/invite_team.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ part 'invite_team.g.dart';
@JsonSerializable()
class InviteTeam {
final String email;
// 카멜 케이스로 수정
final int team_id;
final int teamId;

InviteTeam({
required this.email,
required this.team_id,
required this.teamId,
});

factory InviteTeam.fromJson(Map<String, dynamic> json) =>
Expand Down
13 changes: 7 additions & 6 deletions front/lib/features/team/data/models/team.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ class TeamModel with _$TeamModel {
factory TeamModel({
required int id,
required String name,
required String inviteLink,
int? teamLeader,
required String createdAt,
required String myRole,
// int? teamLeader,
required int totalMembers,
required List<Map<String, dynamic>> members,
}) = _TeamModel;

factory TeamModel.fromJson(Map<String, dynamic> json) =>
Expand All @@ -20,9 +21,9 @@ class TeamModel with _$TeamModel {
return TeamModel(
id: team.id,
name: team.name,
inviteLink: team.inviteLink,
teamLeader: team.teamLeader,
createdAt: team.createdAt,
myRole: team.myRole,
totalMembers: team.totalMembers,
members: team.members,
);
}

Expand Down
2 changes: 1 addition & 1 deletion front/lib/features/team/data/models/team_detail.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class TeamDetailModel with _$TeamDetailModel {
required int id,
required String name,
required String inviteLink,
String? teamLeader,
required int teamLeader,
required String createdAt,
required int memberCount,
List<TeamMemberModel>? teamMembers,
Expand Down
Loading

0 comments on commit ecce375

Please sign in to comment.