diff --git a/BackEnd/src/app.controller.ts b/BackEnd/src/app.controller.ts index cce879ee..662727af 100755 --- a/BackEnd/src/app.controller.ts +++ b/BackEnd/src/app.controller.ts @@ -1,9 +1,16 @@ -import { Controller, Get } from '@nestjs/common'; +import { Controller, Get, Post } from '@nestjs/common'; import { AppService } from './app.service'; +import { InjectRepository } from '@nestjs/typeorm'; +import { UserModel } from './users/entities/users.entity'; +import { Repository } from 'typeorm'; @Controller() export class AppController { - constructor(private readonly appService: AppService) {} + constructor( + private readonly appService: AppService, + @InjectRepository(UserModel) + private readonly userRepository: Repository + ) {} @Get() getHello(): string { diff --git a/BackEnd/src/app.module.ts b/BackEnd/src/app.module.ts index b5861f68..28207294 100755 --- a/BackEnd/src/app.module.ts +++ b/BackEnd/src/app.module.ts @@ -6,7 +6,9 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { LoggerMiddleware } from './middlewares/logger.middleware'; @Module({ - imports: [TypeOrmModule.forRoot(typeOrmConfig)], + imports: [ + TypeOrmModule.forRoot(typeOrmConfig), + ], controllers: [AppController], providers: [AppService], }) diff --git a/BackEnd/src/posts/entities/posts.entity.ts b/BackEnd/src/posts/entities/posts.entity.ts new file mode 100644 index 00000000..cfadb5a5 --- /dev/null +++ b/BackEnd/src/posts/entities/posts.entity.ts @@ -0,0 +1,43 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + ManyToOne, + OneToOne, + JoinColumn + } from 'typeorm'; +import { RecordModel } from 'src/records/entities/records.entity'; +import { ProfileModel } from 'src/profiles/entities/profiles.entity'; + + @Entity() + export class PostModel { + @PrimaryGeneratedColumn() + id: number; + + @Column() + publicId: string; + + @Column() + content: string; + + @Column({ nullable: true }) + like: number; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Column() + deletedAt: Date; + + @OneToOne(() => RecordModel) + @JoinColumn() + record: RecordModel; + + @ManyToOne(() => ProfileModel, (profile) => profile.posts) + profile: ProfileModel; + } \ No newline at end of file diff --git a/BackEnd/src/profiles/entities/profiles.entity.ts b/BackEnd/src/profiles/entities/profiles.entity.ts new file mode 100644 index 00000000..10f7afef --- /dev/null +++ b/BackEnd/src/profiles/entities/profiles.entity.ts @@ -0,0 +1,47 @@ +import { PostModel } from 'src/posts/entities/posts.entity'; +import { RecordModel } from 'src/records/entities/records.entity'; +import { UserModel } from 'src/users/entities/users.entity'; +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + UpdateDateColumn, + Generated, + OneToOne, + OneToMany +} from 'typeorm'; + +@Entity() +export class ProfileModel { + @PrimaryGeneratedColumn() + id: number; + + @Column({ unique: true }) + nickname: string; + + @Column({ nullable: false }) + gender: string; + + @Column({ nullable: false }) + birthdate: Date; + + @CreateDateColumn() + createdAt: Date; + + @UpdateDateColumn() + updatedAt: Date; + + @Column({ unique: true }) + @Generated('uuid') + publicId: string; + + @OneToOne(() => UserModel, (user) => user.profile) + user: UserModel; + + @OneToMany(() => RecordModel, (record) => record.profile) + records: RecordModel[]; + + @OneToMany(() => PostModel, (post) => post.profile) + posts: PostModel[]; +} \ No newline at end of file diff --git a/BackEnd/src/records/entities/records.entity.ts b/BackEnd/src/records/entities/records.entity.ts new file mode 100644 index 00000000..560b5882 --- /dev/null +++ b/BackEnd/src/records/entities/records.entity.ts @@ -0,0 +1,47 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + CreateDateColumn, + ManyToOne, + OneToOne, + } from 'typeorm'; + + import { UserModel } from 'src/users/entities/users.entity'; +import { PostModel } from 'src/posts/entities/posts.entity'; +import { ProfileModel } from 'src/profiles/entities/profiles.entity'; + @Entity() + export class RecordModel { + @PrimaryGeneratedColumn() + id: number; + + @Column() + exercise: string; + + @Column() + runningTime: number; + + @Column() + distance: number; + + @Column({ nullable: true }) + avgBpm: number; + + @Column({ nullable: true }) + minBpm: number; + + @Column({ nullable: true }) + maxBpm: number; + + @CreateDateColumn() + createdAt: Date; + + @Column() + checker: boolean; + + @ManyToOne(() => ProfileModel, (profile) => profile.records) //manyToOne이 항상 외래키를 갖고 있음 + profile: ProfileModel; + + @OneToOne(() => PostModel, (post) => post.record) + post: PostModel; + } \ No newline at end of file diff --git a/BackEnd/src/users/entities/users.entity.ts b/BackEnd/src/users/entities/users.entity.ts new file mode 100644 index 00000000..efea37fe --- /dev/null +++ b/BackEnd/src/users/entities/users.entity.ts @@ -0,0 +1,26 @@ +import { + Entity, + PrimaryGeneratedColumn, + Column, + OneToOne, + JoinColumn, +} from 'typeorm'; +import { ProfileModel } from 'src/profiles/entities/profiles.entity'; +@Entity() +export class UserModel { + @PrimaryGeneratedColumn() + id: number; + + @Column() + userId: string; + + @Column() + provider: string; + + @OneToOne(() => ProfileModel, (profile)=> profile.user, { + eager: true, + cascade: true, + }) + @JoinColumn() + profile: ProfileModel; +} \ No newline at end of file