1-
21import 'package:myapp/data/mapper/todo_mapper.dart' ;
32
43import '../../core/error/exceptions.dart' ;
@@ -7,19 +6,34 @@ import '../../domain/repositories/todo_repository.dart';
76import '../datasource/todo_remote_datasource.dart' ;
87import '../model/todo_model.dart' ;
98
9+ /// Implementation of [TodoRepository] that communicates with the remote data source.
10+ ///
11+ /// Converts between data layer models ([TodoModel] ) and domain layer entities ([Todo] ).
1012class TodoRepositoryImpl implements TodoRepository {
1113 final TodoRemoteDatasource remote;
14+
15+ /// Creates an instance with the required [TodoRemoteDatasource] .
1216 TodoRepositoryImpl (this .remote);
1317
18+ /// Retrieves all todos from the remote API.
19+ ///
20+ /// Returns a list of [Todo] entities mapped from [TodoModel] .
21+ /// Throws [ServerException] if a network or server error occurs.
1422 @override
1523 Future <List <Todo >> getTodos () async {
1624 try {
17- return (await remote.getTodos ()).map ((e) => e.toEntity ()).toList ();
25+ return (await remote.getTodos ())
26+ .map ((e) => e.toEntity ()) // Map each data model to domain entity
27+ .toList ();
1828 } on Exception catch (e) {
1929 throw ServerException (e.toString ());
2030 }
2131 }
2232
33+ /// Adds a new todo with the given [text] .
34+ ///
35+ /// Returns the created [Todo] entity.
36+ /// Throws [ServerException] if a network or server error occurs.
2337 @override
2438 Future <Todo > addTodo (String text) async {
2539 try {
@@ -29,20 +43,30 @@ class TodoRepositoryImpl implements TodoRepository {
2943 }
3044 }
3145
46+ /// Updates an existing [todo] .
47+ ///
48+ /// Converts the [Todo] entity to a [TodoModel] before making the remote call.
49+ /// Returns the updated [Todo] entity.
50+ /// Throws [ServerException] if a network or server error occurs.
3251 @override
3352 Future <Todo > updateTodo (Todo todo) async {
3453 try {
35- return (await remote.updateTodo (TodoModel (
36- id: todo.id,
37- todo: todo.todo,
38- completed: todo.completed,
39- )))
54+ return (await remote.updateTodo (
55+ TodoModel (
56+ id: todo.id,
57+ todo: todo.todo,
58+ completed: todo.completed,
59+ ),
60+ ))
4061 .toEntity ();
4162 } on Exception catch (e) {
4263 throw ServerException (e.toString ());
4364 }
4465 }
4566
67+ /// Deletes the todo with the specified [id] .
68+ ///
69+ /// Throws [ServerException] if a network or server error occurs.
4670 @override
4771 Future <void > deleteTodo (int id) async {
4872 try {
0 commit comments