Giter Club home page Giter Club logo

hols's Introduction

Canada Holidays

This is a fun little express app for Canada's statutory holidays. There's a frontend you can look at and an API you can use.

  • The frontend is using htm server-rendered components. Very amusing.
  • The backend API is pretty bare-metal: it's using an initial SQLite migration file stored in memory and then it does "db reads" and spits out JSON.

Using the API

Please get in touch if you are using the API and you need something, because I can probably make it work better if I have enough real-life use-cases.

Read the API docs.

There's an OpenAPI spec at Canada-Holidays-API.v1.yaml and a SwaggerHub page where you can test the endpoints.

Getting started

npm is a javascript package manager. It downloads project dependencies and runs node applications.

You'll need node version v14 or higher to run the app. (If you have an M1 Mac, you'll need v15 or higher.)

A docker container allows a developer to package up an application and all of its parts. This means we can build an app in any language, in any stack, and then run it anywhere — whether locally or on a server.

Build and run with npm

Guess what? There is no build step. Just install the dependencies and run it.

Pretty slick. 😎

# install dependencies
npm install

# run application in 'dev' mode
# (ie, the server restarts when you save a file)
npm run dev

# run application in 'prod' mode
npm start

The app should be running at http://localhost:3000/.

On a Mac, press Control + C to quit the running application.

Run tests with npm

# run unit tests
npm test

# run linting
npm run lint

unit tests

Since we are still using components as interface, this makes testing really easily. On the server, we render out our components as strings that we send to the browser, but when we run tests, we want to do a bit more than that. Looking for values in big strings is pretty ugly.

Instead, using cheerio, we can load in a string like "<main><p>hello</p></main>" and then traverse it using jQuery selector syntax. So we can write assertions against stuff like $('main > p').text(), which is far better than string testing.

Build and run as a Docker container

# build an image locally
docker build -t pcraig3/hols:tag --build-arg GITHUB_SHA_ARG=<tag> .

# run the container
docker run -it -p 3000:3000 pcraig3/hols:tag

The container should be running at http://localhost:3000/.

On a Mac, press Control + C to quit the running docker container.

Push to Cloud Run

The main.yaml file contains instructions to deploy the service to Cloud Run, or you can use the CLI command below to do it manually.

gcloud builds submit --tag gcr.io/{PROJECT}/{SERVICE}:{TAG} --build-arg GITHUB_SHA_ARG={TAG}

Citations

Region # Readable source Legislation
Federal 12 Statutory holiday pay - Canada.ca -
AB 9 General holidays in Alberta Employment Standards Code
BC 10 Statutory Holidays in British Columbia Entitlement to Statutory Holiday - Act Part 5, Section 44
MB 8 What are the general holidays in Manitoba? The Employment Standards Code
NB 8 What are the 10 prescribed days of rest? Employment Standards Act
NL 12 Clarification on public holidays in Newfoundland Labour Standards Act
NS 6 Holiday and Retail Closing Day Charts Labour Standards Code
NT 10 Employment Standards: Frequently Asked Questions Employment Standards Act
NU 10 - Labour Standards Act
ON 9 Public holidays Employment Standards Act
PE 7 Paid Holidays Employment Standards Act
QC 8 Jours fériés, chômés et payés Labour Standards Act
SK 10 List of Saskatchewan Public Holidays The Saskatchewan Employment Act
YK 10 Find a Yukon statutory holiday Employment Standards Act

hols's People

Contributors

pcraig3 avatar stinkyslug avatar latetedemelon avatar notpushkin avatar mnigh avatar dependabot[bot] 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.