Skip to content

Commit

Permalink
finishing PR
Browse files Browse the repository at this point in the history
  • Loading branch information
leogdion committed Oct 16, 2024
1 parent a294e01 commit e67db79
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 27 deletions.
4 changes: 2 additions & 2 deletions Example/Sources/ContentObject.swift
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,8 @@ internal class ContentObject {
}

try await database.withModelContext { modelContext in
let item = try modelContext.existingModel(for: item.model)
let child = try modelContext.existingModel(for: childModel)
let item = try modelContext.get(item.model)
let child = try modelContext.get(childModel)
assert(child != nil && item != nil)
child?.parent = item
try modelContext.save()
Expand Down
32 changes: 12 additions & 20 deletions Sources/DataThespian/Databases/Database+Extras.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
public import SwiftData

extension Database {
@available(*, deprecated)
public func with<PersistentModelType: PersistentModel, U: Sendable>(
_ id: Model<PersistentModelType>,
_ closure: @escaping @Sendable (PersistentModelType) throws -> U
Expand All @@ -46,11 +47,13 @@
}
}

@available(*, deprecated)
public func first<T: PersistentModel>(_ selectPredicate: Predicate<T>) async throws -> Model<T>?
{
try await self.first(selectPredicate, with: Model.ifMap)
}

@available(*, deprecated)
public func first<T: PersistentModel, U: Sendable>(
_ selectPredicate: Predicate<T>, with closure: @escaping @Sendable (T?) throws -> U
) async throws -> U {
Expand All @@ -61,39 +64,23 @@
}
}

// public func first<T: PersistentModel, U: Sendable>(
// fetchWith selectPredicate: Predicate<T>,
// otherwiseInsertBy insert: @Sendable @escaping () -> T,
// with closure: @escaping @Sendable (T) throws -> U
// ) async throws -> U {
// let value = try await self.fetch {
// .init(predicate: selectPredicate, fetchLimit: 1)
// } with: { models in
// try models.first.map(closure)
// }
//
// if let value {
// return value
// }
//
// let inserted: Model = await self.insert(insert)
//
// return try await self.with(inserted, closure)
// }

@available(*, deprecated)
public func delete<T: PersistentModel>(model _: T.Type, where predicate: Predicate<T>? = nil)
async throws
{ try await self.delete(where: predicate) }

@available(*, deprecated)
public func delete<T: PersistentModel>(_ model: Model<T>) async {
await self.delete(T.self, withID: model.persistentIdentifier)
}

@available(*, deprecated)
public func deleteAll(of types: [any PersistentModel.Type]) async throws {
try await self.transaction { context in for type in types { try context.delete(model: type) }
}
}

@available(*, deprecated)
public func fetch<T: PersistentModel, U: Sendable>(
_: T.Type, with closure: @escaping @Sendable ([T]) throws -> U
) async throws -> U {
Expand All @@ -104,15 +91,19 @@
}
}

@available(*, deprecated)
public func fetch<T: PersistentModel>(_: T.Type) async throws -> [Model<T>] {
try await self.fetch(T.self) { models in models.map(Model.init) }
}

@available(*, deprecated)
public func fetch<T: PersistentModel>(
_: T.Type, _ selectDescriptor: @escaping @Sendable () -> FetchDescriptor<T>
) async throws -> [Model<T>] {
await self.fetch(selectDescriptor) { models in models.map(Model.init) }
}

@available(*, deprecated)
public func fetch<T, U: Sendable>(
of _: T.Type,
for objectIDs: [PersistentIdentifier],
Expand All @@ -129,6 +120,7 @@
}
}

@available(*, deprecated)
public func get<T, U: Sendable>(
of _: T.Type,
for objectID: PersistentIdentifier,
Expand Down
6 changes: 6 additions & 0 deletions Sources/DataThespian/Databases/Database+ModelContext.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,25 @@
public import SwiftData

extension Database {
@available(*, deprecated)
@discardableResult public func delete<T: PersistentModel>(
_ modelType: T.Type, withID id: PersistentIdentifier
) async -> Bool { await self.withModelContext { $0.delete(modelType, withID: id) } }

@available(*, deprecated)
public func delete<T: PersistentModel>(where predicate: Predicate<T>?) async throws {
try await self.withModelContext { try $0.delete(where: predicate) }
}

@available(*, deprecated)
public func fetch<T, U: Sendable>(
_ selectDescriptor: @escaping @Sendable () -> FetchDescriptor<T>,
with closure: @escaping @Sendable ([T]) throws -> U
) async rethrows -> U {
try await self.withModelContext { try $0.fetch(selectDescriptor, with: closure) }
}

@available(*, deprecated)
public func fetch<T: PersistentModel, U: PersistentModel, V: Sendable>(
_ selectDescriptorA: @escaping @Sendable () -> FetchDescriptor<T>,
_ selectDescriptorB: @escaping @Sendable () -> FetchDescriptor<U>,
Expand All @@ -59,12 +63,14 @@
}
}

@available(*, deprecated)
public func get<T, U: Sendable>(
for objectID: PersistentIdentifier, with closure: @escaping @Sendable (T?) throws -> U
) async rethrows -> U where T: PersistentModel {
try await self.withModelContext { try $0.get(for: objectID, with: closure) }
}

@available(*, deprecated)
public func transaction(_ block: @Sendable @escaping (ModelContext) throws -> Void) async throws
{ try await self.withModelContext { try $0.transaction(block: block) } }
}
Expand Down
3 changes: 2 additions & 1 deletion Sources/DataThespian/Databases/Queryable+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@
}

extension Queryable {
public func deleteModels<PersistentModelType>(_ models: [Model<PersistentModelType>]) async throws
public func deleteModels<PersistentModelType>(_ models: [Model<PersistentModelType>])
async throws
{
try await withThrowingTaskGroup(
of: Void.self,
Expand Down
7 changes: 4 additions & 3 deletions Sources/DataThespian/SwiftData/ModelContext+Queryable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
let persistentModel: PersistentModelType?
switch selector {
case .model(let model):
persistentModel = try self.existingModel(for: model)
persistentModel = try self.get(model)
case .predicate(let predicate):
persistentModel = try self.first(where: predicate)
}
Expand All @@ -66,12 +66,13 @@
return try closure(persistentModels)
}

public func delete<PersistentModelType>(_ selector: Selector<PersistentModelType>.Delete) throws {
public func delete<PersistentModelType>(_ selector: Selector<PersistentModelType>.Delete) throws
{
switch selector {
case .all:
try self.delete(model: PersistentModelType.self)
case .model(let model):
if let persistentModel = try self.existingModel(for: model) {
if let persistentModel = try self.get(model) {
self.delete(persistentModel)
}
case .predicate(let predicate):
Expand Down
2 changes: 1 addition & 1 deletion Sources/DataThespian/SwiftData/ModelContext.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
public import SwiftData

extension ModelContext {
public func existingModel<T>(for model: Model<T>) throws -> T?
public func get<T>(_ model: Model<T>) throws -> T?
where T: PersistentModel {
try self.existingModel(for: model.persistentIdentifier)
}
Expand Down

0 comments on commit e67db79

Please sign in to comment.