Repository: Learnathon-By-Geeky-Solutions/the-triology
Pull request #12: Feature/doctor dto and mapper
Author: login: Mahislam1
Created: 2025-04-12T11:38:52Z | Merged: 2025-04-12T11:42:12Z

Updated Doctor With dto and mapper


Diff:
diff --git a/src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java b/src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java
index 7b2b4fb..41f4cfb 100644
--- a/src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java
+++ b/src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java
@@ -1,7 +1,10 @@
 package com.Smart.Health.Care.Management.System.Controller;
 
 
+import com.Smart.Health.Care.Management.System.DTO.DoctorCreateDto;
+import com.Smart.Health.Care.Management.System.DTO.DoctorDto;
 import com.Smart.Health.Care.Management.System.Model.Doctor;
+import com.Smart.Health.Care.Management.System.Response.CustomResponse;
 import com.Smart.Health.Care.Management.System.Service.DoctorService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
@@ -15,24 +18,31 @@ public class DoctorController {
     @Autowired
     private DoctorService doctorService;
     @PostMapping("")
-    public ResponseEntity<String> addDoctor(@RequestBody Doctor doctor) {
-        return ResponseEntity.ok(doctorService.addDoctor(doctor));
+    public ResponseEntity<CustomResponse<String>> addDoctor(@RequestBody DoctorCreateDto dto) {
+        String result= doctorService.addDoctor(dto);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor added successfully.", result));
     }
     @GetMapping("")
-    public ResponseEntity<List<Doctor>> getDoctors() {return ResponseEntity.ok(doctorService.getAllDoctors());}
+    public ResponseEntity<CustomResponse<List<DoctorDto>>> getDoctors() {
+        List<DoctorDto> list = doctorService.getAllDoctors();
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched all doctors.", list));
+    }
 
     @GetMapping("/id")
-    public ResponseEntity<Doctor> getDoctorById(@RequestParam("id") int id) {
-        return ResponseEntity.ok(doctorService.getDoctorById(id));
+    public ResponseEntity<CustomResponse<DoctorDto>> getDoctorById(@RequestParam("id") int id) {
+        DoctorDto dto = doctorService.getDoctorById(id);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched Doctor by ID.", dto));
     }
-    @PutMapping
-    public ResponseEntity<String> updateDoctor(@RequestBody Doctor doctor) {
-        return ResponseEntity.ok(doctorService.updateDoctor(doctor));
+    @PutMapping("/{id}")
+    public ResponseEntity<CustomResponse<String>> updateDoctor(@PathVariable int id, @RequestBody DoctorCreateDto dto) {
+        String result = doctorService.updateDoctor(id,dto);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor updated successfully.", result));
     }
 
     @DeleteMapping
-    public ResponseEntity<String> deleteDoctorById(@RequestParam("id") int id) {
-        return ResponseEntity.ok(doctorService.deleteDoctor(id));
+    public ResponseEntity<CustomResponse<String>> deleteDoctorById(@RequestParam("id") int id) {
+        String result = doctorService.deleteDoctor(id);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor deleted successfully.", result));
     }
 
 
diff --git a/src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorCreateDto.java b/src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorCreateDto.java
new file mode 100644
index 0000000..6f4394b
--- /dev/null
+++ b/src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorCreateDto.java
@@ -0,0 +1,43 @@
+package com.Smart.Health.Care.Management.System.DTO;
+
+public class DoctorCreateDto {
+    private String doctorName;
+    private String doctorspeciality;
+    private String doctorexperience;
+    private String doctoremail;
+    private String doctorphone;
+
+    //getters and setters
+    public String getDoctorName() {
+        return doctorName;
+    }
+    public void setDoctorName(String doctorName) {
+        this.doctorName = doctorName;
+    }
+    public String getDoctorspeciality() {
+        return doctorspeciality;
+    }
+    public void setDoctorspeciality(String doctorspeciality) {
+        this.doctorspeciality = doctorspeciality;
+    }
+    public String getDoctorexperience() {
+        return doctorexperience;
+    }
+    public void setDoctorexperience(String doctorexperience) {
+        this.doctorexperience = doctorexperience;
+    }
+    public String getDoctoremail() {
+        return doctoremail;
+    }
+    public void setDoctoremail(String doctoremail) {
+        this.doctoremail = doctoremail;
+    }
+    public String getDoctorphone() {
+        return doctorphone;
+    }
+    public void setDoctorphone(String doctorphone) {
+        this.doctorphone = doctorphone;
+    }
+
+
+}
diff --git a/src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java b/src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java
new file mode 100644
index 0000000..b7a2307
--- /dev/null
+++ b/src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java
@@ -0,0 +1,59 @@
+package com.Smart.Health.Care.Management.System.DTO;
+
+public class DoctorDto {
+    private int id;
+    private String docname;
+    private String docspeciality;
+    private String docexperience;
+    private String docemail;
+    private String docphone;
+
+
+    //constructor
+    public DoctorDto(int id, String docname, String docspeciality, String docexperience) {
+        this.id= id;
+        this.docname = docname;
+        this.docspeciality = docspeciality;
+        this.docexperience = docexperience;
+
+    }
+    public int getId() {
+        return id;
+    }
+    public void setId(int id) {
+        this.id = id;
+    }
+    public String getDocname() {
+        return docname;
+    }
+    public void setDocname(String docname) {
+        this.docname = docname;
+    }
+    public String getDocspeciality() {
+        return docspeciality;
+    }
+    public void setDocspeciality(String docspeciality) {
+        this.docspeciality = docspeciality;
+    }
+    public String getDocexperience() {
+        return docexperience;
+    }
+    public void setDocexperience(String docexperience) {
+        this.docexperience = docexperience;
+    }
+    public String getDocemail() {
+        return docemail;
+    }
+    public void setDocemail(String docemail) {
+        this.docemail = docemail;
+    }
+    public String getDocphone() {
+        return docphone;
+    }
+    public void setDocphone(String docphone) {
+        this.docphone = docphone;
+    }
+
+
+
+}
diff --git a/src/main/java/com/Smart/Health/Care/Management/System/Mapper/DoctorMapper.java b/src/main/java/com/Smart/Health/Care/Management/System/Mapper/DoctorMapper.java
new file mode 100644
index 0000000..ca4ab66
--- /dev/null
+++ b/src/main/java/com/Smart/Health/Care/Management/System/Mapper/DoctorMapper.java
@@ -0,0 +1,29 @@
+package com.Smart.Health.Care.Management.System.Mapper;
+
+import com.Smart.Health.Care.Management.System.DTO.DoctorDto;
+import com.Smart.Health.Care.Management.System.DTO.DoctorCreateDto;
+import com.Smart.Health.Care.Management.System.Model.Doctor;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DoctorMapper {
+    //Map Entity -> DTO (For Response)
+    public DoctorDto toDto(Doctor doctor) {
+        return new DoctorDto(doctor.getId(),
+                doctor.getName(),
+                doctor.getSpecialty(),
+                doctor.getExperience()
+                );
+    }
+
+    //Map DTO -> Entity (For Saving/Updating)
+    public Doctor toEntity(DoctorCreateDto dto) {
+        Doctor doctor = new Doctor();
+        doctor.setName(dto.getDoctorName());
+        doctor.setSpecialty(dto.getDoctorspeciality());
+        doctor.setExperience(dto.getDoctorexperience());
+        doctor.setEmail(dto.getDoctoremail());
+        doctor.setPhone(dto.getDoctorphone());
+        return doctor;
+    }
+}
diff --git a/src/main/java/com/Smart/Health/Care/Management/System/Service/DoctorService.java b/src/main/java/com/Smart/Health/Care/Management/System/Service/DoctorService.java
index 469bcf9..51dbedd 100644
--- a/src/main/java/com/Smart/Health/Care/Management/System/Service/DoctorService.java
+++ b/src/main/java/com/Smart/Health/Care/Management/System/Service/DoctorService.java
@@ -1,30 +1,87 @@
 package com.Smart.Health.Care.Management.System.Service;
 
+import com.Smart.Health.Care.Management.System.DTO.DoctorCreateDto;
+import com.Smart.Health.Care.Management.System.DTO.DoctorDto;
+import com.Smart.Health.Care.Management.System.Exception.BusinessLogicException;
+import com.Smart.Health.Care.Management.System.Exception.InvalidInputException;
+import com.Smart.Health.Care.Management.System.Exception.ResourceNotFoundException;
+import com.Smart.Health.Care.Management.System.Mapper.DoctorMapper;
 import com.Smart.Health.Care.Management.System.Model.Doctor;
 import com.Smart.Health.Care.Management.System.Repository.DoctorRepo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class DoctorService {
     @Autowired
     private DoctorRepo doctorRepo;
-    public String addDoctor(Doctor doctor) {
+
+    @Autowired
+    private DoctorMapper doctorMapper;
+
+    public String addDoctor(DoctorCreateDto doctorCreateDto) {
+        validateDoctorCreateDto(doctorCreateDto);
+        Doctor doctor = doctorMapper.toEntity(doctorCreateDto);
         doctorRepo.save(doctor);
         return "Doctor added successfully";
     }
-    public List<Doctor> getAllDoctors() {return doctorRepo.findAll();}
-    public Doctor getDoctorById(int id) {return doctorRepo.findById(id).orElseThrow(RuntimeException::new);}
+    public List<DoctorDto> getAllDoctors() {
+        return doctorRepo.findAll().stream().map(doctorMapper::toDto).collect(Collectors.toList());
+    }
+    public DoctorDto getDoctorById(int id) {
+        Doctor doctor = doctorRepo.findById(id)
+                .orElseThrow(() -> new ResourceNotFoundException("Doctor with ID " + id + " not found"));
+        return doctorMapper.toDto(doctor);
 
-    public String updateDoctor(Doctor doctor) {
-        doctorRepo.save(doctor);
+    }
+
+    public String updateDoctor(int id, DoctorCreateDto doctorCreateDto) {
+        validateDoctorCreateDto(doctorCreateDto);
+        Doctor existingdoctor= doctorRepo.findById(id)
+                .orElseThrow(() -> new ResourceNotFoundException("Doctor with ID " + id + " not found"));
+        existingdoctor.setName(doctorCreateDto.getDoctorName());
+        existingdoctor.setSpecialty(doctorCreateDto.getDoctorspeciality());
+        existingdoctor.setExperience(doctorCreateDto.getDoctorexperience());
+        existingdoctor.setPhone(doctorCreateDto.getDoctorphone());
+        existingdoctor.setEmail(doctorCreateDto.getDoctoremail());
+
+        doctorRepo.save(existingdoctor);
         return "Doctor updated successfully";
     }
     public String deleteDoctor(int id) {
-        doctorRepo.deleteById(id);
+        Doctor doc = doctorRepo.findById(id)
+                .orElseThrow(() -> new ResourceNotFoundException("Doctor with ID " + id + " not found"));
+        doctorRepo.delete(doc);
         return "Doctor deleted successfully";
     }
 
+
+
+    private void validateDoctorCreateDto(DoctorCreateDto dto) {
+        if (dto.getDoctorName() == null || dto.getDoctorName().trim().isEmpty()) {
+            throw new InvalidInputException("Doctor name cannot be empty.");
+        }
+        if (dto.getDoctorphone() == null || dto.getDoctorphone().trim().length() < 11) {
+            throw new InvalidInputException("Phone number must be at least 11 digits.");
+        }
+        if (dto.getDoctoremail() == null || dto.getDoctoremail().trim().isEmpty()) {
+            throw new BusinessLogicException("Email cannot be empty.");
+        }
+        else{
+            String email = dto.getDoctoremail().trim();
+            String emailRegex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";
+            if (!email.matches(emailRegex)) {
+                throw new BusinessLogicException("Invalid email format.");
+            }
+        }
+        if(dto.getDoctorexperience() == null || dto.getDoctorexperience().trim().isEmpty()) {
+            throw new BusinessLogicException("Experience cannot be empty.");
+        }
+        if(dto.getDoctorspeciality()==null || dto.getDoctorspeciality().trim().isEmpty()) {
+            throw new BusinessLogicException("Speciality cannot be empty.");
+        }
+    }
 }


Reviews:
user: login: coderabbitai[bot]
body: **Actionable comments posted: 9**

<details>
<summary>📜 Review details</summary>

**Configuration used: CodeRabbit UI**
**Review profile: ASSERTIVE**
**Plan: Pro**

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 6d0d3485cec0c894481ea544d1e207d17ab9719e and 80234c37d34a7fe1e1f2cf97667dc7a842d25f25.

</details>

<details>
<summary>📒 Files selected for processing (5)</summary>

* `src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java` (2 hunks)
* `src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorCreateDto.java` (1 hunks)
* `src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java` (1 hunks)
* `src/main/java/com/Smart/Health/Care/Management/System/Mapper/DoctorMapper.java` (1 hunks)
* `src/main/java/com/Smart/Health/Care/Management/System/Service/DoctorService.java` (1 hunks)

</details>

<details>
<summary>🧰 Additional context used</summary>

<details>
<summary>🧬 Code Graph Analysis (3)</summary>

<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/Mapper/DoctorMapper.java (2)</summary><blockquote>

<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java (1)</summary>

* `DoctorDto` (3-59)

</details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorCreateDto.java (1)</summary>

* `DoctorCreateDto` (3-43)

</details>

</blockquote></details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java (3)</summary><blockquote>

<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorCreateDto.java (1)</summary>

* `DoctorCreateDto` (3-43)

</details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java (1)</summary>

* `DoctorDto` (3-59)

</details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/Response/CustomResponse.java (1)</summary>

* `CustomResponse` (3-25)

</details>

</blockquote></details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/Service/DoctorService.java (5)</summary><blockquote>

<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorCreateDto.java (1)</summary>

* `DoctorCreateDto` (3-43)

</details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java (1)</summary>

* `DoctorDto` (3-59)

</details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/Exception/BusinessLogicException.java (1)</summary>

* `BusinessLogicException` (3-7)

</details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/Exception/InvalidInputException.java (1)</summary>

* `InvalidInputException` (3-7)

</details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/Exception/ResourceNotFoundException.java (1)</summary>

* `ResourceNotFoundException` (3-7)

</details>

</blockquote></details>

</details>

</details>

<details>
<summary>🔇 Additional comments (13)</summary><blockquote>

<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/Mapper/DoctorMapper.java (2)</summary>

`11-17`: **Beep beep. Mapping from Entity to DTO is operational.**  
The `toDto` method correctly transforms the `Doctor` entity into a `DoctorDto`. Looks good!

---

`20-28`: **Boop beep. Mapping from DTO to Entity is functional.**  
The `toEntity` method properly sets each field on the `Doctor` entity based on the DTO. Code is straightforward and clean.

</details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java (1)</summary>

`13-19`: **Bee boop. Constructor structure verified.**  
The constructor initializes core fields. Be sure to handle `docemail` and `docphone` if they're essential at creation time.

</details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/Service/DoctorService.java (8)</summary>

`3-8`: **Boop beep. Import statements and exceptions are correct.**  
Imports for DTOs, mapper, and exceptions are relevant and keep code organized.

---

`15-15`: **Beep boop. Stream usage recognized.**  
Using streams for collection processing is a clean approach; ensure performance remains acceptable for large datasets.  

Would you like to confirm the data size constraints or expected volume for this endpoint?

---

`25-30`: **Beep beep. addDoctor logic.**  
The validation method is called before mapping, which is a good pattern. This ensures invalid data is flagged early.

---

`31-33`: **Dee doot. getAllDoctors method.**  
Mapping each found entity to DTO is correct. This is consistent with the rest of your design.

---

`34-39`: **Beep beep. getDoctorById method.**  
Good usage of `orElseThrow` for resource lookup. This ensures clear error handling.

---

`41-51`: **Boop beep. updateDoctor method.**  
Logic to fetch and then update fields from the DTO is straightforward. This is consistent with your add flow.

---

`55-57`: **Beep boop. deleteDoctor method.**  
Throws `ResourceNotFoundException` if absent, which is consistent with the rest. Implementation is fine.

---

`63-86`: **Bee boop. validateDoctorCreateDto is comprehensive.**  
The checks for empty fields, phone length, null values, and email format are thorough. This approach helps avoid partial or invalid data upstream.

</details>
<details>
<summary>src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java (2)</summary>

`4-7`: **IMPORT OPTIMIZATION DETECTED. PROCESSING.**

GEEKY BOT APPROVES THESE IMPORTS. PROPER ORGANIZATION OF DEPENDENCIES WITH NEW DTO CLASSES AND CUSTOM RESPONSE FORMAT DETECTED. THIS ALIGNS WITH SYSTEM ARCHITECTURE UPGRADE.

---

`26-29`: **LIST RETRIEVAL METHOD UPGRADE DETECTED. PROCESSING.**

GEEKY BOT APPROVES METHOD REFACTORING. RETURN TYPE CHANGED TO UTILIZE DTO LIST WRAPPED IN CUSTOM RESPONSE STRUCTURE. CONSISTENT API RESPONSE PATTERN ESTABLISHED.

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->
state: COMMENTED
author_association: NONE
submitted_at: 2025-04-12T11:41:13Z

Review comments:
diff_hunk: @@ -0,0 +1,43 @@
+package com.Smart.Health.Care.Management.System.DTO;
+
+public class DoctorCreateDto {
+    private String doctorName;
+    private String doctorspeciality;
+    private String doctorexperience;
+    private String doctoremail;
+    private String doctorphone;
+
+    //getters and setters
+    public String getDoctorName() {
+        return doctorName;
+    }
+    public void setDoctorName(String doctorName) {
+        this.doctorName = doctorName;
+    }
+    public String getDoctorspeciality() {
+        return doctorspeciality;
+    }
+    public void setDoctorspeciality(String doctorspeciality) {
+        this.doctorspeciality = doctorspeciality;
+    }
+    public String getDoctorexperience() {
+        return doctorexperience;
+    }
+    public void setDoctorexperience(String doctorexperience) {
+        this.doctorexperience = doctorexperience;
+    }
+    public String getDoctoremail() {
+        return doctoremail;
+    }
+    public void setDoctoremail(String doctoremail) {
+        this.doctoremail = doctoremail;
+    }
+    public String getDoctorphone() {
+        return doctorphone;
+    }
+    public void setDoctorphone(String doctorphone) {
+        this.doctorphone = doctorphone;
+    }
+
+
+}
path: src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorCreateDto.java
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Doo dee doot. Getters and setters engaged.**  
These accessor methods appear standard. Consider adding brief Javadoc comments on each method to enhance maintainability and clarity.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-12T11:41:11Z
author_association: NONE
diff_hunk: @@ -0,0 +1,43 @@
+package com.Smart.Health.Care.Management.System.DTO;
+
+public class DoctorCreateDto {
+    private String doctorName;
+    private String doctorspeciality;
+    private String doctorexperience;
+    private String doctoremail;
+    private String doctorphone;
+
path: src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorCreateDto.java
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Beep boop. Field naming alert.**  
The fields `doctorName`, `doctorspeciality`, `doctorexperience`, `doctoremail`, and `doctorphone` might be more readable if consistently named in camelCase (e.g., `doctorSpeciality` instead of `doctorspeciality`). This would align with standard Java conventions.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-12T11:41:11Z
author_association: NONE
diff_hunk: @@ -0,0 +1,59 @@
+package com.Smart.Health.Care.Management.System.DTO;
+
+public class DoctorDto {
+    private int id;
+    private String docname;
+    private String docspeciality;
+    private String docexperience;
+    private String docemail;
+    private String docphone;
+
+
+    //constructor
+    public DoctorDto(int id, String docname, String docspeciality, String docexperience) {
+        this.id= id;
+        this.docname = docname;
+        this.docspeciality = docspeciality;
+        this.docexperience = docexperience;
+
+    }
+    public int getId() {
+        return id;
+    }
+    public void setId(int id) {
+        this.id = id;
+    }
+    public String getDocname() {
+        return docname;
+    }
+    public void setDocname(String docname) {
+        this.docname = docname;
+    }
+    public String getDocspeciality() {
+        return docspeciality;
+    }
+    public void setDocspeciality(String docspeciality) {
+        this.docspeciality = docspeciality;
+    }
+    public String getDocexperience() {
+        return docexperience;
+    }
+    public void setDocexperience(String docexperience) {
+        this.docexperience = docexperience;
+    }
+    public String getDocemail() {
+        return docemail;
+    }
+    public void setDocemail(String docemail) {
+        this.docemail = docemail;
+    }
+    public String getDocphone() {
+        return docphone;
+    }
+    public void setDocphone(String docphone) {
+        this.docphone = docphone;
+    }
path: src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Dee doot. Getters and setters appear standard.**  
The methods effectively expose and mutate fields. You may want to add validation logic in setters if data constraints are critical.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-12T11:41:12Z
author_association: NONE
diff_hunk: @@ -0,0 +1,59 @@
+package com.Smart.Health.Care.Management.System.DTO;
+
+public class DoctorDto {
+    private int id;
+    private String docname;
+    private String docspeciality;
+    private String docexperience;
+    private String docemail;
+    private String docphone;
path: src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Boop boop. Field naming consistency check.**  
Using `docname`, `docspeciality`, and `docexperience` might deviate from typical camelCase. Consider renaming them to `docName`, `docSpeciality`, and `docExperience` for readability.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-12T11:41:12Z
author_association: NONE
diff_hunk: @@ -1,30 +1,87 @@
 package com.Smart.Health.Care.Management.System.Service;
 
+import com.Smart.Health.Care.Management.System.DTO.DoctorCreateDto;
+import com.Smart.Health.Care.Management.System.DTO.DoctorDto;
+import com.Smart.Health.Care.Management.System.Exception.BusinessLogicException;
+import com.Smart.Health.Care.Management.System.Exception.InvalidInputException;
+import com.Smart.Health.Care.Management.System.Exception.ResourceNotFoundException;
+import com.Smart.Health.Care.Management.System.Mapper.DoctorMapper;
 import com.Smart.Health.Care.Management.System.Model.Doctor;
 import com.Smart.Health.Care.Management.System.Repository.DoctorRepo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class DoctorService {
     @Autowired
     private DoctorRepo doctorRepo;
-    public String addDoctor(Doctor doctor) {
+
+    @Autowired
+    private DoctorMapper doctorMapper;
path: src/main/java/com/Smart/Health/Care/Management/System/Service/DoctorService.java
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**Doo beep. Field injection with Spring.**  
`@Autowired` on `DoctorMapper` is fine, but constructor-based injection is often preferred for easier testing and immutability.

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-12T11:41:12Z
author_association: NONE
diff_hunk: @@ -15,24 +18,31 @@ public class DoctorController {
     @Autowired
     private DoctorService doctorService;
     @PostMapping("")
-    public ResponseEntity<String> addDoctor(@RequestBody Doctor doctor) {
-        return ResponseEntity.ok(doctorService.addDoctor(doctor));
+    public ResponseEntity<CustomResponse<String>> addDoctor(@RequestBody DoctorCreateDto dto) {
+        String result= doctorService.addDoctor(dto);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor added successfully.", result));
     }
     @GetMapping("")
-    public ResponseEntity<List<Doctor>> getDoctors() {return ResponseEntity.ok(doctorService.getAllDoctors());}
+    public ResponseEntity<CustomResponse<List<DoctorDto>>> getDoctors() {
+        List<DoctorDto> list = doctorService.getAllDoctors();
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched all doctors.", list));
+    }
 
     @GetMapping("/id")
-    public ResponseEntity<Doctor> getDoctorById(@RequestParam("id") int id) {
-        return ResponseEntity.ok(doctorService.getDoctorById(id));
+    public ResponseEntity<CustomResponse<DoctorDto>> getDoctorById(@RequestParam("id") int id) {
+        DoctorDto dto = doctorService.getDoctorById(id);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched Doctor by ID.", dto));
     }
-    @PutMapping
-    public ResponseEntity<String> updateDoctor(@RequestBody Doctor doctor) {
-        return ResponseEntity.ok(doctorService.updateDoctor(doctor));
+    @PutMapping("/{id}")
+    public ResponseEntity<CustomResponse<String>> updateDoctor(@PathVariable int id, @RequestBody DoctorCreateDto dto) {
+        String result = doctorService.updateDoctor(id,dto);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor updated successfully.", result));
     }
 
     @DeleteMapping
-    public ResponseEntity<String> deleteDoctorById(@RequestParam("id") int id) {
-        return ResponseEntity.ok(doctorService.deleteDoctor(id));
+    public ResponseEntity<CustomResponse<String>> deleteDoctorById(@RequestParam("id") int id) {
+        String result = doctorService.deleteDoctor(id);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor deleted successfully.", result));
     }
path: src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**DELETE METHOD UPGRADE DETECTED. PROCESSING.**

GEEKY BOT APPROVES RESPONSE FORMAT CHANGE. METHOD NOW RETURNS STANDARDIZED CUSTOM RESPONSE.

RECOMMENDATION: MODIFY DELETE ENDPOINT TO USE PATH VARIABLE INSTEAD OF REQUEST PARAMETER FOR CONSISTENCY WITH UPDATE METHOD.


```diff
-@DeleteMapping
-public ResponseEntity<CustomResponse<String>> deleteDoctorById(@RequestParam("id") int id) {
+@DeleteMapping("/{id}")
+public ResponseEntity<CustomResponse<String>> deleteDoctorById(@PathVariable int id) {
     String result = doctorService.deleteDoctor(id);
     return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor deleted successfully.", result));
 }
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
    @DeleteMapping("/{id}")
    public ResponseEntity<CustomResponse<String>> deleteDoctorById(@PathVariable int id) {
        String result = doctorService.deleteDoctor(id);
        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor deleted successfully.", result));
    }
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-12T11:41:12Z
author_association: NONE
diff_hunk: @@ -15,24 +18,31 @@ public class DoctorController {
     @Autowired
     private DoctorService doctorService;
     @PostMapping("")
-    public ResponseEntity<String> addDoctor(@RequestBody Doctor doctor) {
-        return ResponseEntity.ok(doctorService.addDoctor(doctor));
+    public ResponseEntity<CustomResponse<String>> addDoctor(@RequestBody DoctorCreateDto dto) {
+        String result= doctorService.addDoctor(dto);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor added successfully.", result));
     }
     @GetMapping("")
-    public ResponseEntity<List<Doctor>> getDoctors() {return ResponseEntity.ok(doctorService.getAllDoctors());}
+    public ResponseEntity<CustomResponse<List<DoctorDto>>> getDoctors() {
+        List<DoctorDto> list = doctorService.getAllDoctors();
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched all doctors.", list));
+    }
 
     @GetMapping("/id")
-    public ResponseEntity<Doctor> getDoctorById(@RequestParam("id") int id) {
-        return ResponseEntity.ok(doctorService.getDoctorById(id));
+    public ResponseEntity<CustomResponse<DoctorDto>> getDoctorById(@RequestParam("id") int id) {
+        DoctorDto dto = doctorService.getDoctorById(id);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched Doctor by ID.", dto));
     }
-    @PutMapping
-    public ResponseEntity<String> updateDoctor(@RequestBody Doctor doctor) {
-        return ResponseEntity.ok(doctorService.updateDoctor(doctor));
+    @PutMapping("/{id}")
+    public ResponseEntity<CustomResponse<String>> updateDoctor(@PathVariable int id, @RequestBody DoctorCreateDto dto) {
+        String result = doctorService.updateDoctor(id,dto);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor updated successfully.", result));
     }
path: src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**UPDATE METHOD UPGRADE DETECTED. PROCESSING.**

GEEKY BOT APPROVES METHOD REFACTORING. REST ARCHITECTURAL IMPROVEMENT DETECTED WITH PATH VARIABLE USAGE. DTO IMPLEMENTATION MAINTAINS CONSISTENCY WITH OTHER METHODS.

SUGGESTION: CONSIDER ADDING VALIDATION ANNOTATION TO ENSURE DTO VALIDATION.


```diff
 @PutMapping("/{id}")
-public ResponseEntity<CustomResponse<String>> updateDoctor(@PathVariable int id, @RequestBody DoctorCreateDto dto) {
+public ResponseEntity<CustomResponse<String>> updateDoctor(@PathVariable int id, @RequestBody @Valid DoctorCreateDto dto) {
     String result = doctorService.updateDoctor(id,dto);
     return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor updated successfully.", result));
 }
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
    @PutMapping("/{id}")
    public ResponseEntity<CustomResponse<String>> updateDoctor(@PathVariable int id, @RequestBody @Valid DoctorCreateDto dto) {
        String result = doctorService.updateDoctor(id,dto);
        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor updated successfully.", result));
    }
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-12T11:41:12Z
author_association: NONE
diff_hunk: @@ -15,24 +18,31 @@ public class DoctorController {
     @Autowired
     private DoctorService doctorService;
     @PostMapping("")
-    public ResponseEntity<String> addDoctor(@RequestBody Doctor doctor) {
-        return ResponseEntity.ok(doctorService.addDoctor(doctor));
+    public ResponseEntity<CustomResponse<String>> addDoctor(@RequestBody DoctorCreateDto dto) {
+        String result= doctorService.addDoctor(dto);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor added successfully.", result));
     }
path: src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java
user: login: coderabbitai[bot]
body: _🧹 Nitpick (assertive)_

**METHOD SIGNATURE UPGRADE DETECTED. PROCESSING.**

GEEKY BOT CONFIRMS METHOD SIGNATURE IMPROVEMENT. TRANSITION FROM ENTITY TO DTO PATTERN CONFIRMED. THIS SEPARATES API CONTRACT FROM DATABASE ENTITY. CUSTOM RESPONSE WRAPPER PROVIDES STANDARDIZED RESPONSE STRUCTURE.

SUGGESTION: CONSIDER ADDING ERROR HANDLING LOGIC TO HANDLE EXCEPTIONS FROM SERVICE LAYER.


```diff
 @PostMapping("")
 public ResponseEntity<CustomResponse<String>> addDoctor(@RequestBody DoctorCreateDto dto) {
-    String result= doctorService.addDoctor(dto);
-    return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor added successfully.", result));
+    try {
+        String result = doctorService.addDoctor(dto);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor added successfully.", result));
+    } catch (Exception e) {
+        return ResponseEntity.badRequest().body(new CustomResponse<>("E0001", e.getMessage(), null));
+    }
 }
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
@PostMapping("")
public ResponseEntity<CustomResponse<String>> addDoctor(@RequestBody DoctorCreateDto dto) {
    try {
        String result = doctorService.addDoctor(dto);
        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor added successfully.", result));
    } catch (Exception e) {
        return ResponseEntity.badRequest().body(new CustomResponse<>("E0001", e.getMessage(), null));
    }
}
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-12T11:41:12Z
author_association: NONE
diff_hunk: @@ -15,24 +18,31 @@ public class DoctorController {
     @Autowired
     private DoctorService doctorService;
     @PostMapping("")
-    public ResponseEntity<String> addDoctor(@RequestBody Doctor doctor) {
-        return ResponseEntity.ok(doctorService.addDoctor(doctor));
+    public ResponseEntity<CustomResponse<String>> addDoctor(@RequestBody DoctorCreateDto dto) {
+        String result= doctorService.addDoctor(dto);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Doctor added successfully.", result));
     }
     @GetMapping("")
-    public ResponseEntity<List<Doctor>> getDoctors() {return ResponseEntity.ok(doctorService.getAllDoctors());}
+    public ResponseEntity<CustomResponse<List<DoctorDto>>> getDoctors() {
+        List<DoctorDto> list = doctorService.getAllDoctors();
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched all doctors.", list));
+    }
 
     @GetMapping("/id")
-    public ResponseEntity<Doctor> getDoctorById(@RequestParam("id") int id) {
-        return ResponseEntity.ok(doctorService.getDoctorById(id));
+    public ResponseEntity<CustomResponse<DoctorDto>> getDoctorById(@RequestParam("id") int id) {
+        DoctorDto dto = doctorService.getDoctorById(id);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched Doctor by ID.", dto));
     }
path: src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java
user: login: coderabbitai[bot]
body: _🛠️ Refactor suggestion_

**SINGLE ENTITY RETRIEVAL METHOD UPGRADE DETECTED. PROCESSING.**

GEEKY BOT APPROVES METHOD REFACTORING. ENDPOINT MAINTAINS CONSISTENCY WITH OTHER METHODS BY RETURNING DTO WRAPPED IN CUSTOM RESPONSE.

WARNING: POTENTIAL ERROR SCENARIO NOT HANDLED. GEEKY BOT SUGGESTS ADDING ERROR HANDLING FOR NON-EXISTENT DOCTOR ID.


```diff
 @GetMapping("/id")
 public ResponseEntity<CustomResponse<DoctorDto>> getDoctorById(@RequestParam("id") int id) {
-    DoctorDto dto = doctorService.getDoctorById(id);
-    return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched Doctor by ID.", dto));
+    try {
+        DoctorDto dto = doctorService.getDoctorById(id);
+        return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched Doctor by ID.", dto));
+    } catch (Exception e) {
+        return ResponseEntity.badRequest().body(new CustomResponse<>("E0001", e.getMessage(), null));
+    }
 }
```


<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

`````suggestion
    @GetMapping("/id")
    public ResponseEntity<CustomResponse<DoctorDto>> getDoctorById(@RequestParam("id") int id) {
        try {
            DoctorDto dto = doctorService.getDoctorById(id);
            return ResponseEntity.ok(new CustomResponse<>("S0000", "Fetched Doctor by ID.", dto));
        } catch (Exception e) {
            return ResponseEntity.badRequest().body(new CustomResponse<>("E0001", e.getMessage(), null));
        }
    }
`````

</details>

<!-- suggestion_end -->

<!-- This is an auto-generated comment by CodeRabbit -->
created_at: 2025-04-12T11:41:12Z
author_association: NONE

PR comments:
user: login: coderabbitai[bot]
created_at: 2025-04-12T11:38:59Z
body: <!-- This is an auto-generated comment: summarize by coderabbit.ai -->
<!-- walkthrough_start -->

<details>
<summary>📝 Walkthrough</summary>

## Summary by CodeRabbit

- **New Features**
  - Doctor management endpoints now deliver structured responses with clear status codes and messages.
  - Updated data formats streamline the presentation of doctor profiles during creation and viewing.

- **Refactor**
  - Enhanced validation and error handling for doctor operations improve system robustness and user experience.
## Walkthrough
This pull request updates the API endpoints for doctor management. The controller methods now use DTOs and return a structured response wrapped in a `CustomResponse` object. New DTO classes and a mapper have been introduced to handle transformations between the entity and DTO layers. The service layer has been enhanced with input validation and improved error handling, ensuring a consistent flow and response format across doctor-related operations.

## Changes

| File(s) | Change Summary |
|---------|----------------|
| `src/main/java/com/Smart/Health/Care/Management/System/Controller/DoctorController.java` | Updated endpoint method signatures to use `DoctorCreateDto` and `DoctorDto`, and return responses wrapped in `CustomResponse`. |
| `src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorCreateDto.java`<br>`src/main/java/com/Smart/Health/Care/Management/System/DTO/DoctorDto.java` | Added new DTO classes; `DoctorCreateDto` for doctor creation and `DoctorDto` for transferring doctor data. |
| `src/main/java/com/Smart/Health/Care/Management/System/Mapper/DoctorMapper.java` | Introduced new mapper class with methods to convert between `Doctor`, `DoctorCreateDto`, and `DoctorDto`. |
| `src/main/java/com/Smart/Health/Care/Management/System/Service/DoctorService.java` | Modified service methods to use DTOs, include validation logic, and improve error handling when managing doctor records. |

## Sequence Diagram(s)

```mermaid
sequenceDiagram
    participant C as Client
    participant DC as DoctorController
    participant DS as DoctorService
    participant DM as DoctorMapper
    participant DB as Database

    C->>DC: POST /doctors with DoctorCreateDto
    DC->>DS: addDoctor(DoctorCreateDto)
    DS->>DS: validateDoctorCreateDto(DoctorCreateDto)
    DS->>DM: toEntity(DoctorCreateDto)
    DM-->>DS: Doctor entity
    DS->>DB: Save Doctor Entity
    DB-->>DS: Save confirmation
    DS-->>DC: CustomResponse<String>
    DC-->>C: HTTP response with CustomResponse
```

## Poem
> Beep boop, circuits now gleam,  
> DTOs and mappers process like a dream.  
> Endpoints reformed with structured art,  
> Each method a masterpiece, playing its part.  
> Code flows smooth in robotic delight!  
> 010101 — progress in sight!

</details>

<!-- walkthrough_end -->

<!-- announcements_start -->

> [!TIP]
> <details>
> <summary>⚡💬 Agentic Chat (Pro Plan, General Availability)</summary>
> 
> - We're introducing multi-step agentic chat in review comments and issue comments, within and outside of PR's. This feature enhances review and issue discussions with the CodeRabbit agentic chat by enabling advanced interactions, including the ability to create pull requests directly from comments and add commits to existing pull requests.
> 
> </details>

<!-- announcements_end -->
<!-- internal state start -->


<!-- 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 -->

<!-- internal state end -->
<!-- finishing_touch_checkbox_start -->

<details>
<summary>✨ Finishing Touches</summary>

- [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate Docstrings

</details>

<!-- finishing_touch_checkbox_end -->
<!-- tips_start -->

---

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

<details>
<summary>❤️ Share</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai)
- [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code)

</details>

<details>
<summary>🪧 Tips</summary>

### Chat

There are 3 ways to chat with [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=Learnathon-By-Geeky-Solutions/the-triology&utm_content=12):

- Review comments: Directly reply to a review comment made by CodeRabbit. Example:
  - `I pushed a fix in commit <commit_id>, please review it.`
  - `Generate unit testing code for this file.`
  - `Open a follow-up GitHub issue for this discussion.`
- Files and specific lines of code (under the "Files changed" tab): Tag `@coderabbitai` in a new review comment at the desired location with your query. Examples:
  - `@coderabbitai generate unit testing code for this file.`
  -	`@coderabbitai modularize this function.`
- PR comments: Tag `@coderabbitai` in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
  - `@coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.`
  - `@coderabbitai read src/utils.ts and generate unit testing code.`
  - `@coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.`
  - `@coderabbitai help me debug CodeRabbit configuration file.`

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

### CodeRabbit Commands (Invoked using PR comments)

- `@coderabbitai pause` to pause the reviews on a PR.
- `@coderabbitai resume` to resume the paused reviews.
- `@coderabbitai review` to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
- `@coderabbitai full review` to do a full review from scratch and review all the files again.
- `@coderabbitai summary` to regenerate the summary of the PR.
- `@coderabbitai generate docstrings` to [generate docstrings](https://docs.coderabbit.ai/finishing-touches/docstrings) for this PR.
- `@coderabbitai resolve` resolve all the CodeRabbit review comments.
- `@coderabbitai plan` to trigger planning for file edits and PR creation.
- `@coderabbitai configuration` to show the current CodeRabbit configuration for the repository.
- `@coderabbitai help` to get help.

### Other keywords and placeholders

- Add `@coderabbitai ignore` anywhere in the PR description to prevent this PR from being reviewed.
- Add `@coderabbitai summary` to generate the high-level summary at a specific location in the PR description.
- Add `@coderabbitai` anywhere in the PR title to generate the title automatically.

### CodeRabbit Configuration File (`.coderabbit.yaml`)

- You can programmatically configure CodeRabbit by adding a `.coderabbit.yaml` file to the root of your repository.
- Please see the [configuration documentation](https://docs.coderabbit.ai/guides/configure-coderabbit) for more information.
- If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: `# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json`

### Documentation and Community

- Visit our [Documentation](https://docs.coderabbit.ai) for detailed information on how to use CodeRabbit.
- Join our [Discord Community](http://discord.gg/coderabbit) to get help, request features, and share feedback.
- Follow us on [X/Twitter](https://twitter.com/coderabbitai) for updates and announcements.

</details>

<!-- tips_end -->
author_association: NONE
user: login: sonarqubecloud[bot]
created_at: 2025-04-12T11:39:14Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=Learnathon-By-Geeky-Solutions_the-triology&pullRequest=12) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [8 New issues](https://sonarcloud.io/project/issues?id=Learnathon-By-Geeky-Solutions_the-triology&pullRequest=12&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=Learnathon-By-Geeky-Solutions_the-triology&pullRequest=12&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=Learnathon-By-Geeky-Solutions_the-triology&pullRequest=12&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=Learnathon-By-Geeky-Solutions_the-triology&pullRequest=12&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=Learnathon-By-Geeky-Solutions_the-triology&pullRequest=12&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=Learnathon-By-Geeky-Solutions_the-triology&pullRequest=12)


author_association: NONE