Skip to content

Commit 9ee7958

Browse files
Merge pull request #27 from stevensblueprint/feat/service_at_location
Feat/ServiceAtLocation
2 parents a5dc30b + 0663107 commit 9ee7958

File tree

3 files changed

+113
-17
lines changed

3 files changed

+113
-17
lines changed

src/main/java/com/sarapis/orservice/controller/ServiceAtLocationController.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import org.springframework.web.bind.annotation.RequestMapping;
1515
import org.springframework.web.bind.annotation.RestController;
1616

17+
import java.util.List;
18+
1719
@RestController
1820
@RequestMapping("/api/service_at_locations")
1921
public class ServiceAtLocationController {
@@ -26,22 +28,37 @@ public ServiceAtLocationController(ServiceAtLocationService serviceAtLocationSer
2628

2729
@GetMapping
2830
public ResponseEntity<PaginationDTO<ServiceAtLocationDTO>> getAllServiceAtLocations() {
29-
return null;
31+
List<ServiceAtLocationDTO> servLocDTOs = this.serviceAtLocationService.getAllServicesAtLocation();
32+
PaginationDTO<ServiceAtLocationDTO> paginationDTO = PaginationDTO.of(
33+
servLocDTOs.size(),
34+
1,
35+
1,
36+
servLocDTOs.size(),
37+
true,
38+
false,
39+
false,
40+
servLocDTOs
41+
);
42+
43+
return ResponseEntity.ok(paginationDTO);
3044
}
3145

3246
@GetMapping("/{id}")
3347
public ResponseEntity<ServiceAtLocationDTO> getServiceAtLocationById(@PathVariable String id) {
34-
return null;
48+
ServiceAtLocationDTO servLocDTO = this.serviceAtLocationService.getServiceAtLocationById(id);
49+
return ResponseEntity.ok(servLocDTO);
3550
}
3651

3752
@PostMapping
3853
public ResponseEntity<ServiceAtLocationDTO> createServiceAtLocation(@RequestBody ServiceAtLocationDTO serviceAtLocationDTO) {
39-
return null;
54+
ServiceAtLocationDTO createdServLocDTO = this.serviceAtLocationService.createServiceAtLocation(serviceAtLocationDTO);
55+
return ResponseEntity.ok(createdServLocDTO);
4056
}
4157

4258
@PutMapping("/{id}")
4359
public ResponseEntity<ServiceAtLocationDTO> updateServiceAtLocation(@PathVariable String id, @RequestBody ServiceAtLocationDTO serviceAtLocationDTO) {
44-
return null;
60+
ServiceAtLocationDTO updatedServLocDTO = this.serviceAtLocationService.updateServiceAtLocation(id, serviceAtLocationDTO);
61+
return ResponseEntity.ok(updatedServLocDTO);
4562
}
4663

4764
@DeleteMapping("/{id}")
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,31 @@
11
package com.sarapis.orservice.repository;
22

3+
import com.sarapis.orservice.entity.Attribute;
4+
import com.sarapis.orservice.entity.Metadata;
35
import com.sarapis.orservice.entity.core.ServiceAtLocation;
6+
import jakarta.transaction.Transactional;
47
import org.springframework.data.jpa.repository.JpaRepository;
8+
import org.springframework.data.jpa.repository.Modifying;
9+
import org.springframework.data.jpa.repository.Query;
510
import org.springframework.stereotype.Repository;
611

12+
import java.util.List;
13+
714
@Repository
815
public interface ServiceAtLocationRepository extends JpaRepository<ServiceAtLocation, String> {
16+
@Query("SELECT new Attribute(id, linkId, linkType, linkEntity, value, taxonomyTerm, label) FROM Attribute WHERE linkId = ?1")
17+
List<Attribute> getAttributes(String id);
18+
19+
@Query("SELECT new Metadata(id, resourceId, resourceType, lastActionDate, lastActionType, fieldName, previousValue, replacementValue, updatedBy) FROM Metadata WHERE resourceId = ?1")
20+
List<Metadata> getMetadata(String id);
21+
22+
@Modifying
23+
@Transactional
24+
@Query("DELETE FROM Attribute WHERE linkId = ?1")
25+
void deleteAttributes(String id);
26+
27+
@Modifying
28+
@Transactional
29+
@Query("DELETE FROM Metadata WHERE resourceId = ?1")
30+
void deleteMetadata(String id);
931
}
Lines changed: 70 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
package com.sarapis.orservice.service;
22

3+
import com.sarapis.orservice.dto.AttributeDTO;
4+
import com.sarapis.orservice.dto.ContactDTO;
5+
import com.sarapis.orservice.dto.MetadataDTO;
6+
import com.sarapis.orservice.dto.PhoneDTO;
7+
import com.sarapis.orservice.dto.ScheduleDTO;
8+
import com.sarapis.orservice.dto.ServiceAreaDTO;
39
import com.sarapis.orservice.dto.ServiceAtLocationDTO;
10+
import com.sarapis.orservice.entity.Attribute;
11+
import com.sarapis.orservice.entity.Metadata;
412
import com.sarapis.orservice.entity.core.ServiceAtLocation;
13+
import com.sarapis.orservice.repository.AttributeRepository;
14+
import com.sarapis.orservice.repository.MetadataRepository;
515
import com.sarapis.orservice.repository.ServiceAtLocationRepository;
616
import java.util.List;
717
import org.springframework.beans.factory.annotation.Autowired;
@@ -10,43 +20,90 @@
1020
@Service
1121
public class ServiceAtLocationServiceImpl implements ServiceAtLocationService {
1222
private final ServiceAtLocationRepository serviceAtLocationRepository;
23+
private final AttributeRepository attributeRepository;
24+
private final MetadataRepository metadataRepository;
1325

1426
@Autowired
15-
public ServiceAtLocationServiceImpl(ServiceAtLocationRepository serviceAtLocationService) {
27+
public ServiceAtLocationServiceImpl(ServiceAtLocationRepository serviceAtLocationService, AttributeRepository attributeRepository, MetadataRepository metadataRepository) {
1628
this.serviceAtLocationRepository = serviceAtLocationService;
17-
}
18-
19-
private ServiceAtLocationDTO mapToDTO(ServiceAtLocation serviceAtLocation) {
20-
return null;
21-
}
22-
23-
private ServiceAtLocation mapToEntity(ServiceAtLocationDTO serviceAtLocationDTO) {
24-
return null;
29+
this.attributeRepository = attributeRepository;
30+
this.metadataRepository = metadataRepository;
2531
}
2632

2733
@Override
2834
public List<ServiceAtLocationDTO> getAllServicesAtLocation() {
29-
return List.of();
35+
List<ServiceAtLocationDTO> servLocsDTOs = this.serviceAtLocationRepository.findAll().stream()
36+
.map(ServiceAtLocation::toDTO)
37+
.toList();
38+
servLocsDTOs.forEach(this::addRelatedData);
39+
return servLocsDTOs;
3040
}
3141

3242
@Override
3343
public ServiceAtLocationDTO getServiceAtLocationById(String id) {
34-
return null;
44+
ServiceAtLocation servLoc = this.serviceAtLocationRepository.findById(id)
45+
.orElseThrow(() -> new RuntimeException("Service At Location not found."));
46+
47+
ServiceAtLocationDTO servLocDTO = servLoc.toDTO();
48+
this.addRelatedData(servLocDTO);
49+
return servLocDTO;
3550
}
3651

3752
@Override
3853
public ServiceAtLocationDTO createServiceAtLocation(ServiceAtLocationDTO serviceAtLocationDTO) {
39-
return null;
54+
ServiceAtLocation servLoc = this.serviceAtLocationRepository.save(serviceAtLocationDTO.toEntity());
55+
56+
for (AttributeDTO attributeDTO : serviceAtLocationDTO.getAttributes()) {
57+
this.attributeRepository.save(attributeDTO.toEntity(servLoc.getId()));
58+
}
59+
60+
for (MetadataDTO metadataDTO : serviceAtLocationDTO.getMetadata()) {
61+
this.metadataRepository.save(metadataDTO.toEntity(servLoc.getId()));
62+
}
63+
64+
ServiceAtLocationDTO savedServLocDTO = this.serviceAtLocationRepository.save(servLoc).toDTO();
65+
this.addRelatedData(savedServLocDTO);
66+
return savedServLocDTO;
4067
}
4168

4269
@Override
4370
public ServiceAtLocationDTO updateServiceAtLocation(String id,
4471
ServiceAtLocationDTO serviceAtLocationDTO) {
45-
return null;
72+
ServiceAtLocation servLoc = this.serviceAtLocationRepository.findById(id)
73+
.orElseThrow(() -> new RuntimeException("Service At Location not found"));
74+
75+
servLoc.setDescription(serviceAtLocationDTO.getDescription());
76+
servLoc.setServiceAreas(serviceAtLocationDTO.getServiceAreas().stream().map(ServiceAreaDTO::toEntity).toList());
77+
servLoc.setContacts(serviceAtLocationDTO.getContacts().stream().map(ContactDTO::toEntity).toList());
78+
servLoc.setPhones(serviceAtLocationDTO.getPhones().stream().map(PhoneDTO::toEntity).toList());
79+
servLoc.setSchedules(serviceAtLocationDTO.getSchedules().stream().map(ScheduleDTO::toEntity).toList());
80+
servLoc.setLocation(serviceAtLocationDTO.getLocation().toEntity());
81+
82+
ServiceAtLocation updatedServLoc = this.serviceAtLocationRepository.save(servLoc);
83+
return updatedServLoc.toDTO();
4684
}
4785

4886
@Override
4987
public void deleteServiceAtLocation(String id) {
88+
ServiceAtLocation servLoc = this.serviceAtLocationRepository.findById(id)
89+
.orElseThrow(() -> new RuntimeException("Service At Location not found."));
90+
91+
this.serviceAtLocationRepository.delete(servLoc);
92+
}
93+
94+
private void addRelatedData(ServiceAtLocationDTO serviceAtLocationDTO) {
95+
String id = serviceAtLocationDTO.getId();
96+
List<AttributeDTO> attributeDTOs = this.serviceAtLocationRepository.getAttributes(id)
97+
.stream()
98+
.map(Attribute::toDTO)
99+
.toList();
100+
101+
List<MetadataDTO> metadataDTOs = this.serviceAtLocationRepository.getMetadata(id)
102+
.stream()
103+
.map(Metadata::toDTO)
104+
.toList();
50105

106+
serviceAtLocationDTO.getAttributes().addAll(attributeDTOs);
107+
serviceAtLocationDTO.getMetadata().addAll(metadataDTOs);
51108
}
52109
}

0 commit comments

Comments
 (0)