OSDN Git Service

CoreDataAccessorのインターフェイスを変更
[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)
45             else { return [] }
46         
47         return airbase
48     }
49     
50     func airBase(area: Int, base: Int) -> AirBase? {
51         
52         let p = NSPredicate(format: "area_id == %ld AND rid == %ld", area, base)
53         
54         guard let airBases = try? objects(of: AirBase.entity, predicate: p)
55             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)
68             else { return nil }
69         
70         return basics.first
71     }
72     
73     func createBasic() -> Basic? {
74         
75         return insertNewObject(for: Basic.entity)
76     }
77     
78     func decksSortedById() -> [Deck] {
79         
80         let sortDec = NSSortDescriptor(key: "id", ascending: true)
81         
82         guard let decks = try? objects(of: Deck.entity, sortDescriptors: [sortDec])
83             else { return [] }
84         
85         return decks
86     }
87     
88     func deck(by id: Int) -> Deck? {
89         
90         let p = NSPredicate(format: "id = %ld", id)
91         
92         guard let decks = try? objects(of: Deck.entity, predicate: p)
93             else { return nil }
94         
95         return decks.first
96     }
97     
98     func kenzoDock(by dockId: Int) -> KenzoDock? {
99         
100         let dockPredicate = NSPredicate(format: "id = %ld", dockId)
101         
102         guard let kenzoDocks = try? objects(of: KenzoDock.entity, predicate: dockPredicate)
103             else { return nil }
104         
105         return kenzoDocks.first
106     }
107     
108     func mapArea(by id: Int) -> MasterMapArea? {
109         let predicate = NSPredicate(format: "id = %ld", id)
110         guard let mapAreas = try? objects(of: MasterMapArea.entity, predicate: predicate)
111             else { return nil }
112         return mapAreas.first
113     }
114     
115     func mapInfo(area: Int, no: Int) -> MasterMapInfo? {
116         
117         let predicate = NSPredicate(format: "maparea_id = %ld AND %K = %ld", area, "no", no)
118         
119         guard let mapInfos = try? objects(of: MasterMapInfo.entity, predicate: predicate)
120             else { return nil }
121         
122         return mapInfos.first
123     }
124     
125     func masterMission(by id: Int) -> MasterMission? {
126         
127         let p = NSPredicate(format: "id = %ld", id)
128         
129         guard let missions = try? objects(of: MasterMission.entity, predicate: p)
130             else { return nil }
131         
132         return missions.first
133     }
134     
135     func masterShips() -> [MasterShip] {
136         
137         guard let ships = try? objects(of: MasterShip.entity)
138             else { return [] }
139         
140         return ships
141     }
142     
143     func sortedMasterShipsById() -> [MasterShip] {
144         
145         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
146         
147         guard let ships = try? objects(of: MasterShip.entity, sortDescriptors: [sortDesc])
148             else { return [] }
149         
150         return ships
151     }
152     
153     func masterShip(by id: Int) -> MasterShip? {
154         
155         let p = NSPredicate(format: "id = %ld", id)
156         
157         guard let ships = try? objects(of: MasterShip.entity, predicate: p)
158             else { return nil }
159         
160         return ships.first
161     }
162     
163     func sortedMasterSlotItemsById() -> [MasterSlotItem] {
164         
165         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
166         
167         guard let masterSlotItems = try? objects(of: MasterSlotItem.entity, sortDescriptors: [sortDesc])
168             else { return [] }
169         
170         return masterSlotItems
171     }
172     
173     func masterSlotItems() -> [MasterSlotItem] {
174         
175         guard let masterSlotItems = try? objects(of: MasterSlotItem.entity)
176             else { return [] }
177         
178         return masterSlotItems
179     }
180     
181     func masterSlotItem(by id: Int) -> MasterSlotItem? {
182         
183         let p = NSPredicate(format: "id = %ld", id)
184         
185         guard let masterSlotItems = try? objects(of: MasterSlotItem.entity, predicate: p)
186             else { return nil }
187         
188         return masterSlotItems.first
189     }
190     
191     func masterSlotItemEquipType(by id: Int) -> MasterSlotItemEquipType? {
192         
193         let predicate = NSPredicate(format: "id = %ld", id)
194         
195         guard let types = try? objects(of: MasterSlotItemEquipType.entity, predicate: predicate)
196             else { return nil }
197         
198         return types.first
199     }
200     
201     func masterSTypes() -> [MasterSType] {
202         
203         guard let masterSTypes = try? objects(of: MasterSType.entity)
204             else { return [] }
205         
206         return masterSTypes
207     }
208     
209     func sortedMasterSTypesById() -> [MasterSType] {
210         
211         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
212         
213         guard let masterSTypes = try? objects(of: MasterSType.entity, sortDescriptors: [sortDesc])
214             else { return [] }
215         
216         return masterSTypes
217     }
218     
219     func material() -> Material? {
220         
221         guard let materials = try? objects(of: Material.entity)
222             else { return nil }
223         
224         return materials.first
225     }
226     
227     func createMaterial() -> Material? {
228         
229         return insertNewObject(for: Material.entity)
230     }
231     
232     func nyukyoDock(by id: Int) -> NyukyoDock? {
233         
234         let p = NSPredicate(format: "id = %ld", id)
235         
236         guard let ndocks = try? objects(of: NyukyoDock.entity, predicate: p)
237             else { return nil }
238         
239         return ndocks.first
240     }
241     
242     func ships(byDeckId deckId: Int) -> [Ship] {
243         
244         let predicate = NSPredicate(format: "id = %d", deckId)
245         
246         guard let decks = try? objects(of: Deck.entity, predicate: predicate),
247             let deck = decks.first
248             else { return [] }
249         
250         return deck[0...5]
251     }
252     
253     func ship(by shipId: Int) -> Ship? {
254         
255         if shipId < 1 { return nil }
256         
257         let predicate = NSPredicate(format: "id = %d", shipId)
258         
259         guard let ships = try? objects(of: Ship.entity, predicate: predicate)
260             else { return nil }
261         
262         return ships.first
263     }
264     
265     func ships(by shipId: Int) -> [Ship] {
266         
267         let predicate = NSPredicate(format: "id = %d", shipId)
268         
269         guard let ships = try? objects(of: Ship.entity, predicate: predicate)
270             else { return [] }
271         
272         return ships
273     }
274     
275     func ships(exclude shipIds: [Int]) -> [Ship] {
276         
277         let predicate = NSPredicate(format: "NOT id IN %@", shipIds)
278         
279         guard let ships = try? objects(of: Ship.entity, predicate: predicate)
280             else { return [] }
281         
282         return ships
283     }
284     
285     func shipsInFleet() -> [Ship] {
286         
287         let predicate = NSPredicate(format: "NOT fleet = 0")
288         
289         guard let ships = try? objects(of: Ship.entity, predicate: predicate)
290             else { return [] }
291         
292         return ships
293     }
294     
295     func createShip() -> Ship? {
296         
297         return insertNewObject(for: Ship.entity)
298     }
299     
300     func masterSlotItemID(by slotItemId: Int) -> Int {
301         
302         if slotItemId < 1 { return 0 }
303         
304         let predicate = NSPredicate(format: "id = %d", argumentArray: [slotItemId])
305         
306         guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate),
307             let slotItem = slotItems.first
308             else { return 0 }
309         
310         return slotItem.master_slotItem.id
311     }
312     
313     func slotItem(by itemId: Int) -> SlotItem? {
314         
315         let p = NSPredicate(format: "id = %ld", itemId)
316         
317         guard let slotItems = try? objects(of: SlotItem.entity, predicate: p)
318             else { return nil }
319         
320         return slotItems.first
321     }
322     
323     func sortedSlotItemsById() -> [SlotItem] {
324         
325         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
326         
327         guard let slotItems = try? objects(of: SlotItem.entity, sortDescriptors: [sortDesc])
328             else { return [] }
329         
330         return slotItems
331     }
332     
333     func slotItems() -> [SlotItem] {
334         
335         guard let slotItems = try? objects(of: SlotItem.entity)
336             else { return [] }
337         
338         return slotItems
339     }
340     
341     func slotItems(in itemIds: [Int]) -> [SlotItem] {
342         
343         let predicate = NSPredicate(format: "id IN %@", itemIds)
344         
345         guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate)
346             else { return [] }
347         
348         return slotItems
349     }
350     
351     func slotItems(exclude itemIds: [Int]) -> [SlotItem] {
352         
353         let predicate = NSPredicate(format: "NOT id IN %@", itemIds)
354         
355         guard let slotItems = try? objects(of: SlotItem.entity, predicate: predicate)
356             else { return [] }
357         
358         return slotItems
359     }
360     
361     func createSlotItem() -> SlotItem? {
362         
363         return insertNewObject(for: SlotItem.entity)
364     }
365     
366     func quests() -> [Quest] {
367         
368         guard let quests = try? objects(of: Quest.entity)
369             else { return [] }
370         
371         return quests
372     }
373     
374     func quest(by no: Int) -> Quest? {
375         
376         let p = NSPredicate(format: "%K = %ld", "no", no)
377         
378         guard let quests = try? objects(of: Quest.entity, predicate: p)
379             else { return nil }
380         
381         return quests.first
382     }
383     
384     func quests(in range: CountableClosedRange<Int>) -> [Quest] {
385         
386         let p = NSPredicate(format: "%K In %@", "no", range.map {$0})
387         
388         guard let quests = try? objects(of: Quest.entity, predicate: p)
389             else { return [] }
390         
391         return quests
392     }
393     
394     func sortedQuestByNo() -> [Quest] {
395         
396         let sortDesc = NSSortDescriptor(key: "no", ascending: true)
397         
398         guard let quests = try? objects(of: Quest.entity, sortDescriptors: [sortDesc])
399             else { return [] }
400         
401         return quests
402     }
403     
404     func createQuest() -> Quest? {
405         
406         return insertNewObject(for: Quest.entity)
407     }
408 }