🚑 Allow Pokemong with no moves (#6)

Co-authored-by: alexis.drai@etu.uca.fr <alexis.drai@etu.uca.fr>
Reviewed-on: #6
Alexis Drai 2 years ago committed by alexis.drai@etu.uca.fr
parent 686cf02318
commit cabb6349f3

@ -1,5 +1,19 @@
# PoKeMoNg
* [About](#about)
+ [🗂️ DCM](#-dcm)
+ [🧬 UML Class diagram](#-uml-class-diagram)
+ [🗺 NoSQL Schema Versioning Strategy](#-nosql-schema-versioning-strategy)
- [Schema Versioning Pattern](#schema-versioning-pattern)
- [Incremental Document Migration](#incremental-document-migration)
* [Prep steps](#prep-steps)
+ [♨️ Java version](#-java-version)
+ [🔐 Database connection](#-database-connection)
* [Running the application in dev mode](#running-the-application-in-dev-mode)
+ [🏴‍☠️ SwaggerUI](#-swaggerui)
+ [🩺 API testing tools](#-api-testing-tools)
+ [📱 Front end (later)](#-front-end-later)
This is a [Quarkus](https://quarkus.io/) / [MongoDB](https://mongodb.com/) app for educational purposes.
Instructions are [here](https://clientserveur-courses.clubinfo-clermont.fr/Notation.html) for reference.
@ -20,9 +34,76 @@ CRUD operations on `Pokemongs`, `Trainers`, `Moves`, and `Types`.
### 🧬 UML Class diagram
<img src="./docs/nosql_uml.png" alt="UML Class Diagram" title="UML Class Diagram">
```mermaid
classDiagram
class Trainer {
+ id: ObjectId
+ name: string
+ dob: date
+ wins: int
+ losses: int
}
class Pokemong {
+ id: ObjectId
+ nickname: string?
+ dob: date
+ level: int
+ pokedexId: int
+ evoStage: int
+ evoTrack: PokemongName[]
}
class Move {
+ id: ObjectId
+ name: string
+ category: MoveCategoryName
+ power: int
+ accuracy: int
}
class Type {
+ id: ObjectId
+ name: TypeName
+ weakAgainst: TypeName[]
+ effectiveAgainst: TypeName[]
}
class TypeName {
<<enumeration>>
+ FIRE
+ WATER
+ ...
}
class PokemongName {
<<enumeration>>
+ BULBASAUR
+ IVYSAUR
+ ...
}
class MoveCategoryName {
<<enumeration>>
+ PHYSICAL
+ SPECIAL
+ STATUS
}
Trainer --> "0..*" Trainer: pastOpponents
Trainer --> "0..*" Pokemong: pokemongs
Pokemong --> "0..1" Trainer: trainer
Pokemong --> "0..4" Move: moveSet
Pokemong --> "1..2" Type: types
Move --> Type: type
Type ..> TypeName
Pokemong ..> PokemongName
Move ..> MoveCategoryName
```
### NoSQL Schema Versioning Strategy
### 🗺 NoSQL Schema Versioning Strategy
This application uses MongoDB, a NoSQL database, which provides flexibility in our data model. While this flexibility
has

@ -64,7 +64,7 @@
* => referencing
- [x] pokemongs.types: one-to-few [1;2]
* => embedding
- [x] pokemongs.moveSet: one-to-few [1;4] but will also need to be queried independently
- [x] pokemongs.moveSet: one-to-few [0;4] but will also need to be queried independently
* => referencing + denormalizing on "name"
- Move
- [x] moves.type: one-to-one [1;1]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

@ -93,8 +93,8 @@ public class PokemongService extends GenericService<Pokemong> {
if (moveSet == null) {
errors.add("pokemong move set was null");
} else {
if (moveSet.size() == 0 || moveSet.size() > 4) {
errors.add("pokemong move set was empty or had more than 4 moves");
if (moveSet.size() > 4) {
errors.add("pokemong move set had more than 4 moves");
}
for (PokemongMove move : moveSet) {
String moveId = move.getId();

@ -344,7 +344,6 @@ components:
$ref: '#/components/schemas/Type'
moveSet:
type: array
minItems: 1
maxItems: 4
items:
$ref: '#/components/schemas/PokemongMove'

Loading…
Cancel
Save