Skip to content

Commit

Permalink
feat(modules/reports/router/controller): implement `getGenresListenin…
Browse files Browse the repository at this point in the history
…gDays`
  • Loading branch information
Mnigos committed Sep 19, 2024
1 parent 0ab5be7 commit c7331f0
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 1 deletion.
73 changes: 73 additions & 0 deletions src/modules/reports/router/reports.controller.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { CacheInterceptor } from '@nestjs/cache-manager'
import { ReportsService } from '../reports.service'

import { ReportsController } from './reports.controller'
import { GenresListeningDaysDocument } from './docs'

import { UsersRepository } from '@modules/users'
import { userMock } from '@common/mocks'
Expand All @@ -25,6 +26,7 @@ describe('ReportsController', () => {
provide: ReportsService,
useValue: {
getListeningDays: vi.fn(),
getGenresListeningDays: vi.fn(),
getListeningHours: vi.fn(),
getTotalTracks: vi.fn(),
getTotalArtists: vi.fn(),
Expand Down Expand Up @@ -143,6 +145,77 @@ describe('ReportsController', () => {
})
})

describe('GenresListeningDays', () => {
const genresListeningDaysArray: GenresListeningDaysDocument[] = [
{
dayIndex: 1,
data: {
Pop: 30,
},
date: new Date('2024-08-22T08:59:38.340Z'),
},
{
dayIndex: 2,
data: {
Rock: 20,
},
date: new Date('2024-08-23T08:59:38.340Z'),
},
{
dayIndex: 3,
data: {
Jazz: 10,
},
date: new Date('2024-08-24T08:59:38.340Z'),
},
]

test('should get genres listening days with plays measurement', async () => {
const getGenresListeningDaysSpy = vi
.spyOn(reportsService, 'getGenresListeningDays')
.mockResolvedValue(genresListeningDaysArray)

expect(
await reportsController.getGenresListeningDays(userMock, {
before,
after,
})
).toEqual(genresListeningDaysArray)

expect(getGenresListeningDaysSpy).toHaveBeenCalledWith(
{
before,
after,
measurement: StatsMeasurement.PLAYS,
},
userMock
)
})

test('should get genres listening days with play time measurement', async () => {
const getGenresListeningDaysSpy = vi
.spyOn(reportsService, 'getGenresListeningDays')
.mockResolvedValue(genresListeningDaysArray)

expect(
await reportsController.getGenresListeningDays(userMock, {
before,
after,
measurement: StatsMeasurement.PLAY_TIME,
})
).toEqual(genresListeningDaysArray)

expect(getGenresListeningDaysSpy).toHaveBeenCalledWith(
{
before,
after,
measurement: StatsMeasurement.PLAY_TIME,
},
userMock
)
})
})

describe('getListeningHours', () => {
const listeningHoursObject = {
1: 10,
Expand Down
36 changes: 35 additions & 1 deletion src/modules/reports/router/reports.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@ import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'
import { ReportsService } from '../reports.service'

import { ReportsListeningQuery, ReportsTotalItemsQuery } from './dtos'
import { ListeningDaysDocument, TotalItemsDocument } from './docs'
import {
GenresListeningDaysDocument,
ListeningDaysDocument,
TotalItemsDocument,
} from './docs'
import {
ApiReportsListeningQuery,
ApiReportsTotalItemsQuery,
Expand Down Expand Up @@ -64,6 +68,36 @@ export class ReportsController {
)
}

@Get('genres-listening-days')
@ApiOperation({
summary: "Getting user's genres listening days (cached).",
description:
"Getting user's genres listening days, used for creating charts (cached).",
})
@ApiOkResponse({
description: MANY_SUCCESSFULLY_RETRIEVED('genres listening days'),
type: [GenresListeningDaysDocument],
})
@ApiReportsListeningQuery()
getGenresListeningDays(
@RequestUser() user: User,
@Query()
{
before = new Date(),
after,
measurement = StatsMeasurement.PLAYS,
}: ReportsListeningQuery
) {
return this.reportsService.getGenresListeningDays(
{
before,
after,
measurement,
},
user
)
}

@Get('listening-hours')
@ApiOperation({
summary: "Getting user's listening hours (cached).",
Expand Down

0 comments on commit c7331f0

Please sign in to comment.