2 // ServerDataStore.swift
5 // Created by Hori,Masaki on 2017/01/07.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 extension CoreDataConfiguration {
13 static let kcd = CoreDataConfiguration("KCD", tryRemake: true)
16 final class ServerDataStore: CoreDataAccessor, CoreDataManager {
18 static let core = CoreDataCore(.kcd)
20 static let `default` = ServerDataStore(type: .reader)
22 class func oneTimeEditor() -> ServerDataStore {
24 return ServerDataStore(type: .editor)
27 required init(type: CoreDataManagerType) {
29 context = ServerDataStore.context(for: type)
37 let context: NSManagedObjectContext
40 extension ServerDataStore {
42 func airBases() -> [AirBase] {
44 guard let airbase = try? objects(of: AirBase.entity) else { return [] }
49 func airBase(area: Int, base: Int) -> AirBase? {
51 let p = NSPredicate.empty
52 .and(NSPredicate(#keyPath(AirBase.area_id), equal: area))
53 .and(NSPredicate(#keyPath(AirBase.rid), equal: base))
55 guard let airBases = try? objects(of: AirBase.entity, predicate: p) else { return nil }
60 func createAirBasePlaneInfo() -> AirBasePlaneInfo? {
62 return insertNewObject(for: AirBasePlaneInfo.entity)
65 func basic() -> Basic? {
67 guard let basics = try? objects(of: Basic.entity) else { return nil }
72 func createBasic() -> Basic? {
74 return insertNewObject(for: Basic.entity)
77 func decksSortedById() -> [Deck] {
79 let sortDec = NSSortDescriptor(key: #keyPath(Deck.id), ascending: true)
81 guard let decks = try? objects(of: Deck.entity, sortDescriptors: [sortDec]) else { return [] }
86 func deck(by id: Int) -> Deck? {
88 let p = NSPredicate(#keyPath(Deck.id), equal: id)
90 guard let decks = try? objects(of: Deck.entity, predicate: p) else { return nil }
95 func kenzoDock(by dockId: Int) -> KenzoDock? {
97 let dockPredicate = NSPredicate(#keyPath(KenzoDock.id), equal: dockId)
99 guard let kenzoDocks = try? objects(of: KenzoDock.entity, predicate: dockPredicate) else { return nil }
101 return kenzoDocks.first
104 func mapArea(by id: Int) -> MasterMapArea? {
106 let predicate = NSPredicate(#keyPath(MasterMapArea.id), equal: id)
107 guard let mapAreas = try? objects(of: MasterMapArea.entity, predicate: predicate) else { return nil }
109 return mapAreas.first
112 func mapInfo(area: Int, no: Int) -> MasterMapInfo? {
114 let predicate = NSPredicate.empty
115 .and(NSPredicate(#keyPath(MasterMapInfo.maparea_id), equal: area))
116 .and(NSPredicate(#keyPath(MasterMapInfo.no), equal: no))
118 guard let mapInfos = try? objects(of: MasterMapInfo.entity, predicate: predicate) else { return nil }
120 return mapInfos.first
123 func masterMission(by id: Int) -> MasterMission? {
125 let p = NSPredicate(#keyPath(MasterMission.id), equal: id)
127 guard let missions = try? objects(of: MasterMission.entity, predicate: p) else { return nil }
129 return missions.first
132 func masterShips() -> [MasterShip] {
134 guard let ships = try? objects(of: MasterShip.entity) else { return [] }
139 func sortedMasterShipsById() -> [MasterShip] {
141 let sortDesc = NSSortDescriptor(key: #keyPath(MasterShip.id), ascending: true)
143 guard let ships = try? objects(of: MasterShip.entity, sortDescriptors: [sortDesc]) else { return [] }
148 func masterShip(by id: Int) -> MasterShip? {
150 let p = NSPredicate(#keyPath(MasterShip.id), equal: id)
152 guard let ships = try? objects(of: MasterShip.entity, predicate: p) else { return nil }
157 func sortedMasterSlotItemsById() -> [MasterSlotItem] {
159 let sortDesc = NSSortDescriptor(key: #keyPath(MasterSlotItem.id), ascending: true)
161 guard let masterSlotItems = try? objects(of: MasterSlotItem.entity, sortDescriptors: [sortDesc]) else { return [] }
163 return masterSlotItems
166 func masterSlotItems() -> [MasterSlotItem] {
168 guard let masterSlotItems = try? objects(of: MasterSlotItem.entity) else { return [] }
170 return masterSlotItems
173 func masterSlotItem(by id: Int) -> MasterSlotItem? {
175 let p = NSPredicate(#keyPath(MasterSlotItem.id), equal: id)
177 guard let masterSlotItems = try? objects(of: MasterSlotItem.entity, predicate: p) else { return nil }
179 return masterSlotItems.first
182 func masterSlotItemEquipType(by id: Int) -> MasterSlotItemEquipType? {
184 let predicate = NSPredicate(#keyPath(MasterSlotItemEquipType.id), equal: id)
186 guard let types = try? objects(of: MasterSlotItemEquipType.entity, predicate: predicate) else { return nil }
191 func masterSTypes() -> [MasterSType] {
193 guard let masterSTypes = try? objects(of: MasterSType.entity) else { return [] }
198 func sortedMasterSTypesById() -> [MasterSType] {
200 let sortDesc = NSSortDescriptor(key: #keyPath(MasterSType.id), ascending: true)
202 guard let masterSTypes = try? objects(of: MasterSType.entity, sortDescriptors: [sortDesc]) else { return [] }
207 func material() -> Material? {
209 guard let materials = try? objects(of: Material.entity) else { return nil }
211 return materials.first
214 func createMaterial() -> Material? {
216 return insertNewObject(for: Material.entity)
219 func nyukyoDock(by id: Int) -> NyukyoDock? {
221 let p = NSPredicate(#keyPath(NyukyoDock.id), equal: id)
223 guard let ndocks = try? objects(of: NyukyoDock.entity, predicate: p) else { return nil }
228 func ships(byDeckId deckId: Int) -> [Ship] {
230 let predicate = NSPredicate(#keyPath(Ship.id), equal: deckId)
232 guard let decks = try? objects(of: Deck.entity, predicate: predicate) else { return [] }
233 guard let deck = decks.first else { return [] }
238 func ship(by shipId: Int) -> Ship? {
240 if shipId < 1 { return nil }
242 let predicate = NSPredicate(#keyPath(Ship.id), equal: shipId)
244 guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return nil }
249 func ships(by shipId: Int) -> [Ship] {
251 let predicate = NSPredicate(#keyPath(Ship.id), equal: shipId)
253 guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return [] }
258 func ships(exclude shipIds: [Int]) -> [Ship] {
260 let predicate = NSPredicate.not(NSPredicate(#keyPath(Ship.id), valuesIn: shipIds))
262 guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return [] }
267 func shipsInFleet() -> [Ship] {
269 let predicate = NSPredicate(#keyPath(Ship.fleet), notEqual: 0)
271 guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return [] }
276 func createShip() -> Ship? {
278 return insertNewObject(for: Ship.entity)
281 func masterSlotItemID(by slotItemId: Int) -> Int {
283 if slotItemId < 1 { return 0 }
285 let predicate = NSPredicate(#keyPath(SlotItem.id), equal: slotItemId)
287 guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate) else { return 0 }
288 guard let slotItem = slotItems.first else { return 0 }
290 return slotItem.master_slotItem.id
293 func slotItem(by itemId: Int) -> SlotItem? {
295 let p = NSPredicate(#keyPath(SlotItem.id), equal: itemId)
297 guard let slotItems = try? objects(of: SlotItem.entity, predicate: p) else { return nil }
299 return slotItems.first
302 func sortedSlotItemsById() -> [SlotItem] {
304 let sortDesc = NSSortDescriptor(key: #keyPath(SlotItem.id), ascending: true)
306 guard let slotItems = try? objects(of: SlotItem.entity, sortDescriptors: [sortDesc]) else { return [] }
311 func slotItems() -> [SlotItem] {
313 guard let slotItems = try? objects(of: SlotItem.entity) else { return [] }
318 func slotItems(in itemIds: [Int]) -> [SlotItem] {
320 let predicate = NSPredicate(#keyPath(SlotItem.id), valuesIn: itemIds)
322 guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate) else { return [] }
327 func slotItems(exclude itemIds: [Int]) -> [SlotItem] {
329 let predicate = NSPredicate.not(NSPredicate(#keyPath(SlotItem.id), valuesIn: itemIds))
331 guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate) else { return [] }
336 func createSlotItem() -> SlotItem? {
338 return insertNewObject(for: SlotItem.entity)
341 func quests() -> [Quest] {
343 guard let quests = try? objects(of: Quest.entity) else { return [] }
348 func quest(by no: Int) -> Quest? {
350 let p = NSPredicate(#keyPath(Quest.no), equal: no)
352 guard let quests = try? objects(of: Quest.entity, predicate: p) else { return nil }
357 func quests(in range: CountableClosedRange<Int>) -> [Quest] {
359 let p = NSPredicate(#keyPath(Quest.no), valuesIn: range.map {$0})
361 guard let quests = try? objects(of: Quest.entity, predicate: p) else { return [] }
366 func sortedQuestByNo() -> [Quest] {
368 let sortDesc = NSSortDescriptor(key: #keyPath(Quest.no), ascending: true)
370 guard let quests = try? objects(of: Quest.entity, sortDescriptors: [sortDesc]) else { return [] }
375 func createQuest() -> Quest? {
377 return insertNewObject(for: Quest.entity)