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 context = (type == .reader ? core.parentContext : core.editorContext())
31 let core = CoreDataCore.kcd
32 let context: NSManagedObjectContext
35 extension ServerDataStore {
36 func airBases() -> [AirBase] {
37 guard let airbase = try? objects(with: AirBase.entity)
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)
47 func createAirBasePlaneInfo() -> AirBasePlaneInfo? {
48 return insertNewObject(for: AirBasePlaneInfo.entity)
51 func basic() -> Basic? {
52 guard let basics = try? objects(with: Basic.entity)
56 func createBasic() -> Basic? {
57 return insertNewObject(for: Basic.entity)
60 func decksSortedById() -> [Deck] {
61 let sortDec = NSSortDescriptor(key: "id", ascending: true)
62 guard let decks = try? objects(with: Deck.entity, sortDescriptors: [sortDec])
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)
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)
77 return kenzoDocks.first
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)
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)
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)
101 func masterShips() -> [MasterShip] {
102 guard let ships = try? objects(with: MasterShip.entity)
106 func sortedMasterShipsById() -> [MasterShip] {
107 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
108 guard let ships = try? objects(with: MasterShip.entity, sortDescriptors: [sortDesc])
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)
119 func sortedMasterSlotItemsById() -> [MasterSlotItem] {
120 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
121 guard let masterSlotItems = try? objects(with: MasterSlotItem.entity, sortDescriptors: [sortDesc])
123 return masterSlotItems
125 func masterSlotItems() -> [MasterSlotItem] {
126 guard let masterSlotItems = try? objects(with: MasterSlotItem.entity)
128 return masterSlotItems
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)
134 return masterSlotItems.first
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)
144 func masterSTypes() -> [MasterSType] {
145 guard let masterSTypes = try? objects(with: MasterSType.entity)
149 func sortedMasterSTypesById() -> [MasterSType] {
150 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
151 guard let masterSTypes = try? objects(with: MasterSType.entity, sortDescriptors: [sortDesc])
156 func material() -> Material? {
157 guard let materials = try? objects(with: Material.entity)
159 return materials.first
161 func createMaterial() -> Material? {
162 return insertNewObject(for: Material.entity)
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)
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
177 return (0..<6).flatMap { deck[$0] }
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)
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)
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)
198 func shipsInFleet() -> [Ship] {
199 let predicate = NSPredicate(format: "NOT fleet = 0")
200 guard let ships = try? objects(with: Ship.entity, predicate: predicate)
204 func createShip() -> Ship? {
205 return insertNewObject(for: Ship.entity)
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
214 return slotItem.master_slotItem.id
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)
221 return slotItems.first
223 func sortedSlotItemsById() -> [SlotItem] {
224 let sortDesc = NSSortDescriptor(key: "id", ascending: true)
225 guard let slotItems = try? objects(with: SlotItem.entity, sortDescriptors: [sortDesc])
229 func slotItems() -> [SlotItem] {
230 guard let slotItems = try? objects(with: SlotItem.entity)
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)
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)
246 func createSlotItem() -> SlotItem? {
247 return insertNewObject(for: SlotItem.entity)
250 func quests() -> [Quest] {
251 guard let quests = try? objects(with: Quest.entity)
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)
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)
267 func sortedQuestByNo() -> [Quest] {
268 let sortDesc = NSSortDescriptor(key: "no", ascending: true)
269 guard let quests = try? objects(with: Quest.entity, sortDescriptors: [sortDesc])
273 func createQuest() -> Quest? {
274 return insertNewObject(for: Quest.entity)