mirror of
https://github.com/SyncrowIOT/web.git
synced 2025-07-16 01:56:24 +00:00
Created update space service, and bloc.
This commit is contained in:
@ -0,0 +1,40 @@
|
|||||||
|
import 'package:dio/dio.dart';
|
||||||
|
import 'package:syncrow_web/pages/space_management_v2/modules/space_details/domain/models/space_details_model.dart';
|
||||||
|
import 'package:syncrow_web/pages/space_management_v2/modules/update_space/domain/services/update_space_service.dart';
|
||||||
|
import 'package:syncrow_web/services/api/api_exception.dart';
|
||||||
|
import 'package:syncrow_web/services/api/http_service.dart';
|
||||||
|
|
||||||
|
class RemoteUpdateSpaceService implements UpdateSpaceService {
|
||||||
|
const RemoteUpdateSpaceService(this._httpService);
|
||||||
|
|
||||||
|
final HTTPService _httpService;
|
||||||
|
|
||||||
|
static const _defaultErrorMessage = 'Failed to update space';
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<SpaceDetailsModel> updateSpace(SpaceDetailsModel space) async {
|
||||||
|
try {
|
||||||
|
final response = await _httpService.put(
|
||||||
|
path: 'endpoint',
|
||||||
|
body: space.toJson(),
|
||||||
|
expectedResponseModel: (data) => SpaceDetailsModel.fromJson(
|
||||||
|
data as Map<String, dynamic>,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
return response;
|
||||||
|
} on DioException catch (e) {
|
||||||
|
final message = e.response?.data as Map<String, dynamic>?;
|
||||||
|
final error = message?['error'] as Map<String, dynamic>?;
|
||||||
|
final errorMessage = error?['error'] as String? ?? '';
|
||||||
|
final formattedErrorMessage = [
|
||||||
|
_defaultErrorMessage,
|
||||||
|
errorMessage,
|
||||||
|
].join(': ');
|
||||||
|
throw APIException(formattedErrorMessage);
|
||||||
|
} catch (e) {
|
||||||
|
final formattedErrorMessage = [_defaultErrorMessage, '$e'].join(': ');
|
||||||
|
throw APIException(formattedErrorMessage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
import 'package:syncrow_web/pages/space_management_v2/modules/space_details/domain/models/space_details_model.dart';
|
||||||
|
|
||||||
|
abstract class UpdateSpaceService {
|
||||||
|
Future<SpaceDetailsModel> updateSpace(SpaceDetailsModel space);
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
import 'package:bloc/bloc.dart';
|
||||||
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:syncrow_web/pages/space_management_v2/modules/space_details/domain/models/space_details_model.dart';
|
||||||
|
import 'package:syncrow_web/pages/space_management_v2/modules/update_space/domain/services/update_space_service.dart';
|
||||||
|
import 'package:syncrow_web/services/api/api_exception.dart';
|
||||||
|
|
||||||
|
part 'update_space_event.dart';
|
||||||
|
part 'update_space_state.dart';
|
||||||
|
|
||||||
|
class UpdateSpaceBloc extends Bloc<UpdateSpaceEvent, UpdateSpaceState> {
|
||||||
|
final UpdateSpaceService _updateSpaceService;
|
||||||
|
|
||||||
|
UpdateSpaceBloc(this._updateSpaceService) : super(UpdateSpaceInitial()) {
|
||||||
|
on<UpdateSpace>(_onUpdateSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _onUpdateSpace(
|
||||||
|
UpdateSpace event,
|
||||||
|
Emitter<UpdateSpaceState> emit,
|
||||||
|
) async {
|
||||||
|
emit(UpdateSpaceLoading());
|
||||||
|
try {
|
||||||
|
final updatedSpace = await _updateSpaceService.updateSpace(event.space);
|
||||||
|
emit(UpdateSpaceSuccess(updatedSpace));
|
||||||
|
} on APIException catch (e) {
|
||||||
|
emit(UpdateSpaceFailure(e.message));
|
||||||
|
} catch (e) {
|
||||||
|
emit(UpdateSpaceFailure(e.toString()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
part of 'update_space_bloc.dart';
|
||||||
|
|
||||||
|
sealed class UpdateSpaceEvent extends Equatable {
|
||||||
|
const UpdateSpaceEvent();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
final class UpdateSpace extends UpdateSpaceEvent {
|
||||||
|
const UpdateSpace(this.space);
|
||||||
|
|
||||||
|
final SpaceDetailsModel space;
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [space];
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
part of 'update_space_bloc.dart';
|
||||||
|
|
||||||
|
sealed class UpdateSpaceState extends Equatable {
|
||||||
|
const UpdateSpaceState();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [];
|
||||||
|
}
|
||||||
|
|
||||||
|
final class UpdateSpaceInitial extends UpdateSpaceState {}
|
||||||
|
|
||||||
|
final class UpdateSpaceLoading extends UpdateSpaceState {}
|
||||||
|
|
||||||
|
final class UpdateSpaceSuccess extends UpdateSpaceState {
|
||||||
|
final SpaceDetailsModel space;
|
||||||
|
|
||||||
|
const UpdateSpaceSuccess(this.space);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [space];
|
||||||
|
}
|
||||||
|
|
||||||
|
final class UpdateSpaceFailure extends UpdateSpaceState {
|
||||||
|
final String message;
|
||||||
|
|
||||||
|
const UpdateSpaceFailure(this.message);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object> get props => [message];
|
||||||
|
}
|
Reference in New Issue
Block a user