📍 Implement Schema Versioning NoSQL pattern (#5)
Co-authored-by: alexis.drai@etu.uca.fr <alexis.drai@etu.uca.fr> Reviewed-on: alexis.drai/AD_MongoDB#5pull/10/head
parent
6565b12586
commit
e1088d8af3
@ -0,0 +1,384 @@
|
||||
{
|
||||
"info": {
|
||||
"_postman_id": "11aa7a76-83a4-4b92-940f-528e29b66df8",
|
||||
"name": "PoKeMoNg",
|
||||
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
|
||||
"_exporter_id": "25802734"
|
||||
},
|
||||
"item": [
|
||||
{
|
||||
"name": "move",
|
||||
"item": [
|
||||
{
|
||||
"name": "Create 1 move",
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json",
|
||||
"type": "text"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\r\n \"name\": \"Bubble beam\",\r\n \"category\": \"PHYSICAL\",\r\n \"power\": 10,\r\n \"accuracy\": 85,\r\n \"type\": \r\n {\r\n \"name\": \"WATER\",\r\n \"weakAgainst\": [\"GRASS\"],\r\n \"effectiveAgainst\": [\"FIRE\", \"GROUND\"]\r\n },\r\n \"schemaVersion\": 2\r\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/move",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"move"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Get all moves",
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/move",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"move"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Get 1 move",
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/move/60a64f7eae945a6e60b0e917",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"move",
|
||||
"60a64f7eae945a6e60b0e917"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Update 1 move",
|
||||
"request": {
|
||||
"method": "PUT",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\r\n \"schemaVersion\": 2,\r\n \"name\": \"Ember UPDATED\",\r\n \"category\": \"SPECIAL\",\r\n \"power\": 40,\r\n \"accuracy\": 100,\r\n \"type\": {\r\n \"name\": \"FIRE\",\r\n \"weakAgainst\": [\r\n \"WATER\",\r\n \"GROUND\"\r\n ],\r\n \"effectiveAgainst\": [\r\n \"GRASS\"\r\n ]\r\n }\r\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/move/60a64f7eae945a6e60b0e917",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"move",
|
||||
"60a64f7eae945a6e60b0e917"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Delete 1 move",
|
||||
"request": {
|
||||
"method": "DELETE",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/move/60a64f7eae945a6e60b0e913",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"move",
|
||||
"60a64f7eae945a6e60b0e913"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "pokemong",
|
||||
"item": [
|
||||
{
|
||||
"name": "Create 1 pkmn",
|
||||
"protocolProfileBehavior": {
|
||||
"disabledSystemHeaders": {
|
||||
"content-type": true
|
||||
}
|
||||
},
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\r\n \"nickname\": \"Blappity-bloop\",\r\n \"dob\": \"2023-05-07\",\r\n \"level\": 1,\r\n \"pokedexId\": 172,\r\n \"evoStage\": 1,\r\n \"evoTrack\": [\"PICHU\", \"PIKACHU\", \"RAICHU\"],\r\n \"types\": [\r\n {\r\n \"name\": \"ELECTRIC\",\r\n \"weakAgainst\": [\"GROUND\", \"ROCK\"],\r\n \"effectiveAgainst\": [\"WATER\", \"FLYING\"]\r\n }\r\n ],\r\n \"moveSet\": \r\n [\r\n {\r\n \"id\": \"60a64f7eae945a6e60b0e917\",\r\n \"name\": \"Ember\"\r\n }\r\n ],\r\n \"schemaVersion\": 1\r\n}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/pokemong",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"pokemong"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Get all pkmn",
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/pokemong",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"pokemong"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Get 1 pkmn",
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/pokemong/60a64f7eae945a6e60b0e911",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"pokemong",
|
||||
"60a64f7eae945a6e60b0e911"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Update 1 pkmn",
|
||||
"request": {
|
||||
"method": "PUT",
|
||||
"header": [
|
||||
{
|
||||
"key": "Content-Type",
|
||||
"value": "application/json"
|
||||
}
|
||||
],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\n \"schemaVersion\": 1,\n \"nickname\": \"Sparky UPDATED\",\n \"dob\": \"1994-02-18\",\n \"level\": 15,\n \"pokedexId\": 1,\n \"evoStage\": 1,\n \"evoTrack\": [\n \"BULBASAUR\",\n \"IVYSAUR\",\n \"VENUSAUR\"\n ],\n \"trainer\": \"60a64f7eae945a6e60b0e914\",\n \"types\": [\n {\n \"name\": \"GRASS\",\n \"weakAgainst\": [\n \"FIRE\"\n ],\n \"effectiveAgainst\": [\n \"WATER\",\n \"GROUND\"\n ]\n }\n ],\n \"moveSet\": [\n {\n \"id\": \"60a64f7eae945a6e60b0e912\",\n \"name\": \"Vine Whip\"\n }\n ]\n}"
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/pokemong/60a64f7eae945a6e60b0e911",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"pokemong",
|
||||
"60a64f7eae945a6e60b0e911"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Delete 1 pkmn",
|
||||
"request": {
|
||||
"method": "DELETE",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/pokemong/60a64f7eae945a6e60b0e916",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"pokemong",
|
||||
"60a64f7eae945a6e60b0e916"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "trainer",
|
||||
"item": [
|
||||
{
|
||||
"name": "Create 1 trainer",
|
||||
"request": {
|
||||
"method": "POST",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\r\n \"schemaVersion\": 1,\r\n \"name\": \"Bloop\",\r\n \"dob\": \"1997-02-18\",\r\n \"wins\": 1,\r\n \"losses\": 50,\r\n \"pastOpponents\": [\r\n \"60a64f7eae945a6e60b0e915\"\r\n ],\r\n \"pokemongs\": [\r\n {\r\n \"id\": \"60a64f7eae945a6e60b0e911\",\r\n \"nickname\": \"Sparky UPDATED\",\r\n \"species\": \"IVYSAUR\"\r\n }\r\n ]\r\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/trainer",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"trainer"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Get all trainers",
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/trainer",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"trainer"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Get 1 trainer",
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/trainer/60a64f7eae945a6e60b0e914",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"trainer",
|
||||
"60a64f7eae945a6e60b0e914"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Update 1 trainer",
|
||||
"request": {
|
||||
"method": "PUT",
|
||||
"header": [],
|
||||
"body": {
|
||||
"mode": "raw",
|
||||
"raw": "{\r\n \"schemaVersion\": 1,\r\n \"name\": \"Brock\",\r\n \"dob\": \"1994-02-18\",\r\n \"wins\": 60,\r\n \"losses\": 60,\r\n \"pastOpponents\": [\r\n \"60a64f7eae945a6e60b0e914\"\r\n ],\r\n \"pokemongs\": [\r\n {\r\n \"id\": \"60a64f7eae945a6e60b0e911\",\r\n \"nickname\": \"Sparky UPDATED\",\r\n \"species\": \"IVYSAUR\"\r\n }\r\n ]\r\n}",
|
||||
"options": {
|
||||
"raw": {
|
||||
"language": "json"
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/trainer/60a64f7eae945a6e60b0e915",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"trainer",
|
||||
"60a64f7eae945a6e60b0e915"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
},
|
||||
{
|
||||
"name": "Delete 1 trainer",
|
||||
"request": {
|
||||
"method": "DELETE",
|
||||
"header": [],
|
||||
"url": {
|
||||
"raw": "http://localhost:8080/trainer/60a64f7eae945a6e60b0e914",
|
||||
"protocol": "http",
|
||||
"host": [
|
||||
"localhost"
|
||||
],
|
||||
"port": "8080",
|
||||
"path": [
|
||||
"trainer",
|
||||
"60a64f7eae945a6e60b0e914"
|
||||
]
|
||||
}
|
||||
},
|
||||
"response": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
{
|
||||
"_id": { "$oid":"60a64f7eae945a6e60b0e912" },
|
||||
"schemaVersion": 1,
|
||||
"name": "Vine Whip",
|
||||
"power": 45,
|
||||
"pp": 15,
|
||||
"category": "PHYSICAL",
|
||||
"accuracy": 100,
|
||||
"type": {
|
||||
"name": "GRASS",
|
||||
"weakAgainst": ["FIRE"],
|
||||
"effectiveAgainst": ["WATER", "GROUND"]
|
||||
}
|
||||
}
|
||||
{
|
||||
"_id": { "$oid":"60a64f7eae945a6e60b0e913" },
|
||||
"schemaVersion": 2,
|
||||
"name": "Tackle",
|
||||
"power": 40,
|
||||
"category": "PHYSICAL",
|
||||
"accuracy": 100,
|
||||
"type": {
|
||||
"name": "NORMAL",
|
||||
"weakAgainst": ["ROCK"],
|
||||
"effectiveAgainst": []
|
||||
}
|
||||
}
|
||||
{
|
||||
"_id": { "$oid":"60a64f7eae945a6e60b0e917" },
|
||||
"schemaVersion": 2,
|
||||
"name": "Ember",
|
||||
"power": 40,
|
||||
"category": "SPECIAL",
|
||||
"accuracy": 100,
|
||||
"type": {
|
||||
"name": "FIRE",
|
||||
"weakAgainst": ["WATER", "GROUND"],
|
||||
"effectiveAgainst": ["GRASS"]
|
||||
}
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
{
|
||||
"_id": {
|
||||
"$oid": "60a64f7eae945a6e60b0e911"
|
||||
},
|
||||
"schemaVersion": 1,
|
||||
"nickname": "Sparky",
|
||||
"dob": {
|
||||
"$date": {
|
||||
"$numberLong": "761597551000"
|
||||
}
|
||||
},
|
||||
"level": 15,
|
||||
"pokedexId": 1,
|
||||
"evoStage": 1,
|
||||
"evoTrack": [
|
||||
"BULBASAUR",
|
||||
"IVYSAUR",
|
||||
"VENUSAUR"
|
||||
],
|
||||
"trainer": {
|
||||
"$oid": "60a64f7eae945a6e60b0e914"
|
||||
},
|
||||
"types": [
|
||||
{
|
||||
"name": "GRASS",
|
||||
"weakAgainst": [
|
||||
"FIRE"
|
||||
],
|
||||
"effectiveAgainst": [
|
||||
"WATER",
|
||||
"GROUND"
|
||||
]
|
||||
}
|
||||
],
|
||||
"moveSet": [
|
||||
{
|
||||
"_id": {
|
||||
"$oid": "60a64f7eae945a6e60b0e913"
|
||||
},
|
||||
"name": "Tackle"
|
||||
},
|
||||
{
|
||||
"_id": {
|
||||
"$oid": "60a64f7eae945a6e60b0e912"
|
||||
},
|
||||
"name": "Vine Whip"
|
||||
}
|
||||
]
|
||||
}
|
||||
{
|
||||
"_id": {
|
||||
"$oid": "60a64f7eae945a6e60b0e916"
|
||||
},
|
||||
"schemaVersion": 1,
|
||||
"nickname": "Blazey",
|
||||
"dob": {
|
||||
"$date": {
|
||||
"$numberLong": "761597651000"
|
||||
}
|
||||
},
|
||||
"level": 10,
|
||||
"pokedexId": 4,
|
||||
"evoStage": 0,
|
||||
"evoTrack": [
|
||||
"CHARMANDER",
|
||||
"CHARMELEON",
|
||||
"CHARIZARD"
|
||||
],
|
||||
"trainer": {
|
||||
"$oid": "60a64f7eae945a6e60b0e915"
|
||||
},
|
||||
"types": [
|
||||
{
|
||||
"name": "FIRE",
|
||||
"weakAgainst": [
|
||||
"WATER",
|
||||
"GROUND"
|
||||
],
|
||||
"effectiveAgainst": [
|
||||
"GRASS"
|
||||
]
|
||||
}
|
||||
],
|
||||
"moveSet": [
|
||||
{
|
||||
"_id": {
|
||||
"$oid": "60a64f7eae945a6e60b0e913"
|
||||
},
|
||||
"name": "Tackle"
|
||||
},
|
||||
{
|
||||
"_id": {
|
||||
"$oid": "60a64f7eae945a6e60b0e917"
|
||||
},
|
||||
"name": "Ember"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
{
|
||||
"_id": {
|
||||
"$oid": "60a64f7eae945a6e60b0e914"
|
||||
},
|
||||
"schemaVersion": 1,
|
||||
"name": "Ash",
|
||||
"dob": {
|
||||
"$date": {
|
||||
"$numberLong": "761598551000"
|
||||
}
|
||||
},
|
||||
"wins": 100,
|
||||
"losses": 50,
|
||||
"pastOpponents": [
|
||||
{
|
||||
"$oid": "60a64f7eae945a6e60b0e915"
|
||||
}
|
||||
],
|
||||
"pokemongs": [
|
||||
{
|
||||
"_id": {
|
||||
"$oid": "60a64f7eae945a6e60b0e911"
|
||||
},
|
||||
"nickname": "Sparky",
|
||||
"species": "IVYSAUR"
|
||||
}
|
||||
]
|
||||
}
|
||||
{
|
||||
"_id": {
|
||||
"$oid": "60a64f7eae945a6e60b0e915"
|
||||
},
|
||||
"schemaVersion": 1,
|
||||
"name": "Brock",
|
||||
"dob": {
|
||||
"$date": {
|
||||
"$numberLong": "761596551000"
|
||||
}
|
||||
},
|
||||
"wins": 70,
|
||||
"losses": 60,
|
||||
"pastOpponents": [
|
||||
{
|
||||
"$oid": "60a64f7eae945a6e60b0e914"
|
||||
}
|
||||
],
|
||||
"pokemongs": [
|
||||
{
|
||||
"_id": {
|
||||
"$oid": "60a64f7eae945a6e60b0e916"
|
||||
},
|
||||
"nickname": "Blazey",
|
||||
"species": "CHARMANDER"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package fr.uca.iut.entities;
|
||||
|
||||
/**
|
||||
* The strategy for incrementing the schema version number is simple.
|
||||
* <br><br>
|
||||
* `schemaVersion` will have to start at 1, and need to be incremented by one at each schema change.
|
||||
* <br><br>
|
||||
* Every change to the schema needs to involve the schema version number being incremented.
|
||||
*/
|
||||
public abstract class GenericVersionedEntity extends GenericEntity {
|
||||
|
||||
private Integer schemaVersion;
|
||||
|
||||
public Integer getSchemaVersion() {
|
||||
return schemaVersion;
|
||||
}
|
||||
|
||||
public void setSchemaVersion(Integer schemaVersion) {
|
||||
this.schemaVersion = schemaVersion;
|
||||
}
|
||||
}
|
@ -1,10 +1,13 @@
|
||||
package fr.uca.iut.entities;
|
||||
package fr.uca.iut.entities.denormalized;
|
||||
|
||||
import fr.uca.iut.entities.GenericEntity;
|
||||
|
||||
public class PokemongMove extends GenericEntity {
|
||||
|
||||
private String name;
|
||||
|
||||
public PokemongMove() {}
|
||||
public PokemongMove() {
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
Loading…
Reference in new issue