From f8c6802c407cdc3be71246f28c6af3073d8db3e1 Mon Sep 17 00:00:00 2001 From: SANGHUN OH <121424793+unifolio0@users.noreply.github.com> Date: Fri, 16 Aug 2024 17:05:42 +0900 Subject: [PATCH] =?UTF-8?q?[BE-FEAT]=20=EB=B0=94=EC=9D=B4=EC=98=B4=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=EB=A5=BC=20=EB=B6=88=EB=9F=AC?= =?UTF-8?q?=EC=98=A4=EB=8A=94=20API=20(#231)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 특성, 기술 머신, 날씨 정보 추출 기능 * feat: 바이옴 리스트 불러오는 API * refactor: 절대 경로를 상대 경로로 수정 * refactor: txt파일을 파싱하는 로직 이동 * refactor: String으로 저장하던 것을 객체로 변환 * refactor: 필드 변수를 메서드 내부 변수로 이동 * refactor: 에러 처리 및 개행 추가 * test: 바이옴 데이터 세팅 테스트 * rename: 폴더명 수정 * refactor: try-with-resource문으로 예외처리 * chore: 바이옴 데이터 추가 * refactor: 파일 경로 수정 --- .../external/inform-extractor/ability.test.ts | 193 ++++++++++++++++ .../external/inform-extractor/tms.test.ts | 195 ++++++++++++++++ .../external/inform-extractor/weather.test.ts | 209 ++++++++++++++++++ .../config/BiomeDatabaseInitializer.java | 164 ++++++++++++++ .../biome/controller/BiomeController.java | 23 ++ .../pokerogue/helper/biome/data/Biome.java | 42 ++++ .../helper/biome/data/BiomeLink.java | 17 ++ .../helper/biome/data/BiomePokemon.java | 20 ++ .../biome/data/BiomeTypeAndTrainer.java | 19 ++ .../com/pokerogue/helper/biome/data/Tier.java | 32 +++ .../pokerogue/helper/biome/data/Trainer.java | 18 ++ .../helper/biome/data/TrainerPokemon.java | 17 ++ .../helper/biome/data/TrainerType.java | 17 ++ .../helper/biome/dto/BiomeResponse.java | 23 ++ .../biome/repository/BiomeRepository.java | 28 +++ .../helper/biome/service/BiomeService.java | 20 ++ .../helper/global/exception/ErrorMessage.java | 9 +- backend/pokerogue/src/main/resources | 2 +- .../config/BiomeDatabaseInitializerTest.java | 21 ++ 19 files changed, 1065 insertions(+), 4 deletions(-) create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/ability.test.ts create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/tms.test.ts create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/weather.test.ts create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/config/BiomeDatabaseInitializer.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/controller/BiomeController.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Biome.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomeLink.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomePokemon.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomeTypeAndTrainer.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Tier.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Trainer.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/TrainerPokemon.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/TrainerType.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/dto/BiomeResponse.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/repository/BiomeRepository.java create mode 100644 backend/pokerogue/src/main/java/com/pokerogue/helper/biome/service/BiomeService.java create mode 100644 backend/pokerogue/src/test/java/com/pokerogue/helper/biome/config/BiomeDatabaseInitializerTest.java diff --git a/backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/ability.test.ts b/backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/ability.test.ts new file mode 100644 index 000000000..b3b56bb70 --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/ability.test.ts @@ -0,0 +1,193 @@ +// import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +// +// import { Abilities } from "#app/enums/abilities.js"; +// import { ability } from "#app/locales/ko/ability" +// import { Moves } from "#app/enums/moves" +// import { Type } from "#app/data/type" +// import { allMoves } from "#app/data/move.js"; +// import PokemonSpecies, { starterPassiveAbilities, initSpecies, allSpecies, PokemonSpeciesForm, PokemonForm } from "#app/data/pokemon-species.js"; +// import * as fs from "fs"; +// import * as path from 'path'; +// import { speciesEggMoves } from "#app/data/egg-moves" +// import { Species } from "#app/enums/species.ts"; +// import i18next, { init } from "i18next"; +// import { pokemonSpeciesLevelMoves } from "#app/data/pokemon-level-moves.ts"; +// import { biomePokemonPools, getBiomeName, initBiomes, pokemonBiomes } from "#app/data/biomes.ts"; +// import { Biome } from "#app/enums/biome.ts"; +// import { exit } from "process"; +// import { Ability, allAbilities } from "#app/data/ability.ts"; +// import GameManager from "#test/utils/gameManager"; +// import { enConfig } from "#app/locales/en/config.js"; +// import { koConfig } from "#app/locales/ko/config.js"; +// +// const filePath = path.join(__dirname, 'ability.txt'); +// const logStream = fs.createWriteStream(filePath, { flags: 'w' }); +// console.log = (...args: any[]) => { +// const message = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : arg).join(' '); +// logStream.write(message + '\n'); +// }; +// +// describe("Ability", () => { +// let phaserGame: Phaser.Game; +// let game: GameManager; +// const TIMEOUT = 1000 * 20; +// +// beforeAll(() => { +// }); +// +// afterEach(() => { +// }); +// +// beforeEach(() => { +// }); +// +// // const print = (((x: PokemonForm, sp: PokemonSpecies, pokemonId: integer, passive: Abilities, eggMoves, moves, biomes) => { +// // var ret = [] +// // // id +// // ret.push(pokemonId) +// // ret.push(x.speciesId) +// // //name +// // ret.push(sp.name +"-"+ x.formName) +// // // type +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type2]}`)) +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type1]}`)) +// // // ability (todo: passive) +// // ret.push(new Ability(x.ability1, x.generation).name) +// // ret.push(new Ability(x.ability2, x.generation).name) +// // ret.push(new Ability(x.abilityHidden, x.generation).name) +// // ret.push(new Ability(passive, x.generation).name) +// // // metadata +// // ret.push(x.generation) +// // ret.push(sp.legendary) +// // ret.push(sp.subLegendary) +// // ret.push(sp.mythical) +// // // evolution (speciesId, level) +// // ret.push(sp.getEvolutionLevels()) +// // // stats (baseHp, baseAtk, baseDef, baseSpatk, baseSpdef, baseSpd) +// // ret.push(x.baseTotal) +// // ret.push(x.baseStats) +// // ret.push(x.height) +// // ret.push(x.weight) +// // // form +// // ret.push(sp.canChangeForm) +// // // eggMoves +// // var tmp = [] +// // for(let i =0; i < eggMoves.length; i++){ +// // tmp.push(eggMoves[i].name) +// // } +// // ret.push(tmp) +// // // moves +// // tmp = [] +// // for(let i =0; i < moves.length; i++){ +// // tmp.push(moves[i][1].name) +// // } +// // ret.push(tmp) +// +// +// // tmp = [] +// // for(let i =0; i < biomes.length; i++){ +// // tmp.push(getBiomeName(biomes[i])) +// // } +// // ret.push(tmp) +// +// // console.log(ret.join(" / ")) +// // })); +// +// +// +// // const print2 = (((x: PokemonSpecies, pokemonId: integer, passive: Abilities, eggMoves, moves, biomes +// // ) => { +// // var ret = [] +// // // id +// // ret.push(pokemonId) +// // ret.push(x.speciesId) +// // //name +// // ret.push(x.name) +// // // type +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type2]}`)) +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type1]}`)) +// // // ability (todo: passive) +// // ret.push(new Ability(x.ability1, x.generation).name) +// // ret.push(new Ability(x.ability2, x.generation).name) +// // ret.push(new Ability(x.abilityHidden, x.generation).name) +// // ret.push(new Ability(passive, x.generation).name) +// // // metadata +// // ret.push(x.generation) +// // ret.push(x.legendary) +// // ret.push(x.subLegendary) +// // ret.push(x.mythical) +// // // evolution (speciesId, level) +// // ret.push(x.getEvolutionLevels()) +// // // stats (baseHp, baseAtk, baseDef, baseSpatk, baseSpdef, baseSpd) +// // ret.push(x.baseTotal) +// // ret.push(x.baseStats) +// // ret.push(x.height) +// // ret.push(x.weight) +// // // form +// // ret.push(x.canChangeForm) +// // // eggMoves +// // var tmp = [] +// // for(let i =0; i < eggMoves.length; i++){ +// // tmp.push(eggMoves[i].name) +// // } +// // ret.push(tmp) +// // // moves +// // tmp = [] +// // for(let i =0; i < moves.length; i++){ +// // tmp.push(moves[i][1].name) +// // } +// // ret.push(tmp) +// +// +// // tmp = [] +// // for(let i =0; i < biomes.length; i++){ +// // tmp.push(getBiomeName(biomes[i])) +// // } +// // ret.push(tmp) +// +// // console.log(ret.join(" / ")) +// // })); +// +// it("특성 정보 추출 테스트", async () => { +// console.log("이름 / 효과 설명 / 세대 / 해당 특성을 가진 포켓몬") +// console.log() +// +// let p = allAbilities; +// var abilityId: integer = 1 +// let q = allSpecies +// +// for (let i = 0; i < allAbilities.length; i++) { +// var ret = [] +// let x = allAbilities[i] +// if (x.id === Abilities.NONE) { +// continue +// } +// var name = x.name +// ret.push(name) +// var description = x.description +// ret.push(description) +// var generation = x.generation +// ret.push(generation) +// var abret = [] +// for (let i = 0; i < allSpecies.length; i++) { +// let y = allSpecies[i] +// var passive = starterPassiveAbilities[y.getRootSpeciesId()] +// if (y.ability1 === x.id || y.ability2 === x.id || y.abilityHidden === x.id || passive === x.id) { +// abret.push(y.name) +// } +// if (y.canChangeForm) { +// for (var form of y.forms) { +// if (form.ability1 === x.id || form.ability2 === x.id || form.abilityHidden === x.id) { +// if (form.formName === "Normal") { +// continue +// } +// abret.push(y.name + "-" + form.formName) +// } +// } +// } +// } +// ret.push(abret.join(" , ")) +// console.log(ret.join(" / ")) +// } +// }); +// }); diff --git a/backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/tms.test.ts b/backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/tms.test.ts new file mode 100644 index 000000000..8c4992548 --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/tms.test.ts @@ -0,0 +1,195 @@ +// import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +// +// import { Moves } from "#app/enums/moves" +// import { allMoves } from "#app/data/move.js"; +// import PokemonSpecies, { starterPassiveAbilities, initSpecies, allSpecies, PokemonSpeciesForm, PokemonForm } from "#app/data/pokemon-species.js"; +// import * as fs from "fs"; +// import * as path from 'path'; +// import { Species } from "#app/enums/species.js"; +// import i18next, { init } from "i18next"; +// import { exit } from "process"; +// import { tmSpecies } from "#app/data/tms.js"; +// +// const filePath = path.join(__dirname, 'tms.txt'); +// const logStream = fs.createWriteStream(filePath, { flags: 'w' }); +// console.log = (...args: any[]) => { +// const message = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : arg).join(' '); +// logStream.write(message + '\n'); +// }; +// +// describe("Pokemon", () => { +// beforeAll(() => { +// }); +// +// afterEach(() => { +// }); +// +// beforeEach(() => { +// }); +// +// // const print = (((x: PokemonForm, sp: PokemonSpecies, pokemonId: integer, passive: Abilities, eggMoves, moves, biomes) => { +// // var ret = [] +// // // id +// // ret.push(pokemonId) +// // ret.push(x.speciesId) +// // //name +// // ret.push(sp.name +"-"+ x.formName) +// // // type +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type2]}`)) +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type1]}`)) +// // // ability (todo: passive) +// // ret.push(new Ability(x.ability1, x.generation).name) +// // ret.push(new Ability(x.ability2, x.generation).name) +// // ret.push(new Ability(x.abilityHidden, x.generation).name) +// // ret.push(new Ability(passive, x.generation).name) +// // // metadata +// // ret.push(x.generation) +// // ret.push(sp.legendary) +// // ret.push(sp.subLegendary) +// // ret.push(sp.mythical) +// // // evolution (speciesId, level) +// // ret.push(sp.getEvolutionLevels()) +// // // stats (baseHp, baseAtk, baseDef, baseSpatk, baseSpdef, baseSpd) +// // ret.push(x.baseTotal) +// // ret.push(x.baseStats) +// // ret.push(x.height) +// // ret.push(x.weight) +// // // form +// // ret.push(sp.canChangeForm) +// // // eggMoves +// // var tmp = [] +// // for(let i =0; i < eggMoves.length; i++){ +// // tmp.push(eggMoves[i].name) +// // } +// // ret.push(tmp) +// // // moves +// // tmp = [] +// // for(let i =0; i < moves.length; i++){ +// // tmp.push(moves[i][1].name) +// // } +// // ret.push(tmp) +// +// +// // tmp = [] +// // for(let i =0; i < biomes.length; i++){ +// // tmp.push(getBiomeName(biomes[i])) +// // } +// // ret.push(tmp) +// +// // console.log(ret.join(" / ")) +// // })); +// +// +// +// // const print2 = (((x: PokemonSpecies, pokemonId: integer, passive: Abilities, eggMoves, moves, biomes +// // ) => { +// +// // var ret = [] +// // // id +// // ret.push(pokemonId) +// // ret.push(x.speciesId) +// // //name +// // ret.push(x.name) +// // // type +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type2]}`)) +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type1]}`)) +// // // ability (todo: passive) +// // ret.push(new Ability(x.ability1, x.generation).name) +// // ret.push(new Ability(x.ability2, x.generation).name) +// // ret.push(new Ability(x.abilityHidden, x.generation).name) +// // ret.push(new Ability(passive, x.generation).name) +// // // metadata +// // ret.push(x.generation) +// // ret.push(x.legendary) +// // ret.push(x.subLegendary) +// // ret.push(x.mythical) +// // // evolution (speciesId, level) +// // ret.push(x.getEvolutionLevels()) +// // // stats (baseHp, baseAtk, baseDef, baseSpatk, baseSpdef, baseSpd) +// // ret.push(x.baseTotal) +// // ret.push(x.baseStats) +// // ret.push(x.height) +// // ret.push(x.weight) +// // // form +// // ret.push(x.canChangeForm) +// // // eggMoves +// // var tmp = [] +// // for(let i =0; i < eggMoves.length; i++){ +// // tmp.push(eggMoves[i].name) +// // } +// // ret.push(tmp) +// // // moves +// // tmp = [] +// // for(let i =0; i < moves.length; i++){ +// // tmp.push(moves[i][1].name) +// // } +// // ret.push(tmp) +// +// +// // tmp = [] +// // for(let i =0; i < biomes.length; i++){ +// // tmp.push(getBiomeName(biomes[i])) +// // } +// // ret.push(tmp) +// +// // console.log(ret.join(" / ")) +// // })); +// +// function getEnumValues(enumObj: T): T[keyof T][] { +// return Object.values(enumObj).filter(value => typeof value === 'number') as T[keyof T][]; +// } +// function toCamelCase(str: string): string { +// return str +// .toLowerCase() +// .replace(/_./g, match => match.charAt(1).toUpperCase()); +// } +// +// it("포켓몬이 배울 수 있는 기술 정보 추출 테스트", async () => { +// +// let p = allSpecies; +// var pokemonId: integer = 1 +// +// // initBiomes(); +// // const biomeMap = new Map(); +// // for (let i = 0; i < pokemonBiomes.length; i++) { +// // var species = Species[pokemonBiomes[i][0]] +// // var biomeEntries = pokemonBiomes[i][3] +// // biomeMap.set(species, biomeEntries +// // .map((a, b, c) => a[0]) +// // .filter((value, index, self) => self.indexOf(value) === index)) +// // } +// const moves: Moves[] = getEnumValues(Moves); +// const species: Species[] = getEnumValues(Species); +// console.log("이름 / 배울 수 있는 기술 목록") +// console.log() +// for (let i = 0; i < allSpecies.length; i++) { +// var x = allSpecies[i] +// var ret = [] +// ret.push(x.name) +// var ts = [] +// for (let j = 0; j < allMoves.length; j++) { +// var y = tmSpecies[allMoves[j].id] +// if (Array.isArray(y)) { +// for (let k = 0; k < y.length; k++) { +// var speciesEntry = y[k]; +// +// // speciesEntry가 배열인지 확인하고 처리 +// if (Array.isArray(speciesEntry)) { +// // 배열의 첫 번째 항목이 x.speciesId와 일치하는지 확인 +// if (speciesEntry[0] === x.speciesId) { +// ts.push(allMoves[j].name); +// } +// } else { +// // speciesEntry가 단일 Species인지 확인 +// if (speciesEntry === x.speciesId) { +// ts.push(allMoves[j].name); +// } +// } +// } +// } +// } +// ret.push(ts.join(" , ")) +// console.log(ret.join(" / ")) +// } +// }); +// }); diff --git a/backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/weather.test.ts b/backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/weather.test.ts new file mode 100644 index 000000000..4c8f186f9 --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/external/inform-extractor/weather.test.ts @@ -0,0 +1,209 @@ +// import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +// +// import { WeatherType } from "#app/enums/weather-type"; +// import { arenaFlyout } from "#app/locales/ko/arena-flyout"; +// import { weather } from "#app/locales/ko/weather.ts"; +// import { Weather } from "#app/data/weather.ts"; +// import * as fs from "fs"; +// import * as path from 'path'; +// import i18next, { init } from "i18next"; +// import { exit } from "process"; +// import GameManager from "#test/utils/gameManager"; +// +// const filePath = path.join(__dirname, 'weather.txt'); +// const logStream = fs.createWriteStream(filePath, { flags: 'w' }); +// console.log = (...args: any[]) => { +// const message = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : arg).join(' '); +// logStream.write(message + '\n'); +// }; +// +// describe("Weather", () => { +// let phaserGame: Phaser.Game; +// let game: GameManager; +// const TIMEOUT = 1000 * 20; +// +// beforeAll(() => { +// }); +// +// afterEach(() => { +// }); +// +// beforeEach(() => { +// }); +// +// // const print = (((x: PokemonForm, sp: PokemonSpecies, pokemonId: integer, passive: Abilities, eggMoves, moves, biomes) => { +// // var ret = [] +// // // id +// // ret.push(pokemonId) +// // ret.push(x.speciesId) +// // //name +// // ret.push(sp.name +"-"+ x.formName) +// // // type +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type2]}`)) +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type1]}`)) +// // // ability (todo: passive) +// // ret.push(new Ability(x.ability1, x.generation).name) +// // ret.push(new Ability(x.ability2, x.generation).name) +// // ret.push(new Ability(x.abilityHidden, x.generation).name) +// // ret.push(new Ability(passive, x.generation).name) +// // // metadata +// // ret.push(x.generation) +// // ret.push(sp.legendary) +// // ret.push(sp.subLegendary) +// // ret.push(sp.mythical) +// // // evolution (speciesId, level) +// // ret.push(sp.getEvolutionLevels()) +// // // stats (baseHp, baseAtk, baseDef, baseSpatk, baseSpdef, baseSpd) +// // ret.push(x.baseTotal) +// // ret.push(x.baseStats) +// // ret.push(x.height) +// // ret.push(x.weight) +// // // form +// // ret.push(sp.canChangeForm) +// // // eggMoves +// // var tmp = [] +// // for(let i =0; i < eggMoves.length; i++){ +// // tmp.push(eggMoves[i].name) +// // } +// // ret.push(tmp) +// // // moves +// // tmp = [] +// // for(let i =0; i < moves.length; i++){ +// // tmp.push(moves[i][1].name) +// // } +// // ret.push(tmp) +// +// +// // tmp = [] +// // for(let i =0; i < biomes.length; i++){ +// // tmp.push(getBiomeName(biomes[i])) +// // } +// // ret.push(tmp) +// +// // console.log(ret.join(" / ")) +// // })); +// +// +// +// // const print2 = (((x: PokemonSpecies, pokemonId: integer, passive: Abilities, eggMoves, moves, biomes +// // ) => { +// // var ret = [] +// // // id +// // ret.push(pokemonId) +// // ret.push(x.speciesId) +// // //name +// // ret.push(x.name) +// // // type +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type2]}`)) +// // ret.push(i18next.t(`pokemonInfo:Type.${Type[x.type1]}`)) +// // // ability (todo: passive) +// // ret.push(new Ability(x.ability1, x.generation).name) +// // ret.push(new Ability(x.ability2, x.generation).name) +// // ret.push(new Ability(x.abilityHidden, x.generation).name) +// // ret.push(new Ability(passive, x.generation).name) +// // // metadata +// // ret.push(x.generation) +// // ret.push(x.legendary) +// // ret.push(x.subLegendary) +// // ret.push(x.mythical) +// // // evolution (speciesId, level) +// // ret.push(x.getEvolutionLevels()) +// // // stats (baseHp, baseAtk, baseDef, baseSpatk, baseSpdef, baseSpd) +// // ret.push(x.baseTotal) +// // ret.push(x.baseStats) +// // ret.push(x.height) +// // ret.push(x.weight) +// // // form +// // ret.push(x.canChangeForm) +// // // eggMoves +// // var tmp = [] +// // for(let i =0; i < eggMoves.length; i++){ +// // tmp.push(eggMoves[i].name) +// // } +// // ret.push(tmp) +// // // moves +// // tmp = [] +// // for(let i =0; i < moves.length; i++){ +// // tmp.push(moves[i][1].name) +// // } +// // ret.push(tmp) +// +// +// // tmp = [] +// // for(let i =0; i < biomes.length; i++){ +// // tmp.push(getBiomeName(biomes[i])) +// // } +// // ret.push(tmp) +// +// // console.log(ret.join(" / ")) +// // })); +// +// function getEnumValues(enumObj: T): T[keyof T][] { +// return Object.values(enumObj).filter(value => typeof value === 'number') as T[keyof T][]; +// } +// +// function toCamelCase(str: string): string { +// return str +// .toLowerCase() +// .replace(/_./g, match => match.charAt(1).toUpperCase()); +// } +// +// it("날씨 정보 추출 테스트", async () => { +// console.log("이름 / 출력 메시지 / 효과") +// console.log() +// console.log("없음 / 없음 / 없음") +// +// const weatherTypes: WeatherType[] = getEnumValues(WeatherType); +// for (let i = 1; i < weatherTypes.length; i++) { +// var ret = [] +// ret.push(i18next.t(`arenaFlyout:${toCamelCase(WeatherType[i])}`)) +// ret.push(i18next.t(`weather:${toCamelCase(WeatherType[i]) + "LapseMessage"}`)) +// if (i === 1) { +// ret.push("불꽃 타입 기술의 위력이 1.5배가 된다 , 물 타입 기술의 위력이 0.5배가 된다") +// } +// if (i === 2) { +// ret.push("물 타입 기술의 위력이 1.5배가 된다 , 불꽃 타입 기술의 위력이 0.5배가 된다") +// } +// if (i === 3) { +// ret.push("바위 또는 땅 또는 강철 타입 포켓몬이 아니면 매 턴마다 체력의 1/16의 데미지를 받는다 , 바위 타입 포켓몬의 특수방어가 1.5배가 된다") +// } +// if (i === 4) { +// ret.push("얼음 타입 포켓몬이 아니면 매 턴마다 체력의 1/16의 데미지를 받는다") +// } +// if (i === 5) { +// ret.push("얼음 타입 포켓몬의 방어가 1.5배 올라간다") +// } +// if (i === 6) { +// ret.push("모든 기술의 명중률이 0.9배가 된다") +// } +// if (i === 7) { +// ret.push("불타입 기술은 모두 실패한다 , 불꽃 타입 기술의 위력이 1.5배가 된다 , 물 타입 기술의 위력이 1.5배가 된다") +// } +// if (i === 8) { +// ret.push("물타입 기술은 모두 실패한다 , 불꽃 타입 기술의 위력이 1.5배가 된다 , 물 타입 기술의 위력이 0.5배가 된다") +// } +// if (i === 9) { +// ret.push("비행 타입의 약점을 없애준다") +// } +// console.log(ret.join(" / ")) +// } +// +// // for (let i = 0; i < allSpecies.length; i++) { +// // let x = allSpecies[i] +// +// // var passive = starterPassiveAbilities[x.getRootSpeciesId()] +// // var eggMoves: Moves[] = speciesEggMoves[x.getRootSpeciesId()].map((value, index, arr) => allMoves[value]) +// // var moves = pokemonSpeciesLevelMoves[x.getRootSpeciesId()].map((value, index, arr) => [value[0], allMoves[value[1]]]) +// // var biomes = biomeMap.get(Species[x.speciesId]) +// // print2(x, pokemonId++, passive, eggMoves, moves, biomes) +// // if (x.canChangeForm) { +// // for (var form of x.forms) { +// // // if(form.formName.toLowerCase() === "normal"){ +// // // continue +// // // } +// // print(form, x, pokemonId++, passive, eggMoves, moves, biomes) +// // } +// // } +// // } +// }); +// }); diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/config/BiomeDatabaseInitializer.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/config/BiomeDatabaseInitializer.java new file mode 100644 index 000000000..f064097ff --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/config/BiomeDatabaseInitializer.java @@ -0,0 +1,164 @@ +package com.pokerogue.helper.biome.config; + +import com.pokerogue.helper.biome.data.Biome; +import com.pokerogue.helper.biome.data.BiomeLink; +import com.pokerogue.helper.biome.data.BiomePokemon; +import com.pokerogue.helper.biome.data.BiomeTypeAndTrainer; +import com.pokerogue.helper.biome.data.Tier; +import com.pokerogue.helper.biome.data.Trainer; +import com.pokerogue.helper.biome.data.TrainerPokemon; +import com.pokerogue.helper.biome.data.TrainerType; +import com.pokerogue.helper.biome.repository.BiomeRepository; +import com.pokerogue.helper.global.exception.ErrorMessage; +import com.pokerogue.helper.global.exception.GlobalCustomException; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class BiomeDatabaseInitializer implements ApplicationRunner { + + private final BiomeRepository biomeRepository; + + @Override + public void run(ApplicationArguments args) { + List biomePokemons = new ArrayList<>(); + List biomeLinks = new ArrayList<>(); + List biomeTypesAndTrainers = new ArrayList<>(); + List trainerTypes = new ArrayList<>(); + List trainerPokemons = new ArrayList<>(); + + try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("biome-pokemons.txt"); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { + while (true) { + String biomePokemon = bufferedReader.readLine(); + if (biomePokemon == null) { + break; + } + biomePokemons.add(new BiomePokemon(biomePokemon)); + } + } catch (IOException e) { + log.error("error message : {}", e.getStackTrace()[0]); + } + + try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("biome-links.txt"); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { + while (true) { + String biomeLink = bufferedReader.readLine(); + if (biomeLink == null) { + break; + } + biomeLinks.add(new BiomeLink(biomeLink)); + } + } catch (IOException e) { + log.error("error message : {}", e.getStackTrace()[0]); + } + + try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("biome-types-trainers.txt"); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { + while (true) { + String biomeTypeAndTrainer = bufferedReader.readLine(); + if (biomeTypeAndTrainer == null) { + break; + } + biomeTypesAndTrainers.add(new BiomeTypeAndTrainer(biomeTypeAndTrainer)); + } + } catch (IOException e) { + log.error("error message : {}", e.getStackTrace()[0]); + } + + try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("trainer-types.txt"); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { + while (true) { + String trainerType = bufferedReader.readLine(); + if (trainerType == null) { + break; + } + trainerTypes.add(new TrainerType(trainerType)); + } + } catch (IOException e) { + log.error("error message : {}", e.getStackTrace()[0]); + } + + try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("trainer-types.txt"); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { + while (true) { + String trainerPokemon = bufferedReader.readLine(); + if (trainerPokemon == null) { + break; + } + trainerPokemons.add(new TrainerPokemon(trainerPokemon)); + } + } catch (IOException e) { + log.error("error message : {}", e.getStackTrace()[0]); + } + + List trainers = trainerTypes.stream() + .map(trainerType -> new Trainer(trainerType.getTrainerName(), trainerType.getTrainerTypes(), + getTrainerPokemons(trainerPokemons, trainerType.getTrainerName()))) + .toList(); + + biomeTypesAndTrainers.stream() + .map(biomeTypeAndTrainer -> new Biome( + biomeTypeAndTrainer.getBiomeName(), + biomeTypeAndTrainer.getBiomeName(), + getBiomePokemons(biomePokemons, biomeTypeAndTrainer.getBiomeName()), + biomeTypeAndTrainer.getBiomeTypes(), + getBiomeTrainers(trainers, biomeTypeAndTrainer.getTrainerNames()), + getNextBiomes(biomeLinks, biomeTypeAndTrainer.getBiomeName())) + ) + .forEach(biomeRepository::save); + } + + private Map> getBiomePokemons(List biomePokemons, String biomeName) { + List allBiomePokemons = biomePokemons.stream() + .filter(biomePokemon -> biomePokemon.getBiomeName().equals(biomeName)) + .toList(); + + Map> ret = new HashMap<>(); + for (BiomePokemon biomePokemon : allBiomePokemons) { + if (ret.containsKey(biomePokemon.getPokemonTier())) { + List pokemons = ret.get(biomePokemon.getPokemonTier()); + pokemons.addAll(biomePokemon.getPokemons()); + } else { + ret.put(biomePokemon.getPokemonTier(), new ArrayList<>(biomePokemon.getPokemons())); + } + } + + return ret; + } + + private List getBiomeTrainers(List trainers, List trainerNames) { + return trainers.stream() + .filter(trainer -> trainerNames.contains(trainer.getName())) + .toList(); + } + + private List getNextBiomes(List biomeLinks, String biomeName) { + return biomeLinks.stream() + .filter(biomeLink -> biomeLink.getCurrentBiome().equals(biomeName)) + .map(BiomeLink::getNextBiomes) + .findFirst() + .orElseThrow(() -> new GlobalCustomException(ErrorMessage.BIOME_NOT_FOUND)); + } + + private List getTrainerPokemons(List trainerPokemons, String trainerName) { + return trainerPokemons.stream() + .filter(trainerPokemon -> trainerPokemon.getTrainerName().equals(trainerName)) + .map(TrainerPokemon::getTrainerPokemons) + .findFirst() + .orElseThrow(() -> new GlobalCustomException(ErrorMessage.TRAINER_NOT_FOUND)); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/controller/BiomeController.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/controller/BiomeController.java new file mode 100644 index 000000000..7a8e457f5 --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/controller/BiomeController.java @@ -0,0 +1,23 @@ +package com.pokerogue.helper.biome.controller; + +import com.pokerogue.helper.biome.dto.BiomeResponse; +import com.pokerogue.helper.biome.service.BiomeService; +import com.pokerogue.helper.util.dto.ApiResponse; +import java.util.List; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequiredArgsConstructor +public class BiomeController { + + private final BiomeService biomeService; + + @GetMapping("/api/v1/biomes") + public ApiResponse> biomeList() { + return new ApiResponse<>("바이옴 리스트 불러오기에 성공했습니다.", biomeService.findBiomes()); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Biome.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Biome.java new file mode 100644 index 000000000..041e3869a --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Biome.java @@ -0,0 +1,42 @@ +package com.pokerogue.helper.biome.data; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import lombok.Getter; + +@Getter +public class Biome { + + private final String id; + private final String name; + private final Map> pokemons; + private final List mainTypes; + private final List trainers; + private final List nextBiomeNames; + + public Biome( + String id, + String name, + Map> pokemons, + List mainTypes, + List trainers, + List nextBiomeNames + ) { + this.id = id; + this.name = name; + this.pokemons = pokemons; + this.mainTypes = mainTypes; + this.trainers = trainers; + this.nextBiomeNames = nextBiomeNames; + } + + public List getTrainerTypes() { + Set trainerTypes = new HashSet<>(); + trainers.forEach(trainer -> trainerTypes.addAll(trainer.getTrainerTypes())); + + return trainerTypes.stream() + .toList(); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomeLink.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomeLink.java new file mode 100644 index 000000000..b8f2ca573 --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomeLink.java @@ -0,0 +1,17 @@ +package com.pokerogue.helper.biome.data; + +import java.util.List; +import lombok.Getter; + +@Getter +public class BiomeLink { + + private final String currentBiome; + private final List nextBiomes; + + public BiomeLink(String biomeLink) { + String[] biomeLinkInforms = biomeLink.split(" / "); + this.currentBiome = biomeLinkInforms[0]; + this.nextBiomes = List.of(biomeLinkInforms[1].split(",")); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomePokemon.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomePokemon.java new file mode 100644 index 000000000..4fb080d3b --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomePokemon.java @@ -0,0 +1,20 @@ +package com.pokerogue.helper.biome.data; + +import com.pokerogue.helper.biome.data.Tier; +import java.util.List; +import lombok.Getter; + +@Getter +public class BiomePokemon { + + private final String biomeName; + private final Tier pokemonTier; + private final List pokemons; + + public BiomePokemon(String biomePokemon) { + String[] biomePokemonInforms = biomePokemon.split(" / "); + this.biomeName = biomePokemonInforms[0]; + this.pokemonTier = Tier.getTierByName(biomePokemonInforms[2]); + this.pokemons = List.of(biomePokemonInforms[3].split(",")); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomeTypeAndTrainer.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomeTypeAndTrainer.java new file mode 100644 index 000000000..906a30cca --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/BiomeTypeAndTrainer.java @@ -0,0 +1,19 @@ +package com.pokerogue.helper.biome.data; + +import java.util.List; +import lombok.Getter; + +@Getter +public class BiomeTypeAndTrainer { + + private final String biomeName; + private final List biomeTypes; + private final List trainerNames; + + public BiomeTypeAndTrainer(String biomeTypeAndTrainer) { + String[] biomeTypeAndTrainerInforms = biomeTypeAndTrainer.split(" / "); + this.biomeName = biomeTypeAndTrainerInforms[0]; + this.biomeTypes = List.of(biomeTypeAndTrainerInforms[1].split(",")); + this.trainerNames = List.of(biomeTypeAndTrainerInforms[2].split(",")); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Tier.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Tier.java new file mode 100644 index 000000000..d7012f343 --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Tier.java @@ -0,0 +1,32 @@ +package com.pokerogue.helper.biome.data; + +import com.pokerogue.helper.global.exception.ErrorMessage; +import com.pokerogue.helper.global.exception.GlobalCustomException; +import java.util.Arrays; + +public enum Tier { + + COMMON("보통"), + UNCOMMON("드묾"), + RARE("레어"), + SUPER_RARE("슈퍼 레어"), + ULTRA_RARE("울트라 레어"), + BOSS("보스"), + BOSS_RARE("레어 보스"), + BOSS_SUPER_RARE("슈퍼 레어 보스"), + BOSS_ULTRA_RARE("슈퍼 울트라 레어 보스") + ; + + private final String name; + + Tier(String name) { + this.name = name; + } + + public static Tier getTierByName(String name) { + return Arrays.stream(values()) + .filter(tier -> tier.name.equals(name)) + .findFirst() + .orElseThrow(() -> new GlobalCustomException(ErrorMessage.TIER_NOT_FOUND)); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Trainer.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Trainer.java new file mode 100644 index 000000000..95506e545 --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/Trainer.java @@ -0,0 +1,18 @@ +package com.pokerogue.helper.biome.data; + +import java.util.List; +import lombok.Getter; + +@Getter +public class Trainer { + + private final String name; + private final List trainerTypes; + private final List pokemons; + + public Trainer(String name, List trainerTypes, List pokemons) { + this.name = name; + this.trainerTypes = trainerTypes; + this.pokemons = pokemons; + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/TrainerPokemon.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/TrainerPokemon.java new file mode 100644 index 000000000..08bfc00ce --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/TrainerPokemon.java @@ -0,0 +1,17 @@ +package com.pokerogue.helper.biome.data; + +import java.util.List; +import lombok.Getter; + +@Getter +public class TrainerPokemon { + + private final String trainerName; + private final List trainerPokemons; + + public TrainerPokemon(String trainerPokemon) { + String[] trainerPokemonInforms = trainerPokemon.split(" / "); + this.trainerName = trainerPokemonInforms[0]; + this.trainerPokemons = List.of(trainerPokemonInforms[1].split(",")); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/TrainerType.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/TrainerType.java new file mode 100644 index 000000000..6917a2f6b --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/data/TrainerType.java @@ -0,0 +1,17 @@ +package com.pokerogue.helper.biome.data; + +import java.util.List; +import lombok.Getter; + +@Getter +public class TrainerType { + + private final String trainerName; + private final List trainerTypes; + + public TrainerType(String trainerType) { + String[] trainerTypeInforms = trainerType.split(" / "); + this.trainerName = trainerTypeInforms[0]; + this.trainerTypes = List.of(trainerTypeInforms[1].split(",")); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/dto/BiomeResponse.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/dto/BiomeResponse.java new file mode 100644 index 000000000..0ebff5588 --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/dto/BiomeResponse.java @@ -0,0 +1,23 @@ +package com.pokerogue.helper.biome.dto; + +import com.pokerogue.helper.biome.data.Biome; +import java.util.List; + +public record BiomeResponse( + String id, + String name, + String image, + List pokemonTypeLogos, + List trainerTypeLogos +) { + + public static BiomeResponse from(Biome biome) { + return new BiomeResponse( + biome.getId(), + biome.getName(), + "바이옴 이미지", + biome.getMainTypes(), + biome.getTrainerTypes() + ); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/repository/BiomeRepository.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/repository/BiomeRepository.java new file mode 100644 index 000000000..99a4e9f06 --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/repository/BiomeRepository.java @@ -0,0 +1,28 @@ +package com.pokerogue.helper.biome.repository; + +import com.pokerogue.helper.biome.data.Biome; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class BiomeRepository { + + private final Map biomes; + + public BiomeRepository() { + this.biomes = new HashMap<>(); + } + + public void save(Biome biome) { + biomes.put(biome.getId(), biome); + } + + public List findAll() { + return biomes.values().stream() + .toList(); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/service/BiomeService.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/service/BiomeService.java new file mode 100644 index 000000000..26391e665 --- /dev/null +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/biome/service/BiomeService.java @@ -0,0 +1,20 @@ +package com.pokerogue.helper.biome.service; + +import com.pokerogue.helper.biome.dto.BiomeResponse; +import com.pokerogue.helper.biome.repository.BiomeRepository; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class BiomeService { + + private final BiomeRepository biomeRepository; + + public List findBiomes() { + return biomeRepository.findAll().stream() + .map(BiomeResponse::from) + .toList(); + } +} diff --git a/backend/pokerogue/src/main/java/com/pokerogue/helper/global/exception/ErrorMessage.java b/backend/pokerogue/src/main/java/com/pokerogue/helper/global/exception/ErrorMessage.java index c76dbeeec..ddf2f746b 100644 --- a/backend/pokerogue/src/main/java/com/pokerogue/helper/global/exception/ErrorMessage.java +++ b/backend/pokerogue/src/main/java/com/pokerogue/helper/global/exception/ErrorMessage.java @@ -12,9 +12,12 @@ public enum ErrorMessage { POKEMON_ABILITY_NOT_FOUND(HttpStatus.NOT_FOUND, "해당하는 특성을 찾지 못했습니다."), POKEMON_TYPE_NOT_FOUND(HttpStatus.NOT_FOUND, "해당하는 타입을 찾지 못했습니다."), ARTICLE_NOT_FOUND(HttpStatus.NOT_FOUND, "해당하는 꿀팁을 찾지 못했습니다."), - - FILE_EXTENSION_NOT_APPLY(HttpStatus.BAD_REQUEST, "지원하지 않는 파일 형식입니다."), - FILE_ACCESS_FAILED(HttpStatus.BAD_REQUEST, "파일 정보 접근에 실패했습니다."); + TIER_NOT_FOUND(HttpStatus.NOT_FOUND, "해당하는 티어를 찾지 못했습니다."), + TRAINER_NOT_FOUND(HttpStatus.NOT_FOUND, "해당하는 트레이너를 찾지 못했습니다."), + BIOME_NOT_FOUND(HttpStatus.NOT_FOUND, "해당하는 바이옴을 찾지 못했습니다."), + FILE_ACCESS_FAILED(HttpStatus.BAD_REQUEST, "파일 정보 접근에 실패했습니다."), + + FILE_EXTENSION_NOT_APPLY(HttpStatus.BAD_REQUEST, "지원하지 않는 파일 형식입니다."); private final HttpStatus httpStatus; private final String message; diff --git a/backend/pokerogue/src/main/resources b/backend/pokerogue/src/main/resources index 00279a7ee..1f92bcd62 160000 --- a/backend/pokerogue/src/main/resources +++ b/backend/pokerogue/src/main/resources @@ -1 +1 @@ -Subproject commit 00279a7eef13cd104dc36f0c93a4d7ecfdd337e0 +Subproject commit 1f92bcd6240b4c84c9f71ff2c4a4513a9dbe8c00 diff --git a/backend/pokerogue/src/test/java/com/pokerogue/helper/biome/config/BiomeDatabaseInitializerTest.java b/backend/pokerogue/src/test/java/com/pokerogue/helper/biome/config/BiomeDatabaseInitializerTest.java new file mode 100644 index 000000000..43766f1ee --- /dev/null +++ b/backend/pokerogue/src/test/java/com/pokerogue/helper/biome/config/BiomeDatabaseInitializerTest.java @@ -0,0 +1,21 @@ +package com.pokerogue.helper.biome.config; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.pokerogue.helper.biome.repository.BiomeRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.boot.DefaultApplicationArguments; + +class BiomeDatabaseInitializerTest { + + @Test + @DisplayName("바이옴 데이터를 세팅한다.") + void setBiomesData() { + BiomeRepository biomeRepository = new BiomeRepository(); + BiomeDatabaseInitializer biomeDatabaseInitializer = new BiomeDatabaseInitializer(biomeRepository); + biomeDatabaseInitializer.run(new DefaultApplicationArguments()); + + assertThat(biomeRepository.findAll()).hasSize(35); + } +}