mirror of
https://github.com/JohnEstropia/CoreStore.git
synced 2026-04-26 10:48:38 +02:00
WIP: new demo app
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// Demo
|
||||
// Copyright © 2020 John Rommel Estropia, Inc. All rights reserved.
|
||||
|
||||
import CoreStore
|
||||
|
||||
// MARK: - Modern.PokedexDemo
|
||||
|
||||
extension Modern.PokedexDemo {
|
||||
|
||||
// MARK: - Modern.PokedexDemo.Ability
|
||||
|
||||
final class Ability: CoreStoreObject {
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
@Field.Stored("id")
|
||||
var id: Int = 0
|
||||
|
||||
@Field.Stored("name")
|
||||
var name: String = ""
|
||||
|
||||
@Field.Stored("text")
|
||||
var text: String = ""
|
||||
|
||||
@Field.Stored("isHiddenAbility")
|
||||
var isHiddenAbility: Bool = false
|
||||
|
||||
|
||||
@Field.Relationship("learners")
|
||||
var learners: Set<Modern.PokedexDemo.PokemonForm>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
//
|
||||
// Demo
|
||||
// Copyright © 2020 John Rommel Estropia, Inc. All rights reserved.
|
||||
|
||||
import CoreStore
|
||||
|
||||
// MARK: - Modern.PokedexDemo
|
||||
|
||||
extension Modern.PokedexDemo {
|
||||
|
||||
// MARK: - Modern.PokedexDemo.Move
|
||||
|
||||
final class Move: CoreStoreObject {
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
@Field.Stored("id")
|
||||
var id: Int = 0
|
||||
|
||||
@Field.Stored("name")
|
||||
var name: String = ""
|
||||
|
||||
@Field.Stored("text")
|
||||
var text: String = ""
|
||||
|
||||
@Field.Stored("pokemonType")
|
||||
var pokemonType: Modern.PokedexDemo.PokemonType = .normal
|
||||
|
||||
@Field.Stored("power")
|
||||
var power: Int = 0
|
||||
|
||||
@Field.Stored("accuracy")
|
||||
var accuracy: Int = 0
|
||||
|
||||
@Field.Stored("powerPoints")
|
||||
var powerPoints: Int = 0
|
||||
|
||||
@Field.Stored("effectChance")
|
||||
var effectChance: Int = 0
|
||||
|
||||
@Field.Stored("priority")
|
||||
var priority: Int = 0
|
||||
|
||||
|
||||
@Field.Relationship("learners")
|
||||
var learners: Set<Modern.PokedexDemo.PokemonForm>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
//
|
||||
// Demo
|
||||
// Copyright © 2020 John Rommel Estropia, Inc. All rights reserved.
|
||||
|
||||
import CoreStore
|
||||
|
||||
// MARK: - Modern.PokedexDemo
|
||||
|
||||
extension Modern.PokedexDemo {
|
||||
|
||||
// MARK: - Modern.PokedexDemo.PokemonForm
|
||||
|
||||
final class PokemonForm: CoreStoreObject {
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
@Field.Stored("id")
|
||||
var id: Int = 0
|
||||
|
||||
@Field.Stored("name")
|
||||
var name: String = ""
|
||||
|
||||
@Field.Stored("pokemonType1")
|
||||
var pokemonType1: Modern.PokedexDemo.PokemonType = .normal
|
||||
|
||||
@Field.Stored("pokemonType2")
|
||||
var pokemonType2: Modern.PokedexDemo.PokemonType?
|
||||
|
||||
@Field.Relationship("species")
|
||||
var species: Modern.PokedexDemo.PokemonSpecies?
|
||||
|
||||
|
||||
@Field.Stored("statHitPoints")
|
||||
var statHitPoints: Int = 0
|
||||
|
||||
@Field.Stored("statAttack")
|
||||
var statAttack: Int = 0
|
||||
|
||||
@Field.Stored("statDefense")
|
||||
var statDefense: Int = 0
|
||||
|
||||
@Field.Stored("statSpecialAttack")
|
||||
var statSpecialAttack: Int = 0
|
||||
|
||||
@Field.Stored("statSpecialDefense")
|
||||
var statSpecialDefense: Int = 0
|
||||
|
||||
@Field.Stored("statSpeed")
|
||||
var statSpeed: Int = 0
|
||||
|
||||
|
||||
@Field.Stored("spriteFrontURL")
|
||||
var spriteFrontURL: URL?
|
||||
|
||||
@Field.Stored("spriteBackURL")
|
||||
var spriteBackURL: URL?
|
||||
|
||||
@Field.Stored("spriteShinyFrontURL")
|
||||
var spriteShinyFrontURL: URL?
|
||||
|
||||
@Field.Stored("spriteShinyBackURL")
|
||||
var spriteShinyBackURL: URL?
|
||||
|
||||
|
||||
@Field.Relationship("abilities", inverse: \.$learners)
|
||||
var abilities: Set<Modern.PokedexDemo.Ability>
|
||||
|
||||
@Field.Relationship("moves", inverse: \.$learners)
|
||||
var moves: Set<Modern.PokedexDemo.Move>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
//
|
||||
// Demo
|
||||
// Copyright © 2020 John Rommel Estropia, Inc. All rights reserved.
|
||||
|
||||
import CoreStore
|
||||
|
||||
// MARK: - Modern.PokedexDemo
|
||||
|
||||
extension Modern.PokedexDemo {
|
||||
|
||||
// MARK: - Modern.PokedexDemo.PokemonSpecies
|
||||
|
||||
final class PokemonSpecies: CoreStoreObject {
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
@Field.Stored("id")
|
||||
var id: Int = 0
|
||||
|
||||
@Field.Stored("name")
|
||||
var name: String = ""
|
||||
|
||||
@Field.Stored("weight")
|
||||
var weight: Int = 0
|
||||
|
||||
@Field.Relationship("forms", inverse: \.$species)
|
||||
var forms: Set<Modern.PokedexDemo.PokemonForm>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
//
|
||||
// Demo
|
||||
// Copyright © 2020 John Rommel Estropia, Inc. All rights reserved.
|
||||
|
||||
import CoreStore
|
||||
|
||||
// MARK: - Modern.PokedexDemo
|
||||
|
||||
extension Modern.PokedexDemo {
|
||||
|
||||
// MARK: - Modern.PokedexDemo.Move
|
||||
|
||||
enum PokemonType: String, CaseIterable, FieldStorableType {
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
case bug
|
||||
case dark
|
||||
case dragon
|
||||
case electric
|
||||
case fairy
|
||||
case fighting
|
||||
case fire
|
||||
case flying
|
||||
case ghost
|
||||
case grass
|
||||
case ground
|
||||
case ice
|
||||
case normal
|
||||
case poison
|
||||
case psychic
|
||||
case rock
|
||||
case steel
|
||||
case water
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
//
|
||||
// Demo
|
||||
// Copyright © 2020 John Rommel Estropia, Inc. All rights reserved.
|
||||
|
||||
import CoreStore
|
||||
|
||||
// MARK: - Modern
|
||||
|
||||
extension Modern {
|
||||
|
||||
// MARK: - Modern.PokedexDemo
|
||||
|
||||
/**
|
||||
Sample usages for importing external data into `CoreStoreObject` attributes
|
||||
*/
|
||||
enum PokedexDemo {
|
||||
|
||||
// MARK: Internal
|
||||
|
||||
static let dataStack: DataStack = {
|
||||
|
||||
let dataStack = DataStack(
|
||||
CoreStoreSchema(
|
||||
modelVersion: "V1",
|
||||
entities: [
|
||||
Entity<Modern.ColorsDemo.Palette>("Palette")
|
||||
],
|
||||
versionLock: [
|
||||
"Palette": [0xbaf4eaee9353176a, 0xdd6ca918cc2b0c38, 0xd04fad8882d7cc34, 0x3e90ca38c091503f]
|
||||
]
|
||||
)
|
||||
)
|
||||
|
||||
/**
|
||||
- Important: `addStorageAndWait(_:)` was used here to simplify initializing the demo, but in practice the asynchronous function variants are recommended.
|
||||
*/
|
||||
try! dataStack.addStorageAndWait(
|
||||
SQLiteStore(
|
||||
fileName: "Modern.ColorsDemo.sqlite",
|
||||
localStorageOptions: .recreateStoreOnModelMismatch
|
||||
)
|
||||
)
|
||||
return dataStack
|
||||
}()
|
||||
|
||||
static let palettesPublisher: ListPublisher<Modern.ColorsDemo.Palette> = Modern.ColorsDemo.dataStack.publishList(
|
||||
From<Modern.ColorsDemo.Palette>()
|
||||
.sectionBy(\.$colorName)
|
||||
.where(Modern.ColorsDemo.filter.whereClause())
|
||||
.orderBy(.ascending(\.$hue))
|
||||
)
|
||||
|
||||
static var filter: Modern.ColorsDemo.Filter = .all {
|
||||
|
||||
didSet {
|
||||
|
||||
try! Modern.ColorsDemo.palettesPublisher.refetch(
|
||||
From<Modern.ColorsDemo.Palette>()
|
||||
.sectionBy(\.$colorName)
|
||||
.where(self.filter.whereClause())
|
||||
.orderBy(.ascending(\.$hue))
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user