Skip to content

Commit e414a22

Browse files
authored
Merge pull request #58 from nuon-dev/feature/newcomer/ghh
feat: 새신자 테이블 TypeORM 작성
2 parents 98e86f0 + 964bcf6 commit e414a22

5 files changed

Lines changed: 175 additions & 0 deletions

File tree

server/src/entity/newcomer.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import {
2+
Entity,
3+
PrimaryGeneratedColumn,
4+
Column,
5+
ManyToOne,
6+
JoinColumn,
7+
OneToMany,
8+
CreateDateColumn,
9+
UpdateDateColumn,
10+
} from "typeorm"
11+
import { User } from "./user"
12+
import { NewcomerStatus } from "./types"
13+
import { NewcomerEducation } from "./newcomerEducation"
14+
15+
@Entity()
16+
export class Newcomer {
17+
@PrimaryGeneratedColumn("uuid")
18+
id: string
19+
20+
@Column()
21+
name: string
22+
23+
@Column({ nullable: true })
24+
yearOfBirth: number
25+
26+
@Column({ nullable: true })
27+
gender: "man" | "woman" | ""
28+
29+
@Column({ nullable: true })
30+
phone: string // 연락처
31+
32+
@ManyToOne(() => User)
33+
@JoinColumn({ name: "guiderId" })
34+
guider: User // 인도자
35+
36+
@Column({
37+
type: "enum",
38+
enum: NewcomerStatus,
39+
default: NewcomerStatus.NORMAL,
40+
})
41+
status: NewcomerStatus
42+
43+
@Column({ nullable: true })
44+
promotionDate: string // 등반일
45+
46+
@Column({ nullable: true })
47+
assignment: string // 배정
48+
49+
@Column({ nullable: true })
50+
deletionDate: string // 삭제일
51+
52+
@Column({ nullable: true })
53+
pendingDate: string // 보류일
54+
55+
@ManyToOne(() => User)
56+
@JoinColumn({ name: "managerId" })
57+
manager: User
58+
59+
@OneToMany(() => NewcomerEducation, (education) => education.newcomer)
60+
educationRecords: NewcomerEducation[]
61+
62+
@CreateDateColumn({
63+
type: "timestamp",
64+
default: () => "CURRENT_TIMESTAMP(6)",
65+
})
66+
createdAt: Date
67+
68+
@UpdateDateColumn({
69+
type: "timestamp",
70+
default: () => "CURRENT_TIMESTAMP(6)",
71+
onUpdate: "CURRENT_TIMESTAMP(6)",
72+
})
73+
updatedAt: Date
74+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import {
2+
Entity,
3+
PrimaryGeneratedColumn,
4+
Column,
5+
ManyToOne,
6+
JoinColumn,
7+
} from "typeorm"
8+
import { Newcomer } from "./newcomer"
9+
import { WorshipSchedule } from "./worshipSchedule"
10+
import { EducationLecture } from "./types"
11+
12+
@Entity()
13+
export class NewcomerEducation {
14+
@PrimaryGeneratedColumn("uuid")
15+
id: string
16+
17+
@ManyToOne(() => Newcomer, (newcomer) => newcomer.educationRecords)
18+
@JoinColumn({ name: "newcomerId" })
19+
newcomer: Newcomer
20+
21+
@ManyToOne(() => WorshipSchedule)
22+
@JoinColumn({ name: "worshipScheduleId" })
23+
worshipSchedule: WorshipSchedule
24+
25+
@Column({
26+
type: "enum",
27+
enum: EducationLecture,
28+
})
29+
lectureType: EducationLecture
30+
31+
@Column({ type: "text", nullable: true })
32+
memo: string
33+
}

server/src/entity/types.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,19 @@ export enum AttendStatus {
5757
ABSENT = "ABSENT",
5858
ETC = "ETC",
5959
}
60+
61+
export enum EducationLecture {
62+
OT = "OT",
63+
L1 = "L1",
64+
L2 = "L2",
65+
L3 = "L3",
66+
L4 = "L4",
67+
L5 = "L5",
68+
}
69+
70+
export enum NewcomerStatus {
71+
NORMAL = "NORMAL",
72+
PROMOTED = "PROMOTED",
73+
DELETED = "DELETED",
74+
PENDING = "PENDING",
75+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import { MigrationInterface, QueryRunner } from "typeorm"
2+
3+
export class CreateNewcomer1769693832000 implements MigrationInterface {
4+
public async up(queryRunner: QueryRunner): Promise<void> {
5+
// Newcomer 테이블 생성
6+
await queryRunner.query(`
7+
CREATE TABLE \`newcomer\` (
8+
\`id\` varchar(36) NOT NULL,
9+
\`name\` varchar(255) NOT NULL,
10+
\`yearOfBirth\` int NULL,
11+
\`gender\` varchar(10) NULL,
12+
\`phone\` varchar(255) NULL COMMENT '연락처',
13+
\`guiderId\` varchar(36) NULL COMMENT '인도자',
14+
\`status\` enum ('NORMAL', 'PROMOTED', 'DELETED', 'PENDING') NOT NULL DEFAULT 'NORMAL',
15+
\`promotionDate\` varchar(255) NULL COMMENT '등반일',
16+
\`assignment\` varchar(255) NULL COMMENT '배정',
17+
\`deletionDate\` varchar(255) NULL COMMENT '삭제일',
18+
\`pendingDate\` varchar(255) NULL COMMENT '보류일',
19+
\`managerId\` varchar(36) NULL,
20+
\`createdAt\` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
21+
\`updatedAt\` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
22+
PRIMARY KEY (\`id\`),
23+
CONSTRAINT \`FK_newcomer_guider\` FOREIGN KEY (\`guiderId\`) REFERENCES \`user\`(\`id\`) ON DELETE SET NULL ON UPDATE NO ACTION,
24+
CONSTRAINT \`FK_newcomer_manager\` FOREIGN KEY (\`managerId\`) REFERENCES \`user\`(\`id\`) ON DELETE SET NULL ON UPDATE NO ACTION
25+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
26+
`)
27+
28+
// NewcomerEducation 테이블 생성
29+
await queryRunner.query(`
30+
CREATE TABLE \`newcomer_education\` (
31+
\`id\` varchar(36) NOT NULL,
32+
\`newcomerId\` varchar(36) NULL,
33+
\`worshipScheduleId\` int NULL,
34+
\`lectureType\` enum ('OT', 'L1', 'L2', 'L3', 'L4', 'L5') NOT NULL,
35+
\`memo\` text NULL,
36+
PRIMARY KEY (\`id\`),
37+
CONSTRAINT \`FK_newcomer_education_newcomer\` FOREIGN KEY (\`newcomerId\`) REFERENCES \`newcomer\`(\`id\`) ON DELETE CASCADE ON UPDATE NO ACTION,
38+
CONSTRAINT \`FK_newcomer_education_worship\` FOREIGN KEY (\`worshipScheduleId\`) REFERENCES \`worship_schedule\`(\`id\`) ON DELETE SET NULL ON UPDATE NO ACTION
39+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
40+
`)
41+
}
42+
43+
public async down(queryRunner: QueryRunner): Promise<void> {
44+
await queryRunner.query(`DROP TABLE \`newcomer_education\``)
45+
await queryRunner.query(`DROP TABLE \`newcomer\``)
46+
}
47+
}

server/src/model/dataSource.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import { AttendData } from "../entity/attendData"
1414
import { WorshipContest } from "../entity/event/worshipContest"
1515
import { AIChat } from "../entity/ai/aiChat"
1616
import { AIChatRoom } from "../entity/ai/aiChatRoom"
17+
import { Newcomer } from "../entity/newcomer"
18+
import { NewcomerEducation } from "../entity/newcomerEducation"
1719

1820
const dataSource = new DataSource(require("../../ormconfig.js"))
1921

@@ -34,5 +36,8 @@ export const aiChatDatabase = dataSource.getRepository(AIChat)
3436
export const aiChatRoomDatabase = dataSource.getRepository(AIChatRoom)
3537

3638
export const worshipContestDatabase = dataSource.getRepository(WorshipContest)
39+
export const newcomerDatabase = dataSource.getRepository(Newcomer)
40+
export const newcomerEducationDatabase =
41+
dataSource.getRepository(NewcomerEducation)
3742

3843
export default dataSource

0 commit comments

Comments
 (0)