GRISE
기존의 오프라인 PT는 많은 횟수를 한 번에 결제하고 중도해지가 힘들기 때문에 여러 명의 트레이너에게 트레이닝을 받아볼 수 없는 문제가 있다. 온라인에서 자신의 운동 영상을 포함한 상담지를 작성해 트레이너에게 질문을 함으로써 단기간에 여러 명의 트레이너에게 트레이닝을 요청하고 답을 받을 수 있고, 자신이 원하는 운동 스타일의 트레이너를 찾을 때 도움을 주기 위해 온라인 피트니스 코칭 서비스 GRISE를 개발하게 되었다.
여러 프론트 라이브러리 중 현재 가장 많이 사용되고 있는 react를 사용해 개발을 진행했고 PWA로 스마트폰에 설치해 사용할 수 있게 개발했다. 백엔드의 프레임워크로는 많이 사용되는 언어중 하나이며 Java언어의 특성상 배포의 독립성이 높은 Spring Boot를 사용하여 개발하였다.
grisetutor
├── public
│ ├── Json
│ │ ├── consultPage
│ │ ├── mainPageTutor
│ │ └── **consultForm.json**
│ └── Videos
│
└── src
├── Image
├── Pages
│ ├── LoginPage
│ ├── ProfilePage
│ ├── TutorConsultpage
│ ├── TutorMainPage
│ ├── **Loadingpage.jsx**
│ └── **NavBar.jsx**
├── oauth
└── styles
├── fonts
└── globalStyle
create table users (
user_id varchar(64) not null,
created_at timestamp,
email varchar(512),
email_verified_yn varchar(1),
modified_at timestamp,
password varchar(128),
profile_image_url varchar(512),
provider_type varchar(20),
role_type varchar(20),
user_seq int8,
username varchar(100),
primary key (user_id)
)
create table tutee (
tutee_id int8 generated by default as identity,
username varchar(255),
user_id varchar(64),
primary key (tutee_id)
)
create table tutor (
tutor_id int8 generated by default as identity,
username varchar(255),
user_id varchar(64),
primary key (tutor_id)
)
create table resume (
resume_id int8 generated by default as identity,
content varchar(255),
tutor_id int8,
primary key (resume_id)
)
create table consult (
consult_id int8 generated by default as identity,
content varchar(255) not null,
is_arrive_message_to_tutee boolean not null,
is_arrive_message_to_tutor boolean not null,
is_consulting boolean not null,
is_done boolean not null,
is_post boolean not null,
title varchar(50) not null,
tutee_id int8,
tutor_id int8,
primary key (consult_id)
)
create table comment (
comment_id int8 generated by default as identity,
content varchar(255),
user_id varchar(255) not null,
username varchar(255),
consult_id int8,
primary key (comment_id)
)
create table video (
video_id int8 generated by default as identity,
data oid,
name varchar(200),
consult_id int8,
primary key (video_id)
)
create table review (
review_id int8 generated by default as identity,
content varchar(255),
star int4 not null,
consult_id int8,
tutee_id int8,
tutor_id int8,
primary key (review_id)
)
요청 목록
[GET] /tutee/consults
params
요청중
params: {content: "posting"}
진행중
params: {content: "consulting"}
완료
params: {content: "done"}
JSON
[
{
"consultId": 2,
"title": "general1",
"username": "김민영",
"isArriveMessageToTutee": false
},
{
"consultId": 4,
"title": "general3",
"username": "김민영",
"isArriveMessageToTutee": false
},
{
"consultId": 1,
"title": "general6",
"username": "김민영",
"isArriveMessageToTutee": false
},
{
"consultId": 3,
"title": "general2",
"username": "김민영",
"isArriveMessageToTutee": true
}
]
튜터 목록
[GET] /tutee/tutors
JSON
[
{
"tutorId": 1,
"username": "튜티1",
"resumeContent": "no",
"review":{"tutorId": 1, "count": 2, "starTotal": 7, "star": "3.5"}
},
{
"tutorId": 2,
"username": "튜티2",
"resumeContent": "no",
"review":{"tutorId": 1, "count": 0, "starTotal": null, "star": "리뷰 없음"}
},
]
상담 페이지
[GET] /tutor/consults/{consultId}
JSON
{
"consultId": 7,
"title": "어깨좀 봐주세요",
"content": "상담본문3",
"tutee":{
"name": "김민영"
},
"tutor":{
"name": "김민영"
},
"video":{
"videoId": 7
},
"commentList":[
{
"commentId": 2,
"content": "~~이렇게 하면 됩니다",
"userName": "김민영"
"userId": 1234123
},
{
"commentId": 3,
"content": "아 그럼 이렇게 하면되나요",
"userName": "김민영"
"userId": 4213123
}
]
}
상담 페이지 수정
[GET] /tutee/consults/{consultId}
Content-Type : "multipart/form-data”
JSON
{
"title": "수정된title",
"content": "수정된content",
"video": video-data
}
상담 페이지 삭제
[DELETE] /tutee/consults/{consultId}
튜터 선택해 상담 요청
[POST] /tutee/consults/post/{tutorId}
JSON
{
"title": "제목1",
"content": "상담본문1",
"video": video-data
}
튜터의 상담을 확인하고 Comment를 보내기
[POST] /tutee/consults/{consultId}/comment
JSON
{
"content": "아 그럼 이렇게하면 되나요?"
}
상담지의 commentList 가져오기
[GET] /tutee/consults/{consultId}/comments
JSON
[
{
"commentId": 2,
"content": "~~이렇게 하면 됩니다",
"userName": "김민영",
"userId": 1234123
},
{
"commentId": 3,
"content": null,
"userName": "김민영",
"userId": 1234123
}
]
상담 완료
[POST] /tutee/consults/{consultId}/done
body에 아무것도 없이 요청한다.
리뷰
[POST] /tutee/consults/{consultsId}/review
JSON
{
"star": 5,
"content": "리뷰내용"
}