OSDN Git Service

CoreDataIntormationのプロパティ名を簡略化
[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("KCD", tryRemake: true)
13 }
14 extension CoreDataCore {
15     static let kcd = CoreDataCore(.kcd)
16 }
17
18 class ServerDataStore: CoreDataAccessor, CoreDataManager {
19     static var `default` = ServerDataStore(type: .reader)
20     class func oneTimeEditor() -> ServerDataStore {
21         return ServerDataStore(type: .editor)
22     }
23         
24     required init(type: CoreDataManagerType) {
25         managedObjectContext =
26             type == .reader ? core.parentManagedObjectContext
27             : core.editorManagedObjectContext()
28     }
29     deinit {
30         saveActionCore()
31     }
32     
33     let core = CoreDataCore.kcd
34     let managedObjectContext: NSManagedObjectContext
35 }
36
37 extension ServerDataStore {
38     func airBases() -> [AirBase] {
39         guard let airbase = try? objects(with: AirBase.entity)
40             else { return [] }
41         return airbase
42     }
43     func airBase(area: Int, base: Int) -> AirBase? {
44         let p = NSPredicate(format: "area_id == %ld AND rid == %ld", area, base)
45         guard let airBases = try? objects(with: AirBase.entity, predicate: p)
46             else { return nil }
47         return airBases.first
48     }
49     func createAirBasePlaneInfo() -> AirBasePlaneInfo? {
50         return insertNewObject(for: AirBasePlaneInfo.entity)
51     }
52     
53     func basic() -> Basic? {
54         guard let basics = try? objects(with: Basic.entity)
55             else { return nil }
56         return basics.first
57     }
58     func createBasic() -> Basic? {
59         return insertNewObject(for: Basic.entity)
60     }
61     
62     func decksSortedById() -> [Deck] {
63         let sortDec = NSSortDescriptor(key: "id", ascending: true)
64         guard let decks = try? objects(with: Deck.entity, sortDescriptors: [sortDec])
65             else { return [] }
66         return decks
67     }
68     func deck(byId id: Int) -> Deck? {
69         let p = NSPredicate(format: "id = %ld", id)
70         guard let decks = try? objects(with: Deck.entity, predicate: p)
71             else { return nil }
72         return decks.first
73     }
74     
75     func kenzoDock(byDockId dockId: Int) -> KenzoDock? {
76         let dockPredicate = NSPredicate(format: "id = %ld", dockId)
77         guard let kenzoDocks = try? objects(with: KenzoDock.entity, predicate: dockPredicate)
78             else { return nil }
79         return kenzoDocks.first
80     }
81     
82     func mapArea(byId id: Int) -> MasterMapArea? {
83         let predicate = NSPredicate(format: "id = %ld", id)
84         guard let mapAreas = try? objects(with: MasterMapArea.entity, predicate: predicate)
85             else { return nil }
86         return mapAreas.first
87     }
88     
89     func mapInfo(area: Int, no: Int) -> MasterMapInfo? {
90         let predicate = NSPredicate(format: "maparea_id = %ld AND %K = %ld", area, "no", no)
91         guard let mapInfos = try? objects(with: MasterMapInfo.entity, predicate: predicate)
92             else { return nil }
93         return mapInfos.first
94     }
95     
96     func masterMission(by id: Int) -> MasterMission? {
97         let p = NSPredicate(format: "id = %ld", id)
98         guard let missions = try? objects(with: MasterMission.entity, predicate: p)
99             else { return nil }
100         return missions.first
101     }
102     
103     func masterShips() -> [MasterShip] {
104         guard let ships = try? objects(with: MasterShip.entity)
105             else { return [] }
106         return ships
107     }
108     func sortedMasterShipsById() -> [MasterShip] {
109         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
110         guard let ships = try? objects(with: MasterShip.entity, sortDescriptors: [sortDesc])
111             else { return [] }
112         return ships
113     }
114     func masterShip(byId id: Int) -> MasterShip? {
115         let p = NSPredicate(format: "id = %ld", id)
116         guard let ships = try? objects(with: MasterShip.entity, predicate: p)
117             else { return nil }
118         return ships.first
119     }
120     
121     func sortedMasterSlotItemsById() -> [MasterSlotItem] {
122         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
123         guard let masterSlotItems = try? objects(with: MasterSlotItem.entity, sortDescriptors: [sortDesc])
124             else { return [] }
125         return masterSlotItems
126     }
127     func masterSlotItems() -> [MasterSlotItem] {
128         guard let masterSlotItems = try? objects(with: MasterSlotItem.entity)
129             else { return [] }
130         return masterSlotItems
131     }
132     func masterSlotItem(by id: Int) -> MasterSlotItem? {
133         let p = NSPredicate(format: "id = %ld", id)
134         guard let masterSlotItems = try? objects(with: MasterSlotItem.entity, predicate: p)
135             else { return nil }
136         return masterSlotItems.first
137     }
138     
139     func masterSlotItemEquipType(by id: Int) -> MasterSlotItemEquipType? {
140         let predicate = NSPredicate(format: "id = %ld", id)
141         guard let types = try? objects(with: MasterSlotItemEquipType.entity, predicate: predicate)
142             else { return nil }
143         return types.first
144     }
145     
146     func masterSTypes() -> [MasterSType] {
147         guard let masterSTypes = try? objects(with: MasterSType.entity)
148             else { return [] }
149         return masterSTypes
150     }
151     func sortedMasterSTypesById() -> [MasterSType] {
152         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
153         guard let masterSTypes = try? objects(with: MasterSType.entity, sortDescriptors: [sortDesc])
154             else { return [] }
155         return masterSTypes
156     }
157     
158     func material() -> Material? {
159         guard let materials = try? objects(with: Material.entity)
160             else { return nil }
161         return materials.first
162     }
163     func createMaterial() -> Material? {
164         return insertNewObject(for: Material.entity)
165     }
166     
167     func nyukyoDock(by id: Int) -> NyukyoDock? {
168         let p = NSPredicate(format: "id = %ld", id)
169         guard let ndocks = try? objects(with: NyukyoDock.entity, predicate: p)
170             else { return nil }
171         return ndocks.first
172     }
173     
174     func ships(byDeckId deckId: Int) -> [Ship] {
175         let predicate = NSPredicate(format: "id = %d", deckId)
176         guard let decks = try? objects(with: Deck.entity, predicate: predicate),
177             let deck = decks.first
178             else { return [] }
179         return (0..<6).flatMap { deck[$0] }
180     }
181     func ship(byId shipId: Int) -> Ship? {
182         if shipId < 1 { return nil }
183         let predicate = NSPredicate(format: "id = %d", shipId)
184         guard let ships = try? objects(with: Ship.entity, predicate: predicate)
185             else { return nil }
186         return ships.first
187     }
188     func ships(byId shipId: Int) -> [Ship] {
189         let predicate = NSPredicate(format: "id = %d", shipId)
190         guard let ships = try? objects(with: Ship.entity, predicate: predicate)
191             else { return [] }
192         return ships
193     }
194     func ships(exclude shipIds: [Int]) -> [Ship] {
195         let predicate = NSPredicate(format: "NOT id IN %@", shipIds)
196         guard let ships = try? objects(with: Ship.entity, predicate: predicate)
197             else { return [] }
198         return ships
199     }
200     func shipsInFleet() -> [Ship] {
201         let predicate = NSPredicate(format: "NOT fleet = 0")
202         guard let ships = try? objects(with: Ship.entity, predicate: predicate)
203             else { return [] }
204         return ships
205     }
206     func createShip() -> Ship? {
207         return insertNewObject(for: Ship.entity)
208     }
209     
210     func masterSlotItemID(bySlotItemId slotItemId: Int) -> Int {
211         if slotItemId < 1 { return 0 }
212         let predicate = NSPredicate(format: "id = %d", argumentArray: [slotItemId])
213         guard let slotItems = try? objects(with: SlotItem.entity, predicate: predicate),
214             let slotItem = slotItems.first
215             else { return 0 }
216         return slotItem.master_slotItem.id
217     }
218     
219     func slotItem(byId itemId: Int) -> SlotItem? {
220         let p = NSPredicate(format: "id = %ld", itemId)
221         guard let slotItems = try? objects(with: SlotItem.entity, predicate: p)
222             else { return nil }
223         return slotItems.first
224     }
225     func sortedSlotItemsById() -> [SlotItem] {
226         let sortDesc = NSSortDescriptor(key: "id", ascending: true)
227         guard let slotItems = try? objects(with: SlotItem.entity, sortDescriptors: [sortDesc])
228             else { return [] }
229         return slotItems
230     }
231     func slotItems() -> [SlotItem] {
232         guard let slotItems = try? objects(with: SlotItem.entity)
233             else { return [] }
234         return slotItems
235     }
236     func slotItems(in itemIds: [Int]) -> [SlotItem] {
237         let predicate = NSPredicate(format: "id IN %@", itemIds)
238         guard let slotItems = try? objects(with: SlotItem.entity, predicate: predicate)
239             else { return [] }
240         return slotItems
241     }
242     func slotItems(exclude itemIds: [Int]) -> [SlotItem] {
243         let predicate = NSPredicate(format: "NOT id IN %@", itemIds)
244         guard let slotItems = try? objects(with: SlotItem.entity, predicate: predicate)
245             else { return [] }
246         return slotItems
247     }
248     func createSlotItem() -> SlotItem? {
249         return insertNewObject(for: SlotItem.entity)
250     }
251     
252     func quests() -> [Quest] {
253         guard let quests = try? objects(with: Quest.entity)
254             else { return [] }
255         return quests
256     }
257     func quest(by no: Int) -> Quest? {
258         let p = NSPredicate(format: "%K = %ld", "no", no)
259         guard let quests = try? objects(with: Quest.entity, predicate: p)
260             else { return nil }
261         return quests.first
262     }
263     func quests(in range: CountableClosedRange<Int>) -> [Quest] {
264         let p = NSPredicate(format: "%K In %@", "no", range.map {$0})
265         guard let quests = try? objects(with: Quest.entity, predicate: p)
266             else { return [] }
267         return quests
268     }
269     func sortedQuestByNo() -> [Quest] {
270         let sortDesc = NSSortDescriptor(key: "no", ascending: true)
271         guard let quests = try? objects(with: Quest.entity, sortDescriptors: [sortDesc])
272             else { return [] }
273         return quests
274     }
275     func createQuest() -> Quest? {
276         return insertNewObject(for: Quest.entity)
277     }
278 }