- kita mulai dengan melakukan membuat table threads : npm run migrate create_table_threads
- Lakukan helper test pada file test dengan membuat file ThreadsTableTestHelper.js
- CATATAN : Buatlah terlebih dahulu testnya, sebagai skenario code nya agar kita dapat menerapkan TDD
- Kemudian, kita beranjak ke Domains.
- Buat folder dengan structur spt ini :
threads\ |--_test | --ThreadRepository.test.js |--entities --_test --AddedThread.test.js --NewThread.test.js --GetThread.test.js --AddedThread.js # untuk menampung data yang dihasilkan o/ repository setelah memasukkan thread baru --GetThread.js --NewThread.js # untuk menampung data yang akan dimasukkan k DB via repository |--ThreadRepository.js
- NewThread : untuk menampung data yang akan dimasukkan k DB via repository
- AddedThread : untuk menampung data yang dihasilkan o/ repository setelah memasukkan thread baru.
- NewThread.js : menerima 3 parameter (owner, title, body) yang kemudian akan di verifikasi apakah data yang masuk terpenuhi semua? dan apakah jenis data yang masuk sudah berupa string?.
- AddedThread.js : menerima 3 parameter (id, title, owner) yang kemudian akan di verifikasi apakah data yang masuk terpenuhi semua? dan apakah jenis data yang masuk sudah berupa string?.
- ThreadRepository : sebagai repository interface yang akan menjalankan 3 fungsi yaitu addThread, verifyAvailableThread, dan getThreadById.
- Karena dalam thread terdapat owner yang mana, berhubungan dengan users maka kita perlu menambahkan suatu function [owner] di dalam UserRepository.js dengan parameter berupa id.
- Begitu juga pada file UserRepositoryPostgres.js perlu juga dilakukan query untuk menjalankan fungsi owner. Jangan lupa lakukan test terlebih dahulu ya..
- Kemudian kita lanjut ke folder Applications, tepatnya pada use_case -nya. Dengan membuat folder threads yang akan menampung domains > entities dari threads diatas. Buat file AddThreadUseCase.js pada Application > use_case > threads dan AddThreadUseCase.test.js pada Application > use_case > threads > _test.
- Skenario test pada AddThreadUseCase.test.js yaitu : test dilakukan ketika request terpenuhi dengan kita lakukan require / import AddThreadUseCase, ThreadRepository, AddedThread, NewThread,dan UserRepository
- Kemudian didalam file AddThreadUseCase kita cukup import NewThread dengan memberikan 2 parameter didalam constructornya yaitu threadRepository dan userRepository
- Dalam layer Infrastructures kita masuk ke folder repository dan repository > _test dengan membuat file ThreadRepositoryPostgres.js dan ThreadRepositoryPostgres.test.js
- ThreadRepositoryPostgres.test.js : Kita require / import : ThreadRepository dan AddedThread. Dengan menjadikan ThreadRepository sbg parent dan parameter yang dikirim dalam construcutor yaitu pool dan idGenerator
- Setelah, kita buat langkah diatas, perlu kita masukkan ke dalam file container.js dengan require / import ThreadRepository, ThreadRepositoryPostgres, dan AddThreadUseCase.
- Buat folder threads di dalam Interface > http > api, yang mana didalamnya terdapat 3 file : handler.js, index.js, dan routes.js
- Didalam file handler.js kita import AddThreadUseCase dengan membuat class ThreadHandler yang mana parameter yang dikirim di dalam constructor berupa container
- Didalam file routes.js kita berikan :
options: { auth: 'api_forum', }
- karena untuk menambahkan thread / addThread membutuhkan Authentikasi
- Setelah selesai, kita kembali ke Infrastructures > http > createServe.js dengan mendafrtarkan plugin threads dengan options berupa container. Selanjutkan ke Infrastructures > http > _test buat file threads.test.js. Didalam file ini kita akan lakukan integrasi test pada handler dengan melakukan test pada enpoint nya.