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)
50 func airBase(area: Int, base: Int) -> AirBase? {
52 let p = NSPredicate(format: "area_id == %ld AND rid == %ld", area, base)
54 guard let airBases = try? objects(of: AirBase.entity, predicate: p)
60 func createAirBasePlaneInfo() -> AirBasePlaneInfo? {
62 return insertNewObject(for: AirBasePlaneInfo.entity)
65 func basic() -> Basic? {
67 guard let basics = try? objects(of: Basic.entity)
73 func createBasic() -> Basic? {
75 return insertNewObject(for: Basic.entity)
78 func decksSortedById() -> [Deck] {
80 let sortDec = NSSortDescriptor(key: "id", ascending: true)
82 guard let decks = try? objects(of: Deck.entity, sortDescriptors: [sortDec])
88 func deck(by id: Int) -> Deck? {
90 let p = NSPredicate(format: "id = %ld", id)
92 guard let decks = try? objects(of: Deck.entity, predicate: p)
98 func kenzoDock(by dockId: Int) -> KenzoDock? {
100 let dockPredicate = NSPredicate(format: "id = %ld", dockId)
102 guard let kenzoDocks = try? objects(of: KenzoDock.entity, predicate: dockPredicate)
105 return kenzoDocks.first
108 func mapArea(by id: Int) -> MasterMapArea? {
109 let predicate = NSPredicate(format: "id = %ld", id)
110 guard let mapAreas = try? objects(of: MasterMapArea.entity, predicate: predicate)
112 return mapAreas.first
115 func mapInfo(area: Int, no: Int) -> MasterMapInfo? {
117 let predicate = NSPredicate(format: "maparea_id = %ld AND %K = %ld", area, "no", no)
119 guard let mapInfos = try? objects(of: MasterMapInfo.entity, predicate: predicate)
122 return mapInfos.first
125 func masterMission(by id: Int) -> MasterMission? {
127 let p = NSPredicate(format: "id = %ld", id)
129 guard let missions = try? objects(of: MasterMission.entity, predicate: p)
132 return missions.first
135 func masterShips() -> [MasterShip] {
137 guard let ships = try? objects(of: MasterShip.entity)
143 func sortedMasterShipsById() -> [MasterShip] {
145 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
147 guard let ships = try? objects(of: MasterShip.entity, sortDescriptors: [sortDesc])
153 func masterShip(by id: Int) -> MasterShip? {
155 let p = NSPredicate(format: "id = %ld", id)
157 guard let ships = try? objects(of: MasterShip.entity, predicate: p)
163 func sortedMasterSlotItemsById() -> [MasterSlotItem] {
165 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
167 guard let masterSlotItems = try? objects(of: MasterSlotItem.entity, sortDescriptors: [sortDesc])
170 return masterSlotItems
173 func masterSlotItems() -> [MasterSlotItem] {
175 guard let masterSlotItems = try? objects(of: MasterSlotItem.entity)
178 return masterSlotItems
181 func masterSlotItem(by id: Int) -> MasterSlotItem? {
183 let p = NSPredicate(format: "id = %ld", id)
185 guard let masterSlotItems = try? objects(of: MasterSlotItem.entity, predicate: p)
188 return masterSlotItems.first
191 func masterSlotItemEquipType(by id: Int) -> MasterSlotItemEquipType? {
193 let predicate = NSPredicate(format: "id = %ld", id)
195 guard let types = try? objects(of: MasterSlotItemEquipType.entity, predicate: predicate)
201 func masterSTypes() -> [MasterSType] {
203 guard let masterSTypes = try? objects(of: MasterSType.entity)
209 func sortedMasterSTypesById() -> [MasterSType] {
211 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
213 guard let masterSTypes = try? objects(of: MasterSType.entity, sortDescriptors: [sortDesc])
219 func material() -> Material? {
221 guard let materials = try? objects(of: Material.entity)
224 return materials.first
227 func createMaterial() -> Material? {
229 return insertNewObject(for: Material.entity)
232 func nyukyoDock(by id: Int) -> NyukyoDock? {
234 let p = NSPredicate(format: "id = %ld", id)
236 guard let ndocks = try? objects(of: NyukyoDock.entity, predicate: p)
242 func ships(byDeckId deckId: Int) -> [Ship] {
244 let predicate = NSPredicate(format: "id = %d", deckId)
246 guard let decks = try? objects(of: Deck.entity, predicate: predicate),
247 let deck = decks.first
253 func ship(by shipId: Int) -> Ship? {
255 if shipId < 1 { return nil }
257 let predicate = NSPredicate(format: "id = %d", shipId)
259 guard let ships = try? objects(of: Ship.entity, predicate: predicate)
265 func ships(by shipId: Int) -> [Ship] {
267 let predicate = NSPredicate(format: "id = %d", shipId)
269 guard let ships = try? objects(of: Ship.entity, predicate: predicate)
275 func ships(exclude shipIds: [Int]) -> [Ship] {
277 let predicate = NSPredicate(format: "NOT id IN %@", shipIds)
279 guard let ships = try? objects(of: Ship.entity, predicate: predicate)
285 func shipsInFleet() -> [Ship] {
287 let predicate = NSPredicate(format: "NOT fleet = 0")
289 guard let ships = try? objects(of: Ship.entity, predicate: predicate)
295 func createShip() -> Ship? {
297 return insertNewObject(for: Ship.entity)
300 func masterSlotItemID(by slotItemId: Int) -> Int {
302 if slotItemId < 1 { return 0 }
304 let predicate = NSPredicate(format: "id = %d", argumentArray: [slotItemId])
306 guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate),
307 let slotItem = slotItems.first
310 return slotItem.master_slotItem.id
313 func slotItem(by itemId: Int) -> SlotItem? {
315 let p = NSPredicate(format: "id = %ld", itemId)
317 guard let slotItems = try? objects(of: SlotItem.entity, predicate: p)
320 return slotItems.first
323 func sortedSlotItemsById() -> [SlotItem] {
325 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
327 guard let slotItems = try? objects(of: SlotItem.entity, sortDescriptors: [sortDesc])
333 func slotItems() -> [SlotItem] {
335 guard let slotItems = try? objects(of: SlotItem.entity)
341 func slotItems(in itemIds: [Int]) -> [SlotItem] {
343 let predicate = NSPredicate(format: "id IN %@", itemIds)
345 guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate)
351 func slotItems(exclude itemIds: [Int]) -> [SlotItem] {
353 let predicate = NSPredicate(format: "NOT id IN %@", itemIds)
355 guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate)
361 func createSlotItem() -> SlotItem? {
363 return insertNewObject(for: SlotItem.entity)
366 func quests() -> [Quest] {
368 guard let quests = try? objects(of: Quest.entity)
374 func quest(by no: Int) -> Quest? {
376 let p = NSPredicate(format: "%K = %ld", "no", no)
378 guard let quests = try? objects(of: Quest.entity, predicate: p)
384 func quests(in range: CountableClosedRange<Int>) -> [Quest] {
386 let p = NSPredicate(format: "%K In %@", "no", range.map {$0})
388 guard let quests = try? objects(of: Quest.entity, predicate: p)
394 func sortedQuestByNo() -> [Quest] {
396 let sortDesc = NSSortDescriptor(key: "no", ascending: true)
398 guard let quests = try? objects(of: Quest.entity, sortDescriptors: [sortDesc])
404 func createQuest() -> Quest? {
406 return insertNewObject(for: Quest.entity)