From e837bf220e6deb58e6222b17aca29394a13853b2 Mon Sep 17 00:00:00 2001 From: phertyameen Date: Wed, 30 Jul 2025 00:03:57 +0100 Subject: [PATCH] data schema and migration initialisation --- package.json | 5 ++++- src/achievement/entities/achievement.entity.ts | 3 +++ src/users/user.entity.ts | 9 +++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 82611b2..1173bc1 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,10 @@ "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json", - "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js" + "typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js", + "migration:generate": "npm run typeorm -- migration:generate src/migrations/YourMigrationName -d data-source.ts", + "migration:run": "npm run typeorm -- migration:run -d data-source.ts", + "migration:revert": "npm run typeorm -- migration:revert -d data-source.ts" }, "dependencies": { "@nestjs/axios": "^4.0.0", diff --git a/src/achievement/entities/achievement.entity.ts b/src/achievement/entities/achievement.entity.ts index fedfbc2..c50f989 100644 --- a/src/achievement/entities/achievement.entity.ts +++ b/src/achievement/entities/achievement.entity.ts @@ -24,6 +24,9 @@ export class Achievement { @Column() iconUrl: string; + @Column({ nullable: true }) + unlockCondition?: string; + @CreateDateColumn() createdAt: Date; } diff --git a/src/users/user.entity.ts b/src/users/user.entity.ts index 0f649d7..a4b6da9 100644 --- a/src/users/user.entity.ts +++ b/src/users/user.entity.ts @@ -2,6 +2,8 @@ import { ApiProperty } from '@nestjs/swagger'; import { Column, Entity, + JoinTable, + ManyToMany, ManyToOne, OneToMany, PrimaryGeneratedColumn, @@ -9,6 +11,7 @@ import { import { userRole } from './enums/userRole.enum'; import { LeaderboardEntry } from 'src/leaderboard/entities/leaderboard.entity'; import { Badge } from 'src/badge/entities/badge.entity'; +import { Achievement } from 'src/achievement/entities/achievement.entity'; // import { PuzzleSubmission } from 'src/puzzle/entities/puzzle-submission.entity'; // import { PuzzleProgress } from 'src/puzzle/entities/puzzle-progress.entity'; @@ -87,6 +90,12 @@ export class User { @Column({ type: 'int', default: 0 }) tokens: number; + @ManyToMany(() => Achievement, (achievement) => achievement.user, { + cascade: true, + }) + @JoinTable() + achievements: Achievement[]; + /** * One-to-many relation with puzzle progress records. */