diff --git a/.dev.env b/.dev.env index 636a79a..248edb5 100644 --- a/.dev.env +++ b/.dev.env @@ -21,4 +21,6 @@ DB_NAME=carddrop DB_AUTH_USER=dev DB_AUTH_PASS=dev DB_SYNC=true -DB_LOGGING=true \ No newline at end of file +DB_LOGGING=true + +DB_CARD_FILE=card.db \ No newline at end of file diff --git a/.prod.env b/.prod.env index 358289d..0fbd3ed 100644 --- a/.prod.env +++ b/.prod.env @@ -21,4 +21,6 @@ DB_NAME=carddrop DB_AUTH_USER=prod DB_AUTH_PASS=prod DB_SYNC=false -DB_LOGGING=false \ No newline at end of file +DB_LOGGING=false + +DB_CARD_FILE=card.db \ No newline at end of file diff --git a/.stage.env b/.stage.env index d8d900d..a584c19 100644 --- a/.stage.env +++ b/.stage.env @@ -21,4 +21,6 @@ DB_NAME=carddrop DB_AUTH_USER=stage DB_AUTH_PASS=stage DB_SYNC=false -DB_LOGGING=false \ No newline at end of file +DB_LOGGING=false + +DB_CARD_FILE=card.db \ No newline at end of file diff --git a/src/constants/CardRarity.ts b/src/constants/CardRarity.ts new file mode 100644 index 0000000..541ff36 --- /dev/null +++ b/src/constants/CardRarity.ts @@ -0,0 +1,6 @@ +export enum CardRarity { + Bronze, + Silver, + Gold, + Legendary, +} \ No newline at end of file diff --git a/src/database/dataSources/appDataSource.ts b/src/database/dataSources/appDataSource.ts index 89cd27f..893e540 100644 --- a/src/database/dataSources/appDataSource.ts +++ b/src/database/dataSources/appDataSource.ts @@ -13,13 +13,13 @@ const AppDataSource = new DataSource({ synchronize: process.env.DB_SYNC == "true", logging: process.env.DB_LOGGING == "true", entities: [ - "dist/database/entities/**/*.js", + "dist/database/entities/app/**/*.js", ], migrations: [ - "dist/database/migrations/**/*.js", + "dist/database/migrations/app/**/*.js", ], subscribers: [ - "dist/database/subscribers/**/*.js", + "dist/database/subscribers/app/**/*.js", ], }); diff --git a/src/database/dataSources/cardDataSource.ts b/src/database/dataSources/cardDataSource.ts new file mode 100644 index 0000000..b6d64af --- /dev/null +++ b/src/database/dataSources/cardDataSource.ts @@ -0,0 +1,22 @@ +import { DataSource } from "typeorm"; +import * as dotenv from "dotenv"; + +dotenv.config(); + +const CardDataSource = new DataSource({ + type: "sqlite", + database: process.env.DB_CARD_FILE!, + synchronize: process.env.DB_SYNC == "true", + logging: process.env.DB_LOGGING == "true", + entities: [ + "dist/database/entities/card/**/*.js", + ], + migrations: [ + "dist/database/migrations/card/**/*.js", + ], + subscribers: [ + "dist/database/subscribers/card/**/*.js", + ], +}); + +export default CardDataSource; \ No newline at end of file diff --git a/src/database/entities/.gitkeep b/src/database/entities/app/.gitkeep similarity index 100% rename from src/database/entities/.gitkeep rename to src/database/entities/app/.gitkeep diff --git a/src/database/entities/card/Card.ts b/src/database/entities/card/Card.ts new file mode 100644 index 0000000..62027b5 --- /dev/null +++ b/src/database/entities/card/Card.ts @@ -0,0 +1,33 @@ +import { Column, Entity, OneToMany } from "typeorm"; +import BaseEntity from "../../../contracts/BaseEntity"; +import { CardRarity } from "../../../constants/CardRarity"; +import Series from "./Series"; +import CardDataSource from "../../dataSources/cardDataSource"; + +@Entity() +export default class Card extends BaseEntity { + constructor(id: string, name: string, rarity: CardRarity) { + super(); + + this.Id = id; + this.Name = name; + this.Rarity = rarity; + } + + @Column() + Name: string; + + @Column() + Rarity: CardRarity; + + @OneToMany(() => Series, x => x.Cards) + Series: Series; + + public static async FetchAllByRarity(rarity: CardRarity): Promise { + const repository = CardDataSource.getRepository(Card); + + const all = await repository.find({ where: { Rarity: rarity }}); + + return all; + } +} \ No newline at end of file diff --git a/src/database/entities/card/Series.ts b/src/database/entities/card/Series.ts new file mode 100644 index 0000000..f461a64 --- /dev/null +++ b/src/database/entities/card/Series.ts @@ -0,0 +1,25 @@ +import { Column, Entity, ManyToOne } from "typeorm"; +import BaseEntity from "../../../contracts/BaseEntity"; +import Card from "./Card"; + +@Entity() +export default class Series extends BaseEntity { + constructor(id: string, name: string) { + super(); + + this.Id = id; + this.Name = name; + } + + @Column() + Name: string; + + @ManyToOne(() => Card, x => x.Series) + Cards: Card[]; + + public async AddCard(card: Card) { + if (!this.Cards) return; + + this.Cards.push(card); + } +} \ No newline at end of file diff --git a/src/database/migrations/.gitkeep b/src/database/migrations/app/.gitkeep similarity index 100% rename from src/database/migrations/.gitkeep rename to src/database/migrations/app/.gitkeep diff --git a/src/database/migrations/card/.gitkeep b/src/database/migrations/card/.gitkeep new file mode 100644 index 0000000..e69de29