From 78ba36e73c1279851f6360098a56ac6fbeec0abb Mon Sep 17 00:00:00 2001 From: Michael Kowalczyk Date: Fri, 4 Oct 2024 09:44:24 -0400 Subject: [PATCH] Day 22 --- .../Campus visits.html | 137 +++++++++--------- Day 20 (UI specification)/Campus visits.html | 42 ++++++ .../User Interface Specification.md | 79 ++++++++++ Day 20 (UI specification)/dataModel.png | Bin 0 -> 22151 bytes Day 20 (UI specification)/dataModel.puml | 37 +++++ Day 21 (lifecycle models)/notes.md | 2 +- .../Programming language selection.txt | 16 ++ .../SystemArchitecture.md | 42 ++++++ 8 files changed, 285 insertions(+), 70 deletions(-) create mode 100644 Day 20 (UI specification)/Campus visits.html create mode 100644 Day 20 (UI specification)/User Interface Specification.md create mode 100644 Day 20 (UI specification)/dataModel.png create mode 100644 Day 20 (UI specification)/dataModel.puml create mode 100644 Day 22-23 (architecture)/Programming language selection.txt create mode 100644 Day 22-23 (architecture)/SystemArchitecture.md diff --git a/Day 06-09 (writing a requirements document)/Campus visits.html b/Day 06-09 (writing a requirements document)/Campus visits.html index d4552bc..5fca4de 100644 --- a/Day 06-09 (writing a requirements document)/Campus visits.html +++ b/Day 06-09 (writing a requirements document)/Campus visits.html @@ -1,7 +1,7 @@ Campus visits.md -

Campus visits

+

Campus visits requirements document

Prepared by: Michael Kowalczyk
-Revision date: 9/12/2024

+Revision date: 9/28/2024

Overview

In the Math and CS Department, the current workflow for campus visits works as follows.

    @@ -41,86 +41,85 @@ Revision date: 9/12/2024

  1. Available times - (for faculty only) a weekly schedule of regularly available times for campus visits
  2. -
  3. Visit +
  4. Visit
      -
    • Visitors - a list of people in the visiting group
    • -
    • Possible times - a list of time intervals in which the visitors are available on the visit day
    • -
    • Day - the calendar day for which the visit has been scheduled with the campus visit office
    • -
    • DecidedTime - the time at which the faculty member has agreed to meet for this visit
    • -
    • DecidedGuide - the faculty member who has agreed to conduct this visit
    • -
    • Status - the current status of this visit: +
    • Possible times - a list of time intervals in which the visitors are available on the visit day
    • +
    • Day - the calendar day for which the visit has been scheduled with the campus visit office
    • +
    • DecidedTime - the time at which the faculty member has agreed to meet for this visit
    • +
    • DecidedGuide - the faculty member who has agreed to conduct this visit
    • +
    • Status - the current status of this visit:
        -
      • proposed - the visit is known to the department, but no faculty is assigned
      • -
      • assigned - a faculty member has agreed to do the visit at a decided time
      • -
      • confirmed - the secretary has informed the Campus Visit office of the decidedGuide and decidedTime
      • -
      • completed - the decidedGuide has conducted the visit
      • -
      • canceled - the visit has been canceled before it could be conducted
      • +
      • proposed - the visit is known to the department, but no faculty is assigned
      • +
      • assigned - a faculty member has agreed to do the visit at a decided time
      • +
      • confirmed - the secretary has informed the Campus Visit office of the decidedGuide and decidedTime
      • +
      • completed - the decidedGuide has conducted the visit
      • +
      • canceled - the visit has been canceled before it could be conducted
    • -
    • Notes - other information pertaining to the visit that would be useful to the decidedGuide
    • +
    • Notes - other information pertaining to the visit that would be useful to the decidedGuide
  5. -
  6. Visitor +
  7. Visitor
      -
    • Name - actual name
    • -
    • Role - the type of visitor: prospective student, parent, or guest (other).
    • -
    • Antipicated start semester - the start semester, as reported by the CV office
    • -
    • Antipicated majors, minors - desired major(s) and minor(s), from the CV office
    • -
    • Type - category (for prospective students only): high school, transfer, or non-traditional
    • -
    • Hometown - name of city and state of origin
    • +
    • Name - actual name
    • +
    • Role - the type of visitor: prospective student, parent, or guest (other).
    • +
    • Antipicated start semester - the start semester, as reported by the CV office
    • +
    • Antipicated majors, minors - desired major(s) and minor(s), from the CV office
    • +
    • Type - category (for prospective students only): high school, transfer, or non-traditional
    • +
    • Hometown - name of city and state of origin
  8. -
  9. Committment - the level of committment associated with a given faculty member for a particular visit +
  10. Committment - the level of committment associated with a given faculty member for a particular visit
      -
    • Level - possible values for involvement are: unknown, cannot, prefer not, can do
    • +
    • Level - possible values for involvement are: unknown, cannot, prefer not, can do
  11. -

    UML Diagram

    -

    Queries

    -

    Unless stated otherwise, these queries can be performed by any user.

    +

    UML Diagram

    +

    Queries

    +

    Unless stated otherwise, these queries can be performed by any user.

    -

    Events

    -

    There are a few problem domain events of interest. For each of these a source is listed, which is how this event is made known to the system.

    +

    Events

    +

    There are a few problem domain events of interest. For each of these a source is listed, which is how this event is made known to the system.

    -

    UML Diagram

    -

    Notifications

    -

    R1 - The system notifies faculty via email under any of the following circumstances:

    +

    UML Diagram

    +

    Notifications

    +

    R1 - The system notifies faculty via email under any of the following circumstances:

    -

    R2 - The system notifies coordinators via email under any of the following circumstances:

    +

    R2 - The system notifies coordinators via email under any of the following circumstances:

    -

    R3 - Both faculty and coordinators are notified if a faculty member has claimed or abandoned a visit (except for a faculty member who changed his own status)

    -

    Platform

    -

    R4 - All users can log into the system as a web app to perform actions suitable to their role(s).

    -

    R5 - Notifications are delivered via email, with embedded unguessable links so that likely actions pertaining to the notification can be performed in one click without logging in.

    -

    User permissions

    -

    Users act in different roles with regard to editing the system’s internal model of campus visits.

    +

    R3 - Both faculty and coordinators are notified if a faculty member has claimed or abandoned a visit (except for a faculty member who changed his own status)

    +

    Platform

    +

    R4 - All users can log into the system as a web app to perform actions suitable to their role(s).

    +

    R5 - Notifications are delivered via email, with embedded unguessable links so that likely actions pertaining to the notification can be performed in one click without logging in.

    +

    User permissions

    +

    Users act in different roles with regard to editing the system’s internal model of campus visits.

    @@ -211,15 +210,15 @@ Revision date: 9/12/2024

    -

    Legend:
    +

    Legend:
    ✔ = The action is allowed by this user role.
    ✔* = The action can be performed by the coordinator, acting on behalf of a faculty member.
    ✔+ = The admin can change any user’s password (other users can only change their own).

    -

    Security

    -

    R6 - The web app portal is password-protected and served over HTTPS, exclusively.

    -

    R7 - Embedded email links pertaining to user actions are long, unguessable strings which expire after a certain number of days (which can be set by an admin). Following an expired link shows an error message.

    -

    Preferences

    -

    Unnecessary email should be minimized. Within notification frequency, it would be preferable to have a single email containing notifications for all relevant visits rather than receiving a separate email for each notification.

    -

    Likely changes

    -

    Rules guiding notification frequency are likely to change. The coordinator has limited control over this, but experience with the system will help to understand how to best give the coordinator more granular control.

    +

    Security

    +

    R6 - The web app portal is password-protected and served over HTTPS, exclusively.

    +

    R7 - Embedded email links pertaining to user actions are long, unguessable strings which expire after a certain number of days (which can be set by an admin). Following an expired link shows an error message.

    +

    Preferences

    +

    Unnecessary email should be minimized. Within notification frequency, it would be preferable to have a single email containing notifications for all relevant visits rather than receiving a separate email for each notification.

    +

    Likely changes

    +

    Rules guiding notification frequency are likely to change. The coordinator has limited control over this, but experience with the system will help to understand how to best give the coordinator more granular control.

    \ No newline at end of file diff --git a/Day 20 (UI specification)/Campus visits.html b/Day 20 (UI specification)/Campus visits.html new file mode 100644 index 0000000..34a5dc4 --- /dev/null +++ b/Day 20 (UI specification)/Campus visits.html @@ -0,0 +1,42 @@ +Campus visits.md +

    Campus visit user interface specification

    +

    Prepared by: Michael Kowalczyk
    +Revision date: 10/3/2024

    +

    Overview

    +

    A prototype for the software is available, and there is only one developer on this project, so this document will only go into detail on those aspects that are unclear or unspecified in the prototype.

    +

    The system will be deployed as a web app with a dedicated email address for sending notifications. Users can sign in directly or use links from emails to perform certain actions without logging in.

    +

    Event responses

    +

    Event responses are simple: most of the events in this system are concerned with bringing the internal data model up to date with what is going on in the problem domain. This is true for VisitRequest, ClaimVisit, ConfirmVisit, CancelVisit, AbaondonVisit, VisitTimePassed, SetCommittmentLevel, EditAvailableTimes, CreateUser, EditUser, and ChangePassword.

    +

    Internally, the system is going to model Visits, Users, and User Committments in a similar way as described in the requirements document. The main difference is that internally, the software will keep visitor data as part of the visit itself. There is little practical need to separate these, as repeat visits with the same visitor are rare; having both stored together simplifies the program and only costs a few extra keystrokes for the coordinator on rare occasions. Also, many of the attributes can be folded together. The result is indicated in the following internal data model.

    +

    Data model

    +

    AdjustNotificationFrequency and
    +SetEmailLinkTimeout are administrative tasks with simple internal representations.

    +

    Screens

    +

    In general, the screens should behave as in a standard single-page web app: hitting the tab key should cycle through interactable user interface elements in top-to-bottom order and the browser back/forward buttons are deactivated.

    +

    Login

    +

    Login

    +

    The login screen should display an error message on failed login, and should also provide the option to do password reset by email.

    +

    User

    +

    Users

    +

    Tab order on this screen is left-to-right per row. The New user button creates a new row with all blanks. A name and email must be provided before hitting “Save changes”. Otherwise, a modal dialog will point out the omission. If a password is left blank for a user, then they aren’t able to log into the system but can still use email links. Only faculty have editable/viewable availability. It is possible to have a user with no roles. Trying to close the browser or switch to the visits tab before saving will issue a warning about changes being lost (ok / cancel).

    +

    Visits

    +

    Visits

    +

    Proposed visits are highlighted in red on the faculty screen. Proposed and assigned visits are highlighted in red on the coordinator screen (because the visit must still be confirmed with the Campus Visit office). Any edit to the filter criteria immediately updates the list. Results can be sorted increasing or decreasing by clicking on columns: visit number, date, student, times, guide, or status.

    +

    Email click confirmation screens

    +

    Confirm volunteer

    +

    The prototype doesn’t show it, but the message should imply what choice was recorded, i.e. You have choosen "I am able to do it, but I'm not volunteering (yet). If you change your mind, you can select a different email link or log in to volunteer for this visit".

    +

    Shared states

    +

    There are no shared states or files with other software systems.

    +

    File formats

    +

    No files are held in common with other systems or with the user. Internally used file formats and/or database tables will be commented on in the architectural design stage.

    +

    New protocols

    +

    No unique protocols will be necessary.

    +

    Administrative tasks

    +

    See requirements document.

    +

    Operating procedures

    +

    It is required that all users of the system check their email frequently (at least once every day or two) and respond to campus visit requests promptly. Meeting the expectation of a quick turnaround time on campus visits relies crucially on this.

    +

    Installation procedures

    +

    This section will be deferred to the architectural design stage, since it relies on decisions not made yet.

    +

    Preferences

    +

    The system may be simple enough that keyboard shortcuts would have little use. The plan is to develop the first version of this software and let users determine if such functionality would be useful enough to add subsequently.

    + \ No newline at end of file diff --git a/Day 20 (UI specification)/User Interface Specification.md b/Day 20 (UI specification)/User Interface Specification.md new file mode 100644 index 0000000..68ec277 --- /dev/null +++ b/Day 20 (UI specification)/User Interface Specification.md @@ -0,0 +1,79 @@ + +# Campus visit user interface specification + +Prepared by: Michael Kowalczyk +Revision date: 10/3/2024 + +## Overview + +A [prototype for the software is available](<../Day 13-14 (prototyping)/clickable prototype/index.html> "Clickable prototype"), and there is only one developer on this project, so this document will only go into detail on those aspects that are unclear or unspecified in the prototype. + +The system will be deployed as a web app with a dedicated email address for sending notifications. Users can sign in directly or use links from emails to perform certain actions without logging in. + +[In larger projects, explain here how each requirement is met.]:: + +## Event responses + +Event responses are simple: most of the events in this system are concerned with bringing the internal data model up to date with what is going on in the problem domain. This is true for VisitRequest, ClaimVisit, ConfirmVisit, CancelVisit, AbaondonVisit, VisitTimePassed, SetCommittmentLevel, EditAvailableTimes, CreateUser, EditUser, and ChangePassword. + +Internally, the system is going to model Visits, Users, and User Committments in a similar way as described in the requirements document. The main difference is that internally, the software will keep visitor data as part of the visit itself. There is little practical need to separate these, as repeat visits with the same visitor are rare; having both stored together simplifies the program and only costs a few extra keystrokes for the coordinator on rare occasions. Also, many of the attributes can be folded together. The result is indicated in the following internal data model. + +![Data model](dataModel.png "Data model") + +AdjustNotificationFrequency and SetEmailLinkTimeout are administrative tasks with simple internal representations. + +## Screens + +In general, the screens should behave as in a standard single-page web app: hitting the tab key should cycle through interactable user interface elements in top-to-bottom order and the browser back/forward buttons are deactivated. + +### Login + +![Login](<../Day 13-14 (prototyping)/clickable prototype/pages/login.png> "Login screen") + +The login screen should display an error message on failed login, and should also provide the option to do password reset by email. + +### User + +![Users](<../Day 13-14 (prototyping)/clickable prototype/pages/users.png> "Users screen") + +Tab order on this screen is left-to-right per row. The *New user* button creates a new row with all blanks. A name and email must be provided before hitting "Save changes". Otherwise, a modal dialog will point out the omission. If a password is left blank for a user, then they aren't able to log into the system but can still use email links. Only faculty have editable/viewable availability. It is possible to have a user with no roles. Trying to close the browser or switch to the visits tab before saving will issue a warning about changes being lost (ok / cancel). + +### Visits + +![Visits](<../Day 13-14 (prototyping)/clickable prototype/pages/visits.png> "Visits screen") + +Proposed visits are highlighted in red on the faculty screen. Proposed and assigned visits are highlighted in red on the coordinator screen (because the visit must still be confirmed with the Campus Visit office). Any edit to the filter criteria immediately updates the list. Results can be sorted increasing or decreasing by clicking on columns: visit number, date, student, times, guide, or status. + +### Email click confirmation screens + +![Confirm volunteer](<../Day 13-14 (prototyping)/clickable prototype/pages/confirmnonvolunteer.png> "Confirm volunteer screen") + +The prototype doesn't show it, but the message should imply what choice was recorded, i.e. `You have choosen "I am able to do it, but I'm not volunteering (yet). If you change your mind, you can select a different email link or log in to volunteer for this visit"`. + +## Shared states + +There are no shared states or files with other software systems. + +## File formats + +No files are held in common with other systems or with the user. Internally used file formats and/or database tables will be commented on in the architectural design stage. + +## New protocols + +No unique protocols will be necessary. + +## Administrative tasks + +See requirements document. + +## Operating procedures + +It is required that all users of the system check their email frequently (at least once every day or two) and respond to campus visit requests promptly. Meeting the expectation of a quick turnaround time on campus visits relies crucially on this. + +## Installation procedures + +This section will be deferred to the architectural design stage, since it relies on decisions not made yet. + +## Preferences + +The system may be simple enough that keyboard shortcuts would have little use. The plan is to develop the first version of this software and let users determine if such functionality would be useful enough to add subsequently. diff --git a/Day 20 (UI specification)/dataModel.png b/Day 20 (UI specification)/dataModel.png new file mode 100644 index 0000000000000000000000000000000000000000..7fc9ec7dd4886003114cbec9b474ce36e46358f3 GIT binary patch literal 22151 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 pw|J1#*}e)M7(#pH|N5L;XQ