Renamed the Repository protocol in the app target as TodoRepository.

This commit is contained in:
2026-02-11 18:04:36 +01:00
parent 61adf5387f
commit 8772635ad9
5 changed files with 37 additions and 33 deletions
@@ -1,8 +1,12 @@
import SwiftData import SwiftData
/// Extends ModelContext to conform to the Repository protocol. /// Extends ModelContext to conform to the TodoRepository protocol.
/// ///
/// This extension allows ModelContext from SwiftData to be used as a repository, /// This extension allows ModelContext from SwiftData to be used as a todo repository,
/// enabling dependency injection and facilitating unit testing by allowing mock /// enabling dependency injection and facilitating unit testing by allowing mock
/// repositories to be substituted during tests. /// repositories to be substituted during tests.
extension ModelContext: Repository {} ///
/// The ModelContext methods `delete(_:)` and `insert(_:)` already match the
/// TodoRepository protocol requirements, so this extension simply declares conformance
/// without requiring additional implementation.
extension ModelContext: TodoRepository {}
-28
View File
@@ -1,28 +0,0 @@
import SwiftData
/// A protocol defining the interface for a data repository.
///
/// This protocol abstracts the underlying data persistence mechanism, allowing for
/// dependency injection and easier testing. Implementations handle the storage and
/// retrieval of model objects.
protocol Repository {
/// Deletes a model object from the repository.
///
/// This method removes the specified object from persistent storage. The deletion
/// is typically performed immediately, though the actual persistence may be deferred
/// until a save operation occurs depending on the implementation.
///
/// - Parameter model: The model object to delete from the repository.
func delete(_ model: some PersistentModel)
/// Inserts a new model object into the repository.
///
/// This method adds a new object to persistent storage. The object is typically
/// tracked immediately, though the actual persistence may be deferred until a
/// save operation occurs depending on the implementation.
///
/// - Parameter model: The model object to insert into the repository.
func insert(_ model: some PersistentModel)
}
@@ -0,0 +1,28 @@
import SwiftData
/// A protocol defining the interface for a todo repository.
///
/// This protocol abstracts the underlying data persistence mechanism for todo tasks,
/// allowing for dependency injection and easier testing. Implementations handle the
/// storage and retrieval of Todo objects.
protocol TodoRepository {
/// Deletes a todo task from the repository.
///
/// This method removes the specified todo from persistent storage. The deletion
/// is typically performed immediately, though the actual persistence may be deferred
/// until a save operation occurs depending on the implementation.
///
/// - Parameter todo: The todo task to delete from the repository.
func delete(_ todo: Todo)
/// Inserts a new todo task into the repository.
///
/// This method adds a new todo to persistent storage. The todo is typically
/// tracked immediately, though the actual persistence may be deferred until a
/// save operation occurs depending on the implementation.
///
/// - Parameter todo: The todo task to insert into the repository.
func insert(_ todo: Todo)
}
@@ -64,7 +64,7 @@ extension NewTaskView {
/// The `note` property value is only included if it's not empty after trimming. /// The `note` property value is only included if it's not empty after trimming.
/// ///
/// - Parameter repository: The repository to insert a new todo task. /// - Parameter repository: The repository to insert a new todo task.
func save(to repository: Repository) { func save(to repository: TodoRepository) {
let trimmedTitle = title.trimmingCharacters(in: .whitespacesAndNewlines) let trimmedTitle = title.trimmingCharacters(in: .whitespacesAndNewlines)
let trimmedNote = note.trimmingCharacters(in: .whitespacesAndNewlines) let trimmedNote = note.trimmingCharacters(in: .whitespacesAndNewlines)
@@ -98,7 +98,7 @@ extension TaskListView {
func delete( func delete(
_ tasks: [Todo], _ tasks: [Todo],
at offsets: IndexSet, at offsets: IndexSet,
from repository: Repository from repository: TodoRepository
) { ) {
for index in offsets { for index in offsets {
repository.delete(tasks[index]) repository.delete(tasks[index])