From fe8d5a53a5457d5f6266fdf8d11876e8c03c1386 Mon Sep 17 00:00:00 2001 From: magdo Date: Sun, 26 Oct 2025 21:27:00 +0100 Subject: [PATCH] editable property added to deck short dto --- SerpentRace_Backend/src/Application/DTOs/DeckDto.ts | 1 + .../src/Application/DTOs/Mappers/DeckMapper.ts | 11 +++++++---- .../Deck/queries/GetDecksByPageQueryHandler.ts | 2 +- SerpentRace_Backend/src/Domain/Deck/DeckAggregate.ts | 8 ++++++++ 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/SerpentRace_Backend/src/Application/DTOs/DeckDto.ts b/SerpentRace_Backend/src/Application/DTOs/DeckDto.ts index 9c89a59a..68bd74d2 100644 --- a/SerpentRace_Backend/src/Application/DTOs/DeckDto.ts +++ b/SerpentRace_Backend/src/Application/DTOs/DeckDto.ts @@ -18,6 +18,7 @@ export interface ShortDeckDto { cardCount: number; creator: string; creationdate: Date; + editable?: boolean; } export interface DetailDeckDto { diff --git a/SerpentRace_Backend/src/Application/DTOs/Mappers/DeckMapper.ts b/SerpentRace_Backend/src/Application/DTOs/Mappers/DeckMapper.ts index b98991aa..d1536a1b 100644 --- a/SerpentRace_Backend/src/Application/DTOs/Mappers/DeckMapper.ts +++ b/SerpentRace_Backend/src/Application/DTOs/Mappers/DeckMapper.ts @@ -1,9 +1,10 @@ import { DeckAggregate } from '../../../Domain/Deck/DeckAggregate'; import { UserAggregate } from '../../../Domain/User/UserAggregate'; import { CreateDeckDto, UpdateDeckDto, ShortDeckDto, DetailDeckDto } from '../DeckDto'; +import e from 'express'; export class DeckMapper { - static toShortDto(deck: DeckAggregate): ShortDeckDto { + static toShortDto(deck: DeckAggregate, userId?: string): ShortDeckDto { return { id: deck.id, name: deck.name, @@ -12,7 +13,8 @@ export class DeckMapper { ctype: deck.ctype, cardCount: deck.cards.length, creator: deck.user?.username || 'Unknown', - creationdate: deck.creationdate + creationdate: deck.creationdate, + editable: deck.isEditable() ? deck.isEditable()(userId!) : undefined }; } @@ -29,7 +31,7 @@ export class DeckMapper { }; } - static toShortDtoList(decks: DeckAggregate[]): ShortDeckDto[] { + static toShortDtoList(decks: DeckAggregate[], userId?: string): ShortDeckDto[] { return decks.map(deck => ({ id: deck.id, name: deck.name, @@ -38,7 +40,8 @@ export class DeckMapper { ctype: deck.ctype, cardCount: deck.cards.length, creator: deck.user?.username || 'Unknown', - creationdate: deck.creationdate + creationdate: deck.creationdate, + editable: deck.isEditable() ? deck.isEditable()(userId!) : undefined })); } } diff --git a/SerpentRace_Backend/src/Application/Deck/queries/GetDecksByPageQueryHandler.ts b/SerpentRace_Backend/src/Application/Deck/queries/GetDecksByPageQueryHandler.ts index 4c1ab68d..a4e6086a 100644 --- a/SerpentRace_Backend/src/Application/Deck/queries/GetDecksByPageQueryHandler.ts +++ b/SerpentRace_Backend/src/Application/Deck/queries/GetDecksByPageQueryHandler.ts @@ -65,7 +65,7 @@ export class GetDecksByPageQueryHandler { }); return { - decks: DeckMapper.toShortDtoList(result.decks), + decks: DeckMapper.toShortDtoList(result.decks, query.userId), totalCount: result.totalCount }; } catch (error) { diff --git a/SerpentRace_Backend/src/Domain/Deck/DeckAggregate.ts b/SerpentRace_Backend/src/Domain/Deck/DeckAggregate.ts index 3ee589a6..601fe7d8 100644 --- a/SerpentRace_Backend/src/Domain/Deck/DeckAggregate.ts +++ b/SerpentRace_Backend/src/Domain/Deck/DeckAggregate.ts @@ -1,6 +1,7 @@ import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn, CreateDateColumn, UpdateDateColumn } from 'typeorm'; import { OrganizationAggregate } from '../Organization/OrganizationAggregate'; import { UserAggregate } from '../User/UserAggregate'; +import { logError } from '../../Application/Services/Logger'; export enum Type { LUCK = 0, @@ -86,4 +87,11 @@ export class DeckAggregate { @ManyToOne(() => UserAggregate, { eager: false }) @JoinColumn({ name: 'user_id' }) user!: UserAggregate | null; + + isEditable() { + // A deck is editable if the user is the creator + return (userId: string) => { + return this.user?.id.toString() === userId; + }; + } } \ No newline at end of file