From d7eb210430ef1fc595a53d793dba500591aa309d Mon Sep 17 00:00:00 2001 From: Ryan-slither Date: Mon, 6 Oct 2025 20:56:24 -0400 Subject: [PATCH] Fixed Memberships I Hate Serialize --- .../juke-session/dto/membership.dto.ts | 3 ++- .../juke-session/juke-session.controller.ts | 7 ------- .../juke-session/juke-session.service.ts | 19 +++++++++++++++++-- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/jukebox/juke-session/dto/membership.dto.ts b/src/jukebox/juke-session/dto/membership.dto.ts index 73a831e..ae26525 100644 --- a/src/jukebox/juke-session/dto/membership.dto.ts +++ b/src/jukebox/juke-session/dto/membership.dto.ts @@ -1,4 +1,4 @@ -import { Expose } from 'class-transformer' +import { Expose, Transform } from 'class-transformer' import { EntityDtoBase } from 'src/config/dtos' import { JukeSessionMembership } from '../entities/membership.entity' import { JukeSessionDto } from './juke-session.dto' @@ -14,6 +14,7 @@ export class JukeSessionMembershipInlineDto { export class JukeSessionMembershipDto extends EntityDtoBase { @Expose() + @Transform(({ obj }) => obj.juke_session.id) juke_session: number @Expose() diff --git a/src/jukebox/juke-session/juke-session.controller.ts b/src/jukebox/juke-session/juke-session.controller.ts index 4ac4900..4662dc6 100644 --- a/src/jukebox/juke-session/juke-session.controller.ts +++ b/src/jukebox/juke-session/juke-session.controller.ts @@ -95,7 +95,6 @@ export class JukeSessionController { @Roles('member') @UseGuards(RolesGuard) @Get(':id/membership/') - @Serialize(JukeSessionMembershipDto) @ApiOperation({ summary: 'Get Juke Session Membership for Current User' }) getJukeSessionMembership( @Param('jukebox_id', new NumberPipe('jukebox_id')) jukeboxId: number, @@ -108,7 +107,6 @@ export class JukeSessionController { @Roles('admin') @UseGuards(RolesGuard) @Post(':id/members/') - @Serialize(JukeSessionMembershipDto) @ApiOperation({ summary: '[ADMIN] Add juke session member' }) addJukeSessionMember( @Param('jukebox_id', new NumberPipe('jukebox_id')) jukeboxId: number, @@ -121,7 +119,6 @@ export class JukeSessionController { @Roles('member') @UseGuards(RolesGuard) @Post(':id/members/join/') - @Serialize(JukeSessionMembershipDto) @ApiOperation({ summary: '[MEMBER] Add Juke Session Member' }) joinJukeSession( @Param('jukebox_id', new NumberPipe('jukebox_id')) jukeboxId: number, @@ -134,7 +131,6 @@ export class JukeSessionController { @Roles('member') @UseGuards(RolesGuard) @Post(':id/members/code') - @Serialize(JukeSessionMembershipDto) @ApiOperation({ summary: '[MEMBER] Add juke session member by join code' }) addJukeSessionMemberByJoinCode( @Param('jukebox_id', new NumberPipe('jukebox_id')) jukeboxId: number, @@ -147,7 +143,6 @@ export class JukeSessionController { @Roles('member') @UseGuards(RolesGuard) @Get(':id/members') - @Serialize(JukeSessionMembershipDto) @ApiOperation({ summary: '[MEMBER] (PAGINATED: 0-indexed) Get members/memberships of a juke session', }) @@ -163,7 +158,6 @@ export class JukeSessionController { @Roles('member') @UseGuards(RolesGuard) @Get(':id/members/:membership_id') - @Serialize(JukeSessionMembershipDto) @ApiOperation({ summary: '[MEMBER] Get member/membership for a juke session' }) getJukeSessionMember( @Param('jukebox_id', new NumberPipe('jukebox_id')) jukeboxId: number, @@ -175,7 +169,6 @@ export class JukeSessionController { @Roles('admin') @UseGuards(RolesGuard) @Delete(':id/members/:membership_id') - @Serialize(JukeSessionMembershipDto) @ApiOperation({ summary: '[ADMIN] Delete member/membership for a juke session' }) deleteJukeSessionMembership( @Param('jukebox_id', new NumberPipe('jukebox_id')) jukeboxId: number, diff --git a/src/jukebox/juke-session/juke-session.service.ts b/src/jukebox/juke-session/juke-session.service.ts index d3ae226..438d709 100644 --- a/src/jukebox/juke-session/juke-session.service.ts +++ b/src/jukebox/juke-session/juke-session.service.ts @@ -33,6 +33,18 @@ export class JukeSessionService { // ============================================ async create(jukeboxId: number, payload: CreateJukeSessionDto): Promise { + // Deactivate session if it should be expired + try { + const activeSession = await this.getCurrentSession(jukeboxId) + if (activeSession.end_at <= new Date()) { + this.update(activeSession.id, { is_active: false }) + } + } catch (err) { + if (!(err instanceof NotFoundException)) { + throw err + } + } + const preSession = this.jukeSessionRepo.create({ jukebox: { id: jukeboxId }, start_at: payload.start_at ?? new Date(), @@ -202,8 +214,9 @@ export class JukeSessionService { juke_session: { id: jukeSessionId }, ...payload, }) - const membership = await this.membershipRepo.save(preMembership) - return plainToInstance(JukeSessionMembershipDto, membership) + const createdMembership = await this.membershipRepo.save(preMembership) + const membership = await this.getMembership(createdMembership.id) + return membership } async getMemberships( @@ -216,6 +229,7 @@ export class JukeSessionService { skip: membershipsToSkip, take: rows, where: { juke_session: { id: jukeSessionId } }, + relations: { juke_session: true }, order: { user_id: 'ASC' }, }) @@ -230,6 +244,7 @@ export class JukeSessionService { async getMembership(membershipId: number): Promise { const membership = await this.membershipRepo.findOne({ where: { id: membershipId }, + relations: { juke_session: true, queued_tracks: true }, }) if (!membership) { throw new NotFoundException(`Juke Session Membership with id ${membershipId} not found`)