WIP: new demo app

This commit is contained in:
John Estropia
2020-08-17 09:06:25 +09:00
parent e720504855
commit d988daa025
62 changed files with 4304 additions and 2 deletions

View File

@@ -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>
}
}

View File

@@ -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>
}
}

View File

@@ -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>
}
}

View File

@@ -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>
}
}

View File

@@ -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
}
}

View File

@@ -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))
)
}
}
}
}