Skip to content

Design and Planning

tejava edited this page Dec 17, 2019 · 49 revisions

Tutoring Machine

Design and Planning Document

10/19/2019
Version 1.0.0

Member

박현호, 손광은, 이준희

System Architecture

MVC

E-R diagram

E-R schema diagram

In Tutor & Tutee, schedule will be Jsonfield which includes start time, end time, start location, end location.
In Tutoring, schedule will be Json field which includes start time, end time, location.
Also, status will have value among 'sent', 'accepted', 'declined', 'started', 'stopped'.

Views

  1. Sign in page('/signin')
  • The user fills the form to sign in.
  • Provided that all forms are filled, by hitting 'Sign in' button it will redirect to main page for each role.
  • If the user clicks 'Sign up', it leads to page 2.
  1. Sign up page('/signup')
  • The user can choose to sign up as tutor or tutee, then redirect to pages for each role(3 and 4).
  1. Sign up as tutee page('/signup/tutee')
  • To be specific, Tutee comprises of manager and tutee. In signup page, tutee can fill their form and add tutees into the list.
  • As students can register themselves in Tutoring Machine, manager-tutee allows duplicate.
  • After filling the form, hitting the 'Submit' button leads to page 5.
  1. Sign Up as Tutor Page('/signup/tutor')
  • Tutors' schedule can be put into table form schedule slot.
  • After filling the form, hitting the 'Submit' button leads to page 6.
  1. Profile Page for Tutee('/tutee/:tutee_id')
  • This works as tutee's main page. After sign up or sign in as tutee, he or she redirects to this page.
  • Personal information and manager's tutees show up.
  • If the user clicks 'Profile' button, it navigates to profile edit page.
  • If the user clicks 'Register as Tutee' button, it navigates to register as tutee page.
  1. Profile Page for Tutor('/tutor/:tutor_id')
  • This works as tutor's main page. After sign up or sign in as tutor, he or she redirects to this page.
  • If the user clicks 'Profile' button, it navigates to Profile edit page.
  • If the user clicks 'Tutee request' button, it navigates to Tutoring request list page.
  1. Profile Edit Page for Tutee('/tutee/:tutee_id/edit')
  • The page shows profile, thus it can edit information.
  • The user can add tutee to the list as a tutee manager, and any other personal information such as phone number.
  • If the user clicks 'Submit' button, it navigates to page 5.
  1. Profile Edit Page for Tutor('/tutor/:tutor_id/edit')
  • The page shows tutors' profile and edit information.
  • Contrary to tutees', it has more options for tutors such as editting schedule and bank account.
  • If the user clicks 'Submit' button, it navigates to page 6.
  1. Tutoring Request List Page('/tutor/tutoring/:tutor_id')
  • The tutor can see brief tutoring request.
  • If user clicks 'detail' button, it navigates to page 10.
  1. Tutoring Request Detail Page('/tutor/tutoring/:tutor_id/:request_id')
  • Detailed informations about tutoring request, such as address and schedule shows up.
  • The tutor can choose accept / reject. Also, when user choose, tutee would be notified of the result(accepted/rejected).
  • If the tutor accepts, it navigates to page 6 and the tutoring schedule adds up to the tutor's schedule.
  • If the tutor declines, it navigates to page 9 and helps the tutor find another one.
  1. Tutoring List Page('/tutee/tutoring/:tutee_id')
  • The tutee can see current tutorings.
  • If the user clicks 'Detail' button, it navigates to page 12.
  1. Tutoring Detail Page('/tutee/tutoring/:tutee_id/:request_id')
  • Detailed information is shown.
  • tutee can write, edit, delete review through page 13.
  1. Review Page for Tutee('/tutee/review/:tutee_id')
  • The tutee can see their previous reviews.
  • By hitting 'Edit' and 'Write' button below, it navigates to page 14.
  1. Review Edit/Write Page for Tutee('/tutee/review/:tutee_id/edit', '/tutee/review/:tutee_id/write))
  • The tutee can write, or edit review here by using textbox.
  • By hitting 'Confirm' button, tutee can go to page 13.
  1. Tutoring Matching Page('/recommendation')
  • This works as tutee main page. After sign up or sign in as tutee, he or she come to this page directly, and see tutor recommedation.
  • Tutee can change matching conditions such as subject, gender in this page.

Frontend Design

Controller

Frontend component

Frontend Algorithms

  1. isLoggedIn
  • Check the user is logged in by calling backend api, and redirect to main page if user is not signed in.
  1. main
  • onClickSignInButton: If properly logged in, tutee redirect to tutor recommendation page, and tutor redirect to profile page
  1. sign_up
  • onClickTutorOrTuteeButton: Render different input for tutor and tutee
  • onClickAddTuteeButton: Render input for another tutee
  1. profile
  • onClickEditProfileButton: Redirect to edit profile page
  • onClickTutoringButton: Redirect to tutoring list page
  • onClickRequestListButton: Redirect to request list page
  1. edit_profile
  • onClickAddTutee: Render input for another tutee
  • onClickDeleteTutee: Delete tutee
  • onClickConfirmButton: Confirm edit
  1. tutoring_list
  • onClickTutoring: Tutoring details such as tutor, start date, end date, tuition, schedule are shown. Tutee can write, edit or delete review here.
  • onClickDeleteTutoringButton: Make request to counterpart to delete tutoring. If accepted, tutoring is deleted.
  • onClickExtendTutoringButton: Make request to counterpart to extend tutoring. If accepted, tutoring is extended.
  1. request_list
  • onClickAcceptButton: Accept the request
  • onClickDeclineButton: Decline the request
  1. tutor_recommendation_list
  • onClickTutor: Tutee can see more details such as tutor's profile, available time, reviews.
  • onClickRequestButton: Tutee can send request to the tutor.

Frontend Relations

Backend Design

In the backend, we use models from our MVC section. Followings are restful APIs.

Model API GET POST PUT DELETE
User /sign_in/ x Log in x x
/sign_up/tutor/ x Create new user as tutor x x
/sign_up/tutee_manager/ x Create new user as tutee_manager x x
/sign_out/ log-out x x x
Tutor /tutor/:tutor_id/ get tutor informations x edit tutor informations x
/tutor/review/:tutor_id/ get reviews x x x
/tutor/tutoring/:tutor_id/ get tutorings tutor teaches x edit tutorings(accept, decline, extend, stop) delete tutoring
Tutee /tutee x Create new tutee x x
/tutee/:tutee_id/ get tutee informations x edit tutee informations delete tutee
/tutee/tutoring/:tutee_id/ get tutorings tutee takes make tutoring request to tutor x x
/tutee/review/:tutee_id/ get reviews x edit reviews delete reviews

Implementation Plan

By implementation plan below, we divide our works to each person and sprint. All the user stories we wrote are considered to each feature and page. Our basic and key features are lesson matching and schedule uploading. Therefore we are going to implement these features in sprint2,3 and the other features will be implemented in sprint4,5. Order of features are determined by importance to user.

We discussed difficulties on features and mark level of difficulties on each feature by using 1~5 numbers. Each team member should be in charge of the work assigned to the member.

Each page and feature should have testing activities after its implementation sprint.

Page Feature Difficulties Time(Days) Sprints Assignee Challenge
Sign in Displays ID,password tab and also sign in&up buttons 1 1 4 박현호
Sign up for tutor Make new account(need to check uploaded certificate file) 4 1 4 이준희 OCR,Google Map api
Sign up for tutee Make new account 1 1 4 손광은
Main page(for tutor) Shows links to profile edit page and requested tutoring status page 1 3 2,3 손광은,박현호,이준희
Main page(for tutee) Shows links to registering tutee page, profile edit page and tutoring matching page 1 3 2,3 손광은,박현호
Profile edit(for tutor) Can edit password, id, phonenumber, account number and schedule(also locations of time) 2 3 2,3 박현호,이준희 Google Map api
Profile edit(for tutee) Can edit password, id, phonenumber,, etc 1 3 2,3 손광은
Tutees' request Page shows the lesson lists from tutee(customers) with details buttons 1 4 4 박현호
Request detail See details of lessons from tutee and choose accept/reject 1 4 4 이준희
Tutoring matching Adjust options for lesson matching and choose priorities of them 4 4 2,3 손광은,이준희 Algorithm to consider priorities of options
Tutoring matching result Shows result of Lesson matching. By clicking the lesson, user requests the lesson 1 4 4 이준희
Register as tutee User can register another tutee to use lesson matching 1 3 5 박현호
Requested tutoring status User(tutee) can check whether requested lessons are accepted or rejected. Also can go to Payment page 2 3 5 손광은
Payment(for tutee) Detailed information about payment 1 3 5 이준희,손광은,박현호 Additional payment system

Testing Plan

Unit testing

As we should test every components and modules, we will test each modules in every sprints. Also, as we divide our code to frontend and backend, we will test them respectively. In order to have efficient unit testings, we should prepare mocks and stubs for every tests. We chose python unittest and Jest,Enzyme for frontend. we expect the coverage over 80% in all the case.

  • Jasmine&Jest&Enzyme/Python unit test

Functional testing

Every APIs should be tested. In sprints 3 and 4, we will cover test on RestfulAPIs. Especially on matching API, we should use a lot of mocked data to cover test.

  • Jasmine&Jest&Enzyme/Python unit test

Acceptance & integration testing

Travis CI will help integration testing. As we wrote all the user stories in sprint 1(requirement&specification document), we plan to test them in sprint 4,5.

  • Travis CI