2 // ServerDataStore.swift
5 // Created by Hori,Masaki on 2017/01/07.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 extension CoreDataIntormation {
12 static let kcd = CoreDataIntormation(
14 storeFileName: "KCD.storedata",
15 storeOptions:[NSMigratePersistentStoresAutomaticallyOption: true,
16 NSInferMappingModelAutomaticallyOption: true],
17 storeType: NSSQLiteStoreType,
21 extension CoreDataCore {
22 static let kcd = CoreDataCore(.kcd)
26 class ServerDataStore: CoreDataAccessor, CoreDataManager {
27 static var `default` = ServerDataStore(type: .reader)
28 class func oneTimeEditor() -> ServerDataStore {
29 return ServerDataStore(type: .editor)
32 required init(type: CoreDataManagerType) {
33 managedObjectContext =
34 type == .reader ? core.parentManagedObjectContext
35 : core.editorManagedObjectContext()
41 let core = CoreDataCore.kcd
42 var managedObjectContext: NSManagedObjectContext
45 extension KCAirBase: EntityProvider {
46 override class var entityName: String { return "AirBase" }
48 extension KCAirBasePlaneInfo: EntityProvider {
49 override class var entityName: String { return "AirBasePlaneInfo" }
51 extension KCBasic: EntityProvider {
52 override class var entityName: String { return "Basic" }
54 extension KCDeck: EntityProvider {
55 override class var entityName: String { return "Deck" }
57 extension KCKenzoDock: EntityProvider {
58 override class var entityName: String { return "KenzoDock" }
60 extension MasterFurniture: EntityProvider {
61 override class var entityName: String { return "MasterFurniture" }
63 extension KCMasterMapArea: EntityProvider {
64 override class var entityName: String { return "MasterMapArea" }
66 extension KCMasterMapInfo: EntityProvider {
67 override class var entityName: String { return "MasterMapInfo" }
69 extension KCMasterMission: EntityProvider {
70 override class var entityName: String { return "MasterMission" }
72 extension KCMasterShipObject: EntityProvider {
73 override class var entityName: String { return "MasterShip" }
75 extension KCMasterSlotItemObject: EntityProvider {
76 override class var entityName: String { return "MasterSlotItem" }
78 extension KCMasterSType: EntityProvider {
79 override class var entityName: String { return "MasterSType" }
81 extension KCMasterSlotItemEquipTypeObject: EntityProvider {
82 override class var entityName: String { return "MasterSlotItemEquipType" }
84 extension MasterUseItem: EntityProvider {
85 override class var entityName: String { return "MasterUseItem" }
87 extension KCMaterial: EntityProvider {
88 override class var entityName: String { return "Material" }
90 extension KCNyukyoDock: EntityProvider {
91 override class var entityName: String { return "NyukyoDock" }
93 extension KCShipObject: EntityProvider {
94 override class var entityName: String { return "Ship" }
96 extension KCSlotItemObject: EntityProvider {
97 override class var entityName: String { return "SlotItem" }
99 extension KCQuest: EntityProvider {
100 override class var entityName: String { return "Quest" }
103 extension ServerDataStore {
104 func airBases() -> [KCAirBase] {
105 guard let airbase = try? objects(with: KCAirBase.entity)
109 func airBase(area: Int, base: Int) -> KCAirBase? {
110 let p = NSPredicate(format: "area_id == %ld AND rid == %ld", area, base)
111 guard let airBases = try? objects(with: KCAirBase.entity, predicate: p)
113 return airBases.first
115 func createAirBasePlaneInfo() -> KCAirBasePlaneInfo? {
116 return insertNewObject(for: KCAirBasePlaneInfo.entity)
119 func basic() -> KCBasic? {
120 guard let basics = try? objects(with: KCBasic.entity)
124 func createBasic() -> KCBasic? {
125 return insertNewObject(for: KCBasic.entity)
128 func decksSortedById() -> [KCDeck] {
129 let sortDec = NSSortDescriptor(key: "id", ascending: true)
130 guard let decks = try? objects(with: KCDeck.entity, sortDescriptors: [sortDec])
134 func deck(byId id: Int) -> KCDeck? {
135 let p = NSPredicate(format: "id = %ld", id)
136 guard let decks = try? objects(with: KCDeck.entity, predicate: p)
141 func kenzoDock(byDockId dockId: Int) -> KCKenzoDock? {
142 let dockPredicate = NSPredicate(format: "id = %ld", dockId)
143 guard let kenzoDocks = try? objects(with: KCKenzoDock.entity, predicate: dockPredicate)
145 return kenzoDocks.first
148 func mapArea(byId id: Int) -> KCMasterMapArea? {
149 let predicate = NSPredicate(format: "id = %ld", id)
150 guard let mapAreas = try? objects(with: KCMasterMapArea.entity, predicate: predicate)
152 return mapAreas.first
155 func mapInfo(area: Int, no: Int) -> KCMasterMapInfo? {
156 let predicate = NSPredicate(format: "maparea_id = %ld AND %K = %ld", area, "no", no)
157 guard let mapInfos = try? objects(with: KCMasterMapInfo.entity, predicate: predicate)
159 return mapInfos.first
162 func masterMission(by id: Int) -> KCMasterMission? {
163 let p = NSPredicate(format: "id = %ld", id)
164 guard let missions = try? objects(with: KCMasterMission.entity, predicate: p)
166 return missions.first
169 func masterShips() -> [KCMasterShipObject] {
170 guard let ships = try? objects(with: KCMasterShipObject.entity)
174 func sortedMasterShipsById() -> [KCMasterShipObject] {
175 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
176 guard let ships = try? objects(with: KCMasterShipObject.entity, sortDescriptors: [sortDesc])
180 func masterShip(byId id: Int) -> KCMasterShipObject? {
181 let p = NSPredicate(format: "id = %ld", id)
182 guard let ships = try? objects(with: KCMasterShipObject.entity, predicate: p)
187 func sortedMasterSlotItemsById() -> [KCMasterSlotItemObject] {
188 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
189 guard let masterSlotItems = try? objects(with: KCMasterSlotItemObject.entity, sortDescriptors: [sortDesc])
191 return masterSlotItems
193 func masterSlotItems() -> [KCMasterSlotItemObject] {
194 guard let masterSlotItems = try? objects(with: KCMasterSlotItemObject.entity)
196 return masterSlotItems
198 func masterSlotItem(by id: Int) -> KCMasterSlotItemObject? {
199 let p = NSPredicate(format: "id = %ld", id)
200 guard let masterSlotItems = try? objects(with: KCMasterSlotItemObject.entity, predicate: p)
202 return masterSlotItems.first
205 func masterSlotItemEquipType(by id: Int) -> KCMasterSlotItemEquipTypeObject? {
206 let predicate = NSPredicate(format: "id = %ld", id)
207 guard let types = try? objects(with: KCMasterSlotItemEquipTypeObject.entity, predicate: predicate)
212 func masterSTypes() -> [KCMasterSType] {
213 guard let masterSTypes = try? objects(with: KCMasterSType.entity)
217 func sortedMasterSTypesById() -> [KCMasterSType] {
218 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
219 guard let masterSTypes = try? objects(with: KCMasterSType.entity, sortDescriptors: [sortDesc])
224 func material() -> KCMaterial? {
225 guard let materials = try? objects(with: KCMaterial.entity)
227 return materials.first
229 func createMaterial() -> KCMaterial? {
230 return insertNewObject(for: KCMaterial.entity)
233 func nyukyoDock(by id: Int) -> KCNyukyoDock? {
234 let p = NSPredicate(format: "id = %ld", id)
235 guard let ndocks = try? objects(with: KCNyukyoDock.entity, predicate: p)
240 func ships(byDeckId deckId: Int) -> [KCShipObject] {
241 let predicate = NSPredicate(format: "id = %d", deckId)
242 guard let decks = try? objects(with: KCDeck.entity, predicate: predicate),
243 let deck = decks.first
245 return (0..<6).flatMap { deck[$0] }
247 func ship(byId shipId: Int) -> KCShipObject? {
248 if shipId < 1 { return nil }
249 let predicate = NSPredicate(format: "id = %d", shipId)
250 guard let ships = try? objects(with: KCShipObject.entity, predicate: predicate)
254 func ships(byId shipId: Int) -> [KCShipObject] {
255 let predicate = NSPredicate(format: "id = %d", shipId)
256 guard let ships = try? objects(with: KCShipObject.entity, predicate: predicate)
260 func ships(exclude shipIds: [Int]) -> [KCShipObject] {
261 let predicate = NSPredicate(format: "NOT id IN %@", shipIds)
262 guard let ships = try? objects(with: KCShipObject.entity, predicate: predicate)
266 func shipsInFleet() -> [KCShipObject] {
267 let predicate = NSPredicate(format: "NOT fleet = 0")
268 guard let ships = try? objects(with: KCShipObject.entity, predicate: predicate)
272 func createShip() -> KCShipObject? {
273 return insertNewObject(for: KCShipObject.entity)
276 func masterSlotItemID(bySlotItemId slotItemId: Int) -> Int {
277 if slotItemId < 1 { return 0 }
278 let predicate = NSPredicate(format: "id = %d", argumentArray: [slotItemId])
279 guard let slotItems = try? objects(with: KCSlotItemObject.entity, predicate: predicate),
280 let slotItem = slotItems.first
282 return slotItem.master_slotItem.id
285 func slotItem(byId itemId: Int) -> KCSlotItemObject? {
286 let p = NSPredicate(format: "id = %ld", itemId)
287 guard let slotItems = try? objects(with: KCSlotItemObject.entity, predicate: p)
289 return slotItems.first
291 func sortedSlotItemsById() -> [KCSlotItemObject] {
292 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
293 guard let slotItems = try? objects(with: KCSlotItemObject.entity, sortDescriptors: [sortDesc])
297 func slotItems() -> [KCSlotItemObject] {
298 guard let slotItems = try? objects(with: KCSlotItemObject.entity)
302 func slotItems(in itemIds: [Int]) -> [KCSlotItemObject] {
303 let predicate = NSPredicate(format: "id IN %@", itemIds)
304 guard let slotItems = try? objects(with: KCSlotItemObject.entity, predicate: predicate)
308 func slotItems(exclude itemIds: [Int]) -> [KCSlotItemObject] {
309 let predicate = NSPredicate(format: "NOT id IN %@", itemIds)
310 guard let slotItems = try? objects(with: KCSlotItemObject.entity, predicate: predicate)
314 func createSlotItem() -> KCSlotItemObject? {
315 return insertNewObject(for: KCSlotItemObject.entity)
318 func quests() -> [KCQuest] {
319 guard let quests = try? objects(with: KCQuest.entity)
323 func quest(by no: Int) -> KCQuest? {
324 let p = NSPredicate(format: "%K = %ld", "no", no)
325 guard let quests = try? objects(with: KCQuest.entity, predicate: p)
329 func quests(in range: CountableClosedRange<Int>) -> [KCQuest] {
330 let p = NSPredicate(format: "%K In %@", "no", range.map {$0})
331 guard let quests = try? objects(with: KCQuest.entity, predicate: p)
335 func sortedQuestByNo() -> [KCQuest] {
336 let sortDesc = NSSortDescriptor(key: "no", ascending: true)
337 guard let quests = try? objects(with: KCQuest.entity, sortDescriptors: [sortDesc])
341 func createQuest() -> KCQuest? {
342 return insertNewObject(for: KCQuest.entity)