Skip to content

Commit

Permalink
Merge pull request #136 from 4Ailen/feat/#123_marketAPI
Browse files Browse the repository at this point in the history
Feat/#123 market api
  • Loading branch information
KIM-JUHYEON-79 authored Sep 7, 2023
2 parents c5ea7a4 + 0dda931 commit a9356b4
Show file tree
Hide file tree
Showing 9 changed files with 177 additions and 40 deletions.
3 changes: 2 additions & 1 deletion assets/translations/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,7 @@
"Almost_New": "ALMOST_NEW",
"Slight_Defect": "SLIGHT_DEFECT",
"Used": "USED",
"sale": "SELL"
"sale": "SELL",
"sold-out":"SOLD_OUT"

}
3 changes: 2 additions & 1 deletion assets/translations/ko-KR.json
Original file line number Diff line number Diff line change
Expand Up @@ -309,5 +309,6 @@
"Almost_New": "거의 새 것",
"Slight_Defect": "약간의 하자",
"Used": "사용감 있음",
"sale": "판매중"
"sale": "판매중",
"sold-out":"판매완료"
}
34 changes: 19 additions & 15 deletions lib/apis/apis.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1756,41 +1756,45 @@ class APIs {

/* 특정 판매글 찜 등록*/
static Future<int> marketbookmark(int articleId) async {
var url = 'http://3.34.2.246:8080/api/v2/community-articles/${articleId}/bookmarks';
var url = 'http://3.34.2.246:8080/api/v2/market-articles/${articleId}/bookmarks';

//토큰 읽어오기
// 토큰 읽어오기
var jwtToken = await storage.read(key: 'token');

//accessToken만 보내기
// accessToken만 보내기
jwtToken = json.decode(jwtToken!)['data']['accessToken'];

var response = await http.post(Uri.parse(url),
var response = await http.post(
Uri.parse(url),
headers: {
'Authorization': 'Bearer $jwtToken',
'Content-Type': 'application/json'},
'Content-Type': 'application/json',
},
);

//success
// success
var jsonResponse = json.decode(utf8.decode(response.bodyBytes));
print(jsonResponse);
if (response.statusCode == 200) {
print(json.decode(utf8.decode(response.bodyBytes)));
return json.decode(utf8.decode(response.bodyBytes))['data']['likeCount'];
//fail
return jsonResponse['data']['marketArticleBookmarkCount'];
} else {
print(json.decode(utf8.decode(response.bodyBytes)));
if(json.decode(utf8.decode(response.bodyBytes))['code'] == 'AT-C-002'){
var errorCode = jsonResponse['code'];

if (errorCode == 'AT-C-002') {
print('액세스 토큰 만료');
throw 'AT-C-002';
} else if(json.decode(utf8.decode(response.bodyBytes))['code'] == 'AT-C-007'){
} else if (errorCode == 'AT-C-007') {
print('로그아웃된 토큰');
throw 'AT-C-007';
}else{

} else {
print('기타 에러: $errorCode');
throw '기타 에러: $errorCode'; // 기타 에러 처리
}
return -1;
}
}



/*상품 판매글 댓글 전체 조회*/
static Future<List<MarketComment>> getMarketArticleComments(int marketArticleId) async {
try {
Expand Down
4 changes: 3 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:aliens/providers/bookmarks_provider.dart';
import 'package:aliens/providers/comment_provider.dart';
import 'package:aliens/providers/market_comment_provider.dart';
import 'package:aliens/repository/board_provider.dart';
Expand Down Expand Up @@ -95,7 +96,8 @@ void main() async {
providers: [
ChangeNotifierProvider(create: (_) => BoardProvider()),
ChangeNotifierProvider(create: (_) => CommentProvider()),
ChangeNotifierProvider(create: (_) => MarketCommentProvider())
ChangeNotifierProvider(create: (_) => MarketCommentProvider()),
ChangeNotifierProvider(create: (_) => BookmarksProvider())
],
child: EasyLocalization(
path: 'assets/translations',
Expand Down
48 changes: 48 additions & 0 deletions lib/providers/bookmarks_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import 'package:aliens/mockdatas/board_mockdata.dart';
import 'package:aliens/models/board_model.dart';
import 'package:aliens/models/market_articles.dart';
import 'package:flutter/widgets.dart';
import 'package:provider/provider.dart';

import '../apis/apis.dart';
import '../models/comment_model.dart';
import '../models/market_comment.dart';

class BookmarksProvider with ChangeNotifier {
List<MarketBoard>? articleList;
bool loading = false;
List<MarketBoard>? bookmarksList;
List<int>? marketArticleBookmarkCount;


addBookmarks(int articleId, int index) async {
loading = true;
try {
//좋아요 요청
print('이건되나');
marketArticleBookmarkCount![index] = await APIs.marketbookmark(articleId);
print('이건???');

} catch (e) {
if (e == "AT-C-002") {
await APIs.getAccessToken();
//좋아요 요청
marketArticleBookmarkCount![index] = await APIs.marketbookmark(articleId);

} else {
}
}
loading = false;
notifyListeners();
getbookmarksCounts();
print('이것도 될라나;;');
}

getbookmarksCounts() async {
articleList = await APIs.getMarketArticles();
marketArticleBookmarkCount = articleList!.map((marketboard) => marketboard.marketArticleBookmarkCount ?? 0).toList();
//print(marketboard.marketArticleBookmarkCount ?? 0);
// print('북마크개수:${marketArticleBookmarkCount}');
}

}
4 changes: 2 additions & 2 deletions lib/views/components/board_drawer_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ class _BoardDrawerWidgetState extends State<BoardDrawerWidget> {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MarketBoardPage(screenArguments: widget.screenArguments, marketBoard: widget.marketBoard)),
builder: (context) => MarketBoardPage(screenArguments: widget.screenArguments, marketBoard: widget.marketBoard, index:0,)),

);
}
Expand All @@ -460,7 +460,7 @@ class _BoardDrawerWidgetState extends State<BoardDrawerWidget> {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MarketBoardPage(screenArguments: widget.screenArguments, marketBoard: widget.marketBoard,)),
builder: (context) => MarketBoardPage(screenArguments: widget.screenArguments, marketBoard: widget.marketBoard, index:0,)),
);
}
},
Expand Down
2 changes: 1 addition & 1 deletion lib/views/components/total_article_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ class _TotalArticleWidgetState extends State<TotalArticleWidget>{
//받아온 후
WidgetsBinding.instance!.addPostFrameCallback((_) {Navigator.push(
context,
MaterialPageRoute(builder: (context) => MarketDetailPage(screenArguments: widget.screenArguments, marketBoard: data, productStatus: '',)),
MaterialPageRoute(builder: (context) => MarketDetailPage(screenArguments: widget.screenArguments, marketBoard: data, productStatus: '', StatusText: '', index: widget.index,)),
);
});
return Container(
Expand Down
62 changes: 55 additions & 7 deletions lib/views/pages/board/market_board_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,19 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import '../../../models/market_articles.dart';
import '../../../models/message_model.dart';
import '../../../providers/bookmarks_provider.dart';
import '../../components/board_drawer_widget.dart';


class MarketBoardPage extends StatefulWidget {
const MarketBoardPage({super.key, required this.screenArguments, required this.marketBoard,});
const MarketBoardPage({super.key, required this.screenArguments, required this.marketBoard, required this.index,});
final ScreenArguments screenArguments;
final MarketBoard? marketBoard;
final int index;

//final MemberDetails memberDetails;


Expand All @@ -43,6 +47,13 @@ class _MarketBoardPageState extends State<MarketBoardPage> {
void initState() {
super.initState();
_fetchMarketArticles();

final bookmarkProvider = Provider.of<BookmarksProvider>(context, listen: false);
print(10);
bookmarkProvider.getbookmarksCounts();
print(11);
print('북마크될라나: ${bookmarkProvider.marketArticleBookmarkCount?[widget.index]}');
print('북마크: ${bookmarkProvider.marketArticleBookmarkCount?[widget.index] == 0}');
}

Future<void> _fetchMarketArticles() async {
Expand All @@ -55,8 +66,16 @@ class _MarketBoardPageState extends State<MarketBoardPage> {
// print('createdAt: ${marketBoard.createdAt}');
// print('status: ${marketBoard.marketArticleStatus}');
// print('productstatus: ${marketBoard.productStatus}');
// print('comment:${marketBoard.commentsCount}');

}
/*final bookmarkProvider = Provider.of<BookmarksProvider>(context, listen: false);
print(10);
bookmarkProvider.getbookmarksCounts();
print(11);
print('북마크될라나: ${bookmarkProvider.marketArticleBookmarkCount?[widget.index]}');
print('북마크: ${bookmarkProvider.marketArticleBookmarkCount?[widget.index] == 0}');
print('북마크개수:${bookmarkProvider.marketArticleBookmarkCount}');*/

});
} catch (error) {
Expand Down Expand Up @@ -190,12 +209,14 @@ class _MarketBoardPageState extends State<MarketBoardPage> {


Widget _contentWidget() {
final bookmarkProvider = Provider.of<BookmarksProvider>(context);

return ListView.separated(

itemBuilder: (BuildContext context, int index) {
MarketBoard marketBoard = marketBoardList[index];
String productStatusText = getProductStatusText(marketBoard.productStatus);
String StatusText = getStatusText(marketBoard.marketArticleStatus);

return InkWell(
onTap: () {
Expand All @@ -206,7 +227,8 @@ class _MarketBoardPageState extends State<MarketBoardPage> {
MarketDetailPage(
screenArguments: widget.screenArguments,
marketBoard: marketBoard,
productStatus: getProductStatusText(marketBoard.productStatus),
productStatus: getProductStatusText(marketBoard.productStatus),
StatusText: getStatusText(marketBoard.marketArticleStatus), index: index,
// memberDetails: widget.memberDetails,
),
),
Expand Down Expand Up @@ -262,9 +284,9 @@ class _MarketBoardPageState extends State<MarketBoardPage> {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'[${marketBoard.marketArticleStatus ?? ""}]', // 상태 정보 사용
'[$StatusText]', // 상태 정보 사용
style: TextStyle(
color: Color(0xff616161),
color: marketBoard.marketArticleStatus == '판매 중'?Color(0xff616161): Color(0xffFF375B),
fontSize: 16.spMin,
fontWeight: FontWeight.w600,
),
Expand Down Expand Up @@ -321,7 +343,7 @@ class _MarketBoardPageState extends State<MarketBoardPage> {
),
SizedBox(height: 5.h),
Text(
'${marketBoard.price.toString() ?? 0}원', // 가격 정보 사용
'${marketBoard.price.toString() ?? ""}원', // 가격 정보 사용
style: TextStyle(
fontSize: 16.spMin, fontWeight: FontWeight.w700),
),
Expand All @@ -334,13 +356,23 @@ class _MarketBoardPageState extends State<MarketBoardPage> {
height: 16.r,
color: Color(0xffc1c1c1),
),
Text(

bookmarkProvider.marketArticleBookmarkCount?[index] == 0
? Text('0',style: TextStyle(fontSize: 16.spMin,color: Color(0xffc1c1c1)))
: Text('${bookmarkProvider.marketArticleBookmarkCount![index]}',
style: TextStyle(
fontSize: 14.spMin,
color: Color(0xffc1c1c1),
)
),

/*Text(
' ${marketBoard.marketArticleBookmarkCount ?? 0} ',
style: TextStyle(
fontSize: 14.spMin,
color: Color(0xffc1c1c1),
),
),
),*/
SvgPicture.asset(
'assets/icon/icon_comment.svg',
width: 16.r,
Expand Down Expand Up @@ -397,3 +429,19 @@ String getProductStatusText(String? productStatus) {
return '';
}
}

String getStatusText(String? marketArticleStatus){
List<String> Status = [
'sale'.tr(),
'sold-out'.tr(),
];

switch (marketArticleStatus) {
case '판매 중':
return Status[0];
case '판매 완료':
return Status[1];
default:
return '';
}
}
Loading

0 comments on commit a9356b4

Please sign in to comment.