Refactor, Move Model Field.

Imam Maulana Rachbini
Sulang
Published in
2 min readMay 15, 2018

Pada 2 minggu belakangan ini, salah satu pekerjaan yang saya lakukan adalah melakukan refactoring database model. Teknik yang saya gunakan adalah Move Field yang mengacu pada halaman berikut milik Martin Fowler https://refactoring.com/catalog/moveField.html.

Awalnya, model Perusahaan memiliki skema sebagai berikut: User <-> UserPerusahaan <-> Perusahaan (<-> maksudnya one to one field). Namun model UserPerusahaan hanya menyimpan field ‘nama’ saja, sehingga field dari model Perusahaan dipindahkan ke UserPerusahaan. Berikut kode sebelum dilakukan refactoring,

# Class ini pada app_auth
class UserPerusahaan(models.Model):
user = models.OneToOneField(User,
on_delete=models.CASCADE,
related_name="user_perusahaan")
nama = models.CharField(max_length=128)
def __str__(self):
return self.nama

# Class ini pada app lowongan
class Perusahaan(models.Model):
user_perusahaan = models.OneToOneField(
UserPerusahaan,
null=True
)
name = models.CharField(max_length=300, null=True)
company_logo = models.URLField(max_length=200, null=True)
description = models.CharField(max_length=500, null=True)
address = models.CharField(max_length=500, null=True)
contact_person = models.CharField(max_length=200)
lastseen_at = models.DateTimeField(
'Last Seen at', auto_now=True, editable=False
)
created_at = models.DateTimeField(
'Created at', auto_now_add=True, editable=False
)
def __str__(self):
return self.name

Maka agar lebih efisien, fields di model Perusahaan dipindahkan ke models UserPerusahaan. Berikut kodenya,

# Class ini pada app_auth
class UserPerusahaan(models.Model):
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
related_name="user_perusahaan"
)
name = models.CharField(max_length=300)
company_logo = models.URLField(max_length=200)
description = models.CharField(max_length=500)
address = models.CharField(max_length=500)
contact_person = models.CharField(max_length=200)
lastseen_at = models.DateTimeField(
'Last Seen at', auto_now=True, editable=False
)
created_at = models.DateTimeField(
'Created at', auto_now_add=True, editable=False
)
def __str__(self):
return self.name

Langkah selanjutnya setelah memindahkan fields dan menghapus model Perusahaan yang tak terpakai, adalah mengganti import class pada views-views terkait, agar tidak terjadi error dan program dapat berjalan dengan lancar. Tidak lupa juga memindahkan serializer dari app lowongan ke app_auth, dan memastikan return jsonnya sama agar front end tidak perlu ada perubahan. Berikut adalah beberapa commit terkait refactoring ini,

My Another Task: Dashboard Perusahaan

Selain refactoring, saya juga mengerjakan task Dashboard Perusahaan di bagian Backend. Dashboard perusahan nantinya memiliki fitur untuk melihat berapa pelamar yang melamar di perusahaan tersebut, dan berapa lowongan pekerjaan yang dibuka. Saya juga telah mmebuat fungsionalitas melihat siapa saja yang melamar di sebuah lowongan milik perusahaan tersebut, dan juga melihat detail dari lamarannya. Tidak lupa juga saya mengimplementasikan security agar akun perusahaan saja yang dapat mengakses halaman tersebut. Berikut adalah beberapa commit saya terkait dashboard perusahaan,

--

--