2024-09-02 ほぼOK
This commit is contained in:
@ -9,6 +9,7 @@ import 'package:gifunavi/model/team.dart';
|
||||
import 'package:gifunavi/model/category.dart';
|
||||
import 'package:gifunavi/model/user.dart';
|
||||
import 'package:gifunavi/pages/index/index_controller.dart';
|
||||
import '../routes/app_pages.dart';
|
||||
import '../utils/const.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
@ -22,11 +23,15 @@ class ApiService extends GetxService{
|
||||
|
||||
Future<ApiService> init() async {
|
||||
try {
|
||||
//if (!Get.isRegistered<IndexController>()) {
|
||||
// Get.put(IndexController(apiService: Get.find<ApiService>()));
|
||||
//}
|
||||
|
||||
// ここで必要な初期化処理を行う
|
||||
serverUrl = ConstValues.currentServer();
|
||||
baseUrl = '$serverUrl/api';
|
||||
//await Future.delayed(Duration(seconds: 2)); // 仮の遅延(実際の初期化処理に置き換えてください)
|
||||
print('ApiService initialized successfully');
|
||||
print('ApiService initialized successfully . baseUrl = $baseUrl');
|
||||
return this;
|
||||
} catch(e) {
|
||||
print('Error in ApiService initialization: $e');
|
||||
@ -47,11 +52,13 @@ class ApiService extends GetxService{
|
||||
注意点として、API のレスポンス形式が変更された場合や、新しいフィールドが追加された場合は、このメソッドも更新する必要があります。そのため、API の変更とクライアントサイドのコードの同期を保つことが重要です。
|
||||
*/
|
||||
|
||||
String getToken()
|
||||
Future<String> getToken2 () async
|
||||
{
|
||||
// IndexControllerの初期化を待つ
|
||||
if (!Get.isRegistered<IndexController>()) {
|
||||
Get.find<IndexController>();
|
||||
}
|
||||
final indexController = Get.find<IndexController>();
|
||||
|
||||
if (indexController.currentUser.isNotEmpty) {
|
||||
token = indexController.currentUser[0]['token'] ?? '';
|
||||
print("Get token = $token");
|
||||
@ -61,11 +68,61 @@ class ApiService extends GetxService{
|
||||
return token;
|
||||
}
|
||||
|
||||
String getToken()
|
||||
{
|
||||
// IndexControllerの初期化を待つ
|
||||
if (!Get.isRegistered<IndexController>()) {
|
||||
Get.find<IndexController>();
|
||||
}
|
||||
final indexController = Get.find<IndexController>();
|
||||
if (indexController.currentUser.isNotEmpty) {
|
||||
token = indexController.currentUser[0]['token'] ?? '';
|
||||
print("Get token = $token");
|
||||
}else{
|
||||
token = "";
|
||||
}
|
||||
return token;
|
||||
}
|
||||
|
||||
Future<dynamic> _handleRequest(Future<http.Response> Function() request) async {
|
||||
try {
|
||||
final response = await request();
|
||||
if (response.statusCode == 200) {
|
||||
return json.decode(utf8.decode(response.bodyBytes));
|
||||
} else if (response.statusCode == 401) {
|
||||
await _handleUnauthorized();
|
||||
throw Exception('Authentication failed. Please log in again.');
|
||||
} else {
|
||||
throw Exception('Request failed with status: ${response.statusCode}');
|
||||
}
|
||||
} catch (e) {
|
||||
print('API request error: $e');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _handleUnauthorized() async {
|
||||
// トークンをクリアし、ユーザーをログアウトさせる
|
||||
final indexController = Get.find<IndexController>();
|
||||
await indexController.logout();
|
||||
Get.offAllNamed(AppPages.LOGIN);
|
||||
}
|
||||
|
||||
Future<List<Team>> getTeams() async {
|
||||
final token = await getToken2();
|
||||
return _handleRequest(() => http.get(
|
||||
Uri.parse('$baseUrl/teams/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
)).then((data) => (data as List).map((json) => Team.fromJson(json)).toList());
|
||||
}
|
||||
|
||||
|
||||
Future<List<Team>> getTeams_old() async {
|
||||
init();
|
||||
getToken();
|
||||
final token = await getToken2();
|
||||
|
||||
try {
|
||||
|
||||
final response = await http.get(
|
||||
Uri.parse('$baseUrl/teams/'),
|
||||
headers: {'Authorization': 'Token $token',"Content-Type": "application/json; charset=UTF-8"},
|
||||
@ -136,6 +193,14 @@ class ApiService extends GetxService{
|
||||
}
|
||||
|
||||
Future<NewCategory> getZekkenNumber(int categoryId) async {
|
||||
final token = await getToken2();
|
||||
return _handleRequest(() => http.post(
|
||||
Uri.parse('$baseUrl/categories-viewset/$categoryId/get_zekken_number/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
)).then((data) => NewCategory.fromJson(data));
|
||||
}
|
||||
|
||||
Future<NewCategory> getZekkenNumber_old(int categoryId) async {
|
||||
try {
|
||||
final response = await http.post(
|
||||
Uri.parse('$baseUrl/categories-viewset/$categoryId/get_zekken_number/'),
|
||||
@ -157,7 +222,7 @@ class ApiService extends GetxService{
|
||||
|
||||
Future<User> getCurrentUser() async {
|
||||
init();
|
||||
getToken();
|
||||
final token = getToken();
|
||||
|
||||
try {
|
||||
final response = await http.get(
|
||||
@ -174,6 +239,13 @@ class ApiService extends GetxService{
|
||||
//_printDataComparison(jsonData, User);
|
||||
|
||||
return User.fromJson(jsonData);
|
||||
} else if (response.statusCode == 401) {
|
||||
// トークンが無効な場合、ログアウトしてログインページにリダイレクト
|
||||
await Get.find<IndexController>().logout();
|
||||
//indexController.logout();
|
||||
Get.offAllNamed(AppPages.LOGIN);
|
||||
throw Exception('Authentication failed. Please log in again.');
|
||||
|
||||
} else {
|
||||
throw Exception('Failed to get current user. Status code: ${response.statusCode}');
|
||||
}
|
||||
@ -244,6 +316,15 @@ class ApiService extends GetxService{
|
||||
}
|
||||
|
||||
Future<Team> createTeam(String teamName, int categoryId) async {
|
||||
final token = await getToken2();
|
||||
return _handleRequest(() => http.post(
|
||||
Uri.parse('$baseUrl/teams/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
body: json.encode({'team_name': teamName, 'category': categoryId}),
|
||||
)).then((data) => Team.fromJson(data));
|
||||
}
|
||||
|
||||
Future<Team> createTeam_old(String teamName, int categoryId) async {
|
||||
init();
|
||||
getToken();
|
||||
|
||||
@ -268,6 +349,15 @@ class ApiService extends GetxService{
|
||||
}
|
||||
|
||||
Future<Team> updateTeam(int teamId, String teamName, int categoryId) async {
|
||||
final token = await getToken2();
|
||||
return _handleRequest(() => http.put(
|
||||
Uri.parse('$baseUrl/teams/$teamId/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
body: json.encode({'team_name': teamName, 'category': categoryId}),
|
||||
)).then((data) => Team.fromJson(data));
|
||||
}
|
||||
|
||||
Future<Team> updateTeam_old(int teamId, String teamName, int categoryId) async {
|
||||
init();
|
||||
getToken();
|
||||
|
||||
@ -293,6 +383,14 @@ class ApiService extends GetxService{
|
||||
}
|
||||
|
||||
Future<void> deleteTeam(int teamId) async {
|
||||
final token = await getToken2();
|
||||
await _handleRequest(() => http.delete(
|
||||
Uri.parse('$baseUrl/teams/$teamId/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
));
|
||||
}
|
||||
|
||||
Future<void> deleteTeamold_(int teamId) async {
|
||||
init();
|
||||
getToken();
|
||||
|
||||
@ -311,6 +409,14 @@ class ApiService extends GetxService{
|
||||
}
|
||||
|
||||
Future<List<User>> getTeamMembers(int teamId) async {
|
||||
final token = await getToken2();
|
||||
return _handleRequest(() => http.get(
|
||||
Uri.parse('$baseUrl/teams/$teamId/members/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
)).then((data) => (data as List).map((json) => User.fromJson(json)).toList());
|
||||
}
|
||||
|
||||
Future<List<User>> getTeamMembers_old(int teamId) async {
|
||||
init();
|
||||
getToken();
|
||||
|
||||
@ -330,7 +436,23 @@ class ApiService extends GetxService{
|
||||
}
|
||||
}
|
||||
|
||||
Future<User> createTeamMember(int teamId, String? email, String? firstname, String? lastname, DateTime? dateOfBirth,bool? female) async {
|
||||
Future<User> createTeamMember(int teamId, String? email, String? firstname, String? lastname, DateTime? dateOfBirth, bool? female) async {
|
||||
final token = await getToken2();
|
||||
String? formattedDateOfBirth = dateOfBirth != null ? DateFormat('yyyy-MM-dd').format(dateOfBirth) : null;
|
||||
return _handleRequest(() => http.post(
|
||||
Uri.parse('$baseUrl/teams/$teamId/members/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
body: json.encode({
|
||||
'email': email,
|
||||
'firstname': firstname,
|
||||
'lastname': lastname,
|
||||
'date_of_birth': formattedDateOfBirth,
|
||||
'female': female,
|
||||
}),
|
||||
)).then((data) => User.fromJson(data));
|
||||
}
|
||||
|
||||
Future<User> createTeamMember_old(int teamId, String? email, String? firstname, String? lastname, DateTime? dateOfBirth,bool? female) async {
|
||||
init();
|
||||
getToken();
|
||||
|
||||
@ -370,7 +492,22 @@ class ApiService extends GetxService{
|
||||
}
|
||||
}
|
||||
|
||||
Future<User> updateTeamMember(int teamId,int? memberId, String firstname, String lastname, DateTime? dateOfBirth,bool? female) async {
|
||||
Future<User> updateTeamMember(int teamId, int? memberId, String firstname, String lastname, DateTime? dateOfBirth, bool? female) async {
|
||||
final token = await getToken2();
|
||||
String? formattedDateOfBirth = dateOfBirth != null ? DateFormat('yyyy-MM-dd').format(dateOfBirth) : null;
|
||||
return _handleRequest(() => http.put(
|
||||
Uri.parse('$baseUrl/teams/$teamId/members/$memberId/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
body: json.encode({
|
||||
'firstname': firstname,
|
||||
'lastname': lastname,
|
||||
'date_of_birth': formattedDateOfBirth,
|
||||
'female': female,
|
||||
}),
|
||||
)).then((data) => User.fromJson(data));
|
||||
}
|
||||
|
||||
Future<User> updateTeamMember_old(int teamId,int? memberId, String firstname, String lastname, DateTime? dateOfBirth,bool? female) async {
|
||||
init();
|
||||
getToken();
|
||||
|
||||
@ -401,7 +538,15 @@ class ApiService extends GetxService{
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> deleteTeamMember(int teamId,int memberId) async {
|
||||
Future<void> deleteTeamMember(int teamId, int memberId) async {
|
||||
final token = await getToken2();
|
||||
await _handleRequest(() => http.delete(
|
||||
Uri.parse('$baseUrl/teams/$teamId/members/$memberId/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
));
|
||||
}
|
||||
|
||||
Future<void> deleteTeamMember_old(int teamId,int memberId) async {
|
||||
init();
|
||||
getToken();
|
||||
|
||||
@ -442,6 +587,14 @@ class ApiService extends GetxService{
|
||||
}
|
||||
|
||||
Future<List<Entry>> getEntries() async {
|
||||
final token = await getToken2();
|
||||
return _handleRequest(() => http.get(
|
||||
Uri.parse('$baseUrl/entry/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
)).then((data) => (data as List).map((json) => Entry.fromJson(json)).toList());
|
||||
}
|
||||
|
||||
Future<List<Entry>> getEntries_old() async {
|
||||
init();
|
||||
getToken();
|
||||
|
||||
@ -500,7 +653,23 @@ class ApiService extends GetxService{
|
||||
}
|
||||
}
|
||||
|
||||
Future<Entry> createEntry(int teamId, int eventId, int categoryId, DateTime date,String zekkenNumber) async {
|
||||
Future<Entry> createEntry(int teamId, int eventId, int categoryId, DateTime date, String zekkenNumber) async {
|
||||
final token = await getToken2();
|
||||
String formattedDate = DateFormat('yyyy-MM-dd').format(date);
|
||||
return _handleRequest(() => http.post(
|
||||
Uri.parse('$baseUrl/entry/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
body: json.encode({
|
||||
'team': teamId,
|
||||
'event': eventId,
|
||||
'category': categoryId,
|
||||
'date': formattedDate,
|
||||
'zekken_number': zekkenNumber,
|
||||
}),
|
||||
)).then((data) => Entry.fromJson(data));
|
||||
}
|
||||
|
||||
Future<Entry> createEntry_old(int teamId, int eventId, int categoryId, DateTime date,String zekkenNumber) async {
|
||||
init();
|
||||
getToken();
|
||||
|
||||
@ -529,11 +698,28 @@ class ApiService extends GetxService{
|
||||
} else {
|
||||
final decodedResponse = utf8.decode(response.bodyBytes);
|
||||
print("decodedResponse = $decodedResponse");
|
||||
throw Exception('Failed to create entry');
|
||||
final errorInfo = json.decode(decodedResponse);
|
||||
throw Exception(errorInfo['error']);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> updateUserInfo(int userId, Entry entry) async {
|
||||
final token = await getToken2();
|
||||
String formattedDate = DateFormat('yyyy-MM-dd').format(entry.date!);
|
||||
await _handleRequest(() => http.put(
|
||||
Uri.parse('$baseUrl/userinfo/$userId/'),
|
||||
headers: {'Authorization': 'Token $token', "Content-Type": "application/json; charset=UTF-8"},
|
||||
body: json.encode({
|
||||
'zekken_number': entry.zekkenNumber,
|
||||
'event_code': entry.event.eventName,
|
||||
'group': entry.team.category.categoryName,
|
||||
'team_name': entry.team.teamName,
|
||||
'date': formattedDate,
|
||||
}),
|
||||
));
|
||||
}
|
||||
|
||||
Future<void> updateUserInfo_old(int userId, Entry entry) async {
|
||||
init();
|
||||
getToken();
|
||||
|
||||
@ -598,7 +784,10 @@ class ApiService extends GetxService{
|
||||
final decodedResponse = utf8.decode(response.bodyBytes);
|
||||
final blk = json.decode(decodedResponse);
|
||||
|
||||
throw Exception('Failed to update entry');
|
||||
Map<String, dynamic> error_dict = blk[0]['error'];
|
||||
String ? error_message = error_dict['non_field_errors'][0].string;
|
||||
|
||||
throw Exception(error_message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user