diff --git a/src/entities/pengguna.entity.ts b/src/entities/pengguna.entity.ts
index c6011ee1dc0ec6adb74010bc2a21bae668198d23..4018370c6e6f5550a3d8126b08ad179c9a78f0c4 100644
--- a/src/entities/pengguna.entity.ts
+++ b/src/entities/pengguna.entity.ts
@@ -26,7 +26,7 @@ export class Pengguna {
   id: string;
 
   @ApiProperty()
-  @Column()
+  @Column({ type: "text", nullable: true })
   nama: string;
 
   @ApiProperty({ example: "13521999@mahasiswa.itb.ac.id" })
diff --git a/src/registrasi-sidsem/registrasi-sidsem.controller.ts b/src/registrasi-sidsem/registrasi-sidsem.controller.ts
index 15d95f95dc3c098631494a56e1d809598920df52..e66b83522cabfb3d370827bf65798e1ca5fd0fd1 100644
--- a/src/registrasi-sidsem/registrasi-sidsem.controller.ts
+++ b/src/registrasi-sidsem/registrasi-sidsem.controller.ts
@@ -128,8 +128,13 @@ export class RegistrasiSidsemController {
   async updateStatus(
     @Param() param: SidsemMhsIdParamDto,
     @Body() updateDto: UpdateSidsemStatusDto,
+    @Req() req: Request,
   ) {
-    return this.regisSidsemService.updateStatus(param.mhsId, updateDto.status);
+    return this.regisSidsemService.updateStatus(
+      param.mhsId,
+      updateDto.status,
+      req,
+    );
   }
 
   @ApiOperation({
@@ -142,7 +147,8 @@ export class RegistrasiSidsemController {
   async updateDetail(
     @Param() param: SidsemMhsIdParamDto,
     @Body() updateDto: UpdateSidsemDetailDto,
+    @Req() req: Request,
   ) {
-    return this.regisSidsemService.updateDetail(param.mhsId, updateDto);
+    return this.regisSidsemService.updateDetail(param.mhsId, updateDto, req);
   }
 }
diff --git a/src/registrasi-sidsem/registrasi-sidsem.module.ts b/src/registrasi-sidsem/registrasi-sidsem.module.ts
index 2c719e4bb91688835ae74a0deddff814efc15d31..db10743fedc136a73bebabfa779804b49133f606 100644
--- a/src/registrasi-sidsem/registrasi-sidsem.module.ts
+++ b/src/registrasi-sidsem/registrasi-sidsem.module.ts
@@ -17,6 +17,7 @@ import { PengujiSidsem } from "src/entities/pengujiSidsem.entity";
 import { KonfigurasiModule } from "src/konfigurasi/konfigurasi.module";
 import { KonfigurasiService } from "src/konfigurasi/konfigurasi.service";
 import { Konfigurasi } from "src/entities/konfigurasi.entity";
+import { HttpModule } from "@nestjs/axios";
 
 @Module({
   imports: [
@@ -34,6 +35,7 @@ import { Konfigurasi } from "src/entities/konfigurasi.entity";
     RegistrasiTesisModule,
     PenggunaModule,
     KonfigurasiModule,
+    HttpModule,
   ],
   controllers: [RegistrasiSidsemController],
   providers: [
diff --git a/src/registrasi-sidsem/registrasi-sidsem.service.ts b/src/registrasi-sidsem/registrasi-sidsem.service.ts
index e900ba12a5115d0f3620dc763699b32309a69479..1f1b73a3907008766d8dfb9f34917b29283242e0 100644
--- a/src/registrasi-sidsem/registrasi-sidsem.service.ts
+++ b/src/registrasi-sidsem/registrasi-sidsem.service.ts
@@ -30,6 +30,9 @@ import { Pengguna, RoleEnum } from "src/entities/pengguna.entity";
 import { KonfigurasiService } from "src/konfigurasi/konfigurasi.service";
 import { KonfigurasiKeyEnum } from "src/entities/konfigurasi.entity";
 import * as dayjs from "dayjs";
+import { HttpService } from "@nestjs/axios";
+import { Request } from "express";
+import { firstValueFrom } from "rxjs";
 
 @Injectable()
 export class RegistrasiSidsemService {
@@ -45,6 +48,7 @@ export class RegistrasiSidsemService {
     private regTesisService: RegistrasiTesisService,
     private dataSource: DataSource,
     private konfService: KonfigurasiService,
+    private httpService: HttpService,
   ) {}
 
   private async getLatestPendaftaranSidsem(mhsId: string) {
@@ -346,6 +350,7 @@ export class RegistrasiSidsemService {
   async updateStatus(
     mhsId: string,
     status: SidsemStatus.REJECTED | SidsemStatus.APPROVED,
+    req: Request,
   ): Promise<PengajuanSidsemIdDto> {
     const latest = await this.getLatestPendaftaranSidsem(mhsId);
 
@@ -355,9 +360,46 @@ export class RegistrasiSidsemService {
       );
     }
 
-    await this.pendaftaranSidsemRepo.update(latest.id, {
-      status,
-    });
+    let token = "";
+    if (req?.cookies?.[process.env.COOKIE_NAME]) {
+      token = req.cookies[process.env.COOKIE_NAME];
+    }
+    if (req.headers?.authorization) {
+      token = req.headers.authorization.slice(7);
+    }
+
+    const { data: notif } = await firstValueFrom(
+      this.httpService.post(
+        `${process.env.AUTH_SERVICE_URL}/notifikasi`,
+        {
+          title: `Pendaftaran ${latest.tipe.split("_").join(" ").toLowerCase()} Anda ${status === SidsemStatus.APPROVED ? "diterima" : "ditolak"}`,
+          description: `Pendaftaran tesis Anda ${status === SidsemStatus.APPROVED ? "diterima" : "ditolak"}. Silahkan periksa kembali data Anda untuk mengetahui lebih lanjut.`,
+          penggunaId: mhsId,
+        },
+        {
+          headers: {
+            Authorization: `Bearer ${token}`,
+          },
+        },
+      ),
+    );
+
+    try {
+      await this.pendaftaranSidsemRepo.update(latest.id, {
+        status,
+      });
+    } catch {
+      await firstValueFrom(
+        this.httpService.delete(
+          `${process.env.AUTH_SERVICE_URL}/notifikasi/${notif.id}`,
+          {
+            headers: {
+              Authorization: `Bearer ${token}`,
+            },
+          },
+        ),
+      );
+    }
 
     return { id: latest.id } as PengajuanSidsemIdDto;
   }
@@ -365,6 +407,7 @@ export class RegistrasiSidsemService {
   async updateDetail(
     mhsId: string,
     updateDto: UpdateSidsemDetailDto,
+    req: Request,
   ): Promise<PengajuanSidsemIdDto> {
     const latest = await this.getLatestPendaftaranSidsem(mhsId);
 
@@ -416,6 +459,30 @@ export class RegistrasiSidsemService {
       await queryRunner.connect();
       await queryRunner.startTransaction();
 
+      let token = "";
+      if (req?.cookies?.[process.env.COOKIE_NAME]) {
+        token = req.cookies[process.env.COOKIE_NAME];
+      }
+      if (req.headers?.authorization) {
+        token = req.headers.authorization.slice(7);
+      }
+
+      const { data: notif } = await firstValueFrom(
+        this.httpService.post(
+          `${process.env.AUTH_SERVICE_URL}/notifikasi`,
+          {
+            title: `Detail pendaftaran ${latest.tipe.split("_").join(" ").toLowerCase()} Anda diubah`,
+            description: `Detail pendaftaran ${latest.tipe.split("_").join(" ").toLowerCase()} Anda diubah. Silahkan periksa kembali data Anda untuk mengetahui lebih lanjut.`,
+            penggunaId: mhsId,
+          },
+          {
+            headers: {
+              Authorization: `Bearer ${token}`,
+            },
+          },
+        ),
+      );
+
       try {
         await queryRunner.manager.insert(
           PengujiSidsem,
@@ -436,7 +503,16 @@ export class RegistrasiSidsemService {
       } catch (err) {
         await queryRunner.rollbackTransaction();
 
-        console.error(err);
+        await firstValueFrom(
+          this.httpService.delete(
+            `${process.env.AUTH_SERVICE_URL}/notifikasi/${notif.id}`,
+            {
+              headers: {
+                Authorization: `Bearer ${token}`,
+              },
+            },
+          ),
+        );
 
         throw new InternalServerErrorException();
       } finally {
diff --git a/src/registrasi-tesis/registrasi-tesis.controller.ts b/src/registrasi-tesis/registrasi-tesis.controller.ts
index 0ac28aece930cb6f6c9ea7ec037540d9ec3d5f1e..d7585fc17933028c4352b0d2f132a807b883a1a3 100644
--- a/src/registrasi-tesis/registrasi-tesis.controller.ts
+++ b/src/registrasi-tesis/registrasi-tesis.controller.ts
@@ -211,6 +211,7 @@ export class RegistrasiTesisController {
     return await this.registrasiTesisService.updateInterviewDate(
       params.mhsId,
       body,
+      req,
       idPenerima,
     );
   }
@@ -242,6 +243,7 @@ export class RegistrasiTesisController {
     return await this.registrasiTesisService.updateStatus(
       params.mhsId,
       body,
+      req,
       idPenerima,
     );
   }
@@ -257,10 +259,12 @@ export class RegistrasiTesisController {
   async updatePembimbingListByMhsId(
     @Param() params: UpdateByMhsParamsDto,
     @Body() body: UpdatePembimbingBodyDto,
+    @Req() req: Request,
   ) {
     return await this.registrasiTesisService.updatePembimbingList(
       params.mhsId,
       body,
+      req,
     );
   }
 }
diff --git a/src/registrasi-tesis/registrasi-tesis.module.ts b/src/registrasi-tesis/registrasi-tesis.module.ts
index c3bbd21aa0fd1935e94879632141698224e27ac3..7c4c8a408b9f2d910ecb11cd35ec1182885bb787 100644
--- a/src/registrasi-tesis/registrasi-tesis.module.ts
+++ b/src/registrasi-tesis/registrasi-tesis.module.ts
@@ -10,6 +10,7 @@ import { CustomStrategy } from "src/middlewares/custom.strategy";
 import { AuthModule } from "src/auth/auth.module";
 import { PenggunaModule } from "src/pengguna/pengguna.module";
 import { PenggunaService } from "src/pengguna/pengguna.service";
+import { HttpModule } from "@nestjs/axios";
 
 @Module({
   imports: [
@@ -21,6 +22,7 @@ import { PenggunaService } from "src/pengguna/pengguna.service";
     ]),
     AuthModule,
     PenggunaModule,
+    HttpModule,
   ],
   controllers: [RegistrasiTesisController],
   providers: [RegistrasiTesisService, CustomStrategy, PenggunaService],
diff --git a/src/registrasi-tesis/registrasi-tesis.service.ts b/src/registrasi-tesis/registrasi-tesis.service.ts
index 4efe8d5d5be8bc2b1bb94cab81c1da1381d473aa..18135e28d03c83d6c97926c377218a43dce95180 100644
--- a/src/registrasi-tesis/registrasi-tesis.service.ts
+++ b/src/registrasi-tesis/registrasi-tesis.service.ts
@@ -26,6 +26,9 @@ import {
   UpdateStatusBodyDto,
 } from "./registrasi-tesis.dto";
 import { PenggunaService } from "src/pengguna/pengguna.service";
+import { HttpService } from "@nestjs/axios";
+import { Request } from "express";
+import { firstValueFrom } from "rxjs";
 
 @Injectable()
 export class RegistrasiTesisService {
@@ -40,6 +43,7 @@ export class RegistrasiTesisService {
     private dosenBimbinganRepository: Repository<DosenBimbingan>,
     private dataSource: DataSource,
     private penggunaService: PenggunaService,
+    private httpService: HttpService,
   ) {}
 
   async createTopicRegistration(
@@ -429,6 +433,7 @@ export class RegistrasiTesisService {
   async updateInterviewDate(
     mahasiswaId: string,
     dto: UpdateInterviewBodyDto,
+    req: Request,
     idPenerima?: string,
   ) {
     await this.penggunaService.isMahasiswaAktifOrFail(mahasiswaId);
@@ -462,17 +467,56 @@ export class RegistrasiTesisService {
 
     const newDate = new Date(dto.date);
 
-    await this.pendaftaranTesisRepository.update(
-      { id: newestReg.id },
-      { jadwalInterview: newDate, status: RegStatus.INTERVIEW },
+    let token = "";
+    if (req?.cookies?.[process.env.COOKIE_NAME]) {
+      token = req.cookies[process.env.COOKIE_NAME];
+    }
+    if (req.headers?.authorization) {
+      token = req.headers.authorization.slice(7);
+    }
+
+    const { data: notif } = await firstValueFrom(
+      this.httpService.post(
+        `${process.env.AUTH_SERVICE_URL}/notifikasi`,
+        {
+          title: "Jadwal interview pendaftaran Anda telah diubah",
+          description:
+            "Jadwal interview pendaftaran tesis Anda telah diubah. Silahkan periksa kembali data Anda untuk mengetahui lebih lanjut.",
+          penggunaId: mahasiswaId,
+        },
+        {
+          headers: {
+            Authorization: `Bearer ${token}`,
+          },
+        },
+      ),
     );
 
+    try {
+      await this.pendaftaranTesisRepository.update(
+        { id: newestReg.id },
+        { jadwalInterview: newDate, status: RegStatus.INTERVIEW },
+      );
+    } catch {
+      await firstValueFrom(
+        this.httpService.delete(
+          `${process.env.AUTH_SERVICE_URL}/notifikasi/${notif.id}`,
+          {
+            headers: {
+              Authorization: `Bearer ${token}`,
+            },
+          },
+        ),
+      );
+    }
+
     return { id: newestReg.id } as IdDto;
   }
 
   async updateStatus(
     mahasiswaId: string,
     dto: UpdateStatusBodyDto,
+    req: Request,
     idPenerima?: string,
   ) {
     await this.penggunaService.isMahasiswaAktifOrFail(mahasiswaId);
@@ -487,6 +531,30 @@ export class RegistrasiTesisService {
     await queryRunner.connect();
     await queryRunner.startTransaction();
 
+    let token = "";
+    if (req?.cookies?.[process.env.COOKIE_NAME]) {
+      token = req.cookies[process.env.COOKIE_NAME];
+    }
+    if (req.headers?.authorization) {
+      token = req.headers.authorization.slice(7);
+    }
+
+    const { data: notif } = await firstValueFrom(
+      this.httpService.post(
+        `${process.env.AUTH_SERVICE_URL}/notifikasi`,
+        {
+          title: `Pendaftaran tesis Anda ${dto.status === RegStatus.APPROVED ? "diterima" : "ditolak"}`,
+          description: `Pendaftaran tesis Anda ${dto.status === RegStatus.APPROVED ? "diterima" : "ditolak"}. Silahkan periksa kembali data Anda untuk mengetahui lebih lanjut.`,
+          penggunaId: mahasiswaId,
+        },
+        {
+          headers: {
+            Authorization: `Bearer ${token}`,
+          },
+        },
+      ),
+    );
+
     try {
       await queryRunner.manager.update(
         PendaftaranTesis,
@@ -510,6 +578,17 @@ export class RegistrasiTesisService {
     } catch (err) {
       await queryRunner.rollbackTransaction();
 
+      await firstValueFrom(
+        this.httpService.delete(
+          `${process.env.AUTH_SERVICE_URL}/notifikasi/${notif.id}`,
+          {
+            headers: {
+              Authorization: `Bearer ${token}`,
+            },
+          },
+        ),
+      );
+
       throw new InternalServerErrorException();
     } finally {
       await queryRunner.release();
@@ -521,6 +600,7 @@ export class RegistrasiTesisService {
   async updatePembimbingList(
     mahasiswaId: string,
     { pembimbing_ids: dosen_ids }: UpdatePembimbingBodyDto,
+    req: Request,
   ) {
     await this.penggunaService.isMahasiswaAktifOrFail(mahasiswaId);
 
@@ -564,6 +644,31 @@ export class RegistrasiTesisService {
     await queryRunner.connect();
     await queryRunner.startTransaction();
 
+    let token = "";
+    if (req?.cookies?.[process.env.COOKIE_NAME]) {
+      token = req.cookies[process.env.COOKIE_NAME];
+    }
+    if (req.headers?.authorization) {
+      token = req.headers.authorization.slice(7);
+    }
+
+    const { data: notif } = await firstValueFrom(
+      this.httpService.post(
+        `${process.env.AUTH_SERVICE_URL}/notifikasi`,
+        {
+          title: "Dosen pembimbing Anda telah diubah",
+          description:
+            "Dosen pembimbing Anda telah diubah. Silahkan periksa kembali data Anda untuk mengetahui lebih lanjut.",
+          penggunaId: mahasiswaId,
+        },
+        {
+          headers: {
+            Authorization: `Bearer ${token}`,
+          },
+        },
+      ),
+    );
+
     try {
       await queryRunner.manager.insert(
         DosenBimbingan,
@@ -577,6 +682,17 @@ export class RegistrasiTesisService {
     } catch (err) {
       await queryRunner.rollbackTransaction();
 
+      await firstValueFrom(
+        this.httpService.delete(
+          `${process.env.AUTH_SERVICE_URL}/notifikasi/${notif.id}`,
+          {
+            headers: {
+              Authorization: `Bearer ${token}`,
+            },
+          },
+        ),
+      );
+
       throw new InternalServerErrorException();
     } finally {
       await queryRunner.release();