All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 35s
P0 — Race conditions fixées avec pessimistic_write transactions : combat (double-spend endurance), forge (double upgrade), craft (consumeMaterials atomique), equip (item swap). Forge : coût or (50-1000) + endurance (15) ajouté. Combat : item stat bonuses (force/agilite/intelligence/chance) appliqués. P1 — Features manquantes : POST /api/characters/stats — distribution stat points (avec lock). POST /api/characters/rest — repos auberge (+50% HP, -20 endurance). Vitalité : +10 HP max par point distribué. P2 — Indexes DB ajoutés : character_id sur character_items, character_materials, combat_logs, craft_jobs, player_achievements, community_contributions. Composite (characterId, materialId) sur character_materials. period sur hall_of_fame. achievement_id sur player_achievements. P3 — Cleanup : @nestjs/jwt et pg retirés de package.json.
36 lines
755 B
TypeScript
36 lines
755 B
TypeScript
import {
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
Column,
|
|
ManyToOne,
|
|
JoinColumn,
|
|
Index,
|
|
} from 'typeorm';
|
|
import { Character } from '../character/entities/character.entity';
|
|
import { Material } from './material.entity';
|
|
|
|
@Entity('character_materials')
|
|
@Index(['characterId', 'materialId'])
|
|
export class CharacterMaterial {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Column({ name: 'character_id' })
|
|
@Index()
|
|
characterId: string;
|
|
|
|
@ManyToOne(() => Character)
|
|
@JoinColumn({ name: 'character_id' })
|
|
character: Character;
|
|
|
|
@Column({ name: 'material_id' })
|
|
materialId: string;
|
|
|
|
@ManyToOne(() => Material, { eager: true })
|
|
@JoinColumn({ name: 'material_id' })
|
|
material: Material;
|
|
|
|
@Column({ default: 0 })
|
|
quantity: number;
|
|
}
|