Repository navigation
Design and Planning
Design and Planning Document
10/12/2022, version 1.3
- 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
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.
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.
Main / User Profile
Feature Overview
Workout Log
Group
Group Details
Community - Posts
Community - Places
Communication
Overview
User
Group / Place
Workout Log
Community(& Information, Tag)

| 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 |
| 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 |
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%.
For Unit Test, we will use React-testing-library, Jest, Enzyme to test Frontend. We will use python default unit test to test Backend.
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.
For Integration Test, we will use Travis CI and Sonarcloud for code static analysis.