Nicholas Liem - 13521135
- Clone this repository
https://github.com/NicholasLiem/SingleService.git
- Change the current directory to
SingleService
folder
cd SingleService
- Build and run your docker containers
docker-compose up --build
- Make a new .env file based on .env.example (you can just remove .example from the file's name)
- If for some reason the database is not seeded, you can manually seed using
docker exec -it single_service_app bash
yarn migration:run
- (Docker Networking) Please look at this monolith repository!
- Model-Controller Pattern (Architectural)
Secara struktur, backend service ini memiliki tiga buah model, yakni barang, perusahaan, dan user. Masing-masing dari model ini memiliki controller-nya masing-masing. Perlu diperhatikan bahwa karena ini adalah backend service jadi tidak ada view. Hal ini mempermudah pengaturan model-model dalam satu handler/controllernya masing-masing sehingga kode jadi lebih reusable. - Repository Pattern
Model yang dibentuk diatur dan disimpan oleh ORM untuk diolah lebih mudah. Dalam hal ini, TypeORM menyediakan data source dan dari data source ini terdapat beberapa repository yang dibuat dari model yang ada. Kegunaan dari pattern ini adalah untuk menjaga abstraksi data dan menyentralisir data. - Chain of Responsibility Pattern (Behavioral Design)
Pattern ini secara spesifik digunakan untuk melakukan penjagaan route api dengan memanggil fungsi checkToken yang akan memeriksa token dari header Authorization apakah valid atau tidak dan melanjutkan aksi selanjutnya kepada api yang ingin diakses. Jadi, alasan penggunaan pattern ini adalah untuk menjaga routing api melalui aksi linear tersebut. - Singleton Pattern
Pada saat aplikasi dijalankan, pada route, masing-masing kelas controller dipanggil dan diinjeksi dengan data source yang telah diload. Masing-masing controller ini hanya dipanggil satu kali.
Endpoint | Method | Description |
---|---|---|
/login | POST | Login verification |
/self | GET | Get session status |
/barang | GET | Get a list of barang registered based on query |
/barang/:id | GET | Get the detail of barang of the given id |
/barang | POST | Create a new barang |
/barang/:id | PUT | Update the detail of a barang of the given id |
/barang/:id | DELETE | Delete barang of the given id |
/perusahaan | GET | Get a list of perusahaan registered based on query |
/perusahaan/:id | GET | Get the detail of perusahaan of the given id |
/perusahaan | POST | Create a perusahaan |
/perusahaan/:id | PUT | Update the detail of perusahaan of the given id |
/perusahaan/:id | DELETE | Delete perusahaan of the given id |
TypeScript, PostgresSQL, TypeORM, ExpressJS
-
Single Responsibility Principle
Setiap kelas/model yang dibuat memiliki satu buah controller yang hanya mengatur. Tidak ada controller yang mengatur barang atau perusahaan secara bersamaan, ex: tidak ada controller yang dapat membuat perusahaan sekaligus membuat barang juga. Selain itu, ada pembagian modul, misalnya seperti controller, middleware, dan sebagainya mereka terpisah dan tidak dalam satu tempat. -
Open Closed Principle
OCP digunakan pada bagian reponse util dimana untuk setiap response dibagi apakah error atau success dan ada beberapa tipe struktur data khusus seperti barang yang responsenya unik dari response biasa sehingga ditambahkan beberapa fungsi untuk memfasilitasi kebutuhan tersebut sehingga tidak perlu mengubah reponse/data sumber, tetapi menyesuaikan dan menambahkan. -
Liskov Substitution Principle
Tidak ada inheritence yang digunakan dalam repository ini. -
Interface Segregation
Setiap controller mengimplementasi method-method yang diperlukan untuk fungsionalitasnya. Tidak ada controller yang dipaksa untuk mengimplementasi method-method yang tidak diperlukan. -
Dependency Inversion
Injeksi data source ke dalam controllernya masing-masing yang mengatur sebuah atau beberapa repository.
Features | Yes | No |
---|---|---|
B02 - Deployment | ✓ | |
B03 - Single Service Implementation | ✓ | |
B07 - Dokumentasi API (Swagger) | ✓ | |
B08 - SOLID | ✓ |
- This is a link to the swagger api docs: https://app.swaggerhub.com/apis-docs/13521135/single-service_api_docs/1.0.0
- This is a link to the monolith repository click here!
- Amazon EC2 service is used for this backend service and am using Supabase service to deploy my PostgresSQL server. You can interact with the API through this public IPv4 address: N/A (use http instead of https)