Skip to content

fhsinchy/deno-blog

master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
db
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Deno Blog

This is an experimental blogging API developed with Docker, Deno, Oak and MySQL.

⚠️ WARNING
The code from this API should not be deemed as ideal as all the functionalities are implemented in a very naive way. The goal was to test things out with this new runtime, not to build a production quality API.

Development Task List

  • Dockerization ✔️
  • Blogs ✔️
  • Authentication ✔️
  • Documentation ✔️
  • Development Tutorial ✔️

System Requirements

Libraries Used

Project Structure

.
├── Dockerfile
├── app.ts
├── controllers
│   ├── auth.ts
│   └── blogs.ts
├── db
│   └── mysql.ts
├── deps.ts
├── docker-compose.yml
├── docker-entrypoint-initdb.d
│   ├── blogs.sql
│   └── users.sql
├── helpers
│   └── between.ts
├── middleware
│   ├── authorize.ts
│   ├── error.ts
│   ├── logger.ts
│   └── timer.ts
├── models
│   ├── Blog.ts
│   └── User.ts
└── routes
    ├── auth.ts
    ├── blogs.ts
    └── home.ts

There are eight directories in the project -

  • api contains server.ts, responsible for initiating the application instance. It also registers four universal middleware.
  • controllers directory contains logic for all the api endpoints. Logic for a certain endpoint is encapsulated inside relevantly named files.
    • auth.ts contains logic regarding registration of users and generation of JWT tokens.
    • blogs.ts contains logic regarding CRUD operations of blog posts.
  • db directory contains necessary code for connecting to the database.
  • docker-entrypoint-initdb.d contains sql files for initializing the database.
  • helpers contains small helper functions for reusability.
  • middleware directory contains middleware functions for reusability.
    • authorize.ts handles validation of JWT tokens.
    • error.ts handles all errors centrally.
    • logger.ts logs all requests to the console.
    • timer.ts logs request times to the console.
  • models contains classes containing functions for querying the database.
  • routes contains necessary code for registering the controller functions as middleware route endpoints.

There are four orphan files in the project root:

  • Dockerfile for building the api container.
  • app.ts is responsible for registering all endpoints to the main app instance and firing up the server.
  • deps.ts imports and exports all the necessary dependencies.
  • docker-compose.yml file for building and running multi-container application.

Instructions

Clone this repository anywhere you want. Open up terminal and use following command to build and run the application -

docker-compose up --build

There will be a wall of text but look for something like following -

db_1   | 2020-06-08T17:27:05.115386Z 0 [Note] Event Scheduler: Loaded 0 events
db_1   | 2020-06-08T17:27:05.116258Z 0 [Note] mysqld: ready for connections.
db_1   | Version: '5.7.30'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)

The application should be running on http://127.0.0.1:3000 address. A postman collection containing all the routes can be found inside postman-collection directory.

You can stop the application by pressing control + c combination. If you want to stop and delete all built images issue following command -

docker-compose down

Use following command if you don't want the containers and images to be deleted -

docker-compose stop

You can restart the application with following command -

docker-compose up

You can learn more about docker-compose command line interface from Compose command-line reference

Postman Collection

The postman-collection/deno-blog.postman_collection.json file can be imported inside Postman for testing out the endpoints.

About

An experimental blogging application developed with Docker, Deno, Oak and MySQL

Topics

Resources

License

Stars

Watchers

Forks