Introduction

This is a poorly written application, and we're expecting the candidate to greatly improve this code base.

Instructions

  • Consider this to be your project! Feel free to make any changes
  • There are several deliberate design, code quality and test issues in the current code, they should be identified and resolved
  • Implement the "New Requirements" below
  • Keep it mind that code quality is very important
  • Focus on testing, and feel free to bring in any testing strategies/frameworks you'd like to implement
  • You're welcome to spend as much time as you like, however, we're expecting that this should take no more than 2 hours

movie-theater

Current Features

  • Customer can make a reservation for the movie
    • And, system can calculate the ticket fee for customer's reservation
  • Theater have a following discount rules
    • 20% discount for the special movie
    • $3 discount for the movie showing 1st of the day
    • $2 discount for the movie showing 2nd of the day
  • System can display movie schedule with simple text format

New Requirements

  • New discount rules; In addition to current rules
    • Any movies showing starting between 11AM ~ 4pm, you'll get 25% discount
    • Any movies showing on 7th, you'll get 1$ discount
    • The discount amount applied only one if met multiple rules; biggest amount one
  • We want to print the movie schedule with simple text & json format

New Revision

  • New Library
    • Lombok - annotation-based java library to reduced boilerplate code. In this case, use mostly following feature to create class & object: immutability and builder
    • jackson-databind - convert the object into json format
  • New Requirement
    • all new feature implemented
    • add more unit test case for coverage
    • Refactored all the class using Lombok annotation to remove the boilerplate code
      • @Value - Immutable classes
      • @Builder - Object creation with builder pattern