Skip to content

Commit

Permalink
Create a new GET /courses_user endpoint #720 (#737)
Browse files Browse the repository at this point in the history
* 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]>
  • Loading branch information
3 people authored Jan 15, 2025
1 parent 4aaeb43 commit e0efed7
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 3 deletions.
49 changes: 47 additions & 2 deletions src/course-user/course-user.module.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,55 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { SlackMessageClient } from 'src/api/slack/slack-api';
import { ZapierWebhookClient } from 'src/api/zapier/zapier-webhook-client';
import { CrispService } from 'src/crisp/crisp.service';
import { CourseUserEntity } from 'src/entities/course-user.entity';
import { EventLogEntity } from 'src/entities/event-log.entity';
import { PartnerAccessEntity } from 'src/entities/partner-access.entity';
import { PartnerEntity } from 'src/entities/partner.entity';
import { SubscriptionUserEntity } from 'src/entities/subscription-user.entity';
import { SubscriptionEntity } from 'src/entities/subscription.entity';
import { TherapySessionEntity } from 'src/entities/therapy-session.entity';
import { UserEntity } from 'src/entities/user.entity';
import { EventLoggerService } from 'src/event-logger/event-logger.service';
import { ServiceUserProfilesService } from 'src/service-user-profiles/service-user-profiles.service';
import { SubscriptionUserService } from 'src/subscription-user/subscription-user.service';
import { SubscriptionService } from 'src/subscription/subscription.service';
import { TherapySessionService } from 'src/therapy-session/therapy-session.service';
import { AuthService } from '../auth/auth.service';
import { FirebaseModule } from '../firebase/firebase.module';
import { PartnerAccessService } from '../partner-access/partner-access.service';
import { UserService } from '../user/user.service';
import { CourseUserService } from './course-user.service';
import { CoursesUserController } from './courses-user.controller';

@Module({
imports: [TypeOrmModule.forFeature([CourseUserEntity])],
providers: [CourseUserService],
imports: [
TypeOrmModule.forFeature([
CourseUserEntity,
UserEntity,
PartnerAccessEntity,
PartnerEntity,
SubscriptionUserEntity,
TherapySessionEntity,
SubscriptionEntity,
EventLogEntity,
]),
FirebaseModule
],
controllers: [CoursesUserController],
providers: [
AuthService,
UserService,
CourseUserService,
SubscriptionUserService,
TherapySessionService,
PartnerAccessService,
ServiceUserProfilesService,
CrispService,
SubscriptionService,
ZapierWebhookClient,
SlackMessageClient,
EventLoggerService],
})
export class CourseUserModule {}
2 changes: 1 addition & 1 deletion src/course-user/course-user.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export class CourseUserService {
.getOne();
}

async getCourseUserByUserId(userId: string) {
async getCourseUserByUserId(userId: string): Promise<CourseUserEntity[]> {
return await this.courseUserRepository
.createQueryBuilder('course_user')
.leftJoinAndSelect('course_user.course', 'course')
Expand Down
28 changes: 28 additions & 0 deletions src/course-user/courses-user.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { Controller, Get, Req, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger';
import { ICoursesWithSessions } from 'src/course/course.interface';
import { UserEntity } from 'src/entities/user.entity';
import { ControllerDecorator } from 'src/utils/controller.decorator';
import { FirebaseAuthGuard } from '../firebase/firebase-auth.guard';
import { formatCourseUserObjects } from '../utils/serialize';
import { CourseUserService } from './course-user.service';

@ApiTags('Courses User')
@ControllerDecorator()
@Controller('/v1/courses-user')
export class CoursesUserController {
constructor(private readonly courseUserService: CourseUserService) {}

@Get()
@ApiBearerAuth('access-token')
@ApiOperation({
description:
'Returns user courses and session data.',
})
@UseGuards(FirebaseAuthGuard)
async getCourseUserByUserId(@Req() req: Request) : Promise<ICoursesWithSessions[]> {
const user = req['userEntity'] as UserEntity;
const coursesUser = await this.courseUserService.getCourseUserByUserId(user.id);
return formatCourseUserObjects(coursesUser);
}
}

0 comments on commit e0efed7

Please sign in to comment.