Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion analysis_options.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
include: package:flutter_lints/flutter.yaml

analyzer:
exclude:
- "**/*.g.dart"
- "**/*.freezed.dart"

errors:
invalid_annotation_target: ignore
invalid_annotation_target: ignore
prefer_const_declarations: error
prefer_const_constructors: error
missing_required_param: error

linter:
rules:
library_private_types_in_public_api: false
no_leading_underscores_for_local_identifiers: false
20 changes: 14 additions & 6 deletions lib/core/config/di/dependencies.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,22 @@ import 'package:cookie_jar/cookie_jar.dart';
import 'package:dio/dio.dart';
import 'package:get_it/get_it.dart';
import 'package:jusicool_ios/core/network/api/api_client.dart';
import 'package:jusicool_ios/data/user/service/user_api.dart';
import 'package:jusicool_ios/core/network/interceptor/cookie_interceptor.dart';
import 'package:jusicool_ios/data/account/data_sources/account_data_source.dart';
import 'package:jusicool_ios/data/account/data_sources/account_data_source_impl.dart';
import 'package:jusicool_ios/data/account/service/account_api.dart';
import 'package:jusicool_ios/data/user/data_sources/user_data_source.dart';
import 'package:jusicool_ios/data/user/data_sources/user_data_source_impl.dart';
import 'package:jusicool_ios/data/user/repositories/user_repository_impl.dart';
import 'package:jusicool_ios/data/user/service/neis_api.dart';
import 'package:jusicool_ios/data/user/service/user_api.dart';
import 'package:jusicool_ios/domain/sign_in/repositories/sign_in_repository.dart';
import 'package:jusicool_ios/domain/sign_in/usecase/sign_in_usecase.dart';
import 'package:jusicool_ios/domain/sign_in/usecase/sign_in_usecase_impl.dart';
import 'package:jusicool_ios/domain/sign_up/repositories/sign_up_repository.dart';
import 'package:jusicool_ios/domain/sign_up/usecase/sign_up_usecase.dart';
import 'package:jusicool_ios/domain/sign_up/usecase/sign_up_usecase_impl.dart';
import '../../../data/user/data_sources/user_data_source_impl.dart';
import '../../../data/user/repositories/user_repository_impl.dart';
import '../../../data/user/service/neis_api.dart';
import '../../network/interceptor/cookie_interceptor.dart';


final di = GetIt.instance;

Expand All @@ -35,9 +39,10 @@ void _setApi() {
di.registerLazySingleton<NeisApi>(
() => NeisApi(di.get<Dio>(instanceName: 'neis')),
);
di.registerLazySingleton<AccountApi>(() => AccountApi(di.get<Dio>()));
log('βœ… :: API DI 성곡');
} catch (e) {
log("β›” :: API DI μ‹€νŒ¨ \n$e");
log('β›” :: API DI μ‹€νŒ¨ \n$e');
}
}

Expand All @@ -46,6 +51,9 @@ void _setDataSources() {
di.registerLazySingleton<UserDataSource>(
() => UserDataSourceImpl(di.get<UserApi>(), di.get<NeisApi>()),
);
di.registerLazySingleton<AccountDataSource>(
() => AccountDataSourceImpl(di.get<AccountApi>()),
);
log('βœ… :: DataSources DI 성곡');
} catch (e) {
log("β›” :: DataSources DI μ‹€νŒ¨ \n$e");
Expand Down
15 changes: 8 additions & 7 deletions lib/core/config/router/router.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import 'package:go_router/go_router.dart';
import 'package:jusicool_ios/main.dart';
import 'package:jusicool_ios/presentation/community/screens/community_post_list_screen.dart';
import 'package:jusicool_ios/presentation/my_capital/screens/maincapital_screen.dart';
import 'package:jusicool_ios/presentation/my_capital/screens/revenue_screens/monthlyrevenue_screen.dart';
import 'package:jusicool_ios/presentation/my_capital/screens/order_screens/order_detail_screen.dart';
import 'package:jusicool_ios/presentation/my_capital/screens/my_assets_screen.dart';
import 'package:jusicool_ios/presentation/my_capital/screens/order_screens/order_detail_screen.dart';
import 'package:jusicool_ios/presentation/my_capital/screens/revenue_screens/monthlyrevenue_screen.dart';
import 'package:jusicool_ios/presentation/sign_in/screens/login_screen.dart';
import 'package:jusicool_ios/presentation/sign_up/screens/email_auth_screen.dart';
import 'package:jusicool_ios/presentation/sign_up/screens/find_school_screen.dart';
import 'package:jusicool_ios/presentation/sign_up/screens/name_input_screen.dart';
import 'package:jusicool_ios/presentation/sign_up/screens/password_create_screen.dart';
import 'package:jusicool_ios/presentation/splash/screens/splash_screen.dart';
import 'package:jusicool_ios/presentation/community/screens/community_post_list_screen.dart';
import '../../../main.dart';


class RoutePaths {
static const String splash = '/splash';
Expand Down Expand Up @@ -56,15 +57,15 @@ class AppRouter {
),
GoRoute(
path: RoutePaths.emailAuth,
builder: (context, state) => EmailAuthScreen(),
builder: (context, state) => const EmailAuthScreen(),
),
GoRoute(
path: RoutePaths.passwordCreate,
builder: (context, state) => PasswordCreateScreen(),
builder: (context, state) => const PasswordCreateScreen(),
),
GoRoute(
path: RoutePaths.findSchool,
builder: (context, state) => FindSchoolScreen(),
builder: (context, state) => const FindSchoolScreen(),
),
GoRoute(
path: RoutePaths.mainCapital,
Expand Down
16 changes: 8 additions & 8 deletions lib/core/config/widget/menu_bottom.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import 'package:jusicool_design_system/jusicool_design_system.dart';
import 'package:jusicool_ios/presentation/my_capital/screens/maincapital_screen.dart';

class ScreenConfig {
ScreenConfig({required this.title, required this.widget});

final String title;
final Widget widget;

ScreenConfig({required this.title, required this.widget});
}

class ScreenList {
Expand Down Expand Up @@ -37,11 +37,6 @@ class ScreenList {
}

class NavBarItem extends StatelessWidget {
final String iconName;
final String label;
final bool isSelected;
final VoidCallback onTap;

const NavBarItem({
super.key,
required this.iconName,
Expand All @@ -50,6 +45,11 @@ class NavBarItem extends StatelessWidget {
required this.onTap,
});

final String iconName;
final String label;
final bool isSelected;
final VoidCallback onTap;

Widget _buildIcon() {
final color = isSelected ? JusicoolColor.main : JusicoolColor.gray400;

Expand Down Expand Up @@ -141,7 +141,7 @@ class _MenuBottomState extends State<MenuBottom> {
Positioned(
left: 42.w,
top: 9.h,
child: Container(
child: SizedBox(
width: 277.w,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
Expand Down
10 changes: 5 additions & 5 deletions lib/core/network/api/api_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import 'package:dio_cookie_manager/dio_cookie_manager.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:get_it/get_it.dart';
import 'package:jusicool_ios/core/network/interceptor/dio_error_interceptor.dart';
import 'package:jusicool_ios/core/network/interceptor/dio_request_interceptor.dart';
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
import '../interceptor/dio_error_interceptor.dart';

Dio dio() {
String? _baseUrlDev = dotenv.env['BASE_URL_DEV'];
Expand All @@ -28,8 +28,8 @@ Dio dio() {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
connectTimeout: Duration(seconds: 30),
receiveTimeout: Duration(seconds: 30),
connectTimeout: const Duration(seconds: 30),
receiveTimeout: const Duration(seconds: 30),
),
);

Expand Down Expand Up @@ -58,8 +58,8 @@ Dio neis() {
Dio dio = Dio(
BaseOptions(
baseUrl: 'https://open.neis.go.kr/hub/schoolInfo',
connectTimeout: Duration(seconds: 30),
receiveTimeout: Duration(seconds: 30),
connectTimeout: const Duration(seconds: 30),
receiveTimeout: const Duration(seconds: 30),
queryParameters: {'KEY': _neisApiKey ?? '', 'Type': 'json'},
),
);
Expand Down
27 changes: 14 additions & 13 deletions lib/core/network/interceptor/dio_error_interceptor.dart
Original file line number Diff line number Diff line change
@@ -1,49 +1,50 @@
import 'dart:developer';
import 'package:dio/dio.dart';

class DioErrorInterceptor extends InterceptorsWrapper {
@override
void onError(DioException err, ErrorInterceptorHandler handler) {
print('β›” DIO μ—λŸ¬ :: ${err.type}');
log('β›” DIO μ—λŸ¬ :: ${err.type}');
switch (err.type) {
case DioExceptionType.connectionTimeout:
print('⏳ μ—°κ²° μ‹œκ°„ 초과');
log('⏳ μ—°κ²° μ‹œκ°„ 초과');
break;
case DioExceptionType.sendTimeout:
print('⏳ 전솑 μ‹œκ°„ 초과');
log('⏳ 전솑 μ‹œκ°„ 초과');
break;
case DioExceptionType.receiveTimeout:
print('⏳ μˆ˜μ‹  μ‹œκ°„ 초과');
log('⏳ μˆ˜μ‹  μ‹œκ°„ 초과');
break;
case DioExceptionType.badResponse:
switch (err.response?.statusCode) {
case 400:
print('🚫 잘λͺ»λœ μš”μ²­: ${err.response?.data}');
log('🚫 잘λͺ»λœ μš”μ²­: ${err.response?.data}');
break;
case 401:
print('🚫 인증 μ‹€νŒ¨: ${err.response?.data}');
log('🚫 인증 μ‹€νŒ¨: ${err.response?.data}');
break;
case 403:
print('🚫 κΆŒν•œ μ—†μŒ: ${err.response?.data}');
log('🚫 κΆŒν•œ μ—†μŒ: ${err.response?.data}');
break;
case 404:
print('🚫 λ¦¬μ†ŒμŠ€ μ—†μŒ: ${err.response?.data}');
log('🚫 λ¦¬μ†ŒμŠ€ μ—†μŒ: ${err.response?.data}');
break;
case 500:
print('🚫 μ„œλ²„ 였λ₯˜: ${err.response?.data}');
log('🚫 μ„œλ²„ 였λ₯˜: ${err.response?.data}');
break;
default:
print('🚫 기타 였λ₯˜: ${err.response?.data}');
log('🚫 기타 였λ₯˜: ${err.response?.data}');
break;
}
case DioExceptionType.cancel:
print('❌ μš”μ²­ μ·¨μ†Œλ¨');
log('❌ μš”μ²­ μ·¨μ†Œλ¨');
break;
case DioExceptionType.connectionError:
print('🚫 인터넷 μ—°κ²° 였λ₯˜: ${err.message}');
log('🚫 인터넷 μ—°κ²° 였λ₯˜: ${err.message}');
break;
case DioExceptionType.unknown:
default:
print('❓ μ•Œ 수 μ—†λŠ” μ—λŸ¬: ${err.message}');
log('❓ μ•Œ 수 μ—†λŠ” μ—λŸ¬: ${err.message}');
}
handler.next(err);
}
Expand Down
8 changes: 4 additions & 4 deletions lib/core/network/interceptor/dio_request_interceptor.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import 'dart:convert';

import 'dart:developer';
import 'package:dio/dio.dart';

class DioRequestInterceptor extends InterceptorsWrapper {
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
print("β•” Body");
print("β•‘ ${jsonEncode(options.data)}");
print("β•š${'═' * 90}╝");
log("β•” Body");
log("β•‘ ${jsonEncode(options.data)}");
log("β•š${'═' * 90}╝");
super.onRequest(options, handler);
}
}
6 changes: 6 additions & 0 deletions lib/data/account/data_sources/account_data_source.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

import 'package:jusicool_ios/data/account/dto/remote/response/my_account_response_dto.dart';

abstract class AccountDataSource {
Future<MyAccountResponseDto> getMyAccount();
}
14 changes: 14 additions & 0 deletions lib/data/account/data_sources/account_data_source_impl.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import 'package:jusicool_ios/data/account/data_sources/account_data_source.dart';
import 'package:jusicool_ios/data/account/dto/remote/response/my_account_response_dto.dart';
import '../service/account_api.dart';

class AccountDataSourceImpl extends AccountDataSource {
final AccountApi _accountApi;

AccountDataSourceImpl(this._accountApi);

@override
Future<MyAccountResponseDto> getMyAccount() async {
return await _accountApi.getMyAccount();
}
}
Empty file.
Empty file.
Empty file.
17 changes: 17 additions & 0 deletions lib/data/account/dto/remote/response/my_account_response_dto.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:freezed_annotation/freezed_annotation.dart';

part 'my_account_response_dto.freezed.dart';

part 'my_account_response_dto.g.dart';

@freezed
abstract class MyAccountResponseDto with _$MyAccountResponseDto {
const factory MyAccountResponseDto({
required int id,
@JsonKey(name: 'krw_balance') required int krwBalance,
@JsonKey(name: 'usd_balance') required double usdBalance,
}) = _MyAccountResponseDto;

factory MyAccountResponseDto.fromJson(Map<String, dynamic> json) =>
_$MyAccountResponseDtoFromJson(json);
}
14 changes: 14 additions & 0 deletions lib/data/account/service/account_api.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import 'package:dio/dio.dart';
import 'package:jusicool_ios/data/account/dto/remote/response/my_account_response_dto.dart';
import 'package:retrofit/error_logger.dart';
import 'package:retrofit/http.dart';

part 'account_api.g.dart';

@RestApi()
abstract class AccountApi {
factory AccountApi(Dio dio, {String baseUrl}) = _AccountApi;

@GET('/account/my')
Future<MyAccountResponseDto> getMyAccount();
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:jusicool_ios/data/user/dto/remote/request/sign_up_verify_email_request_dto.dart';

import '../../../../../domain/sign_up/entity/sign_up_email_entity.dart';
import 'package:jusicool_ios/domain/sign_up/entity/sign_up_email_entity.dart';

class SignUpVerifyEmailRequestMapper {
static SignUpVerifyEmailRequestDto toDto(SignUpEmailEntity entity) =>
Expand Down
4 changes: 2 additions & 2 deletions lib/data/user/repositories/user_repository_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ import 'package:jusicool_ios/data/user/data_sources/user_data_source.dart';
import 'package:jusicool_ios/data/user/dto/remote/request/sign_in_request_dto.dart';
import 'package:jusicool_ios/data/user/dto/remote/request/sign_up_request_dto.dart';
import 'package:jusicool_ios/data/user/dto/remote/request/sign_up_search_school_request_dto.dart';
import 'package:jusicool_ios/data/user/dto/remote/request/sign_up_send_email_request_dto.dart';
import 'package:jusicool_ios/data/user/dto/remote/request/sign_up_verify_email_request_dto.dart';
import 'package:jusicool_ios/data/user/mappers/remote/request/sign_in_request_mapper.dart';
import 'package:jusicool_ios/data/user/mappers/remote/request/sign_up_request_mapper.dart';
import 'package:jusicool_ios/data/user/mappers/remote/request/sign_up_search_school_request_mapper.dart';
import 'package:jusicool_ios/data/user/mappers/remote/request/sign_up_send_email_request_mapper.dart';
import 'package:jusicool_ios/data/user/mappers/remote/request/sign_up_verify_email_request_mapper.dart';
import 'package:jusicool_ios/data/user/mappers/remote/response/sign_up_search_school_response_mapper.dart';
Expand All @@ -14,8 +16,6 @@ import 'package:jusicool_ios/domain/sign_up/entity/sign_up_email_entity.dart';
import 'package:jusicool_ios/domain/sign_up/entity/sign_up_entity.dart';
import 'package:jusicool_ios/domain/sign_up/entity/sign_up_search_school_entity.dart';
import 'package:jusicool_ios/domain/sign_up/repositories/sign_up_repository.dart';
import '../dto/remote/request/sign_up_send_email_request_dto.dart';
import '../mappers/remote/request/sign_up_search_school_request_mapper.dart';

class UserRepositoryImpl implements SignInRepository, SignUpRepository {
final UserDataSource _userDataSource;
Expand Down
4 changes: 2 additions & 2 deletions lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:flutter/services.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:jusicool_design_system/src/core/theme/colors/color_palette.dart';
import 'package:jusicool_design_system/jusicool_design_system.dart';
import 'package:jusicool_ios/core/config/di/dependencies.dart';
import 'core/config/router/router.dart';
import 'core/config/theme/app_theme.dart';
Expand All @@ -26,7 +26,7 @@ void main() async {
),
);

runApp(ProviderScope(child: const MyApp()));
runApp(const ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import 'package:flutter/material.dart';
import 'package:jusicool_design_system/src/core/theme/colors/color_palette.dart';
import 'package:jusicool_design_system/src/core/theme/texts/typography.dart';
import 'package:jusicool_design_system/jusicool_design_system.dart'
hide CommentTextField;
import 'package:jusicool_ios/presentation/community/widgets/comment_item.dart';
import 'package:jusicool_ios/presentation/community/widgets/comment_textfield.dart';
import 'package:jusicool_ios/presentation/community/widgets/like_button.dart';

import 'community_post_edit_screen.dart';

class CommunityPostDetailScreen extends StatefulWidget {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:jusicool_design_system/src/core/theme/colors/color_palette.dart';
import 'package:jusicool_design_system/src/core/theme/texts/typography.dart';
import 'package:jusicool_design_system/jusicool_design_system.dart';

class CommunityPostEditScreen extends StatefulWidget {
final String initialTitle;
Expand Down
Loading