Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { ArticleModule } from './article/article.module';
import { UploadModule } from './upload/upload.module';
import { RecruitmentModule } from './recruitment/recruitment.module';
import { ResumeTemplateModule } from './resume-template/resume-template.module';
import { ResumeModule } from './resume/resume.module';
const envFilePath = ['.env'];
export const IS_DEV = process.env.RUNNING_ENV !== 'prod';

Expand Down Expand Up @@ -38,6 +39,7 @@ if (IS_DEV) {
UploadModule,
RecruitmentModule,
ResumeTemplateModule,
ResumeModule,
],
controllers: [AppController],
providers: [AppService],
Expand Down
2 changes: 1 addition & 1 deletion src/resume-template/entities/resume-template.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
UpdateDateColumn,
} from 'typeorm';

@Entity()
@Entity('resumetemplate')
export class ResumeTemplateEntity {
// id 自增
@PrimaryGeneratedColumn({
Expand Down
7 changes: 7 additions & 0 deletions src/resume/dto/create-resume.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { IsNotEmpty, IsObject } from 'class-validator';

export class CreateResumeDto {
@IsObject({ message: 'resumeContent must be an object' })
@IsNotEmpty({ message: 'resumeContent must be provided' })
resumeContent: object;
}
9 changes: 9 additions & 0 deletions src/resume/dto/update-resume.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { PartialType } from '@nestjs/mapped-types';
import { CreateResumeDto } from './create-resume.dto';
import { IsObject, IsOptional } from 'class-validator';

export class UpdateResumeDto extends PartialType(CreateResumeDto) {
@IsOptional()
@IsObject({ message: 'resumeContent must be an object' })
resumeContent?: object;
}
60 changes: 60 additions & 0 deletions src/resume/entities/resume.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
ManyToOne,
JoinColumn,
} from 'typeorm';

import { UserEntity } from '../../usercenter/entities/usercenter.entity';

@Entity('resume')
export class ResumeEntity {
// id 自增
@PrimaryGeneratedColumn({
type: 'int',
name: 'resume_id',
comment: '简历id',
})
resumeId: number;

// 用户ID
@Column({
type: 'int',
name: 'resume_user_id',
})
resumeUserId: number;

// 简历内容
@Column({
type: 'json',
name: 'resume_content',
comment: '简历内容',
})
resumeContent: object;

// 创建时间
@CreateDateColumn({
type: 'datetime',
name: 'resume_create_time',
comment: '简历创建时间',
})
resumeCreateTime: Date;

// 更新时间
@UpdateDateColumn({
type: 'datetime',
name: 'resume_update_time',
comment: '简历更新时间',
})
resumeUpdateTime: Date;

// 关联用户表,一个用户可以有多个简历
@ManyToOne(() => UserEntity, (user) => user.resumes, { nullable: false })
@JoinColumn({
name: 'resume_user_id',
})
user: UserEntity;
}
20 changes: 20 additions & 0 deletions src/resume/resume.controller.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Test, TestingModule } from '@nestjs/testing';
import { ResumeController } from './resume.controller';
import { ResumeService } from './resume.service';

describe('ResumeController', () => {
let controller: ResumeController;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [ResumeController],
providers: [ResumeService],
}).compile();

controller = module.get<ResumeController>(ResumeController);
});

it('should be defined', () => {
expect(controller).toBeDefined();
});
});
123 changes: 123 additions & 0 deletions src/resume/resume.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
import {
Controller,
Get,
Post,
Body,
Patch,
Param,
Delete,
UseGuards,
Req,
Query,
Request,
} from '@nestjs/common';
import { ResumeService } from './resume.service';
import { CreateResumeDto } from './dto/create-resume.dto';
import { UpdateResumeDto } from './dto/update-resume.dto';
import { AuthGuard } from '../auth/auth.guard';

/**
* 简历控制器
* 处理简历相关的请求
*/
@Controller('resume')
export class ResumeController {
/**
* 构造函数
* @param resumeService - 简历服务实例
*/
constructor(private readonly resumeService: ResumeService) {}

/**
* 创建简历信息
* 需要用户登录认证
*
* @param createResumeDto - 创建简历的请求体
* @param req - HTTP 请求对象,包含用户信息
* @returns 返回创建成功的简历信息
*/
@Post()
@UseGuards(AuthGuard)
create(@Body() createResumeDto: CreateResumeDto, @Req() req) {
return this.resumeService.create(createResumeDto, req.user.sub);
}

/**
* 获取所有简历信息
* 支持分页查询
* 需要用户登录认证
*
* @param query - 查询参数,包含分页信息
* @returns 返回所有简历信息
*
* @example
* GET /resume?page=1&limit=10
* 返回第1页,每页10条简历信息
*/
@Get()
@UseGuards(AuthGuard)
findAll(@Query('page') page?: number, @Query('limit') limit?: number) {
return this.resumeService.findAll({
page,
limit,
});
}

/**
* 获取指定ID的简历信息
* 需要用户登录认证
*
* @param id - 简历ID
* @returns 返回指定ID的简历信息
*
* @example
* GET /resume/1
* 返回ID为1的简历信息
*/
@Get(':id')
@UseGuards(AuthGuard)
findOne(@Param('id') id: string) {
return this.resumeService.findOne(+id);
}

/**
* 更新指定ID的简历信息
* 需要用户登录认证
*
* @param id - 简历ID
* @param updateResumeDto - 更新简历的请求体
* @param req - HTTP 请求对象,包含用户信息
* @returns 返回更新成功的简历信息
*
* @example
* PATCH /resume/1
* 更新ID为1的简历信息
*/
@Patch(':id')
@UseGuards(AuthGuard)
update(
@Param('id') id: string,
@Body() updateResumeDto: UpdateResumeDto,
@Request() req,
) {
return this.resumeService.update(+id, updateResumeDto, req.user.sub);
}

/**
* 删除简历
* 需要用户登录认证
*
* @param id - 要删除简历的ID
* @param req - 请求对象,用于获取用户信息
* @returns 删除成功的消息
*
* @example
* DELETE /resume/1
* 删除ID为1的简历
*/
@Delete(':id')
@UseGuards(AuthGuard)
remove(@Param('id') id: string, @Request() req) {
return this.resumeService.remove(+id, req.user.sub);
}
}
14 changes: 14 additions & 0 deletions src/resume/resume.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ResumeService } from './resume.service';
import { ResumeController } from './resume.controller';
import { ResumeEntity } from './entities/resume.entity';
import { UserEntity } from '../usercenter/entities/usercenter.entity';

@Module({
imports: [TypeOrmModule.forFeature([ResumeEntity, UserEntity])],
controllers: [ResumeController],
providers: [ResumeService],
exports: [ResumeService],
})
export class ResumeModule {}
18 changes: 18 additions & 0 deletions src/resume/resume.service.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { ResumeService } from './resume.service';

describe('ResumeService', () => {
let service: ResumeService;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [ResumeService],
}).compile();

service = module.get<ResumeService>(ResumeService);
});

it('should be defined', () => {
expect(service).toBeDefined();
});
});
Loading