OSDN Git Service

可能な限り#keyPathを使うように変更
[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 CoreDataConfiguration {
12     
13     static let kcd = CoreDataConfiguration("KCD", tryRemake: true)
14 }
15
16 final class ServerDataStore: CoreDataAccessor, CoreDataManager {
17     
18     static let core = CoreDataCore(.kcd)
19     
20     static let `default` = ServerDataStore(type: .reader)
21     
22     class func oneTimeEditor() -> ServerDataStore {
23         
24         return ServerDataStore(type: .editor)
25     }
26         
27     required init(type: CoreDataManagerType) {
28         
29         context = ServerDataStore.context(for: type)
30     }
31     
32     deinit {
33         
34         save()
35     }
36     
37     let context: NSManagedObjectContext
38 }
39
40 extension ServerDataStore {
41     
42     func airBases() -> [AirBase] {
43         
44         guard let airbase = try? objects(of: AirBase.entity) else { return [] }
45         
46         return airbase
47     }
48     
49     func airBase(area: Int, base: Int) -> AirBase? {
50         
51         let p = NSPredicate.empty
52             .and(NSPredicate(#keyPath(AirBase.area_id), equal: area))
53             .and(NSPredicate(#keyPath(AirBase.rid), equal: base))
54         
55         guard let airBases = try? objects(of: AirBase.entity, predicate: p) else { return nil }
56         
57         return airBases.first
58     }
59     
60     func createAirBasePlaneInfo() -> AirBasePlaneInfo? {
61         
62         return insertNewObject(for: AirBasePlaneInfo.entity)
63     }
64     
65     func basic() -> Basic? {
66         
67         guard let basics = try? objects(of: Basic.entity) else { return nil }
68         
69         return basics.first
70     }
71     
72     func createBasic() -> Basic? {
73         
74         return insertNewObject(for: Basic.entity)
75     }
76     
77     func decksSortedById() -> [Deck] {
78         
79         let sortDec = NSSortDescriptor(key: #keyPath(Deck.id), ascending: true)
80         
81         guard let decks = try? objects(of: Deck.entity, sortDescriptors: [sortDec]) else { return [] }
82         
83         return decks
84     }
85     
86     func deck(by id: Int) -> Deck? {
87         
88         let p = NSPredicate(#keyPath(Deck.id), equal: id)
89         
90         guard let decks = try? objects(of: Deck.entity, predicate: p) else { return nil }
91         
92         return decks.first
93     }
94     
95     func kenzoDock(by dockId: Int) -> KenzoDock? {
96         
97         let dockPredicate = NSPredicate(#keyPath(KenzoDock.id), equal: dockId)
98         
99         guard let kenzoDocks = try? objects(of: KenzoDock.entity, predicate: dockPredicate) else { return nil }
100         
101         return kenzoDocks.first
102     }
103     
104     func mapArea(by id: Int) -> MasterMapArea? {
105         
106         let predicate = NSPredicate(#keyPath(MasterMapArea.id), equal: id)
107         guard let mapAreas = try? objects(of: MasterMapArea.entity, predicate: predicate) else { return nil }
108         
109         return mapAreas.first
110     }
111     
112     func mapInfo(area: Int, no: Int) -> MasterMapInfo? {
113         
114         let predicate = NSPredicate.empty
115             .and(NSPredicate(#keyPath(MasterMapInfo.maparea_id), equal: area))
116             .and(NSPredicate(#keyPath(MasterMapInfo.no), equal: no))
117         
118         guard let mapInfos = try? objects(of: MasterMapInfo.entity, predicate: predicate) else { return nil }
119         
120         return mapInfos.first
121     }
122     
123     func masterMission(by id: Int) -> MasterMission? {
124         
125         let p = NSPredicate(#keyPath(MasterMission.id), equal: id)
126         
127         guard let missions = try? objects(of: MasterMission.entity, predicate: p) else { return nil }
128         
129         return missions.first
130     }
131     
132     func masterShips() -> [MasterShip] {
133         
134         guard let ships = try? objects(of: MasterShip.entity) else { return [] }
135         
136         return ships
137     }
138     
139     func sortedMasterShipsById() -> [MasterShip] {
140         
141         let sortDesc = NSSortDescriptor(key: #keyPath(MasterShip.id), ascending: true)
142         
143         guard let ships = try? objects(of: MasterShip.entity, sortDescriptors: [sortDesc]) else { return [] }
144         
145         return ships
146     }
147     
148     func masterShip(by id: Int) -> MasterShip? {
149         
150         let p = NSPredicate(#keyPath(MasterShip.id), equal: id)
151         
152         guard let ships = try? objects(of: MasterShip.entity, predicate: p) else { return nil }
153         
154         return ships.first
155     }
156     
157     func sortedMasterSlotItemsById() -> [MasterSlotItem] {
158         
159         let sortDesc = NSSortDescriptor(key: #keyPath(MasterSlotItem.id), ascending: true)
160         
161         guard let masterSlotItems = try? objects(of: MasterSlotItem.entity, sortDescriptors: [sortDesc]) else { return [] }
162         
163         return masterSlotItems
164     }
165     
166     func masterSlotItems() -> [MasterSlotItem] {
167         
168         guard let masterSlotItems = try? objects(of: MasterSlotItem.entity) else { return [] }
169         
170         return masterSlotItems
171     }
172     
173     func masterSlotItem(by id: Int) -> MasterSlotItem? {
174         
175         let p = NSPredicate(#keyPath(MasterSlotItem.id), equal: id)
176         
177         guard let masterSlotItems = try? objects(of: MasterSlotItem.entity, predicate: p) else { return nil }
178         
179         return masterSlotItems.first
180     }
181     
182     func masterSlotItemEquipType(by id: Int) -> MasterSlotItemEquipType? {
183         
184         let predicate = NSPredicate(#keyPath(MasterSlotItemEquipType.id), equal: id)
185         
186         guard let types = try? objects(of: MasterSlotItemEquipType.entity, predicate: predicate) else { return nil }
187         
188         return types.first
189     }
190     
191     func masterSTypes() -> [MasterSType] {
192         
193         guard let masterSTypes = try? objects(of: MasterSType.entity) else { return [] }
194         
195         return masterSTypes
196     }
197     
198     func sortedMasterSTypesById() -> [MasterSType] {
199         
200         let sortDesc = NSSortDescriptor(key: #keyPath(MasterSType.id), ascending: true)
201         
202         guard let masterSTypes = try? objects(of: MasterSType.entity, sortDescriptors: [sortDesc]) else { return [] }
203         
204         return masterSTypes
205     }
206     
207     func material() -> Material? {
208         
209         guard let materials = try? objects(of: Material.entity) else { return nil }
210         
211         return materials.first
212     }
213     
214     func createMaterial() -> Material? {
215         
216         return insertNewObject(for: Material.entity)
217     }
218     
219     func nyukyoDock(by id: Int) -> NyukyoDock? {
220         
221         let p = NSPredicate(#keyPath(NyukyoDock.id), equal: id)
222         
223         guard let ndocks = try? objects(of: NyukyoDock.entity, predicate: p) else { return nil }
224         
225         return ndocks.first
226     }
227     
228     func ships(byDeckId deckId: Int) -> [Ship] {
229         
230         let predicate = NSPredicate(#keyPath(Ship.id), equal: deckId)
231         
232         guard let decks = try? objects(of: Deck.entity, predicate: predicate) else { return [] }
233         guard let deck = decks.first else { return [] }
234         
235         return deck[0...5]
236     }
237     
238     func ship(by shipId: Int) -> Ship? {
239         
240         if shipId < 1 { return nil }
241         
242         let predicate = NSPredicate(#keyPath(Ship.id), equal: shipId)
243         
244         guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return nil }
245         
246         return ships.first
247     }
248     
249     func ships(by shipId: Int) -> [Ship] {
250         
251         let predicate = NSPredicate(#keyPath(Ship.id), equal: shipId)
252         
253         guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return [] }
254         
255         return ships
256     }
257     
258     func ships(exclude shipIds: [Int]) -> [Ship] {
259         
260         let predicate = NSPredicate.not(NSPredicate(#keyPath(Ship.id), valuesIn: shipIds))
261         
262         guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return [] }
263         
264         return ships
265     }
266     
267     func shipsInFleet() -> [Ship] {
268         
269         let predicate = NSPredicate(#keyPath(Ship.fleet), notEqual: 0)
270         
271         guard let ships = try? objects(of: Ship.entity, predicate: predicate) else { return [] }
272         
273         return ships
274     }
275     
276     func createShip() -> Ship? {
277         
278         return insertNewObject(for: Ship.entity)
279     }
280     
281     func masterSlotItemID(by slotItemId: Int) -> Int {
282         
283         if slotItemId < 1 { return 0 }
284         
285         let predicate = NSPredicate(#keyPath(SlotItem.id), equal: slotItemId)
286         
287         guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate) else { return 0 }
288         guard let slotItem = slotItems.first else { return 0 }
289         
290         return slotItem.master_slotItem.id
291     }
292     
293     func slotItem(by itemId: Int) -> SlotItem? {
294         
295         let p = NSPredicate(#keyPath(SlotItem.id), equal: itemId)
296         
297         guard let slotItems = try? objects(of: SlotItem.entity, predicate: p) else { return nil }
298         
299         return slotItems.first
300     }
301     
302     func sortedSlotItemsById() -> [SlotItem] {
303         
304         let sortDesc = NSSortDescriptor(key: #keyPath(SlotItem.id), ascending: true)
305         
306         guard let slotItems = try? objects(of: SlotItem.entity, sortDescriptors: [sortDesc]) else { return [] }
307         
308         return slotItems
309     }
310     
311     func slotItems() -> [SlotItem] {
312         
313         guard let slotItems = try? objects(of: SlotItem.entity) else { return [] }
314         
315         return slotItems
316     }
317     
318     func slotItems(in itemIds: [Int]) -> [SlotItem] {
319         
320         let predicate = NSPredicate(#keyPath(SlotItem.id), valuesIn: itemIds)
321         
322         guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate) else { return [] }
323         
324         return slotItems
325     }
326     
327     func slotItems(exclude itemIds: [Int]) -> [SlotItem] {
328         
329         let predicate = NSPredicate.not(NSPredicate(#keyPath(SlotItem.id), valuesIn: itemIds))
330         
331         guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate) else { return [] }
332         
333         return slotItems
334     }
335     
336     func createSlotItem() -> SlotItem? {
337         
338         return insertNewObject(for: SlotItem.entity)
339     }
340     
341     func quests() -> [Quest] {
342         
343         guard let quests = try? objects(of: Quest.entity) else { return [] }
344         
345         return quests
346     }
347     
348     func quest(by no: Int) -> Quest? {
349         
350         let p = NSPredicate(#keyPath(Quest.no), equal: no)
351         
352         guard let quests = try? objects(of: Quest.entity, predicate: p) else { return nil }
353         
354         return quests.first
355     }
356     
357     func quests(in range: CountableClosedRange<Int>) -> [Quest] {
358         
359         let p = NSPredicate(#keyPath(Quest.no), valuesIn: range.map {$0})
360         
361         guard let quests = try? objects(of: Quest.entity, predicate: p) else { return [] }
362         
363         return quests
364     }
365     
366     func sortedQuestByNo() -> [Quest] {
367         
368         let sortDesc = NSSortDescriptor(key: #keyPath(Quest.no), ascending: true)
369         
370         guard let quests = try? objects(of: Quest.entity, sortDescriptors: [sortDesc]) else { return [] }
371         
372         return quests
373     }
374     
375     func createQuest() -> Quest? {
376         
377         return insertNewObject(for: Quest.entity)
378     }
379 }