diff --git a/src/main/java/com/iemr/common/controller/dynamicForm/DynamicFormController.java b/src/main/java/com/iemr/common/controller/dynamicForm/DynamicFormController.java new file mode 100644 index 00000000..9a924872 --- /dev/null +++ b/src/main/java/com/iemr/common/controller/dynamicForm/DynamicFormController.java @@ -0,0 +1,31 @@ +package com.iemr.common.controller.dynamicForm; + +import com.iemr.common.data.dynamic_from.FormEntity; +import com.iemr.common.data.dynamic_from.ModuleEntity; +import com.iemr.common.dto.dynamicForm.FormTypeEntityDTO; +import com.iemr.common.dto.dynamicForm.ModuleEntityDTO; +import com.iemr.common.service.dynamicForm.FormTypeService; +import com.iemr.common.service.dynamicForm.ModuleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RequestMapping(value = "masterFrom") +@RestController +public class DynamicFormController { + @Autowired ModuleService moduleService; + @Autowired + private FormTypeService formTypeService; + + @PostMapping("/modules") + public ResponseEntity createModule(@RequestBody ModuleEntityDTO module) { + return ResponseEntity.ok(moduleService.save(module)); + } + + @PostMapping("/modules/{moduleId}/form-types") + public ResponseEntity createFormType(@PathVariable Long moduleId, @RequestBody FormTypeEntityDTO formType) { + return ResponseEntity.ok(formTypeService.createFormType(moduleId, formType)); + } + + +} diff --git a/src/main/java/com/iemr/common/data/dynamic_from/FormEntity.java b/src/main/java/com/iemr/common/data/dynamic_from/FormEntity.java new file mode 100644 index 00000000..578111f5 --- /dev/null +++ b/src/main/java/com/iemr/common/data/dynamic_from/FormEntity.java @@ -0,0 +1,27 @@ +package com.iemr.common.data.dynamic_from; + +import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.persistence.*; +import lombok.Data; + +@Data +@Entity +@Table(name = "form_types",schema = "db_imer") +public class FormEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "Id") + private Long id; + + @Column(name = "form_name",columnDefinition = "TEXT") + private String formName; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "module_id") + private ModuleEntity module; + + @Column(name = "fields",columnDefinition = "TEXT") + private String fields ; + + +} diff --git a/src/main/java/com/iemr/common/data/dynamic_from/ModuleEntity.java b/src/main/java/com/iemr/common/data/dynamic_from/ModuleEntity.java new file mode 100644 index 00000000..4d699a7e --- /dev/null +++ b/src/main/java/com/iemr/common/data/dynamic_from/ModuleEntity.java @@ -0,0 +1,23 @@ +package com.iemr.common.data.dynamic_from; + +import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.persistence.*; +import lombok.Data; + +import java.util.List; +@Data +@Entity +@Table(name = "m_modules",schema = "db_iemr") +public class ModuleEntity { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "Id") + private Long id; + + @Column(name = "module_name",columnDefinition = "TEXT") + private String moduleName; + + @OneToMany(mappedBy = "module", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List formTypes; + +} diff --git a/src/main/java/com/iemr/common/dto/dynamicForm/FormFieldDTO.java b/src/main/java/com/iemr/common/dto/dynamicForm/FormFieldDTO.java new file mode 100644 index 00000000..27a6ee93 --- /dev/null +++ b/src/main/java/com/iemr/common/dto/dynamicForm/FormFieldDTO.java @@ -0,0 +1,23 @@ +package com.iemr.common.dto.dynamicForm; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Data +public class FormFieldDTO { + private String name; + private String label; + private String type; + private boolean required; + private String inputType; + private String fileType; + private String buttonAction; + private String visibleIfField; + private String visibleIfValue; + private Map validations; + private List> options; + + // Getters and Setters +} diff --git a/src/main/java/com/iemr/common/dto/dynamicForm/FormTypeEntityDTO.java b/src/main/java/com/iemr/common/dto/dynamicForm/FormTypeEntityDTO.java new file mode 100644 index 00000000..ff31dfd5 --- /dev/null +++ b/src/main/java/com/iemr/common/dto/dynamicForm/FormTypeEntityDTO.java @@ -0,0 +1,18 @@ +package com.iemr.common.dto.dynamicForm; + +import lombok.Data; + +import java.util.List; + +@Data +public class FormTypeEntityDTO { + + private Long id; + + private String formName; + + private ModuleEntityDTO module; + + private List fields; + +} diff --git a/src/main/java/com/iemr/common/dto/dynamicForm/ModuleEntityDTO.java b/src/main/java/com/iemr/common/dto/dynamicForm/ModuleEntityDTO.java new file mode 100644 index 00000000..03cfc834 --- /dev/null +++ b/src/main/java/com/iemr/common/dto/dynamicForm/ModuleEntityDTO.java @@ -0,0 +1,12 @@ +package com.iemr.common.dto.dynamicForm; + +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; +@Data +public class ModuleEntityDTO { + private Long id; + private String moduleName; + +} diff --git a/src/main/java/com/iemr/common/repository/dynamic_form/FormTypeRepository.java b/src/main/java/com/iemr/common/repository/dynamic_form/FormTypeRepository.java new file mode 100644 index 00000000..b3b731fe --- /dev/null +++ b/src/main/java/com/iemr/common/repository/dynamic_form/FormTypeRepository.java @@ -0,0 +1,8 @@ +package com.iemr.common.repository.dynamic_form; + +import com.iemr.common.data.dynamic_from.FormEntity; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface FormTypeRepository extends CrudRepository {} diff --git a/src/main/java/com/iemr/common/repository/dynamic_form/ModuleRepository.java b/src/main/java/com/iemr/common/repository/dynamic_form/ModuleRepository.java new file mode 100644 index 00000000..e4eb221e --- /dev/null +++ b/src/main/java/com/iemr/common/repository/dynamic_form/ModuleRepository.java @@ -0,0 +1,10 @@ +package com.iemr.common.repository.dynamic_form; + +import com.iemr.common.data.dynamic_from.ModuleEntity; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ModuleRepository extends CrudRepository { + +} diff --git a/src/main/java/com/iemr/common/service/dynamicForm/FormTypeService.java b/src/main/java/com/iemr/common/service/dynamicForm/FormTypeService.java new file mode 100644 index 00000000..38068cdc --- /dev/null +++ b/src/main/java/com/iemr/common/service/dynamicForm/FormTypeService.java @@ -0,0 +1,35 @@ +package com.iemr.common.service.dynamicForm; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iemr.common.data.dynamic_from.FormEntity; +import com.iemr.common.data.dynamic_from.ModuleEntity; +import com.iemr.common.dto.dynamicForm.FormTypeEntityDTO; +import com.iemr.common.repository.dynamic_form.FormTypeRepository; +import com.iemr.common.repository.dynamic_form.ModuleRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class FormTypeService { + @Autowired + ModuleRepository moduleRepo; + @Autowired + FormTypeRepository formTypeRepo; + @Autowired + ObjectMapper objectMapper; + + public FormEntity createFormType(Long moduleId, FormTypeEntityDTO formTypeDTO) { + ModuleEntity module = moduleRepo.findById(moduleId).orElseThrow(); + FormEntity formType = new FormEntity(); + formType.setFormName(formTypeDTO.getFormName()); + formType.setModule(module); + try { + String fieldsJson = objectMapper.writeValueAsString(formTypeDTO.getFields()); + formType.setFields(fieldsJson); + } catch (JsonProcessingException e) { + throw new RuntimeException("Failed to serialize form fields", e); + } + return formTypeRepo.save(formType); + } +} \ No newline at end of file diff --git a/src/main/java/com/iemr/common/service/dynamicForm/ModuleService.java b/src/main/java/com/iemr/common/service/dynamicForm/ModuleService.java new file mode 100644 index 00000000..644d2c59 --- /dev/null +++ b/src/main/java/com/iemr/common/service/dynamicForm/ModuleService.java @@ -0,0 +1,26 @@ +package com.iemr.common.service.dynamicForm; + +import com.iemr.common.data.dynamic_from.ModuleEntity; +import com.iemr.common.dto.dynamicForm.ModuleEntityDTO; +import com.iemr.common.repository.dynamic_form.ModuleRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@Service +public class ModuleService { + @Autowired + ModuleRepository repo; + + public ModuleEntity save(ModuleEntityDTO module) { + ModuleEntity moduleEntity = new ModuleEntity(); + moduleEntity.setModuleName(module.getModuleName()); + return repo.save(moduleEntity); + } + + public Optional findById(Long id) { + return repo.findById(id); + } +} +