feat: login api

This commit is contained in:
efrilm
2025-08-16 17:27:57 +07:00
parent 6019036cd7
commit 255b10d5a9
31 changed files with 2997 additions and 86 deletions
+11
View File
@@ -0,0 +1,11 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:dartz/dartz.dart';
import '../../common/api/api_failure.dart';
part 'failures/auth_failure.dart';
part 'repositories/i_auth_repository.dart';
part 'entities/auth_entity.dart';
part 'entities/user_entity.dart';
part 'auth.freezed.dart';
File diff suppressed because it is too large Load Diff
+18
View File
@@ -0,0 +1,18 @@
part of '../auth.dart';
@freezed
class Auth with _$Auth {
const Auth._();
const factory Auth({
required String token,
required DateTime expiresAt,
required User user,
}) = _Auth;
/// State kosong (misalnya untuk initial state di Bloc)
factory Auth.empty() => Auth(
token: '',
expiresAt: DateTime.fromMillisecondsSinceEpoch(0),
user: User.empty(),
);
}
+32
View File
@@ -0,0 +1,32 @@
part of '../auth.dart';
@freezed
class User with _$User {
const User._();
const factory User({
required String id,
required String organizationId,
required String outletId,
required String name,
required String email,
required String role,
required Map<String, dynamic> permissions,
required bool isActive,
required DateTime createdAt,
required DateTime updatedAt,
}) = _User;
factory User.empty() => User(
id: '',
organizationId: '',
outletId: '',
name: '',
email: '',
role: '',
permissions: {},
isActive: false,
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
);
}
@@ -0,0 +1,9 @@
part of '../auth.dart';
@freezed
sealed class AuthFailure with _$AuthFailure {
const factory AuthFailure.serverError(ApiFailure failure) = _ServerError;
const factory AuthFailure.unexpectedError() = _UnexpectedError;
const factory AuthFailure.dynamicErrorMessage(String erroMessage) =
_DynamicErrorMessage;
}
@@ -0,0 +1,8 @@
part of '../auth.dart';
abstract class IAuthRepository {
Future<Either<AuthFailure, Auth>> login({
required String email,
required String password,
});
}