Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/main/java/com/opom/bdms/config/SecurityConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ public class SecurityConfig {
"/swagger-ui/**",
"/swagger-ui.html",
"/v3/api-docs/**",
"/api/v1/bdms/permissions/**"
"/api/v1/bdms/permissions/**",
"/api/v1/bdms/announcements/**",
"/api/v1/bdms/hospitals/**"
};

@Bean
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package com.opom.bdms.features.announcement.controller;

import com.opom.bdms.dto.request.PageAndFilterDTO;
import com.opom.bdms.dto.response.ApiResponse;
import com.opom.bdms.features.announcement.dto.request.AnnouncementFilter;
import com.opom.bdms.features.announcement.dto.request.AnnouncementRequest;
import com.opom.bdms.features.announcement.dto.response.AnnouncementResponse;
import com.opom.bdms.features.announcement.service.AnnouncementService;
import com.opom.bdms.util.ApiResponseUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/bdms/announcements")
public class AnnouncementController {

private final AnnouncementService announcementService;

@PostMapping
public ResponseEntity<ApiResponse> create(@Valid @RequestBody AnnouncementRequest request, HttpServletRequest httpServletRequest){
AnnouncementResponse response = announcementService.create(request);
ApiResponse apiResponse = ApiResponseUtil.created(
response,
"Announcement created successfully",
httpServletRequest
);
return ResponseEntity.status(HttpStatus.CREATED).body(apiResponse);
}

@PostMapping("/pageable")
public ResponseEntity<ApiResponse> getAll(@RequestBody(required = false) PageAndFilterDTO<AnnouncementFilter> pageAndFilterDTO, HttpServletRequest httpServletRequest) {
if (pageAndFilterDTO == null) {
pageAndFilterDTO = new PageAndFilterDTO<>();
}
var pagination = announcementService.getAll(pageAndFilterDTO);
ApiResponse apiResponse = ApiResponseUtil.paginated(
pagination,
"Announcement retrieved successfully",
httpServletRequest
);
return ResponseEntity.ok(apiResponse);
}

@GetMapping("/{id}")
public ResponseEntity<ApiResponse> findById(@PathVariable Long id, HttpServletRequest httpServletRequest) {
AnnouncementResponse response = announcementService.findById(id);
ApiResponse apiResponse = ApiResponseUtil.success(
response,
"Announcement retrieved successfully",
httpServletRequest
);
return ResponseEntity.ok(apiResponse);
}

@PutMapping("/{id}")
public ResponseEntity<ApiResponse> update(@PathVariable Long id, @Valid @RequestBody AnnouncementRequest request, HttpServletRequest httpServletRequest) {
AnnouncementResponse response = announcementService.update(id, request);
ApiResponse apiResponse = ApiResponseUtil.success(
response,
"Announcement updated successfully",
httpServletRequest
);
return ResponseEntity.ok(apiResponse);
}

@DeleteMapping("/{id}")
public ResponseEntity<ApiResponse> delete(@PathVariable Long id, HttpServletRequest httpServletRequest) {
announcementService.delete(id);
ApiResponse apiResponse = ApiResponseUtil.noContent(
"Announcement deleted successfully",
httpServletRequest
);
return ResponseEntity.status(HttpStatus.NO_CONTENT).body(apiResponse);
}

@DeleteMapping("/batch")
public ResponseEntity<ApiResponse> deleteMany(@RequestBody List<Long> ids, HttpServletRequest httpServletRequest) {
announcementService.deleteMany(ids);
ApiResponse apiResponse = ApiResponseUtil.noContent(
"Announcements deleted successfully",
httpServletRequest
);
return ResponseEntity.status(HttpStatus.NO_CONTENT).body(apiResponse);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.opom.bdms.features.announcement.dto.request;

import com.opom.bdms.dto.request.BaseFilter;
import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@EqualsAndHashCode(callSuper = true)
public class AnnouncementFilter extends BaseFilter {
private String title;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.opom.bdms.features.announcement.dto.request;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

import java.time.LocalDate;

public record AnnouncementRequest(
@NotBlank(message = "Title is required")
String title,

@NotBlank(message = "Content is required")
String content,

@NotNull(message = "Expired Date is required")
LocalDate expiredAt
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.opom.bdms.features.announcement.dto.response;


import com.opom.bdms.dto.response.MasterData;
import lombok.Builder;

import java.time.LocalDate;

@Builder
public record AnnouncementResponse(
Long id,
String title,
String content,
LocalDate expiredAt,
MasterData masterData
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.opom.bdms.features.announcement.mapper;

import com.opom.bdms.entity.Announcement;
import com.opom.bdms.entity.Permission;
import com.opom.bdms.features.announcement.dto.request.AnnouncementRequest;
import com.opom.bdms.features.announcement.dto.response.AnnouncementResponse;
import com.opom.bdms.features.permission.dto.request.PermissionRequest;
import com.opom.bdms.mapper.MasterDataMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class AnnouncementMapper {

private final MasterDataMapper masterDataMapper;

public Announcement toEntity(AnnouncementRequest request){
Announcement entity = new Announcement();
entity.setTitle(request.title());
entity.setContent(request.content());
entity.setExpiredAt(request.expiredAt());

return entity;
}

public AnnouncementResponse toResponse(Announcement entity){
if(entity == null){
return null;
}

return AnnouncementResponse.builder()
.id(entity.getId())
.title(entity.getTitle())
.content(entity.getContent())
.masterData(masterDataMapper.toMasterData(entity))
.build();
}

public void updateEntity(Announcement entity, AnnouncementRequest request) {
entity.setTitle(request.title());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.opom.bdms.features.announcement.service;

import com.opom.bdms.features.announcement.dto.request.AnnouncementFilter;
import com.opom.bdms.features.announcement.dto.request.AnnouncementRequest;
import com.opom.bdms.features.announcement.dto.response.AnnouncementResponse;
import com.opom.bdms.service.BaseService;

public interface AnnouncementService extends BaseService<AnnouncementRequest,AnnouncementResponse, AnnouncementFilter> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.opom.bdms.features.announcement.service.impl;

import com.opom.bdms.entity.Announcement;
import com.opom.bdms.features.announcement.dto.request.AnnouncementFilter;
import com.opom.bdms.features.announcement.dto.request.AnnouncementRequest;
import com.opom.bdms.features.announcement.dto.response.AnnouncementResponse;
import com.opom.bdms.features.announcement.mapper.AnnouncementMapper;
import com.opom.bdms.features.announcement.service.AnnouncementService;
import com.opom.bdms.repository.AnnouncementRepository;
import com.opom.bdms.service.impl.BaseServiceImpl;
import org.springframework.stereotype.Service;

@Service
public class AnnouncementServiceImpl extends BaseServiceImpl<Announcement, AnnouncementRequest, AnnouncementResponse, AnnouncementFilter> implements AnnouncementService {

private final AnnouncementMapper announcementMapper;
private final AnnouncementRepository announcementRepository;

public AnnouncementServiceImpl(AnnouncementRepository announcementRepository,AnnouncementMapper announcementMapper){
super(announcementRepository);
this.announcementMapper = announcementMapper;
this.announcementRepository = announcementRepository;
}
@Override
protected Announcement mapRequestToEntity(AnnouncementRequest request) {
return announcementMapper.toEntity(request);
}

@Override
protected AnnouncementResponse mapEntityToResponse(Announcement entity) {
return announcementMapper.toResponse(entity);
}

@Override
protected void updateEntityFromRequest(Announcement entity, AnnouncementRequest request) {
announcementMapper.updateEntity(entity,request);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package com.opom.bdms.features.hospital.controller;

import com.opom.bdms.dto.request.PageAndFilterDTO;
import com.opom.bdms.dto.response.ApiResponse;
import com.opom.bdms.features.hospital.dto.request.HospitalFilter;
import com.opom.bdms.features.hospital.dto.request.HospitalRequest;
import com.opom.bdms.features.hospital.dto.response.HospitalResponse;
import com.opom.bdms.features.hospital.service.HospitalService;
import com.opom.bdms.util.ApiResponseUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/bdms/hospitals")
public class HospitalController {
private final HospitalService hospitalService;

@PostMapping
public ResponseEntity<ApiResponse> create(@Valid @RequestBody HospitalRequest request, HttpServletRequest httpServletRequest){
HospitalResponse response = hospitalService.create(request);
ApiResponse apiResponse = ApiResponseUtil.created(
response,
"hospital created successfully",
httpServletRequest
);
return ResponseEntity.status(HttpStatus.CREATED).body(apiResponse);
}

@PostMapping("/pageable")
public ResponseEntity<ApiResponse> getAll(@RequestBody(required = false) PageAndFilterDTO<HospitalFilter> pageAndFilterDTO, HttpServletRequest httpServletRequest) {
if (pageAndFilterDTO == null) {
pageAndFilterDTO = new PageAndFilterDTO<>();
}
var pagination = hospitalService.getAll(pageAndFilterDTO);
ApiResponse apiResponse = ApiResponseUtil.paginated(
pagination,
"Hospital retrieved successfully",
httpServletRequest
);
return ResponseEntity.ok(apiResponse);
}

@GetMapping("/{id}")
public ResponseEntity<ApiResponse> findById(@PathVariable Long id, HttpServletRequest httpServletRequest) {
HospitalResponse response = hospitalService.findById(id);
ApiResponse apiResponse = ApiResponseUtil.success(
response,
"Hospital retrieved successfully",
httpServletRequest
);
return ResponseEntity.ok(apiResponse);
}

@PutMapping("/{id}")
public ResponseEntity<ApiResponse> update(@PathVariable Long id, @Valid @RequestBody HospitalRequest request, HttpServletRequest httpServletRequest) {
HospitalResponse response = hospitalService.update(id, request);
ApiResponse apiResponse = ApiResponseUtil.success(
response,
"Hospital updated successfully",
httpServletRequest
);
return ResponseEntity.ok(apiResponse);
}

@DeleteMapping("/{id}")
public ResponseEntity<ApiResponse> delete(@PathVariable Long id, HttpServletRequest httpServletRequest) {
hospitalService.delete(id);
ApiResponse apiResponse = ApiResponseUtil.noContent(
"Hospital deleted successfully",
httpServletRequest
);
return ResponseEntity.status(HttpStatus.NO_CONTENT).body(apiResponse);
}

@DeleteMapping("/batch")
public ResponseEntity<ApiResponse> deleteMany(@RequestBody List<Long> ids, HttpServletRequest httpServletRequest) {
hospitalService.deleteMany(ids);
ApiResponse apiResponse = ApiResponseUtil.noContent(
"Hospitals deleted successfully",
httpServletRequest
);
return ResponseEntity.status(HttpStatus.NO_CONTENT).body(apiResponse);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.opom.bdms.features.hospital.dto.request;

import com.opom.bdms.dto.request.BaseFilter;
import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
@EqualsAndHashCode(callSuper = true)
public class HospitalFilter extends BaseFilter {
private String name;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.opom.bdms.features.hospital.dto.request;


import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

public record HospitalRequest(
@NotBlank(message = "Name is required")
String name,

@NotBlank(message = "Address is required")
String address,

@NotNull(message = "Phone Number is required")
String phone,

@Email
@NotNull(message = "Email is required")
String email,

Boolean isVerified
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.opom.bdms.features.hospital.dto.response;

import com.opom.bdms.dto.response.MasterData;
import lombok.Builder;

@Builder
public record HospitalResponse(
Long id,
String name,
String address,
String phone,
String email,
Boolean isVerified,
MasterData masterData
) {}
Loading
Loading