0% found this document useful (0 votes)
48 views13 pages

Scope of Requirements - The Pea

The document provides use cases and requirements for the development of an education app called "The Pea". It outlines use cases for four user types: Admin, Teacher, Student, and Parent. It also describes the proposed user interface and database architecture. The database architecture includes 10 tables to store information on users, courses, classes, sessions, reviews, notices, signups, demos, and results.

Uploaded by

regacccom
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
48 views13 pages

Scope of Requirements - The Pea

The document provides use cases and requirements for the development of an education app called "The Pea". It outlines use cases for four user types: Admin, Teacher, Student, and Parent. It also describes the proposed user interface and database architecture. The database architecture includes 10 tables to store information on users, courses, classes, sessions, reviews, notices, signups, demos, and results.

Uploaded by

regacccom
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

Scope of Requirements

The Pea

Written by: Mr George


Last updated on 16 Nov 2020
Table of Contents
Page
1. Use-cases 2
a. Admin 3
b. Teacher 3
c. Student 3
d. Parent

2. App UI 4
a. Admin / Teacher App 4
b. Student / Parent App 4

3. Database Architecture 5

4. API Documentation 6

5. Appendices
a. Appendix 1 13

1
Use-cases

Use-cases for Admin: As an admin, I want to…

1. CRUD (Create, Read, Update and Delete) of courses, packages, school classes,
sessions, notices, demos, signups, etc. See Appendix 1.
Note: The admin has no right to delete anything. Only Superadmin can delete anything
(e.g. users, courses, packages, etc).
Superadmin gets to create 3 types of users – admin, teacher and students

2. Be able to see the full schedule of the entire school, for 2 specific reasons:
a. Be able to zoom in to one particular student, and see his/her past completed
courses, plus his/her ongoing course -> completed classes + future classes.
b. Be able to easily cancel classes that are usually scheduled to take place within
24 hours -> To search student’s classes easily. Have a dashboard!
Note: System automatically cancels classes upon admin’s approval of a
teacher’s leave_request, admin does not have to step in and manually cancel the
classes that fall on the teacher’s leave days.
Also, the system automatically cancels classes when the parent logs in to cancel
the class. In situations where parents are unable to login to the app to cancel the
classes themselves, admin will do it for them :)

3. Approve or reject leave requests by teachers.

4. (Dashboard) Monitor current classes to see that every is under control. Needs to know
that today’s scheduled classes were complete without any problem. Per row of schedule
light, we need to show a light indicator that goes BLUE when class has been completed,
GREEN when class is ongoing with at ALL intended participants are present, YELLOW
with red exclamation mark when someone is missing and admin has to do something
(contact parent or teacher), yellow with green tick when someone is missing and admin
has already stepped in to confirm that one student will be not attending, after contacting
the parent.

5. (Dashboard?) Be able to contact parents for a new course signup by looking at the
progress status of each student (51 out of 60 completed for Michael, etc.) for students
with ≤10 remaining classes on their course. Incorporate a button that takes admin
straight to the parent’s Wechat.

6. Review & Result – Be able to keep track of the teacher’s (efficiency? Following rules?)
and easily see when they have not submitted their review/result for the student that they
taught.

2
Use-cases for Teacher – As a teacher, I want to…

1. See notices
2. Know what’s my next class (countdown timer, who’s the student, preview the PPT and
click on Enter class button)
3. See my upcoming classes for the day / week / forever in order.
4. See my pending reviews (countdown timer, who’s the student, preview the PPT and click
on Review button). Note for when writing a review, need to have dropdown to select
multiple pre-written statements
5. Mark student absent (this is a -1 for the student’s package)
6. Submit leave request
7. Have access to my assigned classes (previous)
8. See a pretty counter of my classes taught and hours taught etc in my profile page
9. Preview signed contract and uploaded documents
10. CHAT

Use-cases for Student/Parent

As a student, I want to… (Playful & Fun theme)

1. Next Class (Get hyped up!) – See the PPT of the next class + enter class button +
countdown
2. Upcoming Classes – See the details of future classes (next class +1, +2, +3…)
3. Lesson Review – See my review of the previous class. Teacher’s notes may include
homework notes.
4. Lesson History – See my previous classes prior to the previous class. Include datetime,
rating, PPT and replay.

As a parent I want to… (Playful & Serious theme)

1. See statistics. Display positive statistics first, and negative statistics last (like
absenteeism rating). Is my package running out – how’s the progress? How well is my
child doing? What is the rate of absenteeism? What is my child’s CEFR level? What is
my current child’s package? Transaction history with the company?
2. See class history and upcoming classes.
3. See teacher’s profile (profile picture, place of origin, seals/badges, qualification,
experience, share button)
4. Cancel class

UI for cancelling classes -> There will be a button to cancel classes. However, this button will
either be greyed out and it displays a prompt upon clicking: “For further assistance please refer
your query to a PEA representative”, if the class is happening within 24 hours.

3
App UI

I am proposing to split our ‘App’ into 2 – An Admin / Teacher App, and a Student / Parent App.

Admin / Teacher ‘Backstage’ App

Tabs for Admin


1. Dashboard
2. Full Schedule
3. Content Management System (Appendix 1)
4. Leave requests
5. Reviews

Tabs for Teacher


1. Notices
2. Classes
3. Reviews
4. Leave requests
5. User Profile

Student / Parent App

Tabs for Student


1. Next Class
2. Upcoming classes
3. Previous class review
4. Class history
5. My past reviews and ratings

Tabs for Parent


1. Dashboard – See statistics
2. Class History
3. Upcoming classes
4. Teacher’s Profile
5. User Profile

4
Database Architecture

See here for a more detailed version.

No Tables Description Hyperlink Remarks


There will be 6 different roles in total:
1 User All user accounts in the app User superadmin, admin, HR, sales, student, teacher.
All courses customised for every All courses are customised to each individual
2 Course individual student Course student (or groups of 2-3 students).
Packages are created for the course creators'
ease of use, to reuse classes for multiple
All packages created to be within a students across the board. There can only be one
3 Package course Package package per course.
A schoolClass (previously 'Class', but it's a really
forbidden word in any programming language)
contains the materials needed for the class to
All classes created to be within a take place. There will either be 30, 60 or 90
4 SchoolClass package SchoolClass schoolClasses per package.
A session contains all the information of a single
5 Session All teacher-student sessions created Session virtual session at talk-cloud.
All student reviews given by a A review will be given by the teacher for each
6 Review teacher per class Review student after every session.
A notice is simply an image. Sometimes it will be
clickable and take you to wechat and when it
does take you there it notifies the admin with the
All notices created by the admin description of the image in the form of a wechat
team to be placed under the 'Notice message so the admin knows what he/she is
7 Notices Board' section of the app Notice being notified about.
All signups for demo session
collected by the sales and marketing A signup acts like a student account but an
8 Signup team Signup unofficial one, used for demo classes only.
All demo classes created by the A demo acts like a session and a class but with
admin / sales team for parents to lots of information, because there is no existing
9 Demo give their kids a try at The Pea Demo student account tied to it.
All results created by the teacher
after each demo session for each A result is like a review for students after a
10 Results signup Result session, but it is for signups after a demo.
All leave requests created by LeaveReques
11 LeaveRequest teachers t
All constants/variables that the
12 Constant system will adhere to Constant

5
API Documentation

Check here for the most updated version.

No Endpoint Type Description Req Body Returns


Auth

Authentication

1 /login POST User logs in false { {


email: String, access_token: String,
password: String, refresh_token: String
wechat_token: String }
}

2 /admin/login POST Admin logs in false { {


email: String, admin_access_token:
password: String, String,
} refresh_token: String
}

3 /forgot_password POST Send email to user to reset false { {


password email: String, “Please check your email”
} }

4 /reset_password POST Reset password for user { -


email: String,
new_password: String
}

5 /logout POST User logs out true - -

6 /admin/logout POST Admin logs out true - -

Admin

1 /users GET Get a list of users true - {


_id: String,
role: String,
2 /user/:id GET Get a specific user with id true - email: String,
is_verified_email: Boolean,
is_verified_wechat: Boolean,
wechat_id: String,
3 /user POST Create a user true {
password: String,
role: String,
first_name: String,
email: String,
last_name: String,
is_verified_email: Boolean,
4 /user/:id POST Edit a user true parent_first_name: String,
is_verified_wechat:
gender: String,
Boolean,
phone_number: String,
wechat_id: String,
country_code: Number,
password: String,
date_of_birth: Date,
first_name: String,
timezone: String,
last_name: String,
country: String,
parent_first_name: String,
city: String,
gender: String,
signed_contract: [String],
phone_number: String,
uploaded_documents:
country_code: Number,
[String],
date_of_birth: Date,
signup_id: String,
timezone: String,
is_suspended: Boolean,
country: String,
suspended_reason: String,
city: String,

6
signed_contract: [String], access_token: String,
uploaded_documents: date_registered: Date,
[String], notes: String
signup_id: String, }
is_suspended: Boolean,
suspended_reason: String,
access_token: String,
date_registered: Date,
notes: String
}

5 /user/:id/suspend POST Suspend a user true {


reason: String
}

6 /user/:id DELETE Delete a user (for development true - -


purpose only, not encouraged
to be used in production
server)

7 /courses GET Get a list of courses true - {


_id: String,
name: String,
8 /course POST Create a course true { package_id: String,
name: String, bonus_class_ids: [String],
package_id: String, session_ids: [String],
bonus_class_ids: [String], teacher_id: String,
9 /course/:id PUT Edit a course true student_ids: [String],
session_ids: [String],
teacher_id: String, schedule: [String],
student_ids: [String], time: [String],
schedule: [String], start_date: Date,
time: [String], notes: String
start_date: Date, }
notes: String
}

10 /course/:id DELETE Delete a course true - -

11 /packages GET Get a list of packages true - {


_id: String,
name: String,
12 /package POST Create a package true { school_class_ids: [String],
name: String, length: Number,
school_class_ids: [String], notes: String
length: Number, }
13 /package/:id PUT Edit a package true
notes: String
}

14 /package/:id DELETE Delete a package true - -


(server throws an error if this
package has been used in a
course)

15 /school_classes GET Get a list of school classes true - {


_id: String,
name: String,
16 /school_class POST Create a school class true { ppt_name: String,
name: String, class_summary_eng: String,
ppt_name: String, class_summary_chi: String,
class_summary_eng: notes: String
17 /school_class/:id PUT Edit a school class true }
String,
class_summary_chi: String,
notes: String
}

7
18 /school_class/:id DELETE Delete a school class true - -
(server throws an error if this
package has been used in a
course)

19 /sessions GET Get a list of sessions true - {


_id: String,
school_class_id: String,
20 /session POST Create a session true { datetime: Date,
school_class_id: String, talkcloud_id: String,
datetime: Date, teacher_id: String,
talkcloud_id: String, student_ids: [String],
21 /session/:id PUT Edit a session true is_cancelled: Boolean,
teacher_id: String,
student_ids: [String], cancelled_by: String,
is_cancelled: Boolean, cancelled_at: Date,
cancelled_by: String, cancelled_reason: String,
cancelled_at: Date, absent_student_ids: [String],
cancelled_reason: String, notes: String}
absent_student_ids: }
[String],
notes: String}
}

22 /session/:id DELETE Delete a session true - -


(server throws an error if this
session has been used in a
course or a review)

23 /admin/session/:id/cancel POST Cancel a session (irreversible) true { {


cancelled_reason: String _id: String,
} is_cancelled: Boolean,
cancelled_by: String,
cancelled_reason: String
}

24 /reviews GET Get a list of reviews true - {


_id: String,
session_id: String,
25 /review POST Create a review true { teacher_id: String,
session_id: String, student_id: String,
teacher_id: String, positives: String,
student_id: String, teachers_notes: String,
26 /review/:id PUT Edit a review true rating: Number,
positives: String,
teachers_notes: String, notes: String
rating: Number, }
notes: String
}

27 /review/:id DELETE Delete a review true - -

28 /notices GET Get a list of reviews true - {


_id: String,
name: String,
29 /notice POST Create a review true { image: String,
name: String, description: String,
image: String, intended_roles: [String],
description: String, expiry_date: Date,
30 /notice/:id PUT Edit a review true notes: String
intended_roles: [String],
expiry_date: Date, }
notes: String
}

31 /notice/:id DELETE Delete a notice true - -

8
32 /signups GET Get a list of signups true - {
_id: String,
wechat_account: String,
33 /signup POST Create a signup true { student_age: Number,
wechat_account: String, grade: Number,
student_age: Number, student_name: String,
grade: Number, years_of_english: Number,
34 /signup/:id PUT Edit a signup true proposed_level: String,
student_name: String,
years_of_english: Number, gender_preference: String,
proposed_level: String, notes: String
gender_preference: String, }
notes: String
}

35 /signup/:id DELETE Delete a signup true - -

36 /demo GET Get a list of demos true - {


_id: String,
{ datetime: Date,
37 /demo POST Create a demo true
datetime: Date, talkcloud_id: String,
talkcloud_id: String, teacher_id: String,
38 /demo/:id PUT Edit a demo true signup_ids: [String],
teacher_id: String,
signup_ids: [String], is_cancelled: Boolean,
is_cancelled: Boolean, cancelled_by: String,
cancelled_by: String, cancelled_at: Date,
cancelled_at: Date, cancelled_reason: String,
cancelled_reason: String, notes: String
notes: String }
}

39 /demo/:id DELETE Delete a demo true - -

40 /demo/:id/cancel POST Cancel a demo (irreversible) true { {


reason: String _id: String,
} is_cancelled: Boolean,
cancelled_by: String,
cancelled_reason: String
}

41 /results GET Get a list of results true - {


_id: String,
{ signup_id: String,
42 /result POST Create a result true
signup_id: String, demo_id: String,
demo_id: String, teacher_id: String,
43 /result/:id PUT Edit a result true vocabulary_application:
teacher_id: String,
vocabulary_application: Number,
Number, vocabulary_understanding:
vocabulary_understanding: Number,
Number, clarity_of_expression:
clarity_of_expression: Number,
Number, speed_of_delivery: Number,
speed_of_delivery: Number, grammatical_accuracy:
grammatical_accuracy: Number,
Number, listening_comprehension:
listening_comprehension: Number,
Number, intonation: Number,
intonation: Number, speech_fluency: Number,
speech_fluency: Number, pronunciation_accuracy:
pronunciation_accuracy: Number,
Number, interaction_and_engagement:
interaction_and_engagement: Number,
Number, notes: String
notes: String }
}

44 /result/:id DELETE Delete a result true - -

9
45 /leave_requests GET Get a list of leave requests true - {
_id: String,
- teacher_id: String,
46 /leave_request/:id/approv POST Approve a leave request true
dates: [Date],
e reason: String,
status: String,
47 /leave_request/:id/reject POST Reject a leave request true { admin_id: String,
reason: String
}
approve_reject_datetime:
Date,
reject_reason: String,
notes: String
}

48 /leave_request/:id DELETE Delete a leave request true - -

49 /set_constants POST Set constants for the first time true {


cancellation_limit_30: Number,
cancellation_limit_60: Number,
cancellation_limit_90: Number,
dates_unavailable: [Date],
leave_days_per_teacher: Number,
}

50 /cancellation_limit_30 PUT Edit the cancellation limit for 30 true {


school classes packages limit: Number
}
51 /cancellation_limit_60 PUT Edit the cancellation limit for 60 true
school classes packages

52 /cancellation_limit_90 PUT Edit the cancellation limit for 90 true


school classes packages

53 /dates_unavailable PUT Edit the array of dates where true {


school classes will not take dates: [Date]
place }

54 /leave_days_per_teacher PUT Edit the number of leave days true {


all teachers are entitled to per days: Number
year }

Teacher

1 /assigned_courses GET Get a list of courses that has true - [{


been assigned to the teacher _id: String,
name: String,
package_id: String,
bonus_class_ids: [String],
session_ids: [String],
teacher_id: String,
student_ids: [String],
schedule: [String],
time: [String],
start_date: Date,
notes: String
}]

2 /session/:id/students_abs POST Create a list of students who true { session: {


ent are absent absent_student_ids: [String] _id: String,
} …

absent_student_ids: [String]
}

10
3 /session/:id/review POST Create a review true { {
student_id: String, _id: String,
positives: String, session_id: String,
teachers_notes: String, teacher_id: String,
rating: Number, student_id: String,
notes: String positives: String,
} teachers_notes: String,
rating: Number,
notes: String
}

4 /leave_request POST Create a leave request true { {


dates: [Date], _id: String,
reason: String teacher_id: String,
} dates: [Date],
reason: String,
status: String,
admin_id: String,
approve_reject_datetime:
Date,
reject_reason: String,
notes: String
}

Student / Parent

1 /user/:id/courses GET Get a list of courses that has true - [{


been enrolled by the student _id: String,
name: String,
package_id: String,
bonus_class_ids: [String],
session_ids: [String],
teacher_id: String,
student_ids: [String],
schedule: [String],
time: [String],
start_date: Date,
notes: String
}]

2 /my_reviews GET Get a list of reviews on a true - [{


specific student _id: String,
session_id: String,
teacher_id: String,
student_id: String,
positives: String,
teachers_notes: String,
rating: Number,
}]

3 /session/:id/cancel POST Cancel a session (irreversible) true { {


reason: String _id: String,
} is_cancelled: Boolean,
cancelled_by: String,
cancelled_reason: String
}

11
Appendix 1

CRUD (Create, Read, Update and Delete) of:

1. Users
a. Create teachers
b. Create students
c. Create HR and sales (HR and Sales will only be able to create demos)

2. Courses
a. Name
b. Assign students (dropdown)
c. Assign teacher (dropdown)
d. Assign package (colour code the packages in ‘Pre A1, A1, B1 and B2’) (search)
e. Assign schedule, time, start_date (tricky UI) -> generate sessions from these
variable
f. Set and assign bonus_classes and put them in order (select where you want the
bonus classes to be in the list)

3. Packages
a. Name
b. Tags (see below)
c. Assign materials (30/60/90) -> search bar (e.g. grammar) + colour code the
school classes based on Grammar, Vocab, Reading, Exam, Phonics, ‘Specials’
(fun effects like glow or something), and ‘Live’. Need to have a good UI for
‘ticking’ school classes. Weightages -> ‘Live x2’

4. Materials (School classes)


a. Name
b. Tags (dropdown of pre-assigned terminologies, see below)
c. Select PPT
d. Class summary (english & chinese)
e. Submit

5. Cancel sessions
6. Create demos
7. Create notices for the noticeboard
8. Create signups
9. Approve/reject leave requests

Tags: Pre-A1, A1, A2, B1, B2, Grammar, Vocabulary PEA, Vocabulary, Phonics, Reading Comp

12

You might also like