OSDN Git Service

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