Skip to content

Commit e0efed7

Browse files
csehatt741Attila Csehkyleecodes
authored
Create a new GET /courses_user endpoint #720 (#737)
* CourseUserService.getCourseUserByUserId return type annotated * CoursesUserController.getCourseUserByUserId endpoint created * CourseUserModule CoursesUserController dependencies added --------- Co-authored-by: Attila Cseh <[email protected]> Co-authored-by: Kylee Fields <[email protected]>
1 parent 4aaeb43 commit e0efed7

File tree

3 files changed

+76
-3
lines changed

3 files changed

+76
-3
lines changed

src/course-user/course-user.module.ts

+47-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,55 @@
11
import { Module } from '@nestjs/common';
22
import { TypeOrmModule } from '@nestjs/typeorm';
3+
import { SlackMessageClient } from 'src/api/slack/slack-api';
4+
import { ZapierWebhookClient } from 'src/api/zapier/zapier-webhook-client';
5+
import { CrispService } from 'src/crisp/crisp.service';
36
import { CourseUserEntity } from 'src/entities/course-user.entity';
7+
import { EventLogEntity } from 'src/entities/event-log.entity';
8+
import { PartnerAccessEntity } from 'src/entities/partner-access.entity';
9+
import { PartnerEntity } from 'src/entities/partner.entity';
10+
import { SubscriptionUserEntity } from 'src/entities/subscription-user.entity';
11+
import { SubscriptionEntity } from 'src/entities/subscription.entity';
12+
import { TherapySessionEntity } from 'src/entities/therapy-session.entity';
13+
import { UserEntity } from 'src/entities/user.entity';
14+
import { EventLoggerService } from 'src/event-logger/event-logger.service';
15+
import { ServiceUserProfilesService } from 'src/service-user-profiles/service-user-profiles.service';
16+
import { SubscriptionUserService } from 'src/subscription-user/subscription-user.service';
17+
import { SubscriptionService } from 'src/subscription/subscription.service';
18+
import { TherapySessionService } from 'src/therapy-session/therapy-session.service';
19+
import { AuthService } from '../auth/auth.service';
20+
import { FirebaseModule } from '../firebase/firebase.module';
21+
import { PartnerAccessService } from '../partner-access/partner-access.service';
22+
import { UserService } from '../user/user.service';
423
import { CourseUserService } from './course-user.service';
24+
import { CoursesUserController } from './courses-user.controller';
525

626
@Module({
7-
imports: [TypeOrmModule.forFeature([CourseUserEntity])],
8-
providers: [CourseUserService],
27+
imports: [
28+
TypeOrmModule.forFeature([
29+
CourseUserEntity,
30+
UserEntity,
31+
PartnerAccessEntity,
32+
PartnerEntity,
33+
SubscriptionUserEntity,
34+
TherapySessionEntity,
35+
SubscriptionEntity,
36+
EventLogEntity,
37+
]),
38+
FirebaseModule
39+
],
40+
controllers: [CoursesUserController],
41+
providers: [
42+
AuthService,
43+
UserService,
44+
CourseUserService,
45+
SubscriptionUserService,
46+
TherapySessionService,
47+
PartnerAccessService,
48+
ServiceUserProfilesService,
49+
CrispService,
50+
SubscriptionService,
51+
ZapierWebhookClient,
52+
SlackMessageClient,
53+
EventLoggerService],
954
})
1055
export class CourseUserModule {}

src/course-user/course-user.service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export class CourseUserService {
2121
.getOne();
2222
}
2323

24-
async getCourseUserByUserId(userId: string) {
24+
async getCourseUserByUserId(userId: string): Promise<CourseUserEntity[]> {
2525
return await this.courseUserRepository
2626
.createQueryBuilder('course_user')
2727
.leftJoinAndSelect('course_user.course', 'course')
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { Controller, Get, Req, UseGuards } from '@nestjs/common';
2+
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
3+
import { ICoursesWithSessions } from 'src/course/course.interface';
4+
import { UserEntity } from 'src/entities/user.entity';
5+
import { ControllerDecorator } from 'src/utils/controller.decorator';
6+
import { FirebaseAuthGuard } from '../firebase/firebase-auth.guard';
7+
import { formatCourseUserObjects } from '../utils/serialize';
8+
import { CourseUserService } from './course-user.service';
9+
10+
@ApiTags('Courses User')
11+
@ControllerDecorator()
12+
@Controller('/v1/courses-user')
13+
export class CoursesUserController {
14+
constructor(private readonly courseUserService: CourseUserService) {}
15+
16+
@Get()
17+
@ApiBearerAuth('access-token')
18+
@ApiOperation({
19+
description:
20+
'Returns user courses and session data.',
21+
})
22+
@UseGuards(FirebaseAuthGuard)
23+
async getCourseUserByUserId(@Req() req: Request) : Promise<ICoursesWithSessions[]> {
24+
const user = req['userEntity'] as UserEntity;
25+
const coursesUser = await this.courseUserService.getCourseUserByUserId(user.id);
26+
return formatCourseUserObjects(coursesUser);
27+
}
28+
}

0 commit comments

Comments
 (0)