Knect.dev
![MIT License](https://img.shields.io/github/license/Knect-Dev/Knect-Dev-Backend.svg?style=for-the-badge)
Table of Contents
-
About The Project
-
Getting Started
- Usage
- UML
- Data Models
- Access Control List
- Routes
- Roadmap
- Contributing
- License
- Contact
- Acknowledgments
About The Project
Deployed Page
This repository implements phase two (frontend) of a two phase project (full web application deployment).
The goal of this project is to create a Targeted Companies & High-Volume Tracking List that allows those seeking jobs to effectively document the jobs they have applied for as well as thier most up to date interactions. Phase one, the backend of this project, focused on building and deploying a reliable backend with robust schemas and database models. Phase two, the frontend portion, focused on building a user-friendly interface in React with and Ionic framework to streamline data input as well as visualize metrics in real time of your job search.
(back to top)
Built With
General:
Frontend:
Backend:
Hosted On:
(back to top)
Getting Started
To get a local copy up and running follow these simple example steps.
Prerequisites
This project uses npm node package manager to install the required modules.
Installation: Backend
- Clone the repo
git clone https://github.com/Knect-Dev/Knect-Dev-Backend.git
- Install NPM packages
npm install i
-
Enter your API in .env
PORT = 3000
API_KEY = 'ENTER YOUR API';
SECRET = 'YOUR SECRET';
(back to top)
Installation: Frontend
- Clone the repo
git clone https://github.com/Knect-Dev/Knect-Dev-Frontend.git
- Install NPM packages
npm install i
(back to top)
Usage
-
Create a new user account or sign in to an existing account.
-
Upon signing in for the first time, the Jobs list will be blank, so click on the green (+) button in the upper right corner to open up the form for adding a new Job opportunity to your collection.
-
In the form that pops up, click the padlock icon in the bottom left corner to unlock the form for and begin editing.
-
Job Title
and Company
are required fields; all others are optional.
-
To add or change the company, type part of search companies
to see if the company already exists in the database.
(back to top)
UML
![uml](https://github.com/Knect-Dev/Knect-Dev-Frontend/raw/dev/img/knectdev.PNG)
(back to top)
Data Models
This project utilized dynamoose and DynamoDB and the following data models...
- Users, contains all information for the user (essentially a user profile), this is created at /signup, and the id and email must be unique for each user.
- Jobs, these objects contain information about a specific job position at a company and are owned by the user who creates it
- Companies, these objects provide general company information, anyone can create one, and update it with the most recent information. The thought process here is that there is only one company ever created, and can be updated for everyone with the most information.
User Model
'Users' {
id: PRIMARY KEY, required,
name: STRING, required,
password: STRING, required,
token: STRING, required,
email: STRING, required,
role: STRING, required,
}
(back to top)
Job Model
'Jobs' {
id: PRIMARY KEY, required,
company: STRING, required,
title: STRING, required,
jobId: STRING,
jobUrl: STRING,
appliedDate: DATE,
stage: STRING, required,
status: BOOLEAN, required,
openPositions: INTEGER,
location: STRING,
technologies: STRING,
targeted: BOOLEAN, required,
offer: INTEGER,
notes: STRING(1250),
}
(back to top)
Company Model
'Companies' {
id: PRIMARY KEY, required,
name: STRING, required,
logo: STRING,
leader: STRING,
founded: STRING,
hq: STRING,
size: INTEGER,
product: STRING,
clients: STRING,
mission: STRING(500),
companyUrl: STRING,
careersUrl: STRING,
}
(back to top)
Contact Model
'Contacts' {
id: PRIMARY KEY, required,
name: STRING, required,
company: STRING,
position: STRING,
email: STRING,
linkedIn: STRING,
phone: STRING,
photo: STRING,
notes: STRING,
}
(back to top)
Data Associations and User Experience
We decided early on that we wanted to use a relational database model for a few reasons:
- We wanted our Users to have a unique user experience, and allow them to create Jobs that were unique to them
- We did this by setting UserId within the Job record on creation, establishing a One-to-Many association between Users and Jobs.
- Upon logging in, the User's unique jobs will render to the screen.
- We also wanted our Companies to be community based, meaning a Company is created once, then edited by all
- Companies also have a unique id, and Job records utilize this when created or edited, and create an association within the database.
- When a change is made to a company by a User, the database is updated and the new info is propogated to all other Users.
- The Jobs are the crux of the application, in functionality as well as associations
- Jobs, as mentioned before, contain both a UserId and a CompanyId which establish associations between all three models.
- These associations are then used to conditionally render the Company associated to the job, and the Contacts related to both the Job and the Company
- Lastly, Contacts are related to all three of the previous models
- The Contacts are rendered based on UserId, JobId, and CompanyId.
(back to top)
Access Control List
admin
- read, create, update, and delete
- can't create jobs
- can't create users (must be done through /signup)
- can't maintain their own job list
user
- read, create, update, and delete, their own jobs
- can't delete companies
- can't create users (must be done through /signup)
(back to top)
Routes
User Routes
- GET by Id
- requires: token, user id
- returns: status 200, object containing user information
- admin: can do this for any user
- user: can do this for only themselves
- GET (all)
- requires: token
- returns: status 200, list of all user objects
- admin: has access
- user: access denied
- PUT
- requires: token, user id
- returns: status 202, update user object
- admin: access to update any user
- user: acces to update their own information
- DELETE
- requires: token, user id
- returns: status 200
- admin: access to delete any user
- user: access to delete their own information
(back to top)
Job Routes
- GET by Id
- requires: token, job id
- returns: status 200, object containing job information
- admin: can do this for any job
- user: can only do this for jobs they own
- GET (all)
- requires: token
- returns: status 200, list of all job objects
- admin: access to all jobs
- user: can only do this for jobs they own
- CREATE
- requires: token
- returns: status 201, created job object
- admin: cannot create jobs
- user: create thier own jobs
- PUT
- requires: token, job id
- returns: status 202, update user object
- admin: access to all jobs
- user: can only do this for jobs they own
- DELETE
- requires: token, jobs id
- returns: status 200
- admin: access to all jobs
- user: can only do this for jobs they own
(back to top)
Company Routes
- GET by Id
- requires: token, company id
- returns: status 200, object containing company information
- admin: can do this for any company
- user: can do this for any company
- GET (all)
- requires: token
- returns: status 200, list of all company objects
- admin: access to all companies
- user: access to all companies
- CREATE
- requires: token
- returns: status 201, created company object
- admin: can create a company
- user: can create a company
- PUT
- requires: token, company id
- returns: status 202, update user object
- admin: can update all companies
- user: can update all companies
- DELETE
- requires: token, companies id
- returns: status 200
- admin: can delete all companies
- user: cannot delete companies
(back to top)
Contact Routes
- GET by Id
- requires: token, contact id
- returns: status 200, object containing contact information
- admin: can do this for any contact
- user: can only do this for contacts they own
- GET (all)
- requires: token
- returns: status 200, list of all contact objects
- admin: access to all contacts
- user: can only do this for contacts they own
- CREATE
- requires: token
- returns: status 201, created contact object
- admin: cannot create contacts
- user: create thier own contacts
- PUT
- requires: token, contact id
- returns: status 202, update user object
- admin: access to all contacts
- user: can only do this for contacts they own
- DELETE
- requires: token, contacts id
- returns: status 200
- admin: access to all contacts
- user: can only do this for contacts they own
(back to top)
Auth
- POST
/signup
creates new user requiring first name, last name, email, and password
- POST
/signin
requires email and password (basic authentication)
(back to top)
Roadmap
- [x] Full CRUD Users w/bearer authentication
- [x] Full CRUD Jobs
- [x] Full CRUD Companies
- [x] Front End Ionic/React Interface
See the open issues for a full list of proposed features (and known issues).
(back to top)
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
)
- Commit your Changes (
git commit -m 'Add some AmazingFeature'
)
- Push to the Branch (
git push origin feature/AmazingFeature
)
- Open a Pull Request
(back to top)
License
Distributed under the MIT License. See LICENSE
for more information.
(back to top)
Contact
Spencer Tower - Github - Linkedin
Andrew Enyeart - Github - Linkedin
Daniel Jackson - Github - Linkedin
Kellen Linse - Github - Linkedin
Matt Miguel - Github - Linkedin
Erik Savage - Github - Linkedin
Chris Harden - Github - LinkedIn
Project Link: https://github.com/Knect-Dev/Knect-Dev-Backend
(back to top)
Acknowledgments
- Jacob Knaack
- The Squad
- Family and Friends
- README.md template provided by othneildrew
(back to top)
Resources