OSDN Git Service

エンティティ名をCoreDataManager内以外から排除した
[kcd/KCD.git] / KCD / ServerDataStore.swift
1 //
2 //  ServerDataStore.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/07.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 extension CoreDataIntormation {
12     static let kcd = CoreDataIntormation(
13         modelName: "KCD",
14         storeFileName: "KCD.storedata",
15         storeOptions:[NSMigratePersistentStoresAutomaticallyOption: true,
16                       NSInferMappingModelAutomaticallyOption: true],
17         storeType: NSSQLiteStoreType,
18         deleteAndRetry: true
19     )
20 }
21 extension CoreDataCore {
22     static let kcd = CoreDataCore(.kcd)
23 }
24
25 class ServerDataStore: CoreDataAccessor, CoreDataManager {
26     static var `default` = ServerDataStore(type: .reader)
27     class func oneTimeEditor() -> ServerDataStore {
28         return ServerDataStore(type: .editor)
29     }
30         
31     required init(type: CoreDataManagerType) {
32         managedObjectContext =
33             type == .reader ? core.parentManagedObjectContext
34             : core.editorManagedObjectContext()
35     }
36     deinit {
37         saveActionCore()
38     }
39     
40     let core = CoreDataCore.kcd
41     var managedObjectContext: NSManagedObjectContext
42 }
43
44 extension ServerDataStore {
45     func airBases() -> [KCAirBase] {
46         guard let res = try? objects(withEntityName: "AirBase"),
47             let airbase = res as? [KCAirBase]
48             else { return [] }
49         return airbase
50     }
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
56             else { return nil }
57         return airBase
58     }
59     func createAirBasePlaneInfo() -> KCAirBasePlaneInfo? {
60         return insertNewObject(forEntityName: "AirBasePlaneInfo") as? KCAirBasePlaneInfo
61     }
62     
63     func basic() -> KCBasic? {
64         guard let b = try? objects(withEntityName: "Basic"),
65             let basics = b as? [KCBasic],
66             let basic = basics.first
67             else { return nil }
68         return basic
69     }
70     func createBasic() -> KCBasic? {
71         return insertNewObject(forEntityName: "Basic") as? KCBasic
72     }
73     
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]
78             else { return [] }
79         return decks
80     }
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
86             else { return nil }
87         return deck
88     }
89     
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
95             else { return nil }
96         return kenzoDock
97     }
98     
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
104             else { return nil }
105         return mapArea
106     }
107     
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
113             else { return nil }
114         
115         return mapInfo
116     }
117     
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
123             else { return nil }
124         return mission
125     }
126     
127     func masterShips() -> [KCMasterShipObject] {
128         guard let s = try? objects(withEntityName: "MasterShip"),
129             let ships = s as? [KCMasterShipObject]
130             else { return [] }
131         return ships
132     }
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]
137             else { return [] }
138         return ships
139     }
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
145             else { return nil }
146         return ship
147     }
148     
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]
153             else { return [] }
154         return masterSlotItems
155     }
156     func masterSlotItems() -> [KCMasterSlotItemObject] {
157         guard let ms = try? objects(withEntityName: "MasterSlotItem"),
158             let masterSlotItems = ms as? [KCMasterSlotItemObject]
159             else { return [] }
160         return masterSlotItems
161     }
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
167             else { return nil }
168         return masterSlotItem
169     }
170     
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
176             else { return nil }
177         return type
178     }
179     
180     func masterSTypes() -> [KCMasterSType] {
181         guard let ms = try? objects(withEntityName: "MasterSType"),
182             let masterSTypes = ms as? [KCMasterSType]
183             else {
184                 print("MaserShipCommand: MasterSType is not found")
185                 return []
186         }
187         return masterSTypes
188     }
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]
193             else {
194                 print("MaserShipCommand: MasterSType is not found")
195                 return []
196         }
197         return masterSTypes
198     }
199     
200     func material() -> KCMaterial? {
201         guard let m = try? objects(withEntityName: "Material"),
202             let materials = m as? [KCMaterial],
203             let material = materials.first
204             else { return nil }
205         return material
206     }
207     func createMaterial() -> KCMaterial? {
208         return insertNewObject(forEntityName: "Material") as? KCMaterial
209     }
210     
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
216             else { return nil }
217         return ndock
218     }
219     
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
225             else { return [] }
226         return (0..<6).flatMap { deck[$0] }
227     }
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
234             else { return nil }
235         return ship
236     }
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]
241             else { return [] }
242         return ships
243     }
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]
248             else { return [] }
249         return ships
250     }
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]
255             else { return [] }
256         return ships
257     }
258     func createShip() -> KCShipObject? {
259         return insertNewObject(forEntityName: "Ship") as? KCShipObject
260     }
261     
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
268             else { return 0 }
269         return slotItem.master_slotItem.id
270     }
271     
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
277             else { return nil }
278         return slotItem
279     }
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]
284             else { return [] }
285         return slotItems
286     }
287     func slotItems() -> [KCSlotItemObject] {
288         guard let s = try? objects(withEntityName: "SlotItem"),
289             let slotItems = s as? [KCSlotItemObject]
290             else { return [] }
291         return slotItems
292     }
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]
297             else { return [] }
298         return slotItems
299     }
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]
304             else { return [] }
305         return slotItems
306     }
307     func createSlotItem() -> KCSlotItemObject? {
308         return insertNewObject(forEntityName: "SlotItem") as? KCSlotItemObject
309     }
310     
311     func quests() -> [KCQuest] {
312         return try! objects(withEntityName: "Quest") as? [KCQuest] ?? []
313     }
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
319             else { return nil }
320         return quest
321     }
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]
326             else { return [] }
327         return quests
328     }
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]
333             else { return [] }
334         return quests
335     }
336     func createQuest() -> KCQuest? {
337         return insertNewObject(forEntityName: "Quest") as? KCQuest
338     }
339 }