PKL - 175150407111024
PKL - 175150407111024
PERUSAHAAN/INDUSTRI
Disusun oleh:
Ar Rafii Alfa
NIM: 175150407111024
PERUSAHAAN/TNDUSTRT
Disusun oleh:
i,
198309222012121003 NrP/NrK:
PERNYATAAN ORISINALITAS
Apabila ternyata di dalam laporan PKL ini terbukti terdapat unsur-unsur plagiasi, saya
bersedia PKL ini digugurkan, serta diproses sesuai dengan peraturan perundang
undangan yang berlaku (UU No. 20 tahun 2003, Pasal 25 Ayat 2 dan pasal 70).
Ar Rafii Alfa
NIM. 175150407111024
ii
KATA PENGANTAR
Puji syukur penulis panjatkan ke hadirat Allah SWT yang berkat rahmat dan
karunianya penulis dapat menyelesaikan kegiatan hingga pelaporan Praktik Kerja
Lapangan dengan baik di Departemen Sistem Informasi Fakultas Ilmu Komputer
Universitas Brawijaya.
Penyelesaian kegiatan PKL dan laporan ini tidak lepas dari dukungan, doa dan
bantuan dari banyak pihak lainnya sehingga penulis ingin menyampaikan rasa hormat
dan terimakasih kepada:
1. Kedua orang tua penulis yang senantiasa memberikan doa dan dukungan kepada
penulis
2. Bapak Buce Trias Hanggara, S.Kom., M.Kom. Selaku Dosen Pembimbing PKL.
3. Bapak Ir. Issa Arwani, S.Kom., M.Sc. selaku Ketua Departemen Sistem Informasi
Fakultas Ilmu Komputer Universitas Brawijaya
4. Bapak Yusi Tyroni Mursityo, S.Kom., M.AB. selaku Ketua Program Studi Sistem
Informasi Fakultas Ilmu Komputer Universitas Brawijaya.
5. Seluruh staf PT. PUSMANPRO UPMK II yang telah memberikan bantuannya
dalam penyelesaian laporan ini.
6. Seluruh civitas akademik Sistem Informasi Universitas Brawijaya yang telah
banyak memberi bantuan dan dukungan selama penyelesaian laporan PKL ini.
iii
ABSTRAK
Pada kegiatan Praktik Kerja Lapangan kali ini, penulis berkesempatan melakukan
pengembangan API pada metode pencatatan dan pelaporan waktu jam kerja pegawai
di PT. PLN PUSMANPRO UPMK II. Dalam praktiknya, pencatatan jam kerja pegawai
dibuat secara manual pada dokumen timesheet di aplikasi Excel. Dokumen tersebut
kemudian akan digunakan oleh perusahaan dalam proses penggajian pegawai.
Digitalisasi dokumen Timesheet melalui pengembangan API dilakukan untuk
meningkatkan efisiensi dan mengurangi faktor kesalahan manusia. Timesheet API
tersebut dibangun menggunakan framework Nest.js dan dilengkapi dengan sistem
monitoring log menggunakan Grafana dan Loki yang memudahkan pengawasan melalui
visualisasi log dan fitur query log. Pengembangan Timesheet API menghasilkan 15 end-
point/rute yang dapat digunakan oleh user yang telah terotentikasi. Selain menyediakan
fungsi pengelolaan data Timesheet, API tersebut juga menyediakan fitur unduh
timesheet dalam bentuk file Excel dengan format timesheet yang sebelumnya sudah
digunakan perusahaan. Timesheet API diuji menggunakan pengujian fungsional dengan
teknik Blackbox Testing, dimana penulis menguji setiap 15 end-poin API tersebut tanpa
memperhatikan kode implementasi dari API. Dari hasil pengujian tersebut didapatkan
hasil bahwa setiap end-point dapat berjalan sesuai rancangan tanpa bug ataupun error.
iv
ABSTRACT
In this fieldwork activity, the author had the opportunity to develop an API for
employee work hour recording and reporting method at PT. PLN PUSMANPRO UPMK II.
In practice, recording and reporting is done manually through the use of Timesheet
documents made in Excel which then used in the company payroll process. Digitalization
through API is done to improve efficiency and reduce human error in the timesheet
creation and management process. The Timesheet API is made using Nest.js framework
and equipped with a log monitoring solution using Grafana and Loki. This log monitoring
solution facilitate the supervision of the newly created Timesheet API through log
visualization and query capability. The development of the Timesheet API produces 15
end points/route that’s available for an authenticated user. In addition to the
management of timesheet, the API also provide an export function that user can use to
download timesheet in previously used Excel format. The API is tested using functional
testing with blackbox testing technique, where the author tests all 15 end points without
considering the code implementation of the API. The test shows that each end points
are working correctly without bug and error.
v
DAFTAR ISI
vi
3.2.5 Docker ................................................................................................... 6
BAB 4 METODE PELAKSANAAN ...................................................................................... 7
4.1 Tahapan pelakasanaan .................................................................................. 7
4.2 Alat Kerja ....................................................................................................... 7
BAB 5 PERANCANGAN DAN IMPLEMENTASI .................................................................. 9
5.1 Perancangan end-point API ........................................................................... 9
5.2 Class Diagram .............................................................................................. 12
5.3 Entity Relationship Diagram (ERD) .............................................................. 14
5.4 Sistem monitoring log ................................................................................. 17
5.5 Implementasi............................................................................................... 18
5.5.1 Timesheet Controller .......................................................................... 20
5.5.2 Timesheet Service............................................................................... 23
5.5.3 Sistem Monitoring Log........................................................................ 26
BAB 6 PENGUJIAN ......................................................................................................... 29
6.1 Pengujian Fungsionalitas Otentikasi ........................................................... 29
6.2 Pengujian rute timesheet, timesheet detail dan holiday............................ 30
BAB 7 KESIMPULAN DAN SARAN .................................................................................. 34
7.1 Kesimpulan .................................................................................................. 34
7.2 Saran ............................................................................................................ 34
DAFTAR REFERENSI ....................................................................................................... 35
LAMPIRAN..................................................................................................................... 36
vii
DAFTAR TABEL
viii
DAFTAR GAMBAR
ix
DAFTAR LAMPIRAN
x
BAB 1 PENDAHULUAN
1
1.3 Tujuan
Tujuan yang ingin dicapai dalam PKL ini berdasarkan perumusan masalah adalah
sebagai berikut.
1. Membangun Timesheet API yang dapat digunakan oleh aplikasi dalam perusahaan
untuk mengelola data timesheet pegawai
2. Membangun sistem monitoring log pada API Timesheet untuk meningkatkan
pemantauan kinerja dan keamanan API.
1.4 Manfaat
Dengan adanya PKL ini diharapkan PT. PLN PUSMANPRO UPMK II dapat
mengintegrasikan dan menggunakan API Timesheet dalam aplikasi dan sistem
perusahaan.
3
2.3 Struktur Organisasi
Gambar 2.1 merupakan bagan struktur organisasi PT. PLN Pusmanpro UPMK II.
Pada PKL kali ini, penulis berkesempatan bekerja di bagian unit pelaksana yang
bertugas sebagai unit quality control/quality assurance untuk pengembangan proyek
pada PLN Pusmanpro.
4
BAB 3 TINJAUAN PUSTAKA
3.2.3 Typescript
Pada dasarnya Nestjs menggunakan Bahasa pemrograman Javascript. Javascript
adalah Bahasa pemrograman scripting yang mempunyai karakteristik loosely typed,
yang berarti variable tidak perlu di deklarasikan untuk tipe data tertentu. Hal ini
mempunyai beberapa keunggulan terutama dalam segi penulisan kode yang lebih cepat.
Namun, karakteristik loosely typed tersebut dapat menimbulkan beberapa masalah
dalam pengembangan seperti mudahnya developer untuk menempatkan nilai pada
variable yang bukan tempatnya yang akan menimbulkan berbagai macam kesalahan
program (typescriptlang.org/docs/handbook, n.d.). Untungnya, framework Nestjs
mendukung pengembangan menggunakan Typescript, sebuah Bahasa pemrograman
5
yang memberikan ekstensibilitas ke bahasa pemrograman Javascript berupa type safety
yang akan meminimalisir terjadinya kesalahan yang diakibatkan oleh sifat loosely typed
dari javascript.
3.2.5 Docker
Pada PKL kali ini, sistem monitoring log Grafana dan Loki dijalankan melalui
Docker. Dilansir dari halaman web resmi dokumentasi Docker (docs.docker.com, n.d.),
Docker adalah platform yang digunakan untuk mengembangkan, menyebarkan (deploy),
dan menjalankan aplikasi melalui containers. Containers tersebut memungkinkan proses
enkapsulasi aplikasi Grafana dan Loki beserta dependency aplikasi tersebut sehingga
menjamin konsistensi di berbagai lingkungan perangkat lunak seperti windows, mac,
ubuntu, dll. Docker juga memudahkan penulis untuk melakukan instalasi Grafana dan
Loki melalui file YAML dengan tools Docker Compose.
6
BAB 4 METODE PELAKSANAAN
7
PostgreSQL 15.4 Basis data yang digunakan Timesheet API
untuk menyimpan data timesheet dan data
lainnya yang berkaitan dengan timesheet
Visual Studio Code 1.84.2 Code editor yang digunakan untuk menuliskan
kode program
Docker Windows 24.0.5 Sebuah container yang digunakan untuk
menjalankan Log monitoring system Grafana
dan Loki
8
BAB 5 PERANCANGAN DAN IMPLEMENTASI
10
Timesheet detail memiliki relasi
one-to-many dengan timesheet
dengan data timesheet memiliki
satu atau banyak timesheet-detail
Endpoint ini akan memberikan satu
data timesheet detail dari user yang
terautentikasi yang memiliki
timesheet dengan id yang sama
dengan id yang diberikan oleh
pengguna API
/timesheet- POST Timesheet_id, Endpoint ini memberikan fungsi
detail/create timesheet_per untuk membuat data timesheet
iod,data detail baru untuk timesheet
timesheet tertentu dari user yang
detail lainnya terautentikasi.
/timesheet- POST Id, data Endpoint ini memberikan fungsi
detail/update timesheet untuk memperbarui data timesheet
detail yang detail dari user yang terautentikasi
ingin
diperbarui
/timesheet- POST id Endpoint ini memberikan fungsi
detail/delete untuk menghapus data timesheet
detail dari user yang terautentikasi
/holiday/find GET Periode Timesheet akan menghitung data
timesheet jam masuk dan jam keluar dari
setiap pegawai pada setiap harinya
dalam menentukan produktivitas
pegawai tersebut. API yang dibuat
akan menyesuaikan proses
perhitungan tersebut dengan data
hari libur yang diinputkan oleh
admin. Endpoint /holiday/find akan
memberikan seluruh data hari libur
pada periode timesheet yang
diberikan oleh pengguna API
Holiday /holiday/create- POST Periode Endpoint /holiday/create-from-csv
from-csv timesheet, File memberikan fungsi memasukkan
csv dengan data hari libur pada periode
data hari libur timesheet tertentu ke dalam
pada satu Timesheet API menggunakan file
periode csv.
timesheet
11
5.2 Class Diagram
Timesheet API akan dibangun menggunakan framework Nest.js dengan pola
pemrograman berorientasi objek. Pada pemrograman berorientasi objek aplikasi
diprogram menggunakan beberapa kelas yang saling berkaitan. Kelas tersebut
kemudian dimodelkan kedalam diagram kelas untuk memudahkan perancangan dan
implementasi dan dapat dilihat pada Gambar 5.2.
12
Gambar 5.2 Class Diagram Timesheet API
13
Gambar 5.2 menjelaskan kumpulan kelas pada Timesheet API beserta atribut dan
fungsinya. Timesheet API juga akan menggunakan beberapa kode program dari pihak
ketiga yang direpresentasikan menggunakan kelas DatabaseModule, dan Logger yang
terletak pada bagian atas diagram kelas. DatabaseModule akan menggunakan library
pihak ketiga TypeORM yang digunakan untuk berinteraksi dengan basis data tanpa harus
menggunakan bahasa asal (native query) dari basis data tersebut dengan bantuan
method. Sedangkan kelas logger adalah kelas yang digunakan untuk mengimplementasi
proses monitoring log yang akan menyimpan aktifitas log kedalam file .log dalam folder
logs.
14
Gambar 5.3 ERD Timesheet API
Gambar 5.3 menunjukkan Entity Relationship Diagram (ERD) dari database
Timesheet API yang akan dibuat. Entity pada diagram tersebut merepresentasikan tabel
beserta kolom dari database PostgreSQL yang digunakan. Penjelasan dari setiap entitas
yang terdapat pada ERD tersebut dapat dilihat pada Tabel 5.2.
Tabel 5.2 Penjelasan Entitas
Entitas Deskripsi
User Tabel yang menyimpan data user seperti
nama, email dan password.
Role Tabel yang menyimpan data terkait peran
user di dalam sistem (Timesheet API). Tabel
role ini memiliki relasi one to many dengan
tabel user dengan tabel role yang memiliki
satu atau banyak user di database. Tabel role
ini yang akan menyimpan data peran Site
15
Inspector dan Checker II yang akan
digunakan oleh Timesheet API dalam proses
pengelolaan data timesheet. Entitas Role ini
juga berelasi dengan Role lainnya yang
menghasilkan relasi hirarki antar data pada
tabel Role.
Timesheet Tabel yang akan menyimpan data Timesheet
pada database. Tabel timesheet akan
memiliki data status, periode timesheet,
serta beberapa foreign key berupa id yang
mereferensi tabel yang berbeda seperti
site_inspector_id, checker_ii_id dan user_id.
user_id akan digunakan pada proses
pengelolaan timesheet untuk
menghubungkan kepemilikan timesheet
yang dibuat dengan user di database. Tabel
timesheet akan memiliki satu atau lebih
tabel tabel timesheet detail yang akan
menyimpan rincian data dari timesheet pada
periode tersebut
Timesheet Detail Merupakan tabel yang menyimpan rincian
data yang dimiliki oleh tabel timesheet.
Tabel ini akan digunakan Timesheet API
untuk menyimpan informasi terkait detil jam
kerja dari pegawai melalui beberapa kolom
seperti kolom tanggal, clock_in (jam masuk
kerja), clock_out (jam selesai kerja) dan
kolom value. Kolom value adalah kolom yang
menyimpan perbandingan jam kerja
pegawai dengan jam kerja seharusnya.
Setiap data timesheet detail akan
menyimpan referensi dari tabel timesheet
terkait melalui kolom timesheet_id. Tabel
Timesheet Detail juga memiliki relasi many
to one ke tabel Project dan Scope of Work,
dengan tabel project dan scope of work
memiliki satu atau lebih tabel timesheet
detail.
Scope Of Work Merupakan tabel yang menyimpan
informasi lingkup kerja dari timesheet
pegawai
Project Merupakan tabel yang menyimpan data
proyek yang dikerjakan oleh pegawai.
16
Holiday Merupakan tabel yang menyimpan data hari
libur. Tabel ini digunakan oleh TimesheetAPI
untuk mengecualikan proses perhitungan
absensi melalui kolom value pada tabel
timesheet detail pada saat hari libur.
Gambar 5.4 adalah gambaran umum relasi antara Timesheet API dengan sistem
monitoring log yang dibuat. API akan dibuat menggunakan framework Nest.js dengan
sistem monitoring log yang memanfaatkan dasbor Grafana dan sistem agregrasi log yang
Bernama Loki. Loki berkerja dengan cara memantau aktifitas log pada server dan
mengirim log tersebut ke Grafana yang kemudian dapat diakses oleh Admin untuk
memantau aktifitas log dari server tersebut.
17
5.5 Implementasi
• UserRepository
2 TimesheetModule • Timesheet /timesheet Modul yang menangani HTTP request
Controller untuk pengelolaan data timesheet
pada database. modul ini juga
18
• TimesheetService menyediakan end-point untuk
mengubah timesheet menjadi file
• UserService excel yang dapat didownload melalui
• TimesheetToExcel bantuan kelas servis
Service TimesheetToExcel.
• Timesheet
Repository
3 TimesheetDetail • TimesheetDetail /timesheet- Modul yang menangani HTTP request
Module Controller detail untuk pengelolaan data rincian
timesheet untuk timesheet tertentu
• TimesheetDetail
Service
• TimesheetDetail
Repository
• TimesheetService
• UserService
• ProjectService
• ScopeOfWork
Service
4 HolidayModule • HolidayController /holiday Modul yang menangani HTTP request
untuk keperluan pengelolaan data
• HolidayService hari libur
• HolidayRepository
Ke-4 Modul tersebut kemudian digunakan oleh modul utama Nest.js dalam untuk
memberikan fungsionalitas kepada aplikasi Timesheet API. Pada laporan PKL ini, penulis
akan menjelaskan contoh implementasi kode dari salah satu modul, yaitu
TimesheetModule.
Tabel 5.4 Implementasi Modul Timesheet
Nama Class TimesheetModule
import { Module } from '@nestjs/common';
import { TimesheetService } from './timesheet.service';
import { TimesheetController } from './timesheet.controller';
import { timesheetProviders } from 'src/entities/providers/timesheet.providers';
import { DatabaseModule } from 'src/database/database.module';
import { UsersModule } from '../users/users.module';
import { JwtModule } from '@nestjs/jwt';
import { AuthModule } from '../auth/auth.module';
import { TimesheetToExcelModule } from '../timesheet-to-excel/timesheet-to-excel.module';
@Module({
imports: [DatabaseModule, UsersModule, JwtModule, AuthModule, TimesheetToExcelModule],
controllers: [TimesheetController],
providers: [TimesheetService, ...timesheetProviders],
exports: [TimesheetService, ...timesheetProviders]
})
19
export class TimesheetModule { }
20
import { CreateTimesheetExcelDto } from '../timesheet-to-excel/dto/create-timesheet-
excel.dto';
import { RoleNames } from 'src/enums';
@ApiTags('Timesheet')
@Controller('timesheet')
export class TimesheetController {
constructor(
private readonly timesheetService: TimesheetService,
private readonly toExcelService: TimesheetToExcelService,
private authService: AuthService,
private userService: UsersService
) { }
@ApiBearerAuth()
@Post()
@HttpCode(HttpStatus.OK)
async create(@Body() createTimesheetDto: CreateTimesheetDto, @Request() request) {
const {
site_inspector_id, checker_2_id
} = createTimesheetDto
@ApiBearerAuth()
@Get()
@HttpCode(HttpStatus.OK)
findAll() {
return this.timesheetService.findAll();
}
@ApiBearerAuth()
@Get(':id')
@HttpCode(HttpStatus.OK)
findOne(@Param('id') id: string) {
21
return this.timesheetService.findOne(+id);
}
@ApiBearerAuth()
@Post('/update/:id')
@HttpCode(HttpStatus.OK)
async update(@Param('id') id: string, @Body() updateTimesheetDto: UpdateTimesheetDto) {
const rolesToCheck = [
{
id: updateTimesheetDto.site_inspector_id,
roleToCheck: RoleNames.site_inspector
},
{
id: updateTimesheetDto.checker_2_id,
roleToCheck: RoleNames.checker2
}
]
@ApiBearerAuth()
@Post('/delete/:id')
@HttpCode(HttpStatus.OK)
remove(@Param('id') id: string) {
return this.timesheetService.delete({ id: +id });
}
@ApiBearerAuth()
@Post('/convert-to-excel')
@HttpCode(HttpStatus.OK)
async toExcel(@Body() excelDto: CreateExcelDto, @Request() request, @Response() res) {
const userId = await this.authService.getUserIdFromJwt(request);
const user = await this.userService.findOneById(userId);
const userTimesheet = await this.timesheetService.findOneBy({
period: excelDto.period,
user: { id: user.id }
})
if (!userTimesheet) {
throw new Error(`User [${user.name}]'s Timesheet with period [${excelDto.period}] not
found`)
22
}
23
export interface TimesheetUserDto {
timesheet_user: User
site_inspector: User,
checker_2: User
}
@Injectable()
export class TimesheetService {
constructor(
@Inject('TIMESHEET_REPOSITORY')
private timesheetRepository: Repository<Timesheet>,
) { }
findAll(): Promise<Timesheet[]> {
return this.timesheetRepository.find();
}
24
async findOne(id: number): Promise<Timesheet> {
const timesheet = await this.timesheetRepository
.createQueryBuilder('timesheet')
.leftJoinAndSelect('timesheet.timesheet_details', 'timesheet_details')
.where('timesheet.id = :id', { id })
.getOne();
return timesheet;
}
softDelete(id: number) {
return this.timesheetRepository.softDelete(id);
}
delete(findOptionsWhere: FindOptionsWhere<Timesheet>) {
return this.timesheetRepository.delete(findOptionsWhere);
}
}
25
5.5.3 Sistem Monitoring Log
networks:
loki:
services:
loki:
image: grafana/loki:2.8.3
ports:
- "3100:3100"
26
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
promtail:
image: grafana/promtail:2.8.3
volumes:
- ../logs:/var/log
command: -config.file=/etc/promtail/config.yml
networks:
- loki
grafana:
environment:
- GF_PATHS_PROVISIONING=/etc/grafana/provisioning
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
entrypoint:
- sh
- -euc
- |
mkdir -p /etc/grafana/provisioning/datasources
cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
apiVersion: 1
datasources:
- name: Loki
type: loki
access: proxy
orgId: 1
url: http://loki:3100
basicAuth: false
isDefault: true
version: 1
editable: false
EOF
/run.sh
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki
28
BAB 6 PENGUJIAN
Pada PKL kali ini pengujian dilaksanakan dengan teknik Blackbox testing yang
menguji fungsionalitas Timesheet API yang telah dibuat. Setiap end-poin Timesheet API
diuji menggunakan beberapa test scenario yang dijalankan menggunakan aplikasi
Postman. Response dari aplikasi Postman dibandingkan dengan expected result untuk
menentukan kesesuaian fungsionalitas. Hasil yang sesuai dengan expected result akan
ditandai dengan label "PASS” sedangkan hasil yang tidak sesuai akan ditandai dengan
label “NOT PASS”.
Sebelum pengujian dilaksanakan, aplikasi Timesheet API yang telah selesai
diimplementasi dijalankan beserta seluruh aplikasi pendukungnya pada komputer
penulis menggunakan alat kerja yang dibahas pada Bab 4.2. Selanjutnya, untuk
memudahkan proses pengujian penulis juga melakukan proses seeding data pada basis
data PostgreSQL. Data ini meliputi data user admin, data dummy timesheet, timesheet
detail, project dan data dummy lainnya yang hanya akan digunakan pada tahap
pengujian.
2 [POST]/auth/login Email tidak 1. Buat HTTP request API mengirim Sesuai PASS
sesuai & dengan metode pesan dengan
Password tidak POST ke rute Unauthorized expected
sesuai /auth/login dengan request error result
menyertakan
29
request body email
dan password
3 [POST]/auth/login Email sesuai & 1. Buat HTTP request API mengirim Sesuai PASS
password tidak dengan metode pesan dengan
sesuai POST ke rute Unauthorized expected
/auth/login dengan request error result
menyertakan
request body email
dan password
4 [POST]/auth/login Email tidak 1. Buat HTTP request API mengirim too Sesuai PASS
sesuai & dengan metode many failed dengan
password tidak POST ke rute attempts error expected
sesuai /auth/login dengan message result
menyertakan
request body email
dan password
2. Tunggu response
dari server
3. Tahap nomor satu
dan dua sebanyak 4
kali
5 [POST]/auth/login Email sesuai & 1. Buat HTTP request API mengirim json Sesuai PASS
password ke rute /auth/login dengan access dengan
sesuai dengan metode token expected
POST dengan result
menyertakan
request body email
dan password
30
dengan menyertakan bearer token yang didapat setelah melakukan login sebagai admin
pada rute /auth/login.
Tabel 6.2 Pengujian Rute Timesheet, Timesheet Detail dan Holiday
No Rute Parameter/ Test Scenario Expected Actual Status
Request Body Result Result
1 [GET]/timesheet - 1. Buat HTTP request API mengirim json Sesuai PASS
ke rute /timesheet yang berisikan dengan
dengan metode data array expected
GET tmesheet result
2 [GET]/timeshset/[ id: number 1. Buat HTTP request API mengirim json Sesuai PASS
param] ke rute yang berisikan dengan
/timesheet/1 satu data expected
dengan metode timesheet result
GET
4 [POST]/timesheet Id: number 1. Buat HTTP request API mengirimkan Sesuai PASS
/update/{id} ke rute data timesheet expected
Status: string /timesheet/update/ dengan data result
dengan parameter status yang telah
rute id timesheet berubah sesuai
dan request body dengan status
status yang diinputkan
pada request body
2. Tunggu response
dari server
3. Buat HTTP request
GET ke rute
/timesheet/ dengan
parameter rute id
yang sama
31
parameter id yang
sama
6 [POST]/timesheet- Period: ‘yyyy- 1. Buat HTTP request API akan Sesuai PASS
detail mm’ POST ke rute mengirimkan json dengan
/timesheet-detail dengan data expected
Site_inspector_i dengan request timesheet baru
d: number body yang tertera dengan data
Checker_2_id: pada kolom timesheet_detail
number parameter yang sesuai
dengan yang
Scope_of_work dikirim pada POST
_id: number request melalui
request body
Project_id:
number
Weather: string
Manpower_qty:
number
Date: ‘yyyy-
mm-dd’
Clock_in:
‘hh:mm:ss’
Clock_out:
‘hh:mm:ss’
8 [POST]/timesheet- Scope_of_work 1. Buat HTTP POST API akan json yang Sesuai PASS
detail/update/{id} _id: number request ke rute berisi data dengan
/timesheet- timesheet detail expected
Project_id: detail/update/{id} dengan data yang result
number dengan rute sudah berubah
Weather: string parameter id yang sesuai dengan
sama dengan id request body
Manpower_qty: pada tes 7 dan
number request body yang
tertera pada kolom
Date: ‘yyyy-
parameter
mm-dd’
2. Tunggu response
Clock_in:
dari server
‘hh:mm:ss’
3. Buat HTTP GET
Clock_out:
request ke rute
‘hh:mm:ss’
/timesheet-
Description: detail/{id}
string
9 [POST]/timesheet- Id: number 1. Buat HTTP POST API akan Sesuai PASS
detail/delete/{id} request ke rute mengirimkan json dengan
/timesheet- dengan data expected
detail/delete timesheet_detail result
dengan rute yang bernilai null
parameter id
32
2. Tunggu response
dari server
3. buat HTTP GET
request ke rute
/timesheet-
detail/{id}
10 [POST]/holiday/cr Daftar hari libur 1. Buat HTTP POST API akan Sesuai PASS
eate-from-csv dalam file CSV request ke rute mengirimkan json dengan
dengan header /holiday/create- dengan pesan expected
date, day, from-csv dengan operation result
month, year, menyertakan file successful
holiday, csv pada request
datetime_ms body
12 [POST]/holiday/up Date: ‘yyyy- 1. Buat HTTP POST API akan Sesuai PASS
date/{id} mm-dd’ request ke rute mengirimkan json dengan
/holiday/update dengan pesan expected
Day:’string’ dengan rute operation result
Month:’string’ parameter id dan successful
menyertakan
Year: number request body
Holiday: string
Datetime_ms:
string
14 [POST]/timesheet Period: ‘2023- 1. Buat HTTP request File excel yang Sesuai PASS
/convert-to-excel 12’ ke rute didownload dari dengan
/timesheet/convert response API expected
-to-excel dengan sesuai dengan result
menyertakan requirements file
request body Timesheet
berupa period
2. Tunggu response
server
3. Download response
server sebagai file
excel
33
BAB 7 KESIMPULAN DAN SARAN
7.1 Kesimpulan
Pada penelitian ini, Timesheet API berhasil dibuat menggunakan framework
Nest.js dengan basis data PostgreSQL. Timesheet API memilki 15 end-poin/rute yang
dapat digunakan user untuk mengelola data timesheet. Pada penelitian ini, sistem
monitoring log dari Timesheet API juga dibuat dengan bantuan Grafana dan Loki. Sistem
monitoring log merekam setiap aktifitas log sistem dan user di Timesheet API dan
menyediakan visualisasi data log tersebut melalui tabel pada dasbor yang dapat diakses
oleh Admin.
Hasil pengujian rute dan fungsionalitas Timesheet API yang dilakukan pada Bab 6
menunjukkan bahwa Timesheet API yang dibuat berjalan dengan baik tanpa
menunjukkan bug atau error. Pengujian tersebut juga menunjukkan bahwa aplikasi
Timesheet API berjalan sesuai fungsinya. Timesheet API tersebut kemudian dapat
digunakan di berbagai aplikasi atau service lainnya didalam maupun diluar lingkungan
PT Pusmanpro UPMK II untuk dipergunakan sebagaimana mestinya.
7.2 Saran
Adapun saran untuk penelitian selanjutnya dari pengembangan API ini dapat
dilakukan pengujian integrasi terhadap aplikasi atau service yang akan menggunakan
Timesheet API serta pengujian penetrasi dan pengujian unit secara detil agar dapat lebih
menjamin keamanan dari API tersebut.
34
DAFTAR REFERENSI
35
LAMPIRAN
36
Lampiran B Logbook aktivitas harian PKL 2
37
Lampiran C Dokumen kontrak PKL
38
Lampiran D Dokumen pernyataan selesai PKL
39