Skip to content

Design and Planning

SeungHa Jeon edited this page Dec 10, 2022 · 69 revisions

FITogether

Design and Planning Document
10/12/2022, version 1.3

Document Revision History

  • Rev. 1.0 2022-10-26 - initial version
  • Rev. 1.1 2022-11-11 - E-R diagram and some APIs modified, implementation plan updated
  • Rev. 1.2 2022-11-26 - E-R diagram and some APIs modified, implementation plan updated
  • Rev. 1.3 2022-12-10 - System Architecture, E-R diagram and some APIs modified, implementation plan updated

System Architecture

Deployment

system_architecture_1 Our services will be deployed through virtual environments using docker on AWS EC2 servers. The user communicates with the NGINX web server, and https communication will be applied in the process by using the free SSL/TLS certification provided by let's encrypt and certbot. The web server will be connected to the frontend part and the backend part, respectively. Since the backend is Python-based, we will use the uWSGI to enable communication. Features that use websockets are processed by ASGI in Daphne, and redis is used as the layer for chatting.

Development

system_architecture_2 The frontend is built through the React library in the Typescript language. Redux will be used for state management, and Jest and reaction-testing-libratry will be used for testing. ESLint and Prettier will be used as lint tools for collaboration.
The backend is built through the Django framework in Python language. As a database, MySQL, one of the representative RDBMSs, will be used. Python unittest will be used for testing, and Pylint will be used for Lint tool.
We will use Kakao OAuth APIs to provide social login services, and kakaomap APIs for map services. YouTube API is used to import youTube videos. In addition, we will use sonarcloud for static analysis of code, Travis CI for continuous integrated testing, and Coveralls to improve code reliability by increasing code coverage.

Design Details

Frontend View


Main / User Profile
01_User


Feature Overview
02_Overview


Workout Log
03_WorkoutLog


Group
04_Group


Group Details
05_InGroup


Community - Posts
06_Community_posts


Community - Places
07_Community_places, info


Communication
08_Communication

E-R Diagram


Overview
01_Overview


User
02_User


Group / Place
03_Group/Place


Workout Log
04_WorkoutLog 2022-12-08 오후 3 02 46




Community(& Information, Tag)
05_Community

Backend API

Model API GET POST PUT DELETE
Image /api/image/ X Upload image X X
User /api/user/token/ Get csrf token X X X
/api/user/login/ X Log in X X
/api/user/signup/ X Create account X X
/api/user/login/kakao/callback/ Kakao login callback function X X X
/api/user/signup/social/validate/ X X Social login validate X
/api/user/check/ Check token for automate login X X X
/api/user/logout/ Log out X X X
/api/user/profile/:user_id/ Get specified user X Edit specified user Delete specified user
/api/user/follow/:user_id/ Follow or Unfollow X X X
Chatroom /api/chat/ Get chatroom list Create chatroom X X
/api/chat/read/:room_id/ Update chatroom checked state X X X
/api/chat/:room_id/ Get message list X X X
/api/chat/group/:group_id/ Get group message list X X X
Notification /api/notification/ Get notification list X X Delete all notifications
/api/notification/:notification_id/ X X X Delete a notification
Post /api/post/ Get paginated post list or searched post list Create post X X
/api/post/:post_id/ Get specified post X Edit specified post Delete specified post
/api/post/:post_id/comment/ Get comments of specified post X X X
/api/post/:post_id/func/ X X Execute given action(like, dislike, scrap, follow) on specified post X
Comment /api/comment/ X Create comment X X
/api/comment/recent/ Get recent created comments X X X
/api/comment/:comment_id/ X X Edit specified comment Delete specified comment
/api/comment/:comment_id/func/ X X Execute given action(like, dislike) on specified comment X
Tag /api/tag/ Get tag list Create tag X X
/api/tag/class/ X Create tag class X X
/api/tag/search/ Get searched tag list X X X
Information /api/information/:information_name/ Get specified information X X X
Workout Log /api/fitelement/ X Create fitelement X X
/api/fitelement/:fitelement_id/ Get a fitelement X Edit a fitelement Delete fitelement
/api/fitelement/:year/:month/ Get fitelement list for a month X X X
Routine /api/fitelement/routine/ Get routine lists Create routine X X
/api/fitelement/routine/:routine_id/ Get a routine X Edit routine name or update fitelement lists Delete a routine
Daily Log /api/fitelement/dailylog/:year/:month/:date/ Get a daily log Post memo or add a fitelement X X
Group /api/group/ Get group list Create Group X X
/api/group/:group_id/ Get a group X X Delete a group
/api/group/:group_id/cert/:year/:month/:date/ Get cert list Create cert X Delete cert
/api/group/:group_id/member/ Get group’s members Join group X Exit group
/api/group/:group_id/mem_check/ Get member's status X X X
/api/group/:group_id/leader_change/ X Post leader change X X
/api/group/:group_id/join_permission/ Get join requests Approve join requests X Delete join requests
/api/group/:group_id/post/ Get group’s posts Create group post X X
/api/group/:group_id/post/:post_id/ Get group’s post X Edit group’s post Delete group’s post
/api/group/:group_id/chatroom/ Get group’s chatroom Create message X X
/api/group/:group_id/chatroom/:message_id/ X X X Delete message

Implementation Plan

Page Feature Difficulty Sprint Lead Assignee Prerequisite Done
Main login 2 3 Seungha Jeon O
social login 3 3 Junyoung Kim O
Signup sign up 2 3 Seungha Jeon O
Mypage get profile 2 3 Seungha Jeon O
edit profile 2 3 Seungha Jeon O
upload image 3 3 Seungha Jeon O
delete account 2 3 Seungha Jeon O
Chatting get chatroom list 3 3 Seungha Jeon O
send message 4 3 Seungha Jeon O
create chatroom 3 3 Seungha Jeon O
Notification get notification list 3 5 Seungha Jeon All the other parts O
check notification 3 5 Seungha Jeon All the other parts O
delete notification 3 5 Seungha Jeon All the other parts O
Post get post 2 3 Junyoung Kim User O
create&edit post 2 3 Junyoung Kim User O
general features about post 4 3 Junyoung Kim User O
various contents 2 5 Junyoung Kim Workout Log, Group, Place, Information O
comment system 3 3 Junyoung Kim User O
Tag basic tag system 2 3 Junyoung Kim O
create tag class & tag 3 3 Junyoung Kim O
filtering by tag 3 4 Junyoung Kim O
Information information system 3 4 Junyoung Kim O
Workout Log create&get fitelements 3 3 Jihyung Ko O
drag and drop logs 3 5 Jihyung Ko O
delete fitelement 2 3 Jihyug Ko O
show in monthly calendar 3 4 Jihyung Ko O
calendar hover 2 4 Jihyung Ko O
copy&paste fitelement 2 4 Jihyung Ko O
Routine routine 2 3 Jihyung Ko Workout Log O
edit routine title 2 3 Jihyung Ko Workout Log O
copy routine list 2 5 Jihyug Ko Workout Log O
Daily Log image upload 2 4 Jihyung Ko O
calorie graph 3 4 Jihyung Ko O
Group create&get groups 2 3 Junho Choi O
delete group 2 3 Junho Choi O
exit group 2 3 Junho Choi O
get group members 2 3 Junho Choi O
get member profile 2 4 Junho Choi User O
create challenge certification 3 4 Junho Choi O
get challenges certification 3 4 Junho Choi O
show certification in calender 3 4 Junho Choi O
create group chat 4 4 Seungha Jeon Group O
group place 2 5 Junho Choi Group O
create group posts 2 5 Junyoung Kim Group, Post O

Testing Plan

For each sprint, we will conduct a unit/functional test for all functions implemented in the sprint. Once one integration function is completed, integration testing will be carried out on the sprint. We plan to use Coveralls for all testing so that code coverage is more than 80%.

Unit Testing

For Unit Test, we will use React-testing-library, Jest, Enzyme to test Frontend. We will use python default unit test to test Backend.

Functional Testing

For Functional Test, we will use React-testing-library, Jest, Enzyme, and python default unit test mapped to API. We will use mock we have learned in lectures & practices.

Integration Testing

For Integration Test, we will use Travis CI and Sonarcloud for code static analysis.