OSDN Git Service

guard の書き方を統一した
[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(format: "area_id == %ld AND rid == %ld", area, base)
52         
53         guard let airBases = try? objects(of: AirBase.entity, predicate: p) else { return nil }
54         
55         return airBases.first
56     }
57     
58     func createAirBasePlaneInfo() -> AirBasePlaneInfo? {
59         
60         return insertNewObject(for: AirBasePlaneInfo.entity)
61     }
62     
63     func basic() -> Basic? {
64         
65         guard let basics = try? objects(of: Basic.entity) else { return nil }
66         
67         return basics.first
68     }
69     
70     func createBasic() -> Basic? {
71         
72         return insertNewObject(for: Basic.entity)
73     }
74     
75     func decksSortedById() -> [Deck] {
76         
77         let sortDec = NSSortDescriptor(key: "id", ascending: true)
78         
79         guard let decks = try? objects(of: Deck.entity, sortDescriptors: [sortDec]) else { return [] }
80         
81         return decks
82     }
83     
84     func deck(by id: Int) -> Deck? {
85         
86         let p = NSPredicate(format: "id = %ld", id)
87         
88         guard let decks = try? objects(of: Deck.entity, predicate: p) else { return nil }
89         
90         return decks.first
91     }
92     
93     func kenzoDock(by dockId: Int) -> KenzoDock? {
94         
95         let dockPredicate = NSPredicate(format: "id = %ld", dockId)
96         
97         guard let kenzoDocks = try? objects(of: KenzoDock.entity, predicate: dockPredicate) else { return nil }
98         
99         return kenzoDocks.first
100     }
101     
102     func mapArea(by id: Int) -> MasterMapArea? {
103         let predicate = NSPredicate(format: "id = %ld", id)
104         guard let mapAreas = try? objects(of: MasterMapArea.entity, predicate: predicate) else { return nil }
105         
106         return mapAreas.first
107     }
108     
109     func mapInfo(area: Int, no: Int) -> MasterMapInfo? {
110         
111         let predicate = NSPredicate(format: "maparea_id = %ld AND %K = %ld", area, "no", 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(format: "id = %ld", 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: "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(format: "id = %ld", 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: "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(format: "id = %ld", 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(format: "id = %ld", 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: "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(format: "id = %ld", 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(format: "id = %d", 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(format: "id = %d", 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(format: "id = %d", 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(format: "NOT id IN %@", 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(format: "NOT fleet = 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(format: "id = %d", argumentArray: [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(format: "id = %ld", 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: "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(format: "id IN %@", 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(format: "NOT id IN %@", 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(format: "%K = %ld", "no", 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(format: "%K In %@", "no", 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: "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 }