Skip to content
Merged
Show file tree
Hide file tree
Changes from 90 commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
a96808a
โœจ :: Exchange entity file
aiden30015 Jul 8, 2025
50c11a5
โœจ :: Exchange repository abstract class
aiden30015 Jul 8, 2025
aeefcba
โœจ :: Exchange usecase abstract class
aiden30015 Jul 8, 2025
8a619bd
โœจ :: Exchange usecase class
aiden30015 Jul 8, 2025
5263d73
โœจ :: Exchange data source class
aiden30015 Jul 9, 2025
647f08f
โœจ :: Exchange api class
aiden30015 Jul 9, 2025
e4c2b75
โœจ :: Exchange request dto class
aiden30015 Jul 9, 2025
883061a
โœจ :: Exchange request mapper class
aiden30015 Jul 9, 2025
358f88f
โœจ :: Exchange repository class
aiden30015 Jul 9, 2025
b77fb19
๐Ÿ”ฅ :: Entity json ํŒŒ์‹ฑ ์ฝ”๋“œ ์‚ญ์ œ
aiden30015 Jul 9, 2025
3f17dcf
โœจ :: ๋งค์ˆ˜, ๋งค๋„ ๊ณตํ†ต response class
aiden30015 Jul 9, 2025
dadc347
โœจ :: ๋งค์ˆ˜ ๋ฐ ๋งค๋„ request dto class
aiden30015 Jul 9, 2025
9d674f5
Merge branch 'develop' of https://github.com/Jusicool-Ver-2-0/Jusicooโ€ฆ
aiden30015 Jul 9, 2025
d89f523
โœจ :: Enum ์ถ”๊ฐ€
aiden30015 Jul 9, 2025
d75475b
โœจ :: Enum type ํด๋ž˜์Šค ์ถ”๊ฐ€
aiden30015 Jul 9, 2025
b332d4f
โœจ :: Enum ์ฟผ๋ฆฌ ํƒ€์ž… dto ํด๋ž˜์Šค
aiden30015 Jul 9, 2025
970e79d
โœจ :: MyOrder request dto class
aiden30015 Jul 9, 2025
879589a
โœจ :: Order type enum class
aiden30015 Jul 9, 2025
f2e1519
โœจ :: Reserve type enum
aiden30015 Jul 9, 2025
3968fd8
๐Ÿ”ง :: ํŒŒ์ผ ์œ„์น˜ ๋ณ€๊ฒฝ
aiden30015 Jul 9, 2025
73af5df
โœจ :: My order type status type enum class
aiden30015 Jul 9, 2025
5ccb804
โœจ :: My order response dto class
aiden30015 Jul 9, 2025
56dd8c0
โœจ :: Month order response dto class
aiden30015 Jul 9, 2025
a057cb3
โœจ :: Month rate response dto class
aiden30015 Jul 9, 2025
bacefa0
โ™ป๏ธ :: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ
aiden30015 Jul 9, 2025
a6aa28c
โœจ :: Reservation order request dto class
aiden30015 Jul 9, 2025
490789f
โ™ป๏ธ :: Class ์ด๋ฆ„ ๋ณ€๊ฒฝ
aiden30015 Jul 9, 2025
8a7ee34
โ™ป๏ธ :: Nullsafety ๋ณ€์ˆ˜ required ์‚ญ์ œ
aiden30015 Jul 9, 2025
27b56ba
โ™ป๏ธ :: ํŒŒ์ผ ์œ„์น˜ ๋ณ€๊ฒฝ
aiden30015 Jul 9, 2025
d5447de
โ™ป๏ธ :: ํด๋” ์ด๋ฆ„ ๋ณ€๊ฒฝ
aiden30015 Jul 9, 2025
65569db
โœจ :: Month order entity class
aiden30015 Jul 9, 2025
59550ca
โœจ :: Month rate entity class
aiden30015 Jul 9, 2025
09c2b7f
โœจ :: My order entity class
aiden30015 Jul 9, 2025
571a761
โœจ :: Reservation order entity class
aiden30015 Jul 9, 2025
c23cc78
โœจ :: Order abstrac repository class
aiden30015 Jul 9, 2025
99e875c
โ™ป๏ธ :: ํด๋” ์ด๋ฆ„ ๋ณ€๊ฒฝ
aiden30015 Jul 9, 2025
dbc0f9e
โœจ :: Order usecase class
aiden30015 Jul 9, 2025
df80826
โœจ :: Order usecase impl class
aiden30015 Jul 9, 2025
c63cdfd
โœจ :: Exchange data source impl class
aiden30015 Jul 9, 2025
7969aec
โ™ป๏ธ :: Local ํด๋” ์ถ”๊ฐ€
aiden30015 Jul 9, 2025
6988eea
โœจ :: Order Entity class
aiden30015 Jul 9, 2025
d4cc4e1
โ™ป๏ธ :: Order Entity๋กœ ๋ณ€๊ฒฝ
aiden30015 Jul 9, 2025
f9a8a41
โ™ป๏ธ :: ํด๋ž˜์Šค๋ช… ๋ณ€๊ฒฝ
aiden30015 Jul 9, 2025
0f39a39
โœจ :: Order api class
aiden30015 Jul 9, 2025
c355982
โœจ :: Order data source
aiden30015 Jul 9, 2025
b2b1dca
โœจ :: Order data source impl class
aiden30015 Jul 9, 2025
83b78f7
โ™ป๏ธ :: Path์— ๋“ค์–ด๊ฐˆ marketCode ์ƒ์„ฑ์ž๋กœ ์ถ”๊ฐ€
aiden30015 Jul 9, 2025
9b50d34
โœจ :: Month order response mapper clas
aiden30015 Jul 10, 2025
fb607c9
โœจ :: Month rate response mapper class
aiden30015 Jul 10, 2025
3762a7e
โœจ :: My order response mapper class
aiden30015 Jul 10, 2025
9ee7a5c
โœ๏ธ :: ํŒŒ์ผ ๋ช… ์˜คํƒ€ ์ˆ˜์ •
aiden30015 Jul 10, 2025
d04d5aa
โ™ป๏ธ :: ๋ฐ˜ํ™˜ ๊ฐ’ ์ˆ˜์ •
aiden30015 Jul 10, 2025
48e1271
โœจ :: Order entity ์†์„ฑ ๊ฐ’ ์ถ”๊ฐ€
aiden30015 Jul 10, 2025
2c6a89a
โœจ :: Order request mapper class
aiden30015 Jul 10, 2025
672cc90
โœจ :: Order response mapper class
aiden30015 Jul 10, 2025
e9d5542
โœจ :: Order response entity class
aiden30015 Jul 10, 2025
76b21bf
โœจ :: Order response entity class
aiden30015 Jul 10, 2025
057dcf0
โ™ป๏ธ :: Entity ์ถ”๊ฐ€ ๋ฐ ํ•จ์ˆ˜ ์ถ”๊ฐ€
aiden30015 Jul 10, 2025
45574ba
โ™ป๏ธ :: MarketCode ์ƒ์„ฑ์ž๋กœ ์ถ”๊ฐ€
aiden30015 Jul 10, 2025
69e55a7
โœจ :: Reserve order mapper class
aiden30015 Jul 10, 2025
5cc58de
โœจ :: Order repository impl class
aiden30015 Jul 10, 2025
d9c1904
โ™ป๏ธ :: Quantity ์ƒ์„ฑ์ž ์ถ”๊ฐ€
aiden30015 Jul 10, 2025
e198d2c
โ™ป๏ธ :: ๋ช…์„ธ์„œ์— ๋งž๊ฒŒ ์ˆ˜์ •
aiden30015 Jul 10, 2025
c9a6820
โ™ป๏ธ :: ๋ช…์„ธ์„œ์— ๋งž๊ฒŒ ์ˆ˜์ •
aiden30015 Jul 10, 2025
5b45d60
โœจ :: Holding entity class
aiden30015 Jul 10, 2025
d6c1955
โœจ :: Holding repository class
aiden30015 Jul 10, 2025
f3a5385
โœจ :: Holding usecase impl class
aiden30015 Jul 10, 2025
c0528c2
โœจ :: Holding usecase class
aiden30015 Jul 10, 2025
7bf2f1f
๐Ÿ”ฅ :: Jsonkey ์–ด๋…ธํ…Œ์ด์…˜ ์‚ญ์ œ
aiden30015 Jul 10, 2025
2222186
โœจ :: My holding response dto
aiden30015 Jul 10, 2025
e31fe5c
โœจ :: Holding data source impl class
aiden30015 Jul 10, 2025
78cfedd
โœจ :: Holding data source class
aiden30015 Jul 10, 2025
657e352
โœจ :: Holding api
aiden30015 Jul 10, 2025
bd8b141
โ™ป๏ธ :: ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ
aiden30015 Jul 10, 2025
5bb7c8f
โœจ :: Holding repository impl class
aiden30015 Jul 10, 2025
2af34d1
โœจ :: My holding response mapper class
aiden30015 Jul 10, 2025
0df037f
โ™ป๏ธ :: ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ
aiden30015 Jul 10, 2025
bf31cf0
โœจ :: Market data source impl class
aiden30015 Jul 10, 2025
74de55e
โœจ :: Market data source class
aiden30015 Jul 10, 2025
a823432
โœจ :: Market request dto class
aiden30015 Jul 10, 2025
5fdb528
โœจ :: Market search request dto class
aiden30015 Jul 10, 2025
e18c6e2
โœจ :: Market response dto class
aiden30015 Jul 10, 2025
2b1a6ed
โœจ :: Market response mapper class
aiden30015 Jul 10, 2025
32dcb66
โœจ :: Market repository impl class
aiden30015 Jul 10, 2025
6a44552
โœจ :: Market api class
aiden30015 Jul 10, 2025
f40f391
โœจ :: Market type enum class
aiden30015 Jul 10, 2025
de8d069
โœจ :: Market entity class
aiden30015 Jul 10, 2025
caf4d45
โœจ :: Market repository class
aiden30015 Jul 10, 2025
ce971dd
โœจ :: Market usecase impl class
aiden30015 Jul 10, 2025
df45920
โœจ :: Market usecase class
aiden30015 Jul 10, 2025
09c8a4b
โœจ :: ๋งˆ์ผ“ ์ƒํ•˜ํ–ฅ ์˜ˆ์ธก api ์ถ”๊ฐ€
aiden30015 Jul 10, 2025
b034f09
โ™ป๏ธ :: ๋ช…์„ธ์„œ์— ๋งž๊ฒŒ List๋กœ ๋ฐ›์•„์˜ค๊ฒŒ ์ˆ˜์ •
aiden30015 Jul 10, 2025
90b6090
Merge branch 'develop' of https://github.com/Jusicool-Ver-2-0/Jusicooโ€ฆ
aiden30015 Jul 10, 2025
7bac632
๐Ÿ”ฅ :: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์‚ญ์ œ
aiden30015 Jul 10, 2025
2e2753e
โœ๏ธ :: ํด๋”๋ช… ์˜คํƒ€ ์ˆ˜์ •
aiden30015 Jul 11, 2025
16cdf20
โœ๏ธ :: ํด๋”๋ช… ์˜คํƒ€ ์ˆ˜์ •
aiden30015 Jul 11, 2025
5978d45
โœจ :: Community api ์ถ”๊ฐ€
aiden30015 Jul 11, 2025
1c88a47
๐Ÿ› :: Ci ์˜ค๋ฅ˜ ์ˆ˜์ •
aiden30015 Jul 11, 2025
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
7 changes: 7 additions & 0 deletions lib/data/exchange/data_sources/exchange_data_source.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import 'package:jusicool_ios/data/exchange/dto/remote/request/exchange_request_dto.dart';

abstract class ExchangeDataSource {
Future<void> exchangeKRW(ExchangeRequestDto body);

Future<void> exchangeUSD(ExchangeRequestDto body);
}
21 changes: 21 additions & 0 deletions lib/data/exchange/data_sources/exchange_data_source_impl.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import 'package:jusicool_ios/data/exchange/data_sources/exchange_data_source.dart';
import 'package:jusicool_ios/data/exchange/dto/remote/request/exchange_request_dto.dart';
import 'package:jusicool_ios/data/exchange/serivice/exchange_api.dart';

class ExchangeDataSourceImpl extends ExchangeDataSource {

final ExchangeApi _exchangeApi;

ExchangeDataSourceImpl(this._exchangeApi);

@override
Future<void> exchangeKRW(ExchangeRequestDto body) async {
return await _exchangeApi.exchangeKRW(body);
}

@override
Future<void> exchangeUSD(ExchangeRequestDto body) async {
return await _exchangeApi.exchangeUSD(body);
}

}
Empty file.
Empty file.
15 changes: 15 additions & 0 deletions lib/data/exchange/dto/remote/request/exchange_request_dto.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import 'package:freezed_annotation/freezed_annotation.dart';

part 'exchange_request_dto.g.dart';

part 'exchange_request_dto.freezed.dart';

@freezed
abstract class ExchangeRequestDto with _$ExchangeRequestDto {
factory ExchangeRequestDto({
required int amount
}) = _ExchangeRequestDto;

factory ExchangeRequestDto.fromJson(Map<String,dynamic> json) =>
_$ExchangeRequestDtoFromJson(json);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import 'package:jusicool_ios/data/exchange/dto/remote/request/exchange_request_dto.dart';
import 'package:jusicool_ios/domain/exchange/entities/exchange_entity.dart';

class ExchangeRequestMapper {
static ExchangeRequestDto toDto(ExchangeEntity entity) =>
ExchangeRequestDto(amount: entity.amount);
static ExchangeEntity toEntity(ExchangeRequestDto dto) =>
ExchangeEntity(amount: dto.amount);
}
24 changes: 24 additions & 0 deletions lib/data/exchange/repositories/exchange_repository_impl.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import 'package:jusicool_ios/data/exchange/data_sources/exchange_data_source.dart';
import 'package:jusicool_ios/data/exchange/dto/remote/request/exchange_request_dto.dart';
import 'package:jusicool_ios/data/exchange/mappers/remote/request/exchange_request_mapper.dart';
import 'package:jusicool_ios/domain/exchange/entities/exchange_entity.dart';
import 'package:jusicool_ios/domain/exchange/repositories/exchange_repository.dart';

class ExchangeRepositoryImpl extends ExchangeRepository {
final ExchangeDataSource _exchangeDataSource;

ExchangeRepositoryImpl(this._exchangeDataSource);

@override
Future<void> exchangeKRW(ExchangeEntity body) async {
final ExchangeRequestDto request = ExchangeRequestMapper.toDto(body);
return await _exchangeDataSource.exchangeKRW(request);
}

@override
Future<void> exchangeUSD(ExchangeEntity body) async {
final ExchangeRequestDto request = ExchangeRequestMapper.toDto(body);
return await _exchangeDataSource.exchangeUSD(request);
}

}
17 changes: 17 additions & 0 deletions lib/data/exchange/serivice/exchange_api.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:dio/dio.dart';
import 'package:jusicool_ios/data/exchange/dto/remote/request/exchange_request_dto.dart';
import 'package:retrofit/http.dart';

part 'exchange_api.g.dart';

@RestApi()
abstract class ExchangeApi {

factory ExchangeApi(Dio dio, {String baseUrl}) = _ExchangeApi;

@POST('/exchange/KRW')
Future<void> exchangeKRW(@Body() ExchangeRequestDto body);

@POST('/exchange/USD')
Future<void> exchangeUSD(@Body() ExchangeRequestDto body);
}
5 changes: 5 additions & 0 deletions lib/data/holding/data_source/holding_data_source.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import 'package:jusicool_ios/data/holding/dto/remote/response/my_holding_response_dto.dart';

abstract class HoldingDataSource {
Future<MyHoldingResponseDto> fetchMyHolding();
}
15 changes: 15 additions & 0 deletions lib/data/holding/data_source/holding_data_source_impl.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import 'package:jusicool_ios/data/holding/data_source/holding_data_source.dart';
import 'package:jusicool_ios/data/holding/dto/remote/response/my_holding_response_dto.dart';
import 'package:jusicool_ios/data/holding/service/holding_api.dart';

class HoldingDataSourceImpl extends HoldingDataSource {

final HoldingApi _holdingApi;

HoldingDataSourceImpl(this._holdingApi);

@override
Future<MyHoldingResponseDto> fetchMyHolding() async {
return await _holdingApi.fetchMyHolding();
}
}
31 changes: 31 additions & 0 deletions lib/data/holding/dto/remote/response/my_holding_response_dto.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import 'package:freezed_annotation/freezed_annotation.dart';

part 'my_holding_response_dto.g.dart';
part 'my_holding_response_dto.freezed.dart';

@freezed
abstract class MyHoldingResponseDto with _$MyHoldingResponseDto {
factory MyHoldingResponseDto({
required int id,
required MyMarketDto market,
required int quantity,
required int price,
}) = _MyHoldingResponseDto;

factory MyHoldingResponseDto.fromJson(Map<String,dynamic> json) =>
_$MyHoldingResponseDtoFromJson(json);
}

@freezed
abstract class MyMarketDto with _$MyMarketDto {
factory MyMarketDto({
required int id,
@JsonKey(name: 'korean_name') required String koreanName,
@JsonKey(name: 'english_name') required String englishName,
required String market,
required String type,
}) = _MyMarketDto;

factory MyMarketDto.fromJson(Map<String,dynamic> json) =>
_$MyMarketDtoFromJson(json);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import 'package:jusicool_ios/data/holding/dto/remote/response/my_holding_response_dto.dart';
import 'package:jusicool_ios/domain/holding/entities/my_holding_entity.dart';

class MyHoldingResponseMapper {
static MyHoldingResponseDto toDto(MyHoldingEntity entity) =>
MyHoldingResponseDto(
id: entity.id,
market: entity.market.map((e) => MyMarketDto(
id: e.id,
koreanName: e.koreanName,
englishName: e.englishName,
market: e.market,
type: e.type,
)),
quantity: entity.quantity,
price: entity.price,
);
static MyHoldingEntity toEntity(MyHoldingResponseDto dto) =>
MyHoldingEntity(
id: dto.id,
market: dto.market.map((e) => MarketEntity(
id: e.id,
koreanName: e.koreanName,
englishName: e.englishName,
market: e.market,
type: e.type,
)),
quantity: dto.quantity,
price: dto.price,
);
}
17 changes: 17 additions & 0 deletions lib/data/holding/repositories/holding_repository_impl.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:jusicool_ios/data/holding/data_source/holding_data_source.dart';
import 'package:jusicool_ios/data/holding/mappers/remote/response/my_holding_response_mapper.dart';
import 'package:jusicool_ios/domain/holding/entities/my_holding_entity.dart';
import 'package:jusicool_ios/domain/holding/repositories/holding_repository.dart';

class HoldingRepositoryImpl extends HoldingRepository {

final HoldingDataSource _holdingDataSource;
HoldingRepositoryImpl(this._holdingDataSource);

@override
Future<MyHoldingEntity> fetchMyholding() async {
final response = await _holdingDataSource.fetchMyHolding();
return MyHoldingResponseMapper.toEntity(response);
}

}
15 changes: 15 additions & 0 deletions lib/data/holding/service/holding_api.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import 'package:dio/dio.dart';
import 'package:jusicool_ios/data/holding/dto/remote/response/my_holding_response_dto.dart';
import 'package:retrofit/http.dart';

part 'holding_api.g.dart';

@RestApi()
abstract class HoldingApi {

factory HoldingApi(Dio dio,{String baseUrl}) = _HoldingApi;

@GET('/holding/my')
Future<MyHoldingResponseDto> fetchMyHolding();

}
7 changes: 7 additions & 0 deletions lib/data/market/data_source/market_data_source.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import 'package:jusicool_ios/data/market/dto/remote/response/market_response_dto.dart';
import 'package:jusicool_ios/data/market/dto/remote/request/market_request_dto.dart';

abstract class MarketDataSource {
Future<List<MarketResponseDto>> fetchMarkets(MarketRequestDto request);
Future<List<MarketResponseDto>> searchMarkets(String query);
}
19 changes: 19 additions & 0 deletions lib/data/market/data_source/market_data_source_impl.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import 'package:jusicool_ios/data/market/data_source/market_data_source.dart';
import 'package:jusicool_ios/data/market/dto/remote/response/market_response_dto.dart';
import 'package:jusicool_ios/data/market/dto/remote/request/market_request_dto.dart';
import 'package:jusicool_ios/data/market/service/market_api.dart';

class MarketDataSourceImpl extends MarketDataSource {
final MarketApi _api;
MarketDataSourceImpl(this._api);

@override
Future<List<MarketResponseDto>> fetchMarkets(MarketRequestDto request) async {
return await _api.fetchMarkets(request);
}

@override
Future<List<MarketResponseDto>> searchMarkets(String query) async {
return await _api.searchMarkets(query);
}
}
13 changes: 13 additions & 0 deletions lib/data/market/dto/remote/request/market_request_dto.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'package:freezed_annotation/freezed_annotation.dart';

part 'market_request_dto.freezed.dart';
part 'market_request_dto.g.dart';

@freezed
abstract class MarketRequestDto with _$MarketRequestDto {
const factory MarketRequestDto({
required String type,
}) = _MarketRequestDto;

factory MarketRequestDto.fromJson(Map<String, dynamic> json) => _$MarketRequestDtoFromJson(json);
}
13 changes: 13 additions & 0 deletions lib/data/market/dto/remote/request/market_search_request_dto.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'package:freezed_annotation/freezed_annotation.dart';

part 'market_search_request_dto.freezed.dart';
part 'market_search_request_dto.g.dart';

@freezed
abstract class MarketSearchRequestDto with _$MarketSearchRequestDto {
const factory MarketSearchRequestDto({
required String query,
}) = _MarketSearchRequestDto;

factory MarketSearchRequestDto.fromJson(Map<String, dynamic> json) => _$MarketSearchRequestDtoFromJson(json);
}
17 changes: 17 additions & 0 deletions lib/data/market/dto/remote/response/market_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 'market_response_dto.freezed.dart';
part 'market_response_dto.g.dart';

@freezed
abstract class MarketResponseDto with _$MarketResponseDto {
const factory MarketResponseDto({
required int id,
@JsonKey(name: 'korean_name') required String koreanName,
@JsonKey(name: 'english_name') required String englishName,
required String market,
@JsonKey(name: 'market_type') required String marketType,
}) = _MarketResponseDto;

factory MarketResponseDto.fromJson(Map<String, dynamic> json) => _$MarketResponseDtoFromJson(json);
}
24 changes: 24 additions & 0 deletions lib/data/market/mapper/remote/response/market_response_mapper.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import 'package:jusicool_ios/data/market/dto/remote/response/market_response_dto.dart';
import 'package:jusicool_ios/domain/market/entities/market_entity.dart';
import 'package:jusicool_ios/domain/enum/share/market/market_type.dart';

class MarketResponseMapper {
static MarketEntity toEntity(MarketResponseDto dto) => MarketEntity(
id: dto.id,
koreanName: dto.koreanName,
englishName: dto.englishName,
market: dto.market,
marketType: _marketTypeFromString(dto.marketType),
);
}

MarketType _marketTypeFromString(String value) {
switch (value) {
case 'CRYPTO':
return MarketType.crypto();
case 'STOCK':
return MarketType.stock();
default:
throw Exception('Unknown MarketType: $value');
}
}
23 changes: 23 additions & 0 deletions lib/data/market/repositories/market_repository_impl.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import 'package:jusicool_ios/domain/market/entities/market_entity.dart';
import 'package:jusicool_ios/domain/market/repositories/market_repository.dart';
import 'package:jusicool_ios/data/market/data_source/market_data_source.dart';
import 'package:jusicool_ios/data/market/dto/remote/request/market_request_dto.dart';
import 'package:jusicool_ios/data/market/mapper/remote/response/market_response_mapper.dart';

class MarketRepositoryImpl extends MarketRepository {
final MarketDataSource _dataSource;
MarketRepositoryImpl(this._dataSource);

@override
Future<List<MarketEntity>> fetchMarkets(String type) async {
final request = MarketRequestDto(type: type);
final response = await _dataSource.fetchMarkets(request);
return response.map((e) => MarketResponseMapper.toEntity(e)).toList();
}

@override
Future<List<MarketEntity>> searchMarkets(String query) async {
final response = await _dataSource.searchMarkets(query);
return response.map((e) => MarketResponseMapper.toEntity(e)).toList();
}
}
18 changes: 18 additions & 0 deletions lib/data/market/service/market_api.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import 'package:dio/dio.dart';
import 'package:retrofit/http.dart';
import 'package:jusicool_ios/data/market/dto/remote/response/market_response_dto.dart';
import 'package:jusicool_ios/data/market/dto/remote/request/market_request_dto.dart';
import 'package:jusicool_ios/data/market/dto/remote/request/market_search_request_dto.dart';

part 'market_api.g.dart';

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

@GET('/market/list')
Future<List<MarketResponseDto>> fetchMarkets(@Body() MarketRequestDto request);

@GET('/market/search')
Future<List<MarketResponseDto>> searchMarkets(@Query('query') String query);
}
Loading