Git Product home page Git Product logo

se-challenge's Introduction

#Submission by: ###Lee Mordell LinkedIn: https://www.linkedin.com/in/leemordell

###How to run the app:

  1. Clone the repo down to your computer
  2. Run npm install to install the dependencies
  3. Run npm start to start the server
  4. Run npm run bundle for webpack to bundle the JS files
  5. On line 3 in the Server/db_config.js file, paste in the url where your database is hosted
  6. The app is located at port 8080 in your browser

I'm very happy to submit this application for your consideration. While developing the app, I made design decisions based on my own experience and familiarity with technologies prominent in full-stack Javascript development. On the back-end, I built a Node/Express server and leveraged the Sequelize ORM library to interact with a PostgreSQL database. I chose to build the client using ReactJS. One of my motivators in choosing this library is the ease with which application state can be managed and manipulated within a component. This allowed me to effectively handle errors and update the UI.

Another design decision I made was to put most of the business logic in seperate utility files. On the server side, a utility function formats the parsed csv file in order to post it to the database. On the client side, a utility function takes in the data sent to the database and returns an object that contains a month and its corresponding expenses as key value pairs. One aspect of the app that I'm particularly proud of is its client side validation. Users are unable to upload a file without choosing one first. If a file is unable to be submitted or if a file has been successfully submitted, the UI updates to reflect both cases. Thank you for taking the time to review my submission, I really enjoyed building it.

Wave Software Development Challenge

Applicants for the Software developer role at Wave must complete the following challenge, and submit a solution prior to the onsite interview.

The purpose of this exercise is to create something that we can work on together during the onsite. We do this so that you get a chance to collaborate with Wavers during the interview in a situation where you know something better than us (it's your code, after all!)

There isn't a hard deadline for this exercise; take as long as you need to complete it. However, in terms of total time spent actively working on the challenge, we ask that you not spend more than a few hours, as we value your time and are happy to leave things open to discussion in the onsite interview.

Please use whatever programming language and framework you feel the most comfortable with.

Feel free to email [email protected] if you have any questions.

Project Description

Imagine that Wave has just acquired a new company. Unfortunately, the company has never stored their data in a database, and instead uses a comma separated text file. We need to create a way for the new subsidiary to import their data into a database. Your task is to create a web interface that accepts file uploads, and then stores them in a relational database.

What your web-based application must do:

  1. Your app must accept (via a form) a comma separated file with the following columns: date, category, employee name, employee address, expense description, pre-tax amount, tax name, and tax amount.
  2. You can make the following assumptions:
  3. Columns will always be in that order.
  4. There will always be data in each column.
  5. There will always be a header line.

An example input file named data_example.csv is included in this repo.

  1. Your app must parse the given file, and store the information in a relational database.
  2. After upload, your application should display a table of the total expenses amount per-month represented by the uploaded file.

Your application should be easy to set up, and should run on either Linux or Mac OS X. It should not require any non open-source software.

There are many ways that this application could be built; we ask that you build it in a way that showcases one of your strengths. If you you enjoy front-end development, do something interesting with the interface. If you like object-oriented design, feel free to dive deeper into the domain model of this problem. We're happy to tweak the requirements slightly if it helps you show off one of your strengths.

Documentation:

Please modify README.md to add:

  1. Instructions on how to build/run your application
  2. A paragraph or two about what you are particularly proud of in your implementation, and why.

Submission Instructions

  1. Fork this project on github. You will need to create an account if you don't already have one.
  2. Complete the project as described below within your fork.
  3. Push all of your changes to your fork on github and submit a pull request.
  4. You should also email [email protected] and your recruiter to let them know you have submitted a solution. Make sure to include your github username in your email (so we can match applicants with pull requests.)

Alternate Submission Instructions (if you don't want to publicize completing the challenge)

  1. Clone the repository.
  2. Complete your project as described below within your local repository.
  3. Email a patch file to [email protected]

Evaluation

Evaluation of your submission will be based on the following criteria.

  1. Did you follow the instructions for submission?
  2. Did you document your build/deploy instructions and your explanation of what you did well?
  3. Were models/entities and other components easily identifiable to the reviewer?
  4. What design decisions did you make when designing your models/entities? Why (i.e. were they explained?)
  5. Did you separate any concerns in your application? Why or why not?
  6. Does your solution use appropriate datatypes for the problem as described?

se-challenge's People

Contributors

lmordell avatar michaeldibernardo avatar rbarazi avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.