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)
25 class ServerDataStore: CoreDataAccessor, CoreDataManager {
26 static var `default` = ServerDataStore(type: .reader)
27 class func oneTimeEditor() -> ServerDataStore {
28 return ServerDataStore(type: .editor)
31 required init(type: CoreDataManagerType) {
32 managedObjectContext =
33 type == .reader ? core.parentManagedObjectContext
34 : core.editorManagedObjectContext()
40 let core = CoreDataCore.kcd
41 var managedObjectContext: NSManagedObjectContext
44 extension ServerDataStore {
45 func airBases() -> [KCAirBase] {
46 guard let res = try? objects(withEntityName: "AirBase"),
47 let airbase = res as? [KCAirBase]
51 func airBase(area: Int, base: Int) -> KCAirBase? {
52 let p = NSPredicate(format: "area_id == %ld AND rid == %ld", area, base)
53 guard let a = try? objects(withEntityName: "AirBase", predicate: p),
54 let airBases = a as? [KCAirBase],
55 let airBase = airBases.first
59 func createAirBasePlaneInfo() -> KCAirBasePlaneInfo? {
60 return insertNewObject(forEntityName: "AirBasePlaneInfo") as? KCAirBasePlaneInfo
63 func basic() -> KCBasic? {
64 guard let b = try? objects(withEntityName: "Basic"),
65 let basics = b as? [KCBasic],
66 let basic = basics.first
70 func createBasic() -> KCBasic? {
71 return insertNewObject(forEntityName: "Basic") as? KCBasic
74 func decksSortedById() -> [KCDeck] {
75 let sortDec = NSSortDescriptor(key: "id", ascending: true)
76 guard let d = try? objects(withEntityName: "Deck", sortDescriptors: [sortDec]),
77 let decks = d as? [KCDeck]
81 func deck(byId id: Int) -> KCDeck? {
82 let p = NSPredicate(format: "id = %ld", id)
83 guard let d = try? objects(withEntityName: "Deck", predicate: p),
84 let decks = d as? [KCDeck],
85 let deck = decks.first
90 func kenzoDock(byDockId dockId: Int) -> KCKenzoDock? {
91 let dockPredicate = NSPredicate(format: "id = %ld", dockId)
92 guard let k = try? objects(withEntityName: "KenzoDock", predicate: dockPredicate),
93 let kenzoDocks = k as? [KCKenzoDock],
94 let kenzoDock = kenzoDocks.first
99 func mapArea(byId id: Int) -> KCMasterMapArea? {
100 let predicate = NSPredicate(format: "id = %ld", id)
101 guard let a = try? objects(withEntityName: "MasterMapArea", predicate: predicate),
102 let mapAreas = a as? [KCMasterMapArea],
103 let mapArea = mapAreas.first
108 func mapInfo(area: Int, no: Int) -> KCMasterMapInfo? {
109 let predicate = NSPredicate(format: "maparea_id = %ld AND %K = %ld", area, "no", no)
110 guard let m = try? objects(withEntityName: "MasterMapInfo", predicate: predicate),
111 let mapInfos = m as? [KCMasterMapInfo],
112 let mapInfo = mapInfos.first
118 func masterMission(by id: Int) -> KCMasterMission? {
119 let p = NSPredicate(format: "id = %ld", id)
120 guard let ss = try? objects(withEntityName: "MasterMission", predicate: p),
121 let missions = ss as? [KCMasterMission],
122 let mission = missions.first
127 func masterShips() -> [KCMasterShipObject] {
128 guard let s = try? objects(withEntityName: "MasterShip"),
129 let ships = s as? [KCMasterShipObject]
133 func sortedMasterShipsById() -> [KCMasterShipObject] {
134 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
135 guard let s = try? objects(withEntityName: "MasterShip", sortDescriptors: [sortDesc]),
136 let ships = s as? [KCMasterShipObject]
140 func masterShip(byId id: Int) -> KCMasterShipObject? {
141 let p = NSPredicate(format: "id = %ld", id)
142 guard let s = try? objects(withEntityName: "MasterShip", predicate: p),
143 let ships = s as? [KCMasterShipObject],
144 let ship = ships.first
149 func sortedMasterSlotItemsById() -> [KCMasterSlotItemObject] {
150 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
151 guard let ms = try? objects(withEntityName: "MasterSlotItem", sortDescriptors: [sortDesc]),
152 let masterSlotItems = ms as? [KCMasterSlotItemObject]
154 return masterSlotItems
156 func masterSlotItems() -> [KCMasterSlotItemObject] {
157 guard let ms = try? objects(withEntityName: "MasterSlotItem"),
158 let masterSlotItems = ms as? [KCMasterSlotItemObject]
160 return masterSlotItems
162 func masterSlotItem(by id: Int) -> KCMasterSlotItemObject? {
163 let p = NSPredicate(format: "id = %ld", id)
164 guard let ma = try? objects(withEntityName: "MasterSlotItem", predicate: p),
165 let masterSlotItems = ma as? [KCMasterSlotItemObject],
166 let masterSlotItem = masterSlotItems.first
168 return masterSlotItem
171 func masterSlotItemEquipType(by id: Int) -> KCMasterSlotItemEquipTypeObject? {
172 let predicate = NSPredicate(format: "id = %ld", id)
173 guard let a = try? objects(withEntityName: "MasterSlotItemEquipType", predicate: predicate),
174 let types = a as? [KCMasterSlotItemEquipTypeObject],
175 let type = types.first
180 func masterSTypes() -> [KCMasterSType] {
181 guard let ms = try? objects(withEntityName: "MasterSType"),
182 let masterSTypes = ms as? [KCMasterSType]
184 print("MaserShipCommand: MasterSType is not found")
189 func sortedMasterSTypesById() -> [KCMasterSType] {
190 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
191 guard let ms = try? objects(withEntityName: "MasterSType", sortDescriptors: [sortDesc]),
192 let masterSTypes = ms as? [KCMasterSType]
194 print("MaserShipCommand: MasterSType is not found")
200 func material() -> KCMaterial? {
201 guard let m = try? objects(withEntityName: "Material"),
202 let materials = m as? [KCMaterial],
203 let material = materials.first
207 func createMaterial() -> KCMaterial? {
208 return insertNewObject(forEntityName: "Material") as? KCMaterial
211 func nyukyoDock(by id: Int) -> KCNyukyoDock? {
212 let p = NSPredicate(format: "id = %ld", id)
213 guard let d = try? objects(withEntityName: "NyukyoDock", predicate: p),
214 let ndocks = d as? [KCNyukyoDock],
215 let ndock = ndocks.first
220 func ships(byDeckId deckId: Int) -> [KCShipObject] {
221 let predicate = NSPredicate(format: "id = %d", deckId)
222 guard let d = try? objects(withEntityName: "Deck", predicate: predicate),
223 let decks = d as? [KCDeck],
224 let deck = decks.first
226 return (0..<6).flatMap { deck[$0] }
228 func ship(byId shipId: Int) -> KCShipObject? {
229 if shipId < 1 { return nil }
230 let predicate = NSPredicate(format: "id = %d", shipId)
231 guard let s = try? objects(withEntityName: "Ship", predicate: predicate),
232 let ships = s as? [KCShipObject],
233 let ship = ships.first
237 func ships(byId shipId: Int) -> [KCShipObject] {
238 let predicate = NSPredicate(format: "id = %d", shipId)
239 guard let d = try? objects(withEntityName: "Ship", predicate: predicate),
240 let ships = d as? [KCShipObject]
244 func ships(exclude shipIds: [Int]) -> [KCShipObject] {
245 let predicate = NSPredicate(format: "NOT id IN %@", shipIds)
246 guard let s = try? objects(withEntityName: "Ship", predicate: predicate),
247 let ships = s as? [KCShipObject]
251 func shipsInFleet() -> [KCShipObject] {
252 let predicate = NSPredicate(format: "NOT fleet = 0")
253 guard let a = try? objects(withEntityName: "Ship", predicate: predicate),
254 let ships = a as? [KCShipObject]
258 func createShip() -> KCShipObject? {
259 return insertNewObject(forEntityName: "Ship") as? KCShipObject
262 func masterSlotItemID(bySlotItemId slotItemId: Int) -> Int {
263 if slotItemId < 1 { return 0 }
264 let predicate = NSPredicate(format: "id = %d", argumentArray: [slotItemId])
265 guard let s = try? objects(withEntityName: "SlotItem", predicate: predicate),
266 let slotItems = s as? [KCSlotItemObject],
267 let slotItem = slotItems.first
269 return slotItem.master_slotItem.id
272 func slotItem(byId itemId: Int) -> KCSlotItemObject? {
273 let p = NSPredicate(format: "id = %ld", itemId)
274 guard let sl = try? objects(withEntityName: "SlotItem", predicate: p),
275 let slotItems = sl as? [KCSlotItemObject],
276 let slotItem = slotItems.first
280 func sortedSlotItemsById() -> [KCSlotItemObject] {
281 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
282 guard let s = try? objects(withEntityName: "SlotItem", sortDescriptors: [sortDesc]),
283 let slotItems = s as? [KCSlotItemObject]
287 func slotItems() -> [KCSlotItemObject] {
288 guard let s = try? objects(withEntityName: "SlotItem"),
289 let slotItems = s as? [KCSlotItemObject]
293 func slotItems(in itemIds: [Int]) -> [KCSlotItemObject] {
294 let predicate = NSPredicate(format: "id IN %@", itemIds)
295 guard let s = try? objects(withEntityName: "SlotItem", predicate: predicate),
296 let slotItems = s as? [KCSlotItemObject]
300 func slotItems(exclude itemIds: [Int]) -> [KCSlotItemObject] {
301 let predicate = NSPredicate(format: "NOT id IN %@", itemIds)
302 guard let s = try? objects(withEntityName: "SlotItem", predicate: predicate),
303 let slotItems = s as? [KCSlotItemObject]
307 func createSlotItem() -> KCSlotItemObject? {
308 return insertNewObject(forEntityName: "SlotItem") as? KCSlotItemObject
311 func quests() -> [KCQuest] {
312 return try! objects(withEntityName: "Quest") as? [KCQuest] ?? []
314 func quest(by no: Int) -> KCQuest? {
315 let p = NSPredicate(format: "%K = %ld", "no", no)
316 guard let qu = try? objects(withEntityName: "Quest", predicate: p),
317 let que = qu as? [KCQuest],
318 let quest = que.first
322 func quests(in range: CountableClosedRange<Int>) -> [KCQuest] {
323 let p = NSPredicate(format: "%K In %@", "no", range.map {$0})
324 guard let qu = try? objects(withEntityName: "Quest", predicate: p),
325 let quests = qu as? [KCQuest]
329 func sortedQuestByNo() -> [KCQuest] {
330 let sortDesc = NSSortDescriptor(key: "no", ascending: true)
331 guard let qu = try? objects(withEntityName: "Quest", sortDescriptors: [sortDesc]),
332 let quests = qu as? [KCQuest]
336 func createQuest() -> KCQuest? {
337 return insertNewObject(forEntityName: "Quest") as? KCQuest