diff --git a/src/externals/database/mongo/models/battle.ts b/src/externals/database/mongo/models/battle.ts new file mode 100644 index 0000000..3ff9151 --- /dev/null +++ b/src/externals/database/mongo/models/battle.ts @@ -0,0 +1,59 @@ +import { Schema, model } from "mongoose"; + +const battleEventSchema = new Schema({ + actionType: { + type: String, + enum: ["base-attack", "item-use", "spell-attack", "conclusion"], + }, + sender: { + name: { type: String }, + isUser: { type: Boolean }, + }, + receiver: { + type: { + name: { type: String }, + isUser: { type: Boolean }, + }, + default: null, + }, + item: { + type: { + name: { type: String }, + }, + default: null, + }, + spell: { + type: { + name: { type: String }, + }, + default: null, + }, + result: { + sender: { + hp: { type: Number }, + mp: { type: Number }, + xp: { type: Number }, + isWinner: { type: Boolean }, + newQuantity: { type: Number }, + }, + receiver: { + hp: { type: Number }, + mp: { type: Number }, + xp: { type: Number }, + isWinner: { type: Boolean }, + newQuantity: { type: Number }, + }, + }, +}); + +const battleSchema = new Schema({ + user: { type: Schema.Types.ObjectId, ref: "User" }, + monster: { type: Schema.Types.ObjectId, ref: "Monster" }, + events: [battleEventSchema], + startedAt: { type: Date }, + finishedAt: { type: Date, default: null }, +}); + +const Battle = model("Battle", battleSchema); + +export default Battle; diff --git a/src/externals/database/mongo/models/map.ts b/src/externals/database/mongo/models/map.ts new file mode 100644 index 0000000..049b21c --- /dev/null +++ b/src/externals/database/mongo/models/map.ts @@ -0,0 +1,12 @@ +import { Schema, model } from "mongoose"; + +const mapSchema = new Schema({ + name: { type: String, required: true }, + image: { type: String, required: true }, + monsters: [{ type: Schema.Types.ObjectId, ref: "Monster" }], + createdAt: { type: Date }, +}); + +const Map = model("Map", mapSchema); + +export default Map; diff --git a/src/externals/database/mongo/models/monster.ts b/src/externals/database/mongo/models/monster.ts index e69de29..62d6c3a 100644 --- a/src/externals/database/mongo/models/monster.ts +++ b/src/externals/database/mongo/models/monster.ts @@ -0,0 +1,22 @@ +import { Schema, model } from "mongoose"; + +const monsterSchema = new Schema({ + name: { type: String, required: true }, + image: { type: String, required: true }, + level: { type: Number, required: true }, + hp: { type: Number, required: true }, + mp: { type: Number, required: true }, + maxHp: { type: Number, required: true }, + maxMp: { type: Number, required: true }, + xp: { type: Number, required: true }, + atk: { + min: { type: Number, required: true }, + max: { type: Number, required: true }, + }, + spawnChance: { type: Number, required: true }, + createdAt: { type: Date }, +}); + +const Monster = model("Monster", monsterSchema); + +export default Monster; \ No newline at end of file diff --git a/src/externals/database/mongo/models/user.ts b/src/externals/database/mongo/models/user.ts new file mode 100644 index 0000000..8514476 --- /dev/null +++ b/src/externals/database/mongo/models/user.ts @@ -0,0 +1,46 @@ +import { Schema, model } from "mongoose"; + +const spellSchema = new Schema({ + name: { type: String, required: true }, + atk: { + min: { type: Number, required: true }, + max: { type: Number, required: true }, + }, + mpCost: { type: Number, required: true }, +}); + +const itemSchema = new Schema({ + name: { type: String, required: true }, + result: { + hp: { type: Number, required: true }, + mp: { type: Number, required: true }, + }, + quantity: { type: Number, required: true }, +}); + +const characterSchema = new Schema({ + level: { type: Number, required: true }, + deaths: { type: Number, required: true }, + hp: { type: Number, required: true }, + mp: { type: Number, required: true }, + maxHp: { type: Number, required: true }, + maxMp: { type: Number, required: true }, + xp: { type: Number, required: true }, + atk: { + min: { type: Number, required: true }, + max: { type: Number, required: true }, + }, + spells: [spellSchema], + items: [itemSchema], +}); + +const userSchema = new Schema({ + nick: { type: String, required: true }, + image: { type: String, required: true }, + character: { type: characterSchema, required: true }, + createdAt: { type: Date, default: Date.now }, +}); + +const User = model("User", userSchema); + +export default User;