Skip to content

Commit 25740c3

Browse files
committed
feat: projects entity
1 parent 3c55c3e commit 25740c3

11 files changed

Lines changed: 253 additions & 2 deletions
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { MigrationInterface, QueryRunner } from "typeorm";
2+
3+
export class ProjectsFix1745474624044 implements MigrationInterface {
4+
name = 'ProjectsFix1745474624044'
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(`CREATE TABLE "project" ("id" SERIAL NOT NULL, "projectName" character varying NOT NULL, "desription" character varying NOT NULL, "feeAmount" integer NOT NULL, "alreadyCollected" integer NOT NULL, "likesCount" integer NOT NULL, "dislikesCount" integer NOT NULL, "endTime" TIMESTAMP NOT NULL, "userId" integer, CONSTRAINT "UQ_22eee2edb529c134f0f4ecad3ad" UNIQUE ("projectName"), CONSTRAINT "PK_4d68b1358bb5b766d3e78f32f57" PRIMARY KEY ("id"))`);
8+
await queryRunner.query(`ALTER TABLE "project" ADD CONSTRAINT "FK_7c4b0d3b77eaf26f8b4da879e63" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
9+
}
10+
11+
public async down(queryRunner: QueryRunner): Promise<void> {
12+
await queryRunner.query(`ALTER TABLE "project" DROP CONSTRAINT "FK_7c4b0d3b77eaf26f8b4da879e63"`);
13+
await queryRunner.query(`DROP TABLE "project"`);
14+
}
15+
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { MigrationInterface, QueryRunner } from "typeorm";
2+
3+
export class ProjectsOnDelete1745474925476 implements MigrationInterface {
4+
name = 'ProjectsOnDelete1745474925476'
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(`ALTER TABLE "project" DROP CONSTRAINT "FK_7c4b0d3b77eaf26f8b4da879e63"`);
8+
await queryRunner.query(`ALTER TABLE "project" ADD CONSTRAINT "FK_7c4b0d3b77eaf26f8b4da879e63" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE SET NULL ON UPDATE NO ACTION`);
9+
}
10+
11+
public async down(queryRunner: QueryRunner): Promise<void> {
12+
await queryRunner.query(`ALTER TABLE "project" DROP CONSTRAINT "FK_7c4b0d3b77eaf26f8b4da879e63"`);
13+
await queryRunner.query(`ALTER TABLE "project" ADD CONSTRAINT "FK_7c4b0d3b77eaf26f8b4da879e63" FOREIGN KEY ("userId") REFERENCES "user"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`);
14+
}
15+
16+
}

onlineshop/source/server/src/app.module.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import { Module } from '@nestjs/common';
22
import { TypeOrmModule } from '@nestjs/typeorm';
3+
import { DataSource } from 'typeorm';
34

45
import { AppController } from './app.controller';
56
import { AppService } from './app.service';
67
import { User } from './users/entities/user.entity';
78
import { UsersModule } from './users/users.module';
9+
import { ProjectsModule } from './projects/projects.module';
10+
import { Project } from './projects/entities/project.entity';
811

912
@Module({
1013
imports: [
@@ -15,12 +18,15 @@ import { UsersModule } from './users/users.module';
1518
username: 'postgres',
1619
password: 'postgres',
1720
database: 'sample',
18-
entities: [User],
21+
entities: [User, Project],
1922
synchronize: true,
2023
}),
2124
UsersModule,
25+
ProjectsModule,
2226
],
2327
controllers: [AppController],
2428
providers: [AppService],
2529
})
26-
export class AppModule {}
30+
export class AppModule {
31+
constructor(private dataSource: DataSource) {}
32+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { IsString, IsDate } from 'class-validator';
2+
import { Column } from 'typeorm';
3+
4+
import { User } from 'src/users/entities/user.entity';
5+
6+
export class CreateProjectDto {
7+
@Column({ unique: true })
8+
@IsString()
9+
readonly projectName: string;
10+
11+
@Column()
12+
@IsString()
13+
readonly desription: string;
14+
15+
@Column()
16+
readonly feeAmount: number;
17+
18+
@Column()
19+
readonly alreadyCollected: number;
20+
21+
@Column(() => User)
22+
readonly user: User;
23+
24+
@Column()
25+
readonly likesCount: number;
26+
27+
@Column()
28+
readonly dislikesCount: number;
29+
30+
@Column()
31+
@IsDate()
32+
readonly endTime;
33+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { PartialType } from '@nestjs/mapped-types';
2+
3+
import { CreateProjectDto } from './create-project.dto';
4+
5+
export class UpdateProjectDto extends PartialType(CreateProjectDto) {}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { IsString } from 'class-validator';
2+
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
3+
4+
import { User } from '../../users/entities/user.entity';
5+
6+
@Entity()
7+
export class Project {
8+
@PrimaryGeneratedColumn()
9+
id: number;
10+
11+
@Column({ unique: true })
12+
@IsString()
13+
projectName: string;
14+
15+
@Column()
16+
@IsString()
17+
desription: string;
18+
19+
@Column()
20+
feeAmount: number;
21+
22+
@Column()
23+
alreadyCollected: number;
24+
25+
@ManyToOne(() => User, (user) => user.id, { onDelete: 'SET NULL' })
26+
user: User;
27+
28+
@Column()
29+
likesCount: number;
30+
31+
@Column()
32+
dislikesCount: number;
33+
34+
@Column({ type: 'timestamp' })
35+
endTime: Date;
36+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { ProjectsController } from './projects.controller';
3+
import { ProjectsService } from './projects.service';
4+
5+
describe('ProjectsController', () => {
6+
let controller: ProjectsController;
7+
8+
beforeEach(async () => {
9+
const module: TestingModule = await Test.createTestingModule({
10+
controllers: [ProjectsController],
11+
providers: [ProjectsService],
12+
}).compile();
13+
14+
controller = module.get<ProjectsController>(ProjectsController);
15+
});
16+
17+
it('should be defined', () => {
18+
expect(controller).toBeDefined();
19+
});
20+
});
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import {
2+
Controller,
3+
Get,
4+
Post,
5+
Body,
6+
Patch,
7+
Param,
8+
Delete,
9+
} from '@nestjs/common';
10+
11+
import { ProjectsService } from './projects.service';
12+
import { CreateProjectDto } from './dto/create-project.dto';
13+
import { UpdateProjectDto } from './dto/update-project.dto';
14+
15+
@Controller('projects')
16+
export class ProjectsController {
17+
constructor(private readonly projectsService: ProjectsService) {}
18+
19+
@Post()
20+
create(@Body() createProjectDto: CreateProjectDto) {
21+
return this.projectsService.create(createProjectDto);
22+
}
23+
24+
@Get()
25+
findAll() {
26+
return this.projectsService.findAll();
27+
}
28+
29+
@Get(':id')
30+
findOne(@Param('id') id: string) {
31+
return this.projectsService.findOne(Number(id));
32+
}
33+
34+
@Patch(':id')
35+
update(@Param('id') id: string, @Body() updateProjectDto: UpdateProjectDto) {
36+
return this.projectsService.update(Number(id), updateProjectDto);
37+
}
38+
39+
@Delete(':id')
40+
remove(@Param('id') id: string) {
41+
return this.projectsService.remove(Number(id));
42+
}
43+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Module } from '@nestjs/common';
2+
import { TypeOrmModule } from '@nestjs/typeorm';
3+
4+
import { ProjectsService } from './projects.service';
5+
import { ProjectsController } from './projects.controller';
6+
import { Project } from './entities/project.entity';
7+
8+
@Module({
9+
imports: [TypeOrmModule.forFeature([Project])],
10+
controllers: [ProjectsController],
11+
providers: [ProjectsService],
12+
})
13+
export class ProjectsModule {}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { ProjectsService } from './projects.service';
3+
4+
describe('ProjectsService', () => {
5+
let service: ProjectsService;
6+
7+
beforeEach(async () => {
8+
const module: TestingModule = await Test.createTestingModule({
9+
providers: [ProjectsService],
10+
}).compile();
11+
12+
service = module.get<ProjectsService>(ProjectsService);
13+
});
14+
15+
it('should be defined', () => {
16+
expect(service).toBeDefined();
17+
});
18+
});

0 commit comments

Comments
 (0)