Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | 18x 18x 18x 18x 18x 18x 18x 34x 34x 34x 34x 34x 34x 9x 9x 8x 8x 7x 7x 1x 1x 3x 3x 4x 13x | /** * User interest service. * @packageDocumentation */ import { Injectable, Inject, forwardRef } from '@nestjs/common'; import { DBService } from '../db/db.service'; import { UserService } from '../user/user.service'; import { DepartmentService } from '../department/department.service'; import { NBUserInterest } from './user-interest.interface'; import { ServiceException } from '../service.exception'; /** * User interest table name. */ export const userInterestTableName = 'NB_USER_INTEREST'; /** * User interest table service. */ @Injectable() export class UserInterestService { constructor( @Inject(forwardRef(() => DBService)) private readonly dbService: DBService, @Inject(forwardRef(() => UserService)) private readonly userService: UserService, @Inject(forwardRef(() => DepartmentService)) private readonly departmentService: DepartmentService, ) {} /** * Note a user's interest in a department. * * @param userID The user's ID. * @param departmentID The department's ID. * @returns The new user interest record. */ public async noteInterest( userID: string, departmentID: number, ): Promise<NBUserInterest> { const userExists = await this.userService.userExists(userID); if (userExists) { const departmentExists = await this.departmentService.departmentExists( departmentID, ); if (departmentExists) { await this.dropInterest(userID, departmentID); return this.dbService.create<NBUserInterest>(userInterestTableName, { userID, departmentID, }); } else { throw new ServiceException('Department does not exist'); } } else { throw new ServiceException('User does not exist'); } } /** * Determine whether or not a user is interested in a department. * * @param userID The user's ID. * @param departmentID The department's ID. * @returns Whether or not the user is interested in the department. */ public async isInterested( userID: string, departmentID: number, ): Promise<boolean> { const userInterest = await this.dbService.getByFields<NBUserInterest>( userInterestTableName, { userID, departmentID }, ); return !!userInterest; } /** * Get all of a user's departmental interests. * * @param userID The user's ID. * @returns All of the user's departmental interests. */ public async getUserInterests(userID: string): Promise<NBUserInterest[]> { return this.dbService.listByFields<NBUserInterest>( userInterestTableName, { userID }, { fieldName: 'interestTime', sortOrder: 'ASC' }, ); } /** * Delete a user's interest in a department. * * @param userID The user's ID. * @param departmentID The department's ID. */ public async dropInterest( userID: string, departmentID: number, ): Promise<void> { await this.dbService.deleteByFields(userInterestTableName, { userID, departmentID, }); } } |