Developers frequently have to create interfaces that allow non-developers to easily view and interact with information stored in databases. These interfaces are called content management systems (CMS). Your assignment this week is to build a command-line application from scratch to manage a company's employee database, using Node.js, Inquirer, and PostgreSQL.
Because this Challenge will require the use of the Inquirer
package, ensure that you install and use Inquirer version 8.2.4. To do so, use the following command in your project folder: npm i inquirer@8.2.4
.
Because this application won’t be deployed, you’ll also need to create a walkthrough video that demonstrates its functionality and all of the following acceptance criteria being met. You’ll need to submit a link to the video and add it to the README of your project.
AS A business owner
I WANT to be able to view and manage the departments, roles, and employees in my company
SO THAT I can organize and plan my business
GIVEN a command-line application that accepts user input
WHEN I start the application
THEN I am presented with the following options: view all departments, view all roles, view all employees, add a department, add a role, add an employee, and update an employee role
WHEN I choose to view all departments
THEN I am presented with a formatted table showing department names and department ids
WHEN I choose to view all roles
THEN I am presented with the job title, role id, the department that role belongs to, and the salary for that role
WHEN I choose to view all employees
THEN I am presented with a formatted table showing employee data, including employee ids, first names, last names, job titles, departments, salaries, and managers that the employees report to
WHEN I choose to add a department
THEN I am prompted to enter the name of the department and that department is added to the database
WHEN I choose to add a role
THEN I am prompted to enter the name, salary, and department for the role and that role is added to the database
WHEN I choose to add an employee
THEN I am prompted to enter the employee’s first name, last name, role, and manager, and that employee is added to the database
WHEN I choose to update an employee role
THEN I am prompted to select an employee to update and their new role and this information is updated in the database
The following video shows an example of the application being used from the command line:
This Challenge will require a video submission. Refer to the Fullstack Blog Video Submission Guide for additional guidance on creating a video.
You’ll need to use the pg package to connect to your PostgreSQL database and perform queries, and the Inquirer package to interact with the user via the command line.
Important: You will be committing a file that contains your database credentials. Make sure that your PostgreSQL password is not used for any other personal accounts, because it will be visible on GitHub. In upcoming lessons, you will learn how to better secure this password, or you can start researching npm packages now that could help you.
You might also want to make your queries asynchronous. You can make your queries asynchronous by using the native async/await keywords.
Design the database schema as shown in the following image:
As the image illustrates, your schema should contain the following three tables:
-
department
-
id
:SERIAL PRIMARY KEY
-
name
:VARCHAR(30) UNIQUE NOT NULL
to hold department name
-
-
role
-
id
:SERIAL PRIMARY KEY
-
title
:VARCHAR(30) UNIQUE NOT NULL
to hold role title -
salary
:DECIMAL NOT NULL
to hold role salary -
department_id
:INTEGER NOT NULL
to hold reference to department role belongs to
-
-
employee
-
id
:SERIAL PRIMARY KEY
-
first_name
:VARCHAR(30) NOT NULL
to hold employee first name -
last_name
:VARCHAR(30) NOT NULL
to hold employee last name -
role_id
:INTEGER NOT NULL
to hold reference to employee role -
manager_id
:INTEGER
to hold reference to another employee that is the manager of the current employee (null
if the employee has no manager)
-
You might want to use a separate file that contains functions for performing specific SQL queries you'll need to use. A constructor function or class could be helpful for organizing these. You might also want to include a seeds.sql
file to pre-populate your database, making the development of individual features much easier.
Try to add some additional functionality to your application, such as the ability to do the following:
-
Update employee managers.
-
View employees by manager.
-
View employees by department.
-
Delete departments, roles, and employees.
-
View the total utilized budget of a department—in other words, the combined salaries of all employees in that department.
Note: If a Challenge assignment submission is marked as “0”, it is considered incomplete and will not count towards your graduation requirements. Examples of incomplete submissions include the following:
A repository that has no code
A repository that includes a unique name but nothing else
A repository that includes only a README file but nothing else
A repository that only includes starter code
This Challenge is graded based on the following criteria:
- Your GitHub repository containing your application code.
-
A walkthrough video that demonstrates the functionality of the employee tracker must be submitted, and a link to the video should be included in your README file.
-
The walkthrough video must show all of the technical acceptance criteria being met.
-
The walkthrough video must demonstrate how a user would invoke the application from the command line.
-
The walkthrough video must demonstrate a functional menu with the options outlined in the acceptance criteria.
-
Satisfies all of the preceding acceptance criteria plus the following:
-
Uses the Inquirer package.
-
Uses the pg package to connect to a PostgreSQL database.
-
-
Follows the table schema outlined in the Challenge instructions.
-
Repository has a unique name.
-
Repository follows best practices for file structure and naming conventions.
-
Repository follows best practices for class/id naming conventions, indentation, quality comments, etc.
-
Repository contains multiple descriptive commit messages.
-
Repository contains a high-quality README with description and a link to a walkthrough video.
- The application user experience is intuitive and easy to navigate.
Fulfilling any of the following can add up to 20 points to your grade. Note that the highest grade you can achieve is still 100:
-
Application allows users to update employee managers (2 points).
-
Application allows users to view employees by manager (2 points).
-
Application allows users to view employees by department (2 points).
-
Application allows users to delete departments, roles, and employees (2 points for each).
-
Application allows users to view the total utilized budget of a department—in other words, the combined salaries of all employees in that department (8 points).
You are required to submit BOTH of the following for review:
-
A walkthrough video demonstrating the functionality of the application.
-
The URL of the GitHub repository, with a unique name and a README describing the project.
© 2024 edX Boot Camps LLC. Confidential and Proprietary. All Rights Reserved.