because I got bored of customising my CV for every job
at main 54 lines 1.8 kB view raw
1import type { User as DomainUser } from "@cv/auth"; 2import { 3 AuthorizationService, 4 JwtAuthGuard, 5 VerifiedScopeGuard, 6} from "@cv/auth"; 7import { UseGuards } from "@nestjs/common"; 8import { Args, Mutation, Query, Resolver } from "@nestjs/graphql"; 9import { CurrentUser } from "@/modules/current-user/current-user.decorator"; 10import { ImportService } from "../import.service"; 11import { UserFile as UserFileEntity } from "../user-file.entity"; 12import { UserFileType } from "./user-file.type"; 13 14@Resolver(() => UserFileType) 15@UseGuards(JwtAuthGuard, VerifiedScopeGuard) 16export class UserFileResolver { 17 constructor( 18 private readonly importService: ImportService, 19 private readonly authorizationService: AuthorizationService, 20 ) {} 21 22 @Query(() => UserFileType, { nullable: true }) 23 async userFile( 24 @CurrentUser() user: DomainUser, 25 @Args("id") id: string, 26 ): Promise<UserFileType | null> { 27 const file = await this.importService.findUserFileById(id); 28 if (!file) return null; 29 30 await this.authorizationService.canView(user, file, UserFileEntity); 31 32 return UserFileType.fromDomain(file); 33 } 34 35 @Query(() => [UserFileType]) 36 async myUserFiles(@CurrentUser() user: DomainUser): Promise<UserFileType[]> { 37 const files = await this.importService.findUserFilesForUser(user.id); 38 return files.map((f) => UserFileType.fromDomain(f)); 39 } 40 41 @Mutation(() => Boolean) 42 async deleteUserFile( 43 @CurrentUser() user: DomainUser, 44 @Args("id") id: string, 45 ): Promise<boolean> { 46 const file = await this.importService.findUserFileById(id); 47 if (!file) return false; 48 49 await this.authorizationService.canDelete(user, file, UserFileEntity); 50 await this.importService.deleteUserFile(id); 51 52 return true; 53 } 54}