1+ // This is your Prisma schema file,
2+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3+
4+ // Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
5+ // Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
6+
7+ generator client {
8+ provider = " prisma-client-js "
9+ }
10+
11+ datasource db {
12+ provider = " postgresql "
13+ url = env (" DATABASE_URL " )
14+ }
15+
16+ model User {
17+ id Int @id @default (autoincrement () )
18+ email String @unique
19+ username String @unique // 사용자 고유 아이디
20+ password String
21+ name String
22+ role Role @default (MEMBER ) // 역할 구분
23+ profileImage String ? // 프로필 이미지 (선택적)
24+ phoneNumber String ? // 연락처 (선택적)
25+ createdAt DateTime @default (now () )
26+
27+ // 관계
28+ member Member ?
29+ trainer Trainer ?
30+ }
31+
32+ model Member {
33+ id Int @id @default (autoincrement () )
34+ userId Int @unique
35+ user User @relation (fields : [userId ] , references : [id ] )
36+ trainers TrainerMember [] // 연결된 트레이너 목록
37+ schedules Schedule [] // 관련된 스케줄 목록
38+ }
39+
40+ model Trainer {
41+ id Int @id @default (autoincrement () )
42+ userId Int @unique
43+ user User @relation (fields : [userId ] , references : [id ] )
44+ members TrainerMember [] // 관리하는 회원 목록
45+ schedules Schedule [] // PT 스케줄
46+ }
47+
48+ model TrainerMember {
49+ id Int @id @default (autoincrement () )
50+ memberId Int
51+ trainerId Int
52+ member Member @relation (fields : [memberId ] , references : [id ] )
53+ trainer Trainer @relation (fields : [trainerId ] , references : [id ] )
54+
55+ // 추가 정보
56+ ptStartDate DateTime // PT 시작일
57+
58+ // 고유 제약조건
59+ @@unique ([memberId , trainerId ] ) // 한 회원-트레이너 조합은 중복될 수 없음
60+ }
61+
62+ model Schedule {
63+ id Int @id @default (autoincrement () )
64+ date DateTime // PT 날짜 및 시간
65+ location String ? // PT 장소 (선택적)
66+ status Status @default (SCHEDULED ) // 일정 상태
67+ trainingTarget String
68+ comment String ?
69+ exerciseDetails ExerciseDetail []
70+ memberId Int
71+ trainerId Int
72+ member Member @relation (fields : [memberId ] , references : [id ] )
73+ trainer Trainer @relation (fields : [trainerId ] , references : [id ] )
74+ }
75+
76+ model ExerciseDetail {
77+ id Int @id @default (autoincrement () )
78+ scheduleId Int // FitnessGoal과 연결
79+ schedule Schedule @relation (fields : [scheduleId ] , references : [id ] )
80+ exerciseName String // 운동 이름 (예: 스쿼트, 데드리프트)
81+ reps Int // 반복 횟수
82+ sets Int // 세트 수
83+ weight Float ? // 무게 (선택적, 예: kg)
84+ duration Int ? // 운동 시간 (선택적, 예: 분)
85+ }
86+
87+ enum Role {
88+ TRAINER
89+ MEMBER
90+ }
91+
92+ enum Status {
93+ MEMBER_PROPOSED // 멤버가 제안한 상태
94+ TRAINER_PROPOSED // 트레이너가 제안한 상태
95+ REJECTED // 거절 상태
96+ SCHEDULED // PT가 확정된 상태
97+ COMPLETED // 완료된 상태
98+ CANCELED // 취소된 상태
99+ }
0 commit comments