Register Repo

This commit is contained in:
efrilm 2025-09-18 06:03:02 +07:00
parent c3263edb89
commit 207dda29df
14 changed files with 900 additions and 0 deletions

View File

@ -0,0 +1,33 @@
part of 'extension.dart';
extension DateTimeIndonesia on DateTime {
/// Format: 13 Agustus 2025
String get toDate {
return DateFormat('d MMMM yyyy', 'id_ID').format(this);
}
/// Format: 13 Agustus 2025 20:00
String get toDatetime {
return DateFormat('d MMMM yyyy HH:mm', 'id_ID').format(this);
}
/// Format: Rabu, 13 Agustus 2025
String get toDayDate {
return DateFormat('EEEE, d MMMM yyyy', 'id_ID').format(this);
}
/// Format: 13/08/2025
String get toShortDate {
return DateFormat('dd/MM/yyyy', 'id_ID').format(this);
}
/// Format: 13-08-2025
String get toServerDate {
return DateFormat('dd-MM-yyyy', 'id_ID').format(this);
}
/// Format jam: 14:30
String get toHourMinute {
return DateFormat('HH:mm', 'id_ID').format(this);
}
}

View File

@ -1,5 +1,9 @@
import 'package:intl/intl.dart';
import '../../domain/auth/auth.dart';
part 'date_extension.dart';
extension StringExt on String {
CheckPhoneStatus toCheckPhoneStatus() {
switch (this) {

View File

@ -1,3 +1,4 @@
class ApiPath {
static String checkPhone = '/api/v1/customer-auth/check-phone';
static String register = '/api/v1/customer-auth/register/start';
}

View File

@ -6,6 +6,7 @@ import '../../common/api/api_failure.dart';
part 'auth.freezed.dart';
part 'entities/check_phone_entity.dart';
part 'entities/register_entity.dart';
part 'failures/auth_failure.dart';
part 'repositories/i_auth_repository.dart';

View File

@ -192,6 +192,238 @@ abstract class _CheckPhone implements CheckPhone {
throw _privateConstructorUsedError;
}
/// @nodoc
mixin _$Register {
String get status => throw _privateConstructorUsedError;
String get message => throw _privateConstructorUsedError;
String get registrationToken => throw _privateConstructorUsedError;
String get otpToken => throw _privateConstructorUsedError;
int get expiresIn => throw _privateConstructorUsedError;
/// Create a copy of Register
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
$RegisterCopyWith<Register> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $RegisterCopyWith<$Res> {
factory $RegisterCopyWith(Register value, $Res Function(Register) then) =
_$RegisterCopyWithImpl<$Res, Register>;
@useResult
$Res call({
String status,
String message,
String registrationToken,
String otpToken,
int expiresIn,
});
}
/// @nodoc
class _$RegisterCopyWithImpl<$Res, $Val extends Register>
implements $RegisterCopyWith<$Res> {
_$RegisterCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of Register
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? status = null,
Object? message = null,
Object? registrationToken = null,
Object? otpToken = null,
Object? expiresIn = null,
}) {
return _then(
_value.copyWith(
status: null == status
? _value.status
: status // ignore: cast_nullable_to_non_nullable
as String,
message: null == message
? _value.message
: message // ignore: cast_nullable_to_non_nullable
as String,
registrationToken: null == registrationToken
? _value.registrationToken
: registrationToken // ignore: cast_nullable_to_non_nullable
as String,
otpToken: null == otpToken
? _value.otpToken
: otpToken // ignore: cast_nullable_to_non_nullable
as String,
expiresIn: null == expiresIn
? _value.expiresIn
: expiresIn // ignore: cast_nullable_to_non_nullable
as int,
)
as $Val,
);
}
}
/// @nodoc
abstract class _$$RegisterImplCopyWith<$Res>
implements $RegisterCopyWith<$Res> {
factory _$$RegisterImplCopyWith(
_$RegisterImpl value,
$Res Function(_$RegisterImpl) then,
) = __$$RegisterImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({
String status,
String message,
String registrationToken,
String otpToken,
int expiresIn,
});
}
/// @nodoc
class __$$RegisterImplCopyWithImpl<$Res>
extends _$RegisterCopyWithImpl<$Res, _$RegisterImpl>
implements _$$RegisterImplCopyWith<$Res> {
__$$RegisterImplCopyWithImpl(
_$RegisterImpl _value,
$Res Function(_$RegisterImpl) _then,
) : super(_value, _then);
/// Create a copy of Register
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? status = null,
Object? message = null,
Object? registrationToken = null,
Object? otpToken = null,
Object? expiresIn = null,
}) {
return _then(
_$RegisterImpl(
status: null == status
? _value.status
: status // ignore: cast_nullable_to_non_nullable
as String,
message: null == message
? _value.message
: message // ignore: cast_nullable_to_non_nullable
as String,
registrationToken: null == registrationToken
? _value.registrationToken
: registrationToken // ignore: cast_nullable_to_non_nullable
as String,
otpToken: null == otpToken
? _value.otpToken
: otpToken // ignore: cast_nullable_to_non_nullable
as String,
expiresIn: null == expiresIn
? _value.expiresIn
: expiresIn // ignore: cast_nullable_to_non_nullable
as int,
),
);
}
}
/// @nodoc
class _$RegisterImpl implements _Register {
const _$RegisterImpl({
required this.status,
required this.message,
required this.registrationToken,
required this.otpToken,
required this.expiresIn,
});
@override
final String status;
@override
final String message;
@override
final String registrationToken;
@override
final String otpToken;
@override
final int expiresIn;
@override
String toString() {
return 'Register(status: $status, message: $message, registrationToken: $registrationToken, otpToken: $otpToken, expiresIn: $expiresIn)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$RegisterImpl &&
(identical(other.status, status) || other.status == status) &&
(identical(other.message, message) || other.message == message) &&
(identical(other.registrationToken, registrationToken) ||
other.registrationToken == registrationToken) &&
(identical(other.otpToken, otpToken) ||
other.otpToken == otpToken) &&
(identical(other.expiresIn, expiresIn) ||
other.expiresIn == expiresIn));
}
@override
int get hashCode => Object.hash(
runtimeType,
status,
message,
registrationToken,
otpToken,
expiresIn,
);
/// Create a copy of Register
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$RegisterImplCopyWith<_$RegisterImpl> get copyWith =>
__$$RegisterImplCopyWithImpl<_$RegisterImpl>(this, _$identity);
}
abstract class _Register implements Register {
const factory _Register({
required final String status,
required final String message,
required final String registrationToken,
required final String otpToken,
required final int expiresIn,
}) = _$RegisterImpl;
@override
String get status;
@override
String get message;
@override
String get registrationToken;
@override
String get otpToken;
@override
int get expiresIn;
/// Create a copy of Register
/// with the given fields replaced by the non-null parameter values.
@override
@JsonKey(includeFromJson: false, includeToJson: false)
_$$RegisterImplCopyWith<_$RegisterImpl> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
mixin _$AuthFailure {
@optionalTypeArgs

View File

@ -0,0 +1,20 @@
part of '../auth.dart';
@freezed
class Register with _$Register {
const factory Register({
required String status,
required String message,
required String registrationToken,
required String otpToken,
required int expiresIn,
}) = _Register;
factory Register.empty() => const Register(
status: '',
message: '',
registrationToken: '',
otpToken: '',
expiresIn: 0,
);
}

View File

@ -4,4 +4,10 @@ abstract class IAuthRepository {
Future<Either<AuthFailure, CheckPhone>> checkPhone({
required String phoneNumber,
});
Future<Either<AuthFailure, Register>> register({
required String phoneNumber,
required String name,
required DateTime birthDate,
});
}

View File

@ -6,3 +6,4 @@ part 'auth_dtos.freezed.dart';
part 'auth_dtos.g.dart';
part 'dto/check_phone_dto.dart';
part 'dto/register_dto.dart';

View File

@ -408,3 +408,454 @@ abstract class _CheckPhoneDataDto implements CheckPhoneDataDto {
_$$CheckPhoneDataDtoImplCopyWith<_$CheckPhoneDataDtoImpl> get copyWith =>
throw _privateConstructorUsedError;
}
RegisterDto _$RegisterDtoFromJson(Map<String, dynamic> json) {
return _RegisterDto.fromJson(json);
}
/// @nodoc
mixin _$RegisterDto {
@JsonKey(name: 'status')
String? get status => throw _privateConstructorUsedError;
@JsonKey(name: 'message')
String? get message => throw _privateConstructorUsedError;
@JsonKey(name: 'data')
RegisterDataDto? get data => throw _privateConstructorUsedError;
/// Serializes this RegisterDto to a JSON map.
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
/// Create a copy of RegisterDto
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
$RegisterDtoCopyWith<RegisterDto> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $RegisterDtoCopyWith<$Res> {
factory $RegisterDtoCopyWith(
RegisterDto value,
$Res Function(RegisterDto) then,
) = _$RegisterDtoCopyWithImpl<$Res, RegisterDto>;
@useResult
$Res call({
@JsonKey(name: 'status') String? status,
@JsonKey(name: 'message') String? message,
@JsonKey(name: 'data') RegisterDataDto? data,
});
$RegisterDataDtoCopyWith<$Res>? get data;
}
/// @nodoc
class _$RegisterDtoCopyWithImpl<$Res, $Val extends RegisterDto>
implements $RegisterDtoCopyWith<$Res> {
_$RegisterDtoCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of RegisterDto
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? status = freezed,
Object? message = freezed,
Object? data = freezed,
}) {
return _then(
_value.copyWith(
status: freezed == status
? _value.status
: status // ignore: cast_nullable_to_non_nullable
as String?,
message: freezed == message
? _value.message
: message // ignore: cast_nullable_to_non_nullable
as String?,
data: freezed == data
? _value.data
: data // ignore: cast_nullable_to_non_nullable
as RegisterDataDto?,
)
as $Val,
);
}
/// Create a copy of RegisterDto
/// with the given fields replaced by the non-null parameter values.
@override
@pragma('vm:prefer-inline')
$RegisterDataDtoCopyWith<$Res>? get data {
if (_value.data == null) {
return null;
}
return $RegisterDataDtoCopyWith<$Res>(_value.data!, (value) {
return _then(_value.copyWith(data: value) as $Val);
});
}
}
/// @nodoc
abstract class _$$RegisterDtoImplCopyWith<$Res>
implements $RegisterDtoCopyWith<$Res> {
factory _$$RegisterDtoImplCopyWith(
_$RegisterDtoImpl value,
$Res Function(_$RegisterDtoImpl) then,
) = __$$RegisterDtoImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({
@JsonKey(name: 'status') String? status,
@JsonKey(name: 'message') String? message,
@JsonKey(name: 'data') RegisterDataDto? data,
});
@override
$RegisterDataDtoCopyWith<$Res>? get data;
}
/// @nodoc
class __$$RegisterDtoImplCopyWithImpl<$Res>
extends _$RegisterDtoCopyWithImpl<$Res, _$RegisterDtoImpl>
implements _$$RegisterDtoImplCopyWith<$Res> {
__$$RegisterDtoImplCopyWithImpl(
_$RegisterDtoImpl _value,
$Res Function(_$RegisterDtoImpl) _then,
) : super(_value, _then);
/// Create a copy of RegisterDto
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? status = freezed,
Object? message = freezed,
Object? data = freezed,
}) {
return _then(
_$RegisterDtoImpl(
status: freezed == status
? _value.status
: status // ignore: cast_nullable_to_non_nullable
as String?,
message: freezed == message
? _value.message
: message // ignore: cast_nullable_to_non_nullable
as String?,
data: freezed == data
? _value.data
: data // ignore: cast_nullable_to_non_nullable
as RegisterDataDto?,
),
);
}
}
/// @nodoc
@JsonSerializable()
class _$RegisterDtoImpl extends _RegisterDto {
const _$RegisterDtoImpl({
@JsonKey(name: 'status') this.status,
@JsonKey(name: 'message') this.message,
@JsonKey(name: 'data') this.data,
}) : super._();
factory _$RegisterDtoImpl.fromJson(Map<String, dynamic> json) =>
_$$RegisterDtoImplFromJson(json);
@override
@JsonKey(name: 'status')
final String? status;
@override
@JsonKey(name: 'message')
final String? message;
@override
@JsonKey(name: 'data')
final RegisterDataDto? data;
@override
String toString() {
return 'RegisterDto(status: $status, message: $message, data: $data)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$RegisterDtoImpl &&
(identical(other.status, status) || other.status == status) &&
(identical(other.message, message) || other.message == message) &&
(identical(other.data, data) || other.data == data));
}
@JsonKey(includeFromJson: false, includeToJson: false)
@override
int get hashCode => Object.hash(runtimeType, status, message, data);
/// Create a copy of RegisterDto
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$RegisterDtoImplCopyWith<_$RegisterDtoImpl> get copyWith =>
__$$RegisterDtoImplCopyWithImpl<_$RegisterDtoImpl>(this, _$identity);
@override
Map<String, dynamic> toJson() {
return _$$RegisterDtoImplToJson(this);
}
}
abstract class _RegisterDto extends RegisterDto {
const factory _RegisterDto({
@JsonKey(name: 'status') final String? status,
@JsonKey(name: 'message') final String? message,
@JsonKey(name: 'data') final RegisterDataDto? data,
}) = _$RegisterDtoImpl;
const _RegisterDto._() : super._();
factory _RegisterDto.fromJson(Map<String, dynamic> json) =
_$RegisterDtoImpl.fromJson;
@override
@JsonKey(name: 'status')
String? get status;
@override
@JsonKey(name: 'message')
String? get message;
@override
@JsonKey(name: 'data')
RegisterDataDto? get data;
/// Create a copy of RegisterDto
/// with the given fields replaced by the non-null parameter values.
@override
@JsonKey(includeFromJson: false, includeToJson: false)
_$$RegisterDtoImplCopyWith<_$RegisterDtoImpl> get copyWith =>
throw _privateConstructorUsedError;
}
RegisterDataDto _$RegisterDataDtoFromJson(Map<String, dynamic> json) {
return _RegisterDataDto.fromJson(json);
}
/// @nodoc
mixin _$RegisterDataDto {
@JsonKey(name: 'registration_token')
String? get registrationToken => throw _privateConstructorUsedError;
@JsonKey(name: 'otp_token')
String? get otpToken => throw _privateConstructorUsedError;
@JsonKey(name: 'expires_in')
int? get expiresIn => throw _privateConstructorUsedError;
/// Serializes this RegisterDataDto to a JSON map.
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
/// Create a copy of RegisterDataDto
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
$RegisterDataDtoCopyWith<RegisterDataDto> get copyWith =>
throw _privateConstructorUsedError;
}
/// @nodoc
abstract class $RegisterDataDtoCopyWith<$Res> {
factory $RegisterDataDtoCopyWith(
RegisterDataDto value,
$Res Function(RegisterDataDto) then,
) = _$RegisterDataDtoCopyWithImpl<$Res, RegisterDataDto>;
@useResult
$Res call({
@JsonKey(name: 'registration_token') String? registrationToken,
@JsonKey(name: 'otp_token') String? otpToken,
@JsonKey(name: 'expires_in') int? expiresIn,
});
}
/// @nodoc
class _$RegisterDataDtoCopyWithImpl<$Res, $Val extends RegisterDataDto>
implements $RegisterDataDtoCopyWith<$Res> {
_$RegisterDataDtoCopyWithImpl(this._value, this._then);
// ignore: unused_field
final $Val _value;
// ignore: unused_field
final $Res Function($Val) _then;
/// Create a copy of RegisterDataDto
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? registrationToken = freezed,
Object? otpToken = freezed,
Object? expiresIn = freezed,
}) {
return _then(
_value.copyWith(
registrationToken: freezed == registrationToken
? _value.registrationToken
: registrationToken // ignore: cast_nullable_to_non_nullable
as String?,
otpToken: freezed == otpToken
? _value.otpToken
: otpToken // ignore: cast_nullable_to_non_nullable
as String?,
expiresIn: freezed == expiresIn
? _value.expiresIn
: expiresIn // ignore: cast_nullable_to_non_nullable
as int?,
)
as $Val,
);
}
}
/// @nodoc
abstract class _$$RegisterDataDtoImplCopyWith<$Res>
implements $RegisterDataDtoCopyWith<$Res> {
factory _$$RegisterDataDtoImplCopyWith(
_$RegisterDataDtoImpl value,
$Res Function(_$RegisterDataDtoImpl) then,
) = __$$RegisterDataDtoImplCopyWithImpl<$Res>;
@override
@useResult
$Res call({
@JsonKey(name: 'registration_token') String? registrationToken,
@JsonKey(name: 'otp_token') String? otpToken,
@JsonKey(name: 'expires_in') int? expiresIn,
});
}
/// @nodoc
class __$$RegisterDataDtoImplCopyWithImpl<$Res>
extends _$RegisterDataDtoCopyWithImpl<$Res, _$RegisterDataDtoImpl>
implements _$$RegisterDataDtoImplCopyWith<$Res> {
__$$RegisterDataDtoImplCopyWithImpl(
_$RegisterDataDtoImpl _value,
$Res Function(_$RegisterDataDtoImpl) _then,
) : super(_value, _then);
/// Create a copy of RegisterDataDto
/// with the given fields replaced by the non-null parameter values.
@pragma('vm:prefer-inline')
@override
$Res call({
Object? registrationToken = freezed,
Object? otpToken = freezed,
Object? expiresIn = freezed,
}) {
return _then(
_$RegisterDataDtoImpl(
registrationToken: freezed == registrationToken
? _value.registrationToken
: registrationToken // ignore: cast_nullable_to_non_nullable
as String?,
otpToken: freezed == otpToken
? _value.otpToken
: otpToken // ignore: cast_nullable_to_non_nullable
as String?,
expiresIn: freezed == expiresIn
? _value.expiresIn
: expiresIn // ignore: cast_nullable_to_non_nullable
as int?,
),
);
}
}
/// @nodoc
@JsonSerializable()
class _$RegisterDataDtoImpl implements _RegisterDataDto {
const _$RegisterDataDtoImpl({
@JsonKey(name: 'registration_token') this.registrationToken,
@JsonKey(name: 'otp_token') this.otpToken,
@JsonKey(name: 'expires_in') this.expiresIn,
});
factory _$RegisterDataDtoImpl.fromJson(Map<String, dynamic> json) =>
_$$RegisterDataDtoImplFromJson(json);
@override
@JsonKey(name: 'registration_token')
final String? registrationToken;
@override
@JsonKey(name: 'otp_token')
final String? otpToken;
@override
@JsonKey(name: 'expires_in')
final int? expiresIn;
@override
String toString() {
return 'RegisterDataDto(registrationToken: $registrationToken, otpToken: $otpToken, expiresIn: $expiresIn)';
}
@override
bool operator ==(Object other) {
return identical(this, other) ||
(other.runtimeType == runtimeType &&
other is _$RegisterDataDtoImpl &&
(identical(other.registrationToken, registrationToken) ||
other.registrationToken == registrationToken) &&
(identical(other.otpToken, otpToken) ||
other.otpToken == otpToken) &&
(identical(other.expiresIn, expiresIn) ||
other.expiresIn == expiresIn));
}
@JsonKey(includeFromJson: false, includeToJson: false)
@override
int get hashCode =>
Object.hash(runtimeType, registrationToken, otpToken, expiresIn);
/// Create a copy of RegisterDataDto
/// with the given fields replaced by the non-null parameter values.
@JsonKey(includeFromJson: false, includeToJson: false)
@override
@pragma('vm:prefer-inline')
_$$RegisterDataDtoImplCopyWith<_$RegisterDataDtoImpl> get copyWith =>
__$$RegisterDataDtoImplCopyWithImpl<_$RegisterDataDtoImpl>(
this,
_$identity,
);
@override
Map<String, dynamic> toJson() {
return _$$RegisterDataDtoImplToJson(this);
}
}
abstract class _RegisterDataDto implements RegisterDataDto {
const factory _RegisterDataDto({
@JsonKey(name: 'registration_token') final String? registrationToken,
@JsonKey(name: 'otp_token') final String? otpToken,
@JsonKey(name: 'expires_in') final int? expiresIn,
}) = _$RegisterDataDtoImpl;
factory _RegisterDataDto.fromJson(Map<String, dynamic> json) =
_$RegisterDataDtoImpl.fromJson;
@override
@JsonKey(name: 'registration_token')
String? get registrationToken;
@override
@JsonKey(name: 'otp_token')
String? get otpToken;
@override
@JsonKey(name: 'expires_in')
int? get expiresIn;
/// Create a copy of RegisterDataDto
/// with the given fields replaced by the non-null parameter values.
@override
@JsonKey(includeFromJson: false, includeToJson: false)
_$$RegisterDataDtoImplCopyWith<_$RegisterDataDtoImpl> get copyWith =>
throw _privateConstructorUsedError;
}

View File

@ -29,3 +29,35 @@ _$CheckPhoneDataDtoImpl _$$CheckPhoneDataDtoImplFromJson(
Map<String, dynamic> _$$CheckPhoneDataDtoImplToJson(
_$CheckPhoneDataDtoImpl instance,
) => <String, dynamic>{'phone_number': instance.phoneNumber};
_$RegisterDtoImpl _$$RegisterDtoImplFromJson(Map<String, dynamic> json) =>
_$RegisterDtoImpl(
status: json['status'] as String?,
message: json['message'] as String?,
data: json['data'] == null
? null
: RegisterDataDto.fromJson(json['data'] as Map<String, dynamic>),
);
Map<String, dynamic> _$$RegisterDtoImplToJson(_$RegisterDtoImpl instance) =>
<String, dynamic>{
'status': instance.status,
'message': instance.message,
'data': instance.data,
};
_$RegisterDataDtoImpl _$$RegisterDataDtoImplFromJson(
Map<String, dynamic> json,
) => _$RegisterDataDtoImpl(
registrationToken: json['registration_token'] as String?,
otpToken: json['otp_token'] as String?,
expiresIn: (json['expires_in'] as num?)?.toInt(),
);
Map<String, dynamic> _$$RegisterDataDtoImplToJson(
_$RegisterDataDtoImpl instance,
) => <String, dynamic>{
'registration_token': instance.registrationToken,
'otp_token': instance.otpToken,
'expires_in': instance.expiresIn,
};

View File

@ -5,6 +5,7 @@ import 'package:data_channel/data_channel.dart';
import '../../../common/api/api_client.dart';
import '../../../common/api/api_failure.dart';
import '../../../common/extension/extension.dart';
import '../../../common/url/api_path.dart';
import '../../../domain/auth/auth.dart';
import '../auth_dtos.dart';
@ -50,4 +51,49 @@ class AuthRemoteDataProvider {
return DC.error(AuthFailure.serverError(e));
}
}
Future<DC<AuthFailure, RegisterDto>> register({
required String phoneNumber,
required String name,
required DateTime birthDate,
}) async {
try {
final response = await _apiClient.post(
ApiPath.register,
data: {
'phone_number': phoneNumber,
'name': name,
'birth_date': birthDate.toServerDate,
},
);
if (response.data['success'] == false) {
if ((response.data['errors'] as List).isNotEmpty) {
if (response.data['errors'][0]['code'] == "900") {
return DC.error(
AuthFailure.dynamicErrorMessage('No. Telepon Sudah Terdaftar'),
);
} else {
return DC.error(
AuthFailure.dynamicErrorMessage(
'Terjadi kesalahan coba lagi nanti',
),
);
}
} else {
return DC.error(
AuthFailure.dynamicErrorMessage(
'Terjadi kesalahan coba lagi nanti',
),
);
}
}
final dto = RegisterDto.fromJson(response.data['data']);
return DC.data(dto);
} on ApiFailure catch (e, s) {
log('register', name: _logName, error: e, stackTrace: s);
return DC.error(AuthFailure.serverError(e));
}
}
}

View File

@ -0,0 +1,36 @@
part of '../auth_dtos.dart';
@freezed
class RegisterDto with _$RegisterDto {
const RegisterDto._();
const factory RegisterDto({
@JsonKey(name: 'status') String? status,
@JsonKey(name: 'message') String? message,
@JsonKey(name: 'data') RegisterDataDto? data,
}) = _RegisterDto;
factory RegisterDto.fromJson(Map<String, dynamic> json) =>
_$RegisterDtoFromJson(json);
/// mapping ke domain
Register toDomain() => Register(
status: status ?? '',
message: message ?? '',
registrationToken: data?.registrationToken ?? '',
otpToken: data?.otpToken ?? '',
expiresIn: data?.expiresIn ?? 0,
);
}
@freezed
class RegisterDataDto with _$RegisterDataDto {
const factory RegisterDataDto({
@JsonKey(name: 'registration_token') String? registrationToken,
@JsonKey(name: 'otp_token') String? otpToken,
@JsonKey(name: 'expires_in') int? expiresIn,
}) = _RegisterDataDto;
factory RegisterDataDto.fromJson(Map<String, dynamic> json) =>
_$RegisterDataDtoFromJson(json);
}

View File

@ -35,4 +35,30 @@ class AuthRepository implements IAuthRepository {
return left(const AuthFailure.unexpectedError());
}
}
@override
Future<Either<AuthFailure, Register>> register({
required String phoneNumber,
required String name,
required DateTime birthDate,
}) async {
try {
final result = await _remoteDataProvider.register(
phoneNumber: phoneNumber,
name: name,
birthDate: birthDate,
);
if (result.hasError) {
return left(result.error!);
}
final auth = result.data!.toDomain();
return right(auth);
} catch (e, s) {
log('checkPhoneError', name: _logName, error: e, stackTrace: s);
return left(const AuthFailure.unexpectedError());
}
}
}

View File

@ -17,7 +17,12 @@ import 'package:enaklo/common/di/di_connectivity.dart' as _i644;
import 'package:enaklo/common/di/di_dio.dart' as _i842;
import 'package:enaklo/common/di/di_shared_preferences.dart' as _i672;
import 'package:enaklo/common/network/network_client.dart' as _i109;
import 'package:enaklo/domain/auth/auth.dart' as _i995;
import 'package:enaklo/env.dart' as _i372;
import 'package:enaklo/infrastructure/auth/datasources/remote_data_provider.dart'
as _i818;
import 'package:enaklo/infrastructure/auth/repositories/auth_repository.dart'
as _i879;
import 'package:enaklo/presentation/router/app_router.dart' as _i698;
import 'package:get_it/get_it.dart' as _i174;
import 'package:injectable/injectable.dart' as _i526;
@ -52,6 +57,12 @@ extension GetItInjectableX on _i174.GetIt {
gh.lazySingleton<_i842.ApiClient>(
() => _i842.ApiClient(gh<_i361.Dio>(), gh<_i372.Env>()),
);
gh.factory<_i818.AuthRemoteDataProvider>(
() => _i818.AuthRemoteDataProvider(gh<_i842.ApiClient>()),
);
gh.factory<_i995.IAuthRepository>(
() => _i879.AuthRepository(gh<_i818.AuthRemoteDataProvider>()),
);
return this;
}
}