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)
)
일반 상담 목록
[POST] /tutor/consults/general
JSON
[
{
"consultId": 4,
"title": "general3",
"tutee":{
"name": "김민영"
}
},
{
"consultId": 3,
"title": "general2",
"tutee":{
"name": "김민영"
}
},
{
"consultId": 2,
"title": "general1",
"tutee":{
"name": "김민영"
}
},
]
요청 받은 상담 목록
[GET] /tutor/consults/post
JSON
[
{
"consultId": 1,
"title": "11231123트1",
"tutee":{
"name": "김민영"
}
}
]
진행중인 상담 목록
[GET] /tutor/consults/consulting
JSON
[
{
"consultId": 1,
"title": "11231123트1",
"tutee":{
"name": "김민영"
},
"isArriveMessageToTutor": false
},
{
"consultId": 3,
"title": "general2",
"tutee":{
"name": "김민영"
},
"isArriveMessageToTutor": false
},
{
"consultId": 7,
"title": "어깨좀 봐주세요",
"tutee":{
"name": "김민영"
},
"isArriveMessageToTutor": true
}
]
상담 페이지
[GET] /tutor/consults/{consultId}
JSON
{
"consultId": 7,
"title": "어깨좀 봐주세요",
"content": "상담본문3",
"tutee":{
"name": "김민영"
},
"tutor":{
"name": "김민영"
},
"video":{
"videoId": 7
},
"commentList":[
{
"commentId": 2,
"content": "~~이렇게 하면 됩니다",
"userName": "김민영"
},
{
"commentId": 3,
"content": "아 그럼 이렇게 하면되나요",
"userName": "김민영"
}
]
}
상담 수락 버튼 클릭
[POST] /tutor/consults/{consultId}/startConsult
body에 아무것도 없이 요청한다.
상담 달기
[POST]/tutor/consults/{consultId}/comment
JSON
{
"content" : "~~이렇게 하면됩니다"
}
상담지의 CommentList가져오기
[GET] /tutor/consults/{consultId}/comments
JSON
[
{
"commentId": 2,
"content": "~~이렇게 하면 됩니다",
"userName": "김민영"
},
{
"commentId": 3,
"content": null,
"userName": "김민영"
}
]
요청받은 상담 거절
tutor/consults/{consultId}/cancel
body에 아무것도 없이 요청한다.
이력서 읽기
[GET] /tutor/resume
JSON
{
"content": "저는 ~~을 대회에서 수상했습니다"
}
이력서 수정
[PUT] /tutor/resume
JSON
{
"content": "저는 ~~을 대회에서 수상했습니다. 그리고 이런 것도 추가로 했습니다"
}