Skip to content

In Another World, working and simping Using Spring Boot

"Minggu depan anda anda akan bekerja langsung dengan Izumi Sakura untuk sebuah aplikasi perayaan 1 tahun debutnya. Apa anda bersedia?"

Pak Potter berada di depan anda yang sedang beristirahat di pojok ruangan, tersenyum. Tidak biasanya dia memperlihatkan batang hidungnya pada jam istirahat seperti ini. Untuk beberapa saat anda tidak menyadari apa tawaran yang diberikan oleh atasan anda itu. Anda masih dalam lamunan siang saat ini, mencoba benar-benar mengistirahatkan pikiran anda. Namun, saat menydari apa yang ditawarkan oleh Pak Potter, anda tidak dapat menyembunyikan ekspresi wajah anda. Pertanyaan untuk basa basi yang tidak perlu. Bagaimana pun atasan anda sudah mengetahui jawaban anda sebelum menanyakan hal tersebut.

"Tentu saja!" jawab anda singkat. Tawaran yang mudah untuk anda terima tentu saja. Bagaimana pun Izumi Sakura adalah alasan utama anda bekerja pada perusahaan ini.

6 bulan yang lalu anda meninggalkan pekerjaan anda di sebuah perusahaan finance ternama untuk bekerja pada sebuah agensi VTuber. Tentu saja orang-orang melihat keputusan ini sangat konyol. Gaji besar, manfaat banyak, dan terdengar prestisius jika anda boleh berbangga setiap ada yang bertanya dimana anda bekerja. Perusahaan ini begitu besar sampai orang-orang menjulukinya Top Global. Namun, dengan semua hal tersebut anda tetap memilih untuk bekerja di sebuah agensi VTuber. Perusahaannya memang sedang naik daun dengan banyaknya orang yang ingin masuk setiap kali mereka membuka lowongan untuk gen baru. Hanya saja bagaimana pun menjelaskan bahwa anda bekerja pada perusahaan finance tentu lebih mudah daripada di sebuah agensi VTuber. Terlebih, masih banyak orang yang merendahkan kehadiran VTuber itu sendiri.

Sebuah entitas yang ada, tapi tidak ada. Mereka nyata, tapi secara bersamaan tidak nyata. Seolah kehadiran mereka layaknya hantu yang gentayangan. Di balik avatar yang lucu dan keren itu, wajah apa yang mereka simpan? Bagaimana perasaan mereka untuk terus menerus menjadi seseorang yang bukan dirinya? Dan juga, apa mereka tidak sakit? Apa mereka tidak pedih? Apakah mereka tidak takut suara mereka tidak terdengar? Sementara orang-orang terus merendahkan profesi mereka. Itu hanya sebuah fakta menyedihkan yang anda sendiri tidak bisa menerimanya. Karena untuk diri anda sendiri...anda hanya bisa melihat mereka sebagai orang yang sangat anda hormati dengan semua tekanan yang mereka hadapi. Namun, hingga saat itu anda hanya terus melihat mereka sebagai seseorang yang anda hormati dan pandang dari jauh. Setidaknya hingga saat itu.

Sebuah agensi VTuber yang anda ikuti membuka lowongan untuk software engineer. Bagi anda ini adalah kesempatan. Mungkin ini adalah waktu bagi anda untuk bisa mendukung mereka, walau dibalik layar. Bahkan lebih baik, anda juga dibayar. Mendapatkan uang sekaligus mendukung mereka? Ini bukanlah keputusan sulit. Dengan begitu, anda tanpa ragu meninggalkan kehidupan anda saat ini.

【1 YEAR ANNIVERSARY】Giveaway

Promo Code Machine (Problem 1)

Tawaran yang diberikan Pak Potter dengan mudah anda terima. Ini adalah keputusan mudah, begitu yang anda terus bayangkan sejak minggu lalu. Jika pekerjaan biasa anda bisa selesaikan dengan baik, apalagi pekerjaan yang diberikan langsung oleh VTuber kesayangan anda. Itu yang anda rasakan hingga anda menyadari akan bertemu dengan Izumi Sakura secara langsung.

Tentu saja anda sudah mengetahui 'wajah asli' dari Izumi Sakura. Anda sudah bekerja selama 6 bulan di perusahaan ini dan terus mendukungnya dari balik layar. Anda juga sudah biasa mendengarkan suaranya dari stream atau pun saat menguping rapat para talent sebelum Pak Potter menyeret anda menjauh dari ruang rapat. Namun, membayangkan dia akan langsung bicara dengan anda adalah masalah yang sama sekali berbeda.

Dari tadi anda terus duduk tidak tenang di ruangan rapat ini. Kaki dihentakkan, tangan yang terus menerus gemetaran, dan mata yang terus bolak-balik melihat ke arah pintu. Jantung anda juga tidak mau bekerja sama dan semakin memperburuk keadaan yang menurut anda sudah cukup buruk. Bagaimana kalau dia membenciku? Bagaimana kalau aku salah bicara? Pertanyaan-pertanyaan konyol mulai silih berganti menggentayangi pikiran anda. Lalu semuanya berubah dari buruk menjadi sangat buruk ketika anda mendengar suara pintu dibuka.

"Selamat siang.." Anda mendengar suara yang sangat familiar buat anda. Suara yang terus anda dengar dari FuTube tentu saja anda tahu. Dari dulu anda berpikir anda akan senang jika bisa mendengarkannya langsung, bukan melalui pengeras suara gawai anda. Tapi, sepertinya saat ini bukan itu yang anda rasakan. "Tidak", tolak anda dalam hati, "itu juga tidak tepat." Anda merasa terlalu senang hingga reaksi anda seperti ini. Itu adalah jawaban paling logis yang anda dapatkan. Ketika anda puas dengan penjelasan tersebut, anda berhasil mengendalikan tubuh anda kembali.

"Selamat siang" jawab anda. Anda sudah biasa menghadapi klien dengan posisi tinggi. Bertahun-tahun sebagai seorang professional anda telah bertemu dengan berbagai macam klien dengan berbagai posisi. Tekanan seperti ini sudah biasa anda hadapi.

"Mungkin Pak Potter sudah memberitahumu, aku Izumi Sakura. Setidaknya orang dibaliknya..Salam kenal." Ia tersenyum. Meskipun ia bukan Izumi Sakura yang biasa anda lihat menggunakan model VTuber nya, ia tetaplah Izuma Sakura. Kepercayaan diri yang sudah susah payah anda bentuk 10 menit terakhir hilang begitu saja saat menyadari lawan bicara anda bukan klien seperti yang biasa anda hadapi.

Tidak, aku naif. Aku belum pernah menghadapi tekanan seperti ini.... Klien anda memang bukan petinggi perusahaan besar yang sudah menjadi makanan sehari-hari anda pada perusahaan lama anda. Bukan juga pejabat tinggi kerajaan yang anda hadapi untuk menyelesaikan proyek pemerintahaan. Yang ada dihadapan adalah Izumi Sakura sendiri, orang yang selama ini anda dukung karena usaha dan kerja kerasnya walau respon kebanyakan orang belum sepenuhnya positif. Menyadari hal tersebut, rasa panik anda kembali.

Izumi Sakura masih tersenyum di hadapan anda dengan ceria. Di sampingnya manajernya dan Pak Potter juga ikut memasuki ruangan sambil berbincang kecil. Gelak tawa juga beberapa terdengar dari obrolan santai mereka. Ini bukan sesuatu yang biasa anda hadapi di perusahaan lama anda. Tidak ada gelak tawa atau bahkan sekedar obrolan kecil. Kalau ada pun hanya sebuah basa basi. Suasana sebelum rapat dengan klien yang santai seperti ini adalah barang baru buat anda.

"Apakah kamu baik-baik saja?" Entah karena anda lama tidak menjawab sapaannya atau ia menyadari wajah tegang anda, Izumi Sakura melempar pertanyaan kepada anda. Anda menyadari betapa dekatnya anda dengan seorang Izumi Sakura saat ini. Anda yakin jika ada fans yang tahu apa yang terjadi hari ini, nyawa anda tidak akan bertahan lama di luar sana. Menyadari ia telah memanggil anda dua kali, anda lalu memperkenalkan diri.

"Tolong panggil aku Sakura saja." Sakura tertawa kecil mendengar formalitas anda. Pembawaannya begitu santai dan bersahabat. Ia bahkan sempat berbincang beberapa hal remeh dengan anda sebelum manajernya menepuk pundaknya dan menariknya ke bagian lain dari meja untuk memulai rapat.

Beberapa menit terakhir cukup menggelitik anda. Pengalaman professional anda menghadapi beberapa pejabat tinggi kerajaan dan orang-orang penting dari perusahaan lain seolah menguap begitu saja. Entah karena anda tidak memiliki perasaan apa-apa dengan orang-orang tersebut selain klien atau entah karena keadaan santai yang dibawa oleh perusahaan anda saat ini adalah hal baru.

"Seperti yang sudah diberitahukan sebelumnya, kami menginginkan sebuah situs web untuk perayaan 1 tahun debut Izumi Sakura." Manajer Izumi sakura memulai pembicaraan. Ia membuka sebuah desain antarmuka yang telah dibuat sebelumnya. " Pada dasarnya web ini akan digunakan untuk melakukan giveaway sebagai perayaan 1st anniversarry dari Izumi Sakura"

Sakura setelah diberi gestur oleh manajernya, lalu berdiri di samping manajernya. "Kami mengharapkan web ini dapat generasi kode promo dan giveaway secara otomatis untuk beberapa merch yang akan ditawarkan. Selain itu, juga dapat digunakan untuk premium membership di FuTube" terang Sakura memulai penjelasan.

"Sebelumnya kita sudah membuat sebuah marketplace dimana viewer dapat membeli merch dari talent agensi kita seperti baju, mousepad, dll. Viewer dapat menggunakan kode promo untuk diklaim pada marketplace tersebut" Pak Potter sepertinya melihat wajah anda yang terlihat mulai bingung dan mengingatkan anda terhadap aplikasi yang sudah dikembangkan lama.

Penjelasan itu cukup untuk membukakan ide buat anda."Jadi pada dasarnya web ini untuk mengautomasi pembuatan kode promo yang telah dibuat secara manual selama ini?"

Sakura menganggukkan kepala. "Kode promo ini dapat diaplikasikan pada merch dan membership. Nantinya aku juga berencana untuk menambahkan kode promo dan giveaway untuk voice pack. "

Anda lalu berbisik. "Berarti kode promonya ini dapat dibuat secara automatis ataupun custom ya." tanya anda pada Pak Potter di samping anda.

"Sepertinya begitu." jawabnya singkat.

Sembari mendengar penjelasan tersebut, anda mulai membayangkan desain dari aplikasi tersebut. Kode tersebut memiliki beberapa jenis. Setiap jenis sepertinya memiliki kemiripan karakteristik berupa kemampuan untuk digunakan pada promo merch dan giveaway. Selain itu, ada kebutuhan untuk dapat menambahkan tipe kode baru nantinya. Berati sebaiknya desainnya adalah ketika ada jenis redeem code baru, tidak ada perubahan pada yang sudah ada. Sepertinya begitu.

"Apakah ada kebutuhan lain?" Anda sudah mendapatkan sebuah desain, tapi anda ingin memastikan hal lain.

"Tidak ada. Aku rasa cukup" Sakura menjawab dengan ceria. Entah kenapa anda merasa sepertinya ia sadar anda telah menemukan solusi dari aplikasi yang ia inginkan. Seolah ia dapat membaca anda layaknya buku.

"Kalau begitu kami izin dulu. Maaf mengganggu waktu kerjanya. " Sakura lalu keluar ruangan. Ia sempat melambaikan tangan sambil tersenyum ke arah anda. Anda merasakan kehangatan melihat sikapnya. Ramah dan bersahabat. Bagian dari karakternya itu tidaklah palsu. Mengetahui hal tersebut anda merasa lega dan tanpa sadar tersenyum. Anda tidak ingin mengkhianati kerja keras yang sudah dilakukan Izumi Sakura selama ini.

Pak Potter tiba-tiba menepuk pundak anda, mengembalikan anda ke kenyataan. "Sampai kapan kau akan tersenyum-senyum di sana? Ayo kembali bekerja. "

Anda lalu melirik lirih ke Pak Potter. Pak Potter awalnya hanya hanya hening tak merespon lalu tersenyum usil. "Menyerahlah, dia terlalu di atas kelasmu." goda Pak Potter.

"Sudah kubilang bukan seperti itu"

"Seperti apa? Aku tidak bilang apa-apa menyerah tentang apa?"

Muka anda semakin memerah karena godaan Pak Potter. Dalam perjalanan kembali ke ruangan kerja anda terus berdebat tidak kenal akhir dengan Pak Potter mengenai hal tidak jelas hingga kalian akhirnya lelah dan memutuskan untuk kembali diam.

Multiple Claims (Problem 2)

Anda menatap jauh ke jendela pada senja itu. Hujan deras masih mengguyur jalanan yang menyepi, berlindung dari terkaman air yang tidak kenal kasihan. Dalam diri anda, masih ada sejumlah pertanyaan yang terus menerus dilempar hanya untuk tidak terjawab pada akhirnya. Anda terus menerus mempertanyakan sesuatu yang mungkin anda tidak paham apa maknanya. Kenapa ia ada? Apa mungkin karena ini adalah representasi dari kegusaran yang menggerogoti anda? Begitu jawaban itu muncul, kehadirannya anda tolak begitu saja. Anda tidak puas dengan hal tersebut.

Anda lalu mencoba mengintip sekilas ke arah monitor anda, mungkin berharap ada suatu yang lain yang akan diperlihatkan. Harapan hampa tentu saja. Menatap rintikan air pada luar jendela sembari memikirkan sesuatu layaknya seorang filsuf tidak akan membuat anda menjadi filsuf. Bahkan filsuf tidak akan mampu menyelesaikan masalah pada layar anda. Ini terlalu jauh buat mereka.

Dari siang anda terus menerus mencari tahu apa yang salah dengan program yang anda buat untuk Izumi Sakura. Proses generasi kodenya berjalan sempurna. Anda juga yakin kualitas kode nya tidak kalah baik. Hanya saja sesuatu yang anda pikir menjadi suatu perkara yang perlu anda selesaikan ternyata benar terjadi.

Anda sedang mencoba program tersebut dari sisi pengguna. Dari dua tab dari browser anda, anda berusaha mencoba melakukan sebuah klaim kode yang sama dengan waktu tidak jauh berbeda. Seharusnya program anda sudah menghalangi hal kemungkinan klaim kode yang sama. Namun, apa yang anda lihat saat ini membuktikan sebaliknya. Tidak terbayang oleh anda berapa kerugian perusahaan dan mungkin juga mempermalukan seorang Izumi Sakura sendiri karena masalah ini. Tentu anda tidak mau melihat itu semua. Apakah mungkin masalahnya bukan pada logikanya tapi dari sisi prosesnya sendiri? Masuk akal, pikir anda. Prosesnya ditangani secara paralel. Tentu saja setiap proses berpikir mereka belum mengklaim kode yang dimaksud. Setelah diam beberapa saat anda baru sadar akan kemungkinan ini.

"Sampai kapan kau akan menatap jendela? Pekerjaanmu tidak akan selesai dengan sendirinya." Suara Pak Potter menggema dari pintu masuk ruangan. Ia membawa payung ditangan kirinya dan bahkan sudah mengenakan jas hujan. "Cepat selesaikan dan pulanglah." Suaranya kini sedikit melunak, memelas. Ia terdengar seperti pengawas ujian yang tidak sabar menunggu satu peserta yang tak kunjung mengumpulkan jawaban.

Seolah tidak mengindahkan ajakannya anda lalu mulai mengetikkan sesuatu dari proses berpikir panjang yang telah anda lakukan.

"Aku baru saja kembali dari perjalanan panjang Pak Potter." Pak Potter terdengar bingung. Anda tidak dapat melihat wajahnya, tapi anda sudah membayangkan ekspresi apa yang akan dia pasang. "Jika ada dua dunia paralel, apakah kemungkinan akan ada dua jiwa manusia yang sama?" Setelah melemparkan penyataan aneh, sekarang anda melemparkan pertanyaan yang tidak kalah anehnya. "Jawabannya, tidak. Surga selalu membuat manusia yang berbeda meski pada dua dunia paralel sekali pun."

"Apa yang kau bicarakan? Cepatlah selesaikan dan pulang. Kau tahu ini sudah hampir jam 7 malam. " Langkah kaki Pak Potter terdengar menjauh dari telinga anda. Sepertinya Pak tua itu tidak mau terlibat lebih jauh dengan pembicaraan anda. Pak tua Potter yang malang. Mungkin juga sekedar tidak rela melihat uang lembur diberikan kepada pegawai tidak jelas yang dari siang terus menerus berdebat dengan cerminannya sendiri ditemani derasnya hujan. Tapi, bagaimana pun sekarang anda telah menemukan jawbannya.

Flow pekerjaan

Terdapat dua URL endpoint berbeda yang dapat diakses oleh pengguna. Endpoint pertama merupakan endpoint yang digunakan Izumi Sakura dan pihak agensi untuk melakukan generasi code. Endpoint kedua merupakan endpoint yang dapat diakses viewer untuk melakukan redeem code tersebut.

Ekspektasi produk akhir

  • Tampilan code generator frontend1.png

  • Tampilan generasi code frontend2.png

  • Tampilan generasi custom code frontend3.png

  • Tampilan generasi redeem code frontend4.png

  • Tampilan generasi redeem code frontend5.png

Penjelasan kode

  • Lombok merupakan sebuah java library yang dapat membantu kita dalam mengurangi infrastructural code seperti getter, setter dan constructor.
  • DTO merupakan singkatan dari Data Transfer Object yang merupakan object yang mengangkut data dari suatu proses.
  • Anotasi "Data" merupakan anotasi milik lombok dimana class yang ditandai anotasi tersebut akan secara implisit ditambahkan infrastructural code seperti getter dan setter
  • Anotasi "RequiredArgsConstructor" merupakan anotasi milik lombok untuk melakukan instansiasi atribut dari suatu class yang memiliki modifier final. (Mirip seperti autowired)
  • RedeemCodeUtil digunakan untuk menghasilkan redeem code string sebanyak 18 karakter dari karakter alfanumerik. Anda dapat membuat implementasi generasi redeem code anda sendiri.

Penjelasan lebih lanjut dapat dicek di https://projectlombok.org/features/all

Tasks

  • Membaca dokumen dan memahami deskripsi dan ekspektasi yang diminta soal
  • Melengkapi setiap class yang ditandai TODO dan manambahkan class baru jika diperlukan
  • Mengimplementasikan design pattern yang tepat dan melengkapi service, controller, dan template agar program dapat digunakan melalui interface web
  • Melengapi implementasi fitur Code Generation, sehingga giveaway dapat dilakukan
  • Melengapi implementasi fitur Redeem yang dapat menangani kasus permasalahan yang ada pada problem kedua
  • Membuat test case untuk setiap method yang dilengkapi / dibuat

Hint

  • Untuk mendapatkan nilai penuh, buatlah code yang maintainable. Yakni, perubahan kode minimal jika ada suatu penambahan fitur seperti penambahan tipe kupon tersebut selain membership dan merch.

Bonus: Code Coverage

  • Buat Code Coverage di atas 80% total.
  • Tampilkan Code Coverage pada README.md anda.

Last update: 2022-03-08 21:38:57
Created: 2022-03-08 21:38:57
Back to top