OSDN Git Service

guard の書き方を統一した
[kcd/KCD.git] / KCD / ServerDataStore.swift
index a10fd0c..82e2310 100644 (file)
 
 import Cocoa
 
-extension CoreDataIntormation {
-    static let kcd = CoreDataIntormation(
-        modelName: "KCD",
-        storeFileName: "KCD.storedata",
-        storeOptions:[NSMigratePersistentStoresAutomaticallyOption: true,
-                      NSInferMappingModelAutomaticallyOption: true],
-        storeType: NSSQLiteStoreType,
-        deleteAndRetry: true
-    )
-}
-extension CoreDataCore {
-    static let kcd = CoreDataCore(.kcd)
+extension CoreDataConfiguration {
+    
+    static let kcd = CoreDataConfiguration("KCD", tryRemake: true)
 }
 
-class ServerDataStore: CoreDataAccessor, CoreDataManager {
-    static var `default` = ServerDataStore(type: .reader)
+final class ServerDataStore: CoreDataAccessor, CoreDataManager {
+    
+    static let core = CoreDataCore(.kcd)
+    
+    static let `default` = ServerDataStore(type: .reader)
+    
     class func oneTimeEditor() -> ServerDataStore {
+        
         return ServerDataStore(type: .editor)
     }
         
     required init(type: CoreDataManagerType) {
-        managedObjectContext =
-            type == .reader ? core.parentManagedObjectContext
-            : core.editorManagedObjectContext()
+        
+        context = ServerDataStore.context(for: type)
     }
+    
     deinit {
-        saveActionCore()
+        
+        save()
     }
     
-    let core = CoreDataCore.kcd
-    var managedObjectContext: NSManagedObjectContext
+    let context: NSManagedObjectContext
 }
 
 extension ServerDataStore {
-    func airBases() -> [KCAirBase] {
-        guard let res = try? objects(withEntityName: "AirBase"),
-            let airbase = res as? [KCAirBase]
-            else { return [] }
+    
+    func airBases() -> [AirBase] {
+        
+        guard let airbase = try? objects(of: AirBase.entity) else { return [] }
+        
         return airbase
     }
-    func airBase(area: Int, base: Int) -> KCAirBase? {
+    
+    func airBase(area: Int, base: Int) -> AirBase? {
+        
         let p = NSPredicate(format: "area_id == %ld AND rid == %ld", area, base)
-        guard let a = try? objects(withEntityName: "AirBase", predicate: p),
-            let airBases = a as? [KCAirBase],
-            let airBase = airBases.first
-            else { return nil }
-        return airBase
+        
+        guard let airBases = try? objects(of: AirBase.entity, predicate: p) else { return nil }
+        
+        return airBases.first
     }
     
-    func basic() -> KCBasic? {
-        guard let b = try? objects(withEntityName: "Basic"),
-            let basics = b as? [KCBasic],
-            let basic = basics.first
-            else { return nil }
-        return basic
+    func createAirBasePlaneInfo() -> AirBasePlaneInfo? {
+        
+        return insertNewObject(for: AirBasePlaneInfo.entity)
     }
-    func createBasic() -> KCBasic? {
-        return insertNewObject(forEntityName: "Basic") as? KCBasic
+    
+    func basic() -> Basic? {
+        
+        guard let basics = try? objects(of: Basic.entity) else { return nil }
+        
+        return basics.first
+    }
+    
+    func createBasic() -> Basic? {
+        
+        return insertNewObject(for: Basic.entity)
     }
     
-    func decksSortedById() -> [KCDeck] {
+    func decksSortedById() -> [Deck] {
+        
         let sortDec = NSSortDescriptor(key: "id", ascending: true)
-        guard let d = try? objects(withEntityName: "Deck", sortDescriptors: [sortDec]),
-            let decks = d as? [KCDeck]
-            else { return [] }
+        
+        guard let decks = try? objects(of: Deck.entity, sortDescriptors: [sortDec]) else { return [] }
+        
         return decks
     }
-    func deck(byId id: Int) -> KCDeck? {
+    
+    func deck(by id: Int) -> Deck? {
+        
         let p = NSPredicate(format: "id = %ld", id)
-        guard let d = try? objects(withEntityName: "Deck", predicate: p),
-            let decks = d as? [KCDeck],
-            let deck = decks.first
-            else { return nil }
-        return deck
+        
+        guard let decks = try? objects(of: Deck.entity, predicate: p) else { return nil }
+        
+        return decks.first
     }
     
-    func kenzoDock(byDockId dockId: Int) -> KCKenzoDock? {
+    func kenzoDock(by dockId: Int) -> KenzoDock? {
+        
         let dockPredicate = NSPredicate(format: "id = %ld", dockId)
-        guard let k = try? objects(withEntityName: "KenzoDock", predicate: dockPredicate),
-            let kenzoDocks = k as? [KCKenzoDock],
-            let kenzoDock = kenzoDocks.first
-            else { return nil }
-        return kenzoDock
+        
+        guard let kenzoDocks = try? objects(of: KenzoDock.entity, predicate: dockPredicate) else { return nil }
+        
+        return kenzoDocks.first
     }
     
-    func mapArea(byId id: Int) -> KCMasterMapArea? {
+    func mapArea(by id: Int) -> MasterMapArea? {
         let predicate = NSPredicate(format: "id = %ld", id)
-        guard let a = try? objects(withEntityName: "MasterMapArea", predicate: predicate),
-            let mapAreas = a as? [KCMasterMapArea],
-            let mapArea = mapAreas.first
-            else { return nil }
-        return mapArea
+        guard let mapAreas = try? objects(of: MasterMapArea.entity, predicate: predicate) else { return nil }
+        
+        return mapAreas.first
     }
     
-    func mapInfo(area: Int, no: Int) -> KCMasterMapInfo? {
+    func mapInfo(area: Int, no: Int) -> MasterMapInfo? {
+        
         let predicate = NSPredicate(format: "maparea_id = %ld AND %K = %ld", area, "no", no)
-        guard let m = try? objects(withEntityName: "MasterMapInfo", predicate: predicate),
-            let mapInfos = m as? [KCMasterMapInfo],
-            let mapInfo = mapInfos.first
-            else { return nil }
         
-        return mapInfo
+        guard let mapInfos = try? objects(of: MasterMapInfo.entity, predicate: predicate) else { return nil }
+        
+        return mapInfos.first
     }
     
-    func masterMission(by id: Int) -> KCMasterMission? {
+    func masterMission(by id: Int) -> MasterMission? {
+        
         let p = NSPredicate(format: "id = %ld", id)
-        guard let ss = try? objects(withEntityName: "MasterMission", predicate: p),
-            let missions = ss as? [KCMasterMission],
-            let mission = missions.first
-            else { return nil }
-        return mission
+        
+        guard let missions = try? objects(of: MasterMission.entity, predicate: p) else { return nil }
+        
+        return missions.first
     }
     
-    func masterShips() -> [KCMasterShipObject] {
-        guard let s = try? objects(withEntityName: "MasterShip"),
-            let ships = s as? [KCMasterShipObject]
-            else { return [] }
+    func masterShips() -> [MasterShip] {
+        
+        guard let ships = try? objects(of: MasterShip.entity) else { return [] }
+        
         return ships
     }
-    func sortedMasterShipsById() -> [KCMasterShipObject] {
+    
+    func sortedMasterShipsById() -> [MasterShip] {
+        
         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
-        guard let s = try? objects(withEntityName: "MasterShip", sortDescriptors: [sortDesc]),
-            let ships = s as? [KCMasterShipObject]
-            else { return [] }
+        
+        guard let ships = try? objects(of: MasterShip.entity, sortDescriptors: [sortDesc]) else { return [] }
+        
         return ships
     }
-    func masterShip(byId id: Int) -> KCMasterShipObject? {
+    
+    func masterShip(by id: Int) -> MasterShip? {
+        
         let p = NSPredicate(format: "id = %ld", id)
-        guard let s = try? objects(withEntityName: "MasterShip", predicate: p),
-            let ships = s as? [KCMasterShipObject],
-            let ship = ships.first
-            else { return nil }
-        return ship
+        
+        guard let ships = try? objects(of: MasterShip.entity, predicate: p) else { return nil }
+        
+        return ships.first
     }
     
-    func sortedMasterSlotItemsById() -> [KCMasterSlotItemObject] {
+    func sortedMasterSlotItemsById() -> [MasterSlotItem] {
+        
         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
-        guard let ms = try? objects(withEntityName: "MasterSlotItem", sortDescriptors: [sortDesc]),
-            let masterSlotItems = ms as? [KCMasterSlotItemObject]
-            else { return [] }
+        
+        guard let masterSlotItems = try? objects(of: MasterSlotItem.entity, sortDescriptors: [sortDesc]) else { return [] }
+        
         return masterSlotItems
     }
-    func masterSlotItems() -> [KCMasterSlotItemObject] {
-        guard let ms = try? objects(withEntityName: "MasterSlotItem"),
-            let masterSlotItems = ms as? [KCMasterSlotItemObject]
-            else { return [] }
+    
+    func masterSlotItems() -> [MasterSlotItem] {
+        
+        guard let masterSlotItems = try? objects(of: MasterSlotItem.entity) else { return [] }
+        
         return masterSlotItems
     }
-    func masterSlotItem(by id: Int) -> KCMasterSlotItemObject? {
+    
+    func masterSlotItem(by id: Int) -> MasterSlotItem? {
+        
         let p = NSPredicate(format: "id = %ld", id)
-        guard let ma = try? objects(withEntityName: "MasterSlotItem", predicate: p),
-            let masterSlotItems = ma as? [KCMasterSlotItemObject],
-            let masterSlotItem = masterSlotItems.first
-            else { return nil }
-        return masterSlotItem
+        
+        guard let masterSlotItems = try? objects(of: MasterSlotItem.entity, predicate: p) else { return nil }
+        
+        return masterSlotItems.first
     }
     
-    func masterSlotItemEquipType(by id: Int) -> KCMasterSlotItemEquipTypeObject? {
+    func masterSlotItemEquipType(by id: Int) -> MasterSlotItemEquipType? {
+        
         let predicate = NSPredicate(format: "id = %ld", id)
-        guard let a = try? objects(withEntityName: "MasterSlotItemEquipType", predicate: predicate),
-            let types = a as? [KCMasterSlotItemEquipTypeObject],
-            let type = types.first
-            else { return nil }
-        return type
-    }
-    
-    func masterSTypes() -> [KCMasterSType] {
-        guard let ms = try? objects(withEntityName: "MasterSType"),
-            let masterSTypes = ms as? [KCMasterSType]
-            else {
-                print("MaserShipCommand: MasterSType is not found")
-                return []
-        }
+        
+        guard let types = try? objects(of: MasterSlotItemEquipType.entity, predicate: predicate) else { return nil }
+        
+        return types.first
+    }
+    
+    func masterSTypes() -> [MasterSType] {
+        
+        guard let masterSTypes = try? objects(of: MasterSType.entity) else { return [] }
+        
         return masterSTypes
     }
-    func sortedMasterSTypesById() -> [KCMasterSType] {
+    
+    func sortedMasterSTypesById() -> [MasterSType] {
+        
         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
-        guard let ms = try? objects(withEntityName: "MasterSType", sortDescriptors: [sortDesc]),
-            let masterSTypes = ms as? [KCMasterSType]
-            else {
-                print("MaserShipCommand: MasterSType is not found")
-                return []
-        }
+        
+        guard let masterSTypes = try? objects(of: MasterSType.entity, sortDescriptors: [sortDesc]) else { return [] }
+        
         return masterSTypes
     }
     
-    func material() -> KCMaterial? {
-        guard let m = try? objects(withEntityName: "Material"),
-            let materials = m as? [KCMaterial],
-            let material = materials.first
-            else { return nil }
-        return material
+    func material() -> Material? {
+        
+        guard let materials = try? objects(of: Material.entity) else { return nil }
+        
+        return materials.first
     }
-    func createMaterial() -> KCMaterial? {
-        return insertNewObject(forEntityName: "Material") as? KCMaterial
+    
+    func createMaterial() -> Material? {
+        
+        return insertNewObject(for: Material.entity)
     }
     
-    func nyukyoDock(by id: Int) -> KCNyukyoDock? {
+    func nyukyoDock(by id: Int) -> NyukyoDock? {
+        
         let p = NSPredicate(format: "id = %ld", id)
-        guard let d = try? objects(withEntityName: "NyukyoDock", predicate: p),
-            let ndocks = d as? [KCNyukyoDock],
-            let ndock = ndocks.first
-            else { return nil }
-        return ndock
+        
+        guard let ndocks = try? objects(of: NyukyoDock.entity, predicate: p) else { return nil }
+        
+        return ndocks.first
     }
     
-    func ships(byDeckId deckId: Int) -> [KCShipObject] {
+    func ships(byDeckId deckId: Int) -> [Ship] {
+        
         let predicate = NSPredicate(format: "id = %d", deckId)
-        guard let d = try? objects(withEntityName: "Deck", predicate: predicate),
-            let decks = d as? [KCDeck],
-            let deck = decks.first
-            else { return [] }
-        return (0..<6).flatMap { deck[$0] }
+        
+        guard let decks = try? objects(of: Deck.entity, predicate: predicate) else { return [] }
+        guard let deck = decks.first else { return [] }
+        
+        return deck[0...5]
     }
-    func ship(byId shipId: Int) -> KCShipObject? {
+    
+    func ship(by shipId: Int) -> Ship? {
+        
         if shipId < 1 { return nil }
+        
         let predicate = NSPredicate(format: "id = %d", shipId)
-        guard let s = try? objects(withEntityName: "Ship", predicate: predicate),
-            let ships = s as? [KCShipObject],
-            let ship = ships.first
-            else { return nil }
-        return ship
+        
+        guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return nil }
+        
+        return ships.first
     }
-    func ships(byId shipId: Int) -> [KCShipObject] {
+    
+    func ships(by shipId: Int) -> [Ship] {
+        
         let predicate = NSPredicate(format: "id = %d", shipId)
-        guard let d = try? objects(withEntityName: "Ship", predicate: predicate),
-            let ships = d as? [KCShipObject]
-            else { return [] }
+        
+        guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return [] }
+        
         return ships
     }
-    func ships(exclude shipIds: [Int]) -> [KCShipObject] {
+    
+    func ships(exclude shipIds: [Int]) -> [Ship] {
+        
         let predicate = NSPredicate(format: "NOT id IN %@", shipIds)
-        guard let s = try? objects(withEntityName: "Ship", predicate: predicate),
-            let ships = s as? [KCShipObject]
-            else { return [] }
+        
+        guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return [] }
+        
         return ships
     }
-    func shipsInFleet() -> [KCShipObject] {
+    
+    func shipsInFleet() -> [Ship] {
+        
         let predicate = NSPredicate(format: "NOT fleet = 0")
-        guard let a = try? objects(withEntityName: "Ship", predicate: predicate),
-            let ships = a as? [KCShipObject]
-            else { return [] }
+        
+        guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return [] }
+        
         return ships
     }
-    func createShip() -> KCShipObject? {
-        return insertNewObject(forEntityName: "Ship") as? KCShipObject
+    
+    func createShip() -> Ship? {
+        
+        return insertNewObject(for: Ship.entity)
     }
     
-    func masterSlotItemID(bySlotItemId slotItemId: Int) -> Int {
+    func masterSlotItemID(by slotItemId: Int) -> Int {
+        
         if slotItemId < 1 { return 0 }
+        
         let predicate = NSPredicate(format: "id = %d", argumentArray: [slotItemId])
-        guard let s = try? objects(withEntityName: "SlotItem", predicate: predicate),
-            let slotItems = s as? [KCSlotItemObject],
-            let slotItem = slotItems.first
-            else { return 0 }
+        
+        guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate) else { return 0 }
+        guard let slotItem = slotItems.first else { return 0 }
+        
         return slotItem.master_slotItem.id
     }
     
-    func slotItem(byId itemId: Int) -> KCSlotItemObject? {
+    func slotItem(by itemId: Int) -> SlotItem? {
+        
         let p = NSPredicate(format: "id = %ld", itemId)
-        guard let sl = try? objects(withEntityName: "SlotItem", predicate: p),
-            let slotItems = sl as? [KCSlotItemObject],
-            let slotItem = slotItems.first
-            else { return nil }
-        return slotItem
+        
+        guard let slotItems = try? objects(of: SlotItem.entity, predicate: p) else { return nil }
+        
+        return slotItems.first
     }
-    func sortedSlotItemsById() -> [KCSlotItemObject] {
+    
+    func sortedSlotItemsById() -> [SlotItem] {
+        
         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
-        guard let s = try? objects(withEntityName: "SlotItem", sortDescriptors: [sortDesc]),
-            let slotItems = s as? [KCSlotItemObject]
-            else { return [] }
+        
+        guard let slotItems = try? objects(of: SlotItem.entity, sortDescriptors: [sortDesc]) else { return [] }
+        
         return slotItems
     }
-    func slotItems() -> [KCSlotItemObject] {
-        guard let s = try? objects(withEntityName: "SlotItem"),
-            let slotItems = s as? [KCSlotItemObject]
-            else { return [] }
+    
+    func slotItems() -> [SlotItem] {
+        
+        guard let slotItems = try? objects(of: SlotItem.entity) else { return [] }
+        
         return slotItems
     }
-    func slotItems(in itemIds: [Int]) -> [KCSlotItemObject] {
+    
+    func slotItems(in itemIds: [Int]) -> [SlotItem] {
+        
         let predicate = NSPredicate(format: "id IN %@", itemIds)
-        guard let s = try? objects(withEntityName: "SlotItem", predicate: predicate),
-            let slotItems = s as? [KCSlotItemObject]
-            else { return [] }
+        
+        guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate) else { return [] }
+        
         return slotItems
     }
-    func slotItems(exclude itemIds: [Int]) -> [KCSlotItemObject] {
+    
+    func slotItems(exclude itemIds: [Int]) -> [SlotItem] {
+        
         let predicate = NSPredicate(format: "NOT id IN %@", itemIds)
-        guard let s = try? objects(withEntityName: "SlotItem", predicate: predicate),
-            let slotItems = s as? [KCSlotItemObject]
-            else { return [] }
+        
+        guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate) else { return [] }
+        
         return slotItems
     }
-    func createSlotItem() -> KCSlotItemObject? {
-        return insertNewObject(forEntityName: "SlotItem") as? KCSlotItemObject
+    
+    func createSlotItem() -> SlotItem? {
+        
+        return insertNewObject(for: SlotItem.entity)
     }
     
-    func quests() -> [KCQuest] {
-        return try! objects(withEntityName: "Quest") as? [KCQuest] ?? []
+    func quests() -> [Quest] {
+        
+        guard let quests = try? objects(of: Quest.entity) else { return [] }
+        
+        return quests
     }
-    func quest(by no: Int) -> KCQuest? {
+    
+    func quest(by no: Int) -> Quest? {
+        
         let p = NSPredicate(format: "%K = %ld", "no", no)
-        guard let qu = try? objects(withEntityName: "Quest", predicate: p),
-            let que = qu as? [KCQuest],
-            let quest = que.first
-            else { return nil }
-        return quest
+        
+        guard let quests = try? objects(of: Quest.entity, predicate: p) else { return nil }
+        
+        return quests.first
     }
-    func quests(in range: CountableClosedRange<Int>) -> [KCQuest] {
+    
+    func quests(in range: CountableClosedRange<Int>) -> [Quest] {
+        
         let p = NSPredicate(format: "%K In %@", "no", range.map {$0})
-        guard let qu = try? objects(withEntityName: "Quest", predicate: p),
-            let quests = qu as? [KCQuest]
-            else { return [] }
+        
+        guard let quests = try? objects(of: Quest.entity, predicate: p) else { return [] }
+        
         return quests
     }
-    func sortedQuestByNo() -> [KCQuest] {
+    
+    func sortedQuestByNo() -> [Quest] {
+        
         let sortDesc = NSSortDescriptor(key: "no", ascending: true)
-        guard let qu = try? objects(withEntityName: "Quest", sortDescriptors: [sortDesc]),
-            let quests = qu as? [KCQuest]
-            else { return [] }
+        
+        guard let quests = try? objects(of: Quest.entity, sortDescriptors: [sortDesc]) else { return [] }
+        
         return quests
     }
-    func createQuest() -> KCQuest? {
-        return insertNewObject(forEntityName: "Quest") as? KCQuest
+    
+    func createQuest() -> Quest? {
+        
+        return insertNewObject(for: Quest.entity)
     }
 }