Skip to content

Commit 5bd3371

Browse files
committed
Merge branch 'refactor/archived-party-field' into 'master'
Migrace starých dat v databázi See merge request fmasa/wfrp-master!109
2 parents 193fbf2 + 9b24868 commit 5bd3371

File tree

12 files changed

+87
-63
lines changed

12 files changed

+87
-63
lines changed

app/src/main/java/cz/muni/fi/rpg/model/domain/character/Character.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package cz.muni.fi.rpg.model.domain.character
22

3-
import com.fasterxml.jackson.annotation.JsonAlias
43
import cz.muni.fi.rpg.model.domain.common.Ambitions
54
import cz.muni.fi.rpg.model.domain.common.Money
65
import java.lang.IllegalArgumentException
@@ -13,9 +12,8 @@ data class Character(
1312
private var psychology: String,
1413
private var motivation: String,
1514
private var race: Race,
16-
@JsonAlias("stats") // TODO: Remove alias in 1.10
1715
private var characteristicsBase: Stats,
18-
private var characteristicsAdvances: Stats = Stats(0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
16+
private var characteristicsAdvances: Stats,
1917
private var points: Points,
2018
private var ambitions: Ambitions = Ambitions("", ""),
2119
private var mutation: String = "",

app/src/main/java/cz/muni/fi/rpg/model/domain/character/Points.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ data class Points(
1212
val resolve: Int,
1313
val sin: Int,
1414
val experience: Int,
15-
val hardyWoundsBonus: Int = 0
15+
val hardyWoundsBonus: Int
1616
) {
1717
init {
1818
require(corruption >= 0)

app/src/main/java/cz/muni/fi/rpg/model/firestore/repositories/FirestorePartyRepository.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,16 @@ internal class FirestorePartyRepository(
5959
}
6060

6161
override fun forUserLive(userId: String): LiveData<List<Party>> =
62-
QueryLiveData(queryForUser(userId), mapper) { !it.isArchived() }
62+
QueryLiveData(queryForUser(userId), mapper)
6363

6464
override suspend fun forUser(userId: String) =
6565
queryForUser(userId)
6666
.get()
6767
.await()
6868
.documents
6969
.map { mapper.fromDocumentSnapshot(it) }
70-
.filter { !it.isArchived() }
7170

72-
private fun queryForUser(userId: String) = parties.whereArrayContains("users", userId)
71+
private fun queryForUser(userId: String) = parties
72+
.whereArrayContains("users", userId)
73+
.whereEqualTo("archived", false)
7374
}

app/src/main/java/cz/muni/fi/rpg/ui/characterCreation/CharacterCreationFragment.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ class CharacterCreationFragment(
119119
resilience = points.resilience,
120120
resolve = points.resilience,
121121
corruption = 0,
122-
sin = 0
122+
sin = 0,
123+
hardyWoundsBonus = 0
123124
)
124125
)
125126
}

app/src/test/java/cz/muni/fi/rpg/model/domain/character/CharacterTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class CharacterTest {
1616
Race.HALFLING,
1717
Stats(20, 40, 2, 4, 80, 5, 5, 4, 0, 10),
1818
Stats(20, 40, 2, 4, 80, 5, 5, 4, 0, 10),
19-
Points(0, 4, 4, 5, 5, 0, 0, 0, 0)
19+
Points(0, 4, 4, 5, 5, 0, 0, 0, 0, 0)
2020
)
2121

2222
private fun characterWithHardy() = character().apply {

firebase/api.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ export interface Character {
4040
career: string,
4141
socialClass: string,
4242
race: string,
43-
stats: Stats,
44-
maxStats: Stats,
43+
characteristicsAdvances: Stats,
44+
characteristicsBase: Stats,
4545
points: {
4646
corruption: number,
4747
experience: number,
@@ -52,6 +52,7 @@ export interface Character {
5252
resilience: number,
5353
resolve: number,
5454
sin: number,
55+
hardyWoundsBonus: number
5556
},
5657
ambitions: {
5758
shortTerm: string,
@@ -63,6 +64,7 @@ export interface Character {
6364
money: {
6465
pennies: number,
6566
},
67+
hardyTalent: boolean,
6668
note: string,
6769
}
6870

firebase/firestore.rules

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -184,10 +184,8 @@ service cloud.firestore {
184184
"socialClass",
185185
"points",
186186
"race",
187-
"stats",
188187
"characteristicsBase",
189188
"characteristicsAdvances",
190-
"maxStats",
191189
"userId",
192190
"money",
193191
"motivation",
@@ -209,14 +207,12 @@ service cloud.firestore {
209207
&& character.socialClass is string && isNotBlank(character.socialClass) && character.socialClass.size() <= 50
210208
&& character.race is string && character.race in ["HUMAN", "HIGH_ELF", "DWARF", "HALFLING", "WOOD_ELF", "GNOME"]
211209
&& arePointsValid(character.points)
212-
&& ("stats" in character || "characteristicsBase" in character)
213-
&& (! ("stats" in character) || areStatsValid(character.stats))
214-
&& (! ("characteristicsBase" in character) || areStatsValid(character.characteristicsBase))
215-
&& (! ("characteristicsAdvances" in character) || areStatsValid(character.characteristicsAdvances))
210+
&& areStatsValid(character.characteristicsBase)
211+
&& areStatsValid(character.characteristicsAdvances)
216212
&& areMoneyValid(character.money)
217213
&& areAmbitionsValid(character.ambitions)
218214
&& character.note is string && character.note.size() <= 400
219-
&& (! ("hardyTalent" in character) || (character.hardyTalent is bool))
215+
&& character.hardyTalent is bool
220216
&& (! ("archived" in character) || (character.archived is bool && (!character.archived || character.userId == null)));
221217
}
222218
}
@@ -244,7 +240,7 @@ service cloud.firestore {
244240
&& points.sin is int
245241
&& points.wounds is int
246242
&& points.experience is int
247-
&& (! ("hardyWoundsBonus" in points) || (points.hardyWoundsBonus is int && points.hardyWoundsBonus >= 0));
243+
&& points.hardyWoundsBonus is int;
248244
}
249245

250246
function areStatsValid(stats) {
@@ -305,7 +301,7 @@ service cloud.firestore {
305301
&& party.id is string && party.id == partyId && isValidUuid(party.id)
306302
&& isValidPartyName(party.name)
307303
&& party.users == [uid]
308-
&& (! ("archived" in party) || party.archived is bool)
304+
&& party.archived is bool
309305
&& (party.gameMasterId == uid || party.gameMasterId == null)
310306
&& party.accessCode is string && party.accessCode != ""
311307
&& (! ("time" in party) || isValidImperialTime(party.time))
@@ -321,7 +317,7 @@ service cloud.firestore {
321317
&& isValidPartyName(party.name)
322318
&& party.users.toSet() == resource.data.users.toSet()
323319
&& (! ("time" in party) || isValidImperialTime(party.time))
324-
&& (! ("archived" in party) || party.archived is bool)
320+
&& party.archived is bool;
325321
}
326322

327323
function isValidImperialTime(time) {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import firebase from "firebase";
2+
3+
export async function migrate({firestore}: { firestore: firebase.firestore.Firestore }): Promise<void> {
4+
const parties = await firestore.collection("parties").get();
5+
6+
for (const document of parties.docs) {
7+
if (!("archived" in document.data())) {
8+
await document.ref.set({archived: false}, {merge: true});
9+
}
10+
}
11+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import firebase from "firebase";
2+
3+
export async function migrate({firestore}: { firestore: firebase.firestore.Firestore }): Promise<void> {
4+
const characters = await firestore.collectionGroup("characters").get();
5+
6+
for (const document of characters.docs) {
7+
const character = document.data();
8+
9+
if ("stats" in character) {
10+
character["characteristicsBase"] = character["stats"];
11+
delete character["stats"];
12+
13+
if (! ("characteristicsAdvances" in character)) {
14+
character["characteristicsAdvances"] = {
15+
weaponSkill: 0,
16+
dexterity: 0,
17+
initiative: 0,
18+
ballisticSkill: 0,
19+
strength: 0,
20+
toughness: 0,
21+
agility: 0,
22+
intelligence: 0,
23+
willPower: 0,
24+
fellowship: 0,
25+
}
26+
}
27+
28+
delete character["maxStats"];
29+
await document.ref.set(character);
30+
}
31+
}
32+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import firebase from "firebase";
2+
3+
export async function migrate({firestore}: { firestore: firebase.firestore.Firestore }): Promise<void> {
4+
const characters = await firestore.collectionGroup("characters").get();
5+
6+
for (const document of characters.docs) {
7+
const character = document.data();
8+
9+
if (! ("hardyTalent" in character)) {
10+
await document.ref.set({
11+
hardyTalent: false,
12+
points: {...character.points, hardyWoundsBonus: 0}
13+
}, {merge: true});
14+
}
15+
}
16+
}

0 commit comments

Comments
 (0)