Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/jukebox/juke-session/dto/membership.dto.ts
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -14,6 +14,7 @@ export class JukeSessionMembershipInlineDto {

export class JukeSessionMembershipDto extends EntityDtoBase<JukeSessionMembership> {
@Expose()
@Transform(({ obj }) => obj.juke_session.id)
juke_session: number

@Expose()
Expand Down
7 changes: 0 additions & 7 deletions src/jukebox/juke-session/juke-session.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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',
})
Expand All @@ -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,
Expand All @@ -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,
Expand Down
19 changes: 17 additions & 2 deletions src/jukebox/juke-session/juke-session.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,18 @@ export class JukeSessionService {
// ============================================

async create(jukeboxId: number, payload: CreateJukeSessionDto): Promise<JukeSessionDto> {
// 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(),
Expand Down Expand Up @@ -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(
Expand All @@ -216,6 +229,7 @@ export class JukeSessionService {
skip: membershipsToSkip,
take: rows,
where: { juke_session: { id: jukeSessionId } },
relations: { juke_session: true },
order: { user_id: 'ASC' },
})

Expand All @@ -230,6 +244,7 @@ export class JukeSessionService {
async getMembership(membershipId: number): Promise<JukeSessionMembershipDto> {
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`)
Expand Down