OSDN Git Service

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