Company Representative Profile - COS-301/graduates GitHub Wiki

Ada - Company Representative Profile

compiled by Isheanesu Joseph Dzingirai using information from all other team members

Introduction

The profile page for the representative of a company. Company Representatives will be able to sign up and sign into their account and have access to their profile where they are able to update and change the data they want on it. The goal is to create a profile that will consist of a company page view, where the representative is able to upload media , profile information, view graduates profile information, and have access to registration and login. Company representatives will also be able to access graduate profiles when in need to view a graduates information and/or contact them.

Functional Requirements and Use Case Diagram

Functional Requirements:

  1. The company representative feature must allow the company representative to have the ability to delete a profile.
  2. The company representative feature must allow the company representative to have the ability to edit the profile.
  • The company representative feature must allow the company representative to be able to add/remove add/remove basic profile information.
  • The company representative feature must allow the company representative to be able to add/update their profile picture.
  1. The company representative feature must allow the the profile to be graduate oriented, thus showing information related to the representative.
  2. The company representative feature must allow the representative to explore students.
  3. The company representative feature must be mobile compatible and responsive.

Use Case Diagram:

Use Case Diagram

Optional Requirements

Optional Requirements:

  1. The system must allow the company representative to have the ability to create a profile.
  2. The system must allow the company representative to be able to add/remove company contact details (email, phone number, branch locations)
  3. The system must allow the company representative to be able to add a short Company description

Non-Functional Requirements

Quality Requirements:

  1. The basic design of the representatives profile should have a look that aligns with the UI of the company's portal.
  2. Data integrity - The company representative must have access to certain information on the graduates such as their academic record. This information cannot be leaked and should only be accessed by the company representative.
  3. Security - Certain information on the company representatives profile that needs to remain private, for the company representative's eyes only, can not be accessed by anyone else unless they login to the company representatives profile.
  4. Performance - All the features of the company representative profile must function as expected just as any profile on a web app should.

Architectural requirements & constraints

Architectural Requirements:

  1. Flexibility
  • The profile page must function on a device that has a UI.
  • The profile page must function using all web browsers.
  1. Maintainability
  • There must be constant communication between developers of the Ada team and the project owners in order to identify and fix errors to improve the quality of the feature.
  • Clear documentation of requirements must be provided to ensure maintainability.
  1. Security
  • Certain information on the company representatives profile that needs to remain private, for the company representative's eyes only, can not be accessed by anyone else unless they login to the company representatives profile.
  1. Availability
  • The company representative profile must be available and easily accessed by any device, desktop or mobile with a UI.
  • The company representative profile must be available at all times.
  1. Reliability
  • The company representative profile is reliable on internet connection.
  • The company representative profile must ensure a stable experience to the user.
  1. Usability
  • The company representative profile must be mobile friendly.

Constraints

  1. The profile must be maintained and managed by the Ada team.
  2. All profile implementation and documentation must be done by the Ada team.
  3. The company representative profile design (wireframes and mocks) created by the team designer, must be the design the Ada team follows.
  4. The UI must be built using nwrl/Angular.
  5. The API must be built using GraphQl.
  6. The Data Engineer of Ada must use Prisma, NestJS and Postgre to complete this feature.
  7. Services Engineer of Ada must use NestJS and CQRS to complete this project.

Components/Services

1. Mr Isheanesu Joseph Dzingirai [Project Manager and Developer Operations] - u20536951:

Tasks:

1. Project Manager:

  • Assign each individual member in my team as role (E.g. API Engineer).
  • Planning on what needs to be done for the company representative profile in the first sprint (with Business Analyst).
  • Set deadlines for tasks to be completed and monitor the progress of team members to ensure deadlines are met.
  • Solve issues that team members are experiencing.
  • Wiki Document and Presentation.

2. Developer Operations:

  • Learn about Mono-repo CI GitHub Actions
  • Keep on an eye for my team's pull requests that can break the CI pipeline and fix the issues so that they can make into develop.
  • Collaborate with the CI/CD feature team on what the global CI/CD actions are

Contributions:

1. Project Manager:

  • Was responsible for choosing our feature after being given permission by my team.
  • Assisted Rachel Hamilton to create the SRS, Agape Mamphasa with the installation of the packages needed by the workspace, Ryan Broemer with guidance on the packages need for the workspace, how angular works since he had no experience with it, Lehlohonolo Sehako with Github issues such as Windows Subsystem for Linux SSH keys.
  • Made sure everyone in the team was assigned a role and added to the COS-301/graduates repo and their respective teams on the repo.
  • Organized and managed group meetings to update my team on new information that I got from Project Manager's meetings and to check their progress with their tasks. Project board
  • Assigned/delegated tasks to each member which corresponded to the role they had chosen.
  • Used GitHub Discussions, Discord, and WhatsApp to communicate with my team(reminders of meetings, assignment of tasks) and other Project Managers. Ada Discussion Board

1. Developer Operations:

  • Only 2 meetings were ever held and for 3 weeks there were no pull requests so I had nothing to do then expect for researching GitHub Actions and Workflow tests.
  • In the meeting held on the 23rd of March 2022, I alerted other Developer Operations that the API for the shorts had some errors which were then resolved. We also determined protocols for when the main repository isn't working. Protocols Document.
  • Alerted my API Engineer that had pull request had failed the CI Tests (linting errors) and to make changes to her paths.

2. Miss Rachel Hamilton [Business Analyst] - u20453478:

Tasks:

  • Formulate features from the given requirements.
  • Formulating all the technical requirements for the company representative profile.
  1. Functional Requirements
  2. Non-Functional Requirements
  • Generate a use case diagram of how the company representative interacts with our feature.
  • Generation of meeting minutes.

Contributions:

  • Did research on our given feature to prepare documentation and requirements.
  • Generated the Use-Case Diagram
  • Generated the SRS Document and Meeting Minutes
  1. SRS Document for Ada
  2. Ada Meetings and Other Documentation.pdf
  • Assisted Project manager in gathering information for the wiki.
  • Assisted Project manager in making changes and editing the wiki.
  • Assisted Project manager in compiling the wiki.
  • Compiled all team members' documentation for the demo and presentation.

3. Mr Sean Nkosi [Designer] - u19107383:

Task:

responsible for the design (wireframes and mockups of the user interface) of the company representative profile for the UI Engineer to use as a guideline to build the UI.

Contributions:

Wireframes for the User Interface. Company_Representative Profile image)

Meeting(s):

  • 11 March 2022 (09:30 - 10:05)
  • 14 March 2022 (13:30 - 14:02)
  • 16 March 2022 (11:30 - 12:32)

4. Mr Ryan Broemer [User Interface Engineer] - u20519517:

Tasks: As the UI Engineer of the company representative profile, I was tasked with creating a representative page filled with mock data.

Contributions:

Created a simple, placeholder, clickable website to showcase to the project manager. This includes the layout and design of the website in a representable format. It will change as more resources become available. Such as the final agreed upon theme of the website, API and UI Kit.

Navigation Bar: Angular logo is used as a placeholder until official UP Graduates Logo is finalized. image

Navigation Bar Drop Down Menu Clickable drop down menu for more options image

User End Bar With Profile Picture: User end bar with profile picture, logout button, and a drop-down menu for users to edit their profile or go to their company’s profile. image

image

Welcome Poster: A welcome poster with the representative’s picture.

Representative Information: Boxes that contain information about the company representative. image

Link to document with more information

Meetings:

Had a few meetings with my Project Manager. Short and concise, usually to fix a bug, workspace and edit the company representative page. 21 March 2022: Meeting about NX Console, File Structure and Angular Storybook

5. Miss Siphesihle Vezi [API Engineer] - u19078286:

Tasks:

Responsible for building a Mock API that connects the user interface and database for the company representative.

Contributions:

Created the bases for our company representative profile API, specifically getting and and creating a profile then Mock the data. the following is an example of the a query to our API:

demo

Meetings:

  • 15 March 2022: Ice breaker and Choosing a team leader
  • 21 March 2022: Discussed the structure of our libraries and how to create them.

6. Mr Agape Mamphasa [Backend/Services Engineer] - u18105883:

Tasks:

As a services engineer for the company representative profile, was tasked with implementing the backend logic/functions going to be used by the API engineer to supply data (company representative data) to the front end to be displayed on a page. The main goal was talking to the database and providing the necessary Commands and queries to talk to the database.

Contributions:

  • So far, a comprehensive documentation of the functionality required has been created. A mock ”User.module.ts” was created (locally, not on the main repo). This Module simply sends a request to the database. It returns all entries within the database which demonstrates it’s primary functionality. It is prone to change.

Meeting date(s):

  • 19 March 2022 - Main discussion was how would the services part will be implemented and what tools and structures should we use and follow. @Kyle-Smith19091 introduced himself as the lead architect of the services.

7. Mr Sechaba Mache [Data Engineer] - u19367211:

Tasks:

As a data engineer of the company representative profile, I was in charge of creating the database that would store all their information that they gave to us. The development tools that were used for this database were PostgreSQL, to store all the user information, and Prisma for the data introspection with Typescript for endpoint CRUD operations (Creation, Reading, Updating and Deletion) for the database.

Contributions:

  • Did research on all the frameworks used as a data engineer.
  • Brainstormed sub-features for our feature (namely the user_scouted table which is used to store all the student users who have been scouted by individual representatives)
  • Helped the team determine functional and non-functional requirements for our feature.
  • Created the database schema for our feature.
  • Created a mock database which maps out all respective data and how it would be stored (locally, not on the main repo)
  • Initial Schema:

image

  • Explaination of tables:
  1. Company_Reps:
  • This table was to be used to store all the company representatives and the respective data associated with them.
  • rep_id: Used as an ID to distinguish the different representatives in the database
  • Company_id: Defines the company, by its id, that the representative is associate with
  • Name: name of the representative
  • Surname: surname of the representative
  • Contact: representative’s contact information (telephone number)
  • Company: name of the company the representative is associated with
  • Company_location: were the company the representative works for is located
  1. Rep_Media:
  • This table is to store all the media the representative would make available for their profile.
  • Rep_id: Maps to the id of the representative in the Company_Reps table
  • Profile_picture: Used to store the representatives profile picture
  • Company_desc: The description of the company that the company works for
  • Company_logo: Used to store the logo of the company that the representative is associated with
  • Company_page_link: A link to the company’s website for more in depth information about them
  1. Rep_scouted
  • At the time of the creation of this schema intention was to store all students that have been scouted by the representatives.
  • Student_id: Maps to the student that the representative has scouted
  • Name: The name of the student that has been scouted
  • Contact: The students contact information
  • Institution: The institution that the student has completed his/her studies at
  1. Rep_Accounts:
  • This was added to show that every representative would have their own account information.
  • Rep_id: Maps to the specific representative in the Company_Reps table
  • Username: The representative’s username
  • Password: The representatives password
  • Revised Schema:

This is the revised schema created after meeting with the other data-engineers to decide on how the layout would be and if it suites our individual features. In this revised schema the company_reps table was merged with the users table as all the students and representatives can all just be considered users of the system. Rep_Media was replaced by tables user_profile, and user_social_media. User_scouted was left in as it is unique to our feature and the rep_accounts table was merged with user. image

Meeting(s):

  • 11 March 2022 (09:30 - 10:05)
  • 14 March 2022 (13:30 - 14:02)
  • 16 March 2022 (11:30 - 12:32)

8. Mr Lehlohonolo Sehako [Tester] - u20557622:

Tasks:

As a tester for the company representative profile, the task was to develop tests (e.g. integration, unit, system) to ensure that no issues/ errors are present in our feature and to improve the overall quality of the representative page.

Contributions:

  • Designed an initial testing plan for the company representative profile, which also served as a foundation for the standardized format for testers. This was done to help developers to write and run tests.
  • Organized a meeting with testers for further clarification on the test documentation layout as well as workflow.
  • Proposed testing and feedback tools to the project owners for approval and relayed the proposed tools to other testers for further approval.
  • More research was done than coding in the first sprint as this was required from the testers by the project owners. 1 2 3

Meeting(s):

  • 14 march 2022: Proposing standardization, documentation, and type of tests to be carried out as well as tools and texting extensions to be used by testers and developers.
  • 21 March 2022: Finalizing the type of tests, how to document the case in which a test pass/fails. What tools to use for writing and running tests, the workflow of testers and most importantly, who writes that test.

Sprint 2 Contributions:

  1. Mr Isheanesu Joseph Dzingirai [Project Manager & Developer Operations] - u20536951:

Project Manager: Project board

Developer Operations: Reviewed and made sure that all my team's pull requests passed the CI workflow tests before being merged. Also notified other devOps when there was a pipeline break or CI test issues.

Isheanesu Joseph Dzingirai - u20536951.docx

  1. Miss Rachel Hamilton [Business Analyst] - u20453478:

SRS_Ada.pdf

Meeting minutes & Other Docs.docx

  1. Mr Sean Nkosi [Designer] - u19107383:

Sean Nkosi.docx

  1. Mr Ryan Broemer [UI Engineer] – u20519517

UI-Engineer.docx

  1. Miss Siphesihle Vezi [API Engineer] - u19078286

API Engineer - u19078286.pdf

  1. Mr Agape Mapmphasa [Services Engineer] - u18105883:

Services Engineer report.docx

  1. Mr Sechaba Mache [Data Engineer] - u19367211:

Sechaba Mache.docx

  1. Mr Lehlohonolo Sehako – u20557622:

COS301 - Testing documentation.pdf

Features that have integrated with the company representative profile:

  1. Storage: We used the Storage team's API(which sent our query/mutation to their FirebaseRepository and StorageRepository) to upload and retrieve the profile photo of the company representative which was then displayed on the page.
  2. Student-Explore: We linked the company representative page/UI with the student-explore team's UI. When the Find Graduates button is pressed from out menu, it took us the student explore page which displayed the graduates that are registered in the system.
  3. The company representative feature is hosted on the 301graduates.live server where its API is monitored(Active / Not Active) by the hosting team.

Work/Issues for Future Developers

UI:

Fix all edit page form validators Update form to be able to make one to many edits instead of the whole form. Edit Form needs to show the representative where their invalid inputs are. The website and about me parts of the representative page cannot be updated. Needs to be implemented. Make a loader/spinner so that when the representative's data is being loaded or updated, it is shown. Design and implement a page (UserScouted) where the representative can see the list of students/graduates he/she has scouted. Page should look similar to the student explore page.

API Layer:

Implement the create profile mutation that the UI can use when a user can signs up. At the moment, a mutation getDefaultRepresentative is used to create a company representative. Add more unit tests for the api.

Services Layer:

The CreateUser function is incomplete and needs proper implementation. There were some tests I couldn’t complete and implement because we ran out of time in sprint 2. These are tests with regard to createUser, updateUser and deleteUser functions. Testing edge cases: The functions are vulnerable to any user input that is an anomaly. To prevent any catastrophic failures, I recommend testing them carefully for edge cases. Create the commands and queries that will be used to add a student to the user scouted table and retrieve all scouted students.

Repository:

Add functions that return all scouted students from the database, add a student to the UserScouted table. Add functions that updates the representative's website, experience and password. Make a new entity in the database that will make it easy to store the representative's about me and website.

Tester:

Extend the given e2e and unit tests. The tests that currently exist are minimal. NB: Due to time constraints and major hurdles encountered during the development of the feature, user acceptance tests were not done externally. They were done internally (alpha beta testing).

Integration with other features:

The company representative profile needs to integrate with the authorization, authentication, notification and company profile features.

Acceptance Criteria

Note: All acceptance criteria listed should be enforced at the end of the second sprint.

  1. All information that the company representative gives our feature must be in the database and displayed on the user interface without hiccups.
  • E.g. contact info
  1. The company representative to be able to:
  • update his/her information such as contact number.
  • change his/her profile picture.
  1. The company representative must be able to delete his/her profile.
  2. The company representative must be able to explore graduates/prospective students.
⚠️ **GitHub.com Fallback** ⚠️