2 // ServerDataStore.swift
5 // Created by Hori,Masaki on 2017/01/07.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 extension CoreDataIntormation {
12 static let kcd = CoreDataIntormation("KCD", tryRemake: true)
14 extension CoreDataCore {
15 static let kcd = CoreDataCore(.kcd)
18 class ServerDataStore: CoreDataAccessor, CoreDataManager {
19 static var `default` = ServerDataStore(type: .reader)
20 class func oneTimeEditor() -> ServerDataStore {
21 return ServerDataStore(type: .editor)
24 required init(type: CoreDataManagerType) {
25 managedObjectContext =
26 type == .reader ? core.parentManagedObjectContext
27 : core.editorManagedObjectContext()
33 let core = CoreDataCore.kcd
34 let managedObjectContext: NSManagedObjectContext
37 extension ServerDataStore {
38 func airBases() -> [AirBase] {
39 guard let airbase = try? objects(with: AirBase.entity)
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)
49 func createAirBasePlaneInfo() -> AirBasePlaneInfo? {
50 return insertNewObject(for: AirBasePlaneInfo.entity)
53 func basic() -> Basic? {
54 guard let basics = try? objects(with: Basic.entity)
58 func createBasic() -> Basic? {
59 return insertNewObject(for: Basic.entity)
62 func decksSortedById() -> [Deck] {
63 let sortDec = NSSortDescriptor(key: "id", ascending: true)
64 guard let decks = try? objects(with: Deck.entity, sortDescriptors: [sortDec])
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)
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)
79 return kenzoDocks.first
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)
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)
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)
100 return missions.first
103 func masterShips() -> [MasterShip] {
104 guard let ships = try? objects(with: MasterShip.entity)
108 func sortedMasterShipsById() -> [MasterShip] {
109 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
110 guard let ships = try? objects(with: MasterShip.entity, sortDescriptors: [sortDesc])
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)
121 func sortedMasterSlotItemsById() -> [MasterSlotItem] {
122 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
123 guard let masterSlotItems = try? objects(with: MasterSlotItem.entity, sortDescriptors: [sortDesc])
125 return masterSlotItems
127 func masterSlotItems() -> [MasterSlotItem] {
128 guard let masterSlotItems = try? objects(with: MasterSlotItem.entity)
130 return masterSlotItems
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)
136 return masterSlotItems.first
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)
146 func masterSTypes() -> [MasterSType] {
147 guard let masterSTypes = try? objects(with: MasterSType.entity)
151 func sortedMasterSTypesById() -> [MasterSType] {
152 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
153 guard let masterSTypes = try? objects(with: MasterSType.entity, sortDescriptors: [sortDesc])
158 func material() -> Material? {
159 guard let materials = try? objects(with: Material.entity)
161 return materials.first
163 func createMaterial() -> Material? {
164 return insertNewObject(for: Material.entity)
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)
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
179 return (0..<6).flatMap { deck[$0] }
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)
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)
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)
200 func shipsInFleet() -> [Ship] {
201 let predicate = NSPredicate(format: "NOT fleet = 0")
202 guard let ships = try? objects(with: Ship.entity, predicate: predicate)
206 func createShip() -> Ship? {
207 return insertNewObject(for: Ship.entity)
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
216 return slotItem.master_slotItem.id
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)
223 return slotItems.first
225 func sortedSlotItemsById() -> [SlotItem] {
226 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
227 guard let slotItems = try? objects(with: SlotItem.entity, sortDescriptors: [sortDesc])
231 func slotItems() -> [SlotItem] {
232 guard let slotItems = try? objects(with: SlotItem.entity)
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)
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)
248 func createSlotItem() -> SlotItem? {
249 return insertNewObject(for: SlotItem.entity)
252 func quests() -> [Quest] {
253 guard let quests = try? objects(with: Quest.entity)
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)
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)
269 func sortedQuestByNo() -> [Quest] {
270 let sortDesc = NSSortDescriptor(key: "no", ascending: true)
271 guard let quests = try? objects(with: Quest.entity, sortDescriptors: [sortDesc])
275 func createQuest() -> Quest? {
276 return insertNewObject(for: Quest.entity)