diff --git a/core/src/main/java/cz/muni/fi/pa165/core/device/Device.java b/core/src/main/java/cz/muni/fi/pa165/core/device/Device.java index 7e1f2864388a487f39af4ace83e37650a394039e..8c78ad911ca9b164067608b6785c5ec814397b9d 100644 --- a/core/src/main/java/cz/muni/fi/pa165/core/device/Device.java +++ b/core/src/main/java/cz/muni/fi/pa165/core/device/Device.java @@ -1,8 +1,10 @@ package cz.muni.fi.pa165.core.device; import cz.muni.fi.pa165.core.common.DomainObject; +import cz.muni.fi.pa165.core.manufacturer.Manufacturer; import cz.muni.fi.pa165.core.smartmeter.SmartMeter; import jakarta.persistence.Entity; +import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import lombok.*; @@ -21,8 +23,8 @@ public class Device extends DomainObject { private String name; @OneToMany private List<SmartMeter> smartMeterList; - // Manufacturer - // private Manufacturer manufacturer; + + @ManyToOne private Manufacturer manufacturer; // Company ?? // private Company company; diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/.gitkeep b/core/src/main/java/cz/muni/fi/pa165/core/house/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/House.java b/core/src/main/java/cz/muni/fi/pa165/core/house/House.java new file mode 100644 index 0000000000000000000000000000000000000000..524c878514d39ff1f8ebd31d610cacd340ab8edc --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/house/House.java @@ -0,0 +1,27 @@ +package cz.muni.fi.pa165.core.house; + +import cz.muni.fi.pa165.core.common.DomainObject; +import cz.muni.fi.pa165.core.smartmeter.SmartMeter; +import jakarta.persistence.Entity; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import lombok.*; + +import java.util.List; + +@Getter +@Setter +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "domain_house") +public class House extends DomainObject { + + private String address; + private String city; + private String state; + private String zipcode; + + @OneToMany private List<SmartMeter> smartMeterList; +} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/HouseController.java b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseController.java new file mode 100644 index 0000000000000000000000000000000000000000..6e3a3cd0185733abe5ce1292ee8a6c8af86e4854 --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseController.java @@ -0,0 +1,62 @@ +package cz.muni.fi.pa165.core.house; + +import cz.muni.fi.pa165.core.smartmeter.SmartMeter; +import cz.muni.fi.pa165.core.smartmeter.SmartMeterMapper; +import cz.muni.fi.pa165.core.smartmeter.SmartMeterService; +import cz.muni.fi.pa165.model.dto.house.HouseCreateDto; +import cz.muni.fi.pa165.model.dto.house.HouseDto; +import cz.muni.fi.pa165.model.dto.smartDevice.SmartMeterCreateDto; +import cz.muni.fi.pa165.model.dto.smartDevice.SmartMeterDto; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/house") +public class HouseController { + + private final HouseService houseService; + private final HouseMapper mapper; + + @Autowired + public HouseController(HouseService houseService, HouseMapper mapper) { + this.houseService = houseService; + this.mapper = mapper; + } + + @Operation( // metadata for inclusion into OpenAPI document + summary = "Get all house pageable", + description = "...") + @GetMapping("pageable") + public List<HouseDto> findAllPageable(Pageable pageable) { + return mapper.toDtoList((List<House>) houseService.findAllPageable(pageable)); + } + + @Operation( // metadata for inclusion into OpenAPI document + summary = "Get all houses", + description = "...") + @CrossOrigin(origins = "*") + @GetMapping // CORS headers needed for JavaScript clients + public List<HouseDto> findAll() { + return mapper.toDtoList(houseService.findAll()); + } + + @Operation( // metadata for inclusion into OpenAPI document + summary = "Get house by id", + description = "...") + @GetMapping("/{id}") + public HouseDto find(@PathVariable String id) { + return mapper.toDto(houseService.findById(id)); + } + + @Operation( // metadata for inclusion into OpenAPI document + summary = "Create house", + description = "...") + @PostMapping + public HouseDto create(@RequestBody HouseCreateDto houseDto) { + return mapper.toDto(houseService.create(mapper.fromCreateDto(houseDto))); + } +} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/HouseMapper.java b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..efca5bd3afe239f36ed4a57af42ff9b1a3692f5e --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseMapper.java @@ -0,0 +1,15 @@ +package cz.muni.fi.pa165.core.house; + +import cz.muni.fi.pa165.core.common.DomainMapper; +import cz.muni.fi.pa165.core.device.Device; +import cz.muni.fi.pa165.model.dto.device.DeviceCreateDto; +import cz.muni.fi.pa165.model.dto.device.DeviceUpdateDto; +import cz.muni.fi.pa165.model.dto.house.HouseCreateDto; +import cz.muni.fi.pa165.model.dto.house.HouseDto; +import org.mapstruct.Mapper; + +@Mapper +public interface HouseMapper extends DomainMapper<House, HouseDto> { + + House fromCreateDto(HouseCreateDto dto); +} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/HouseRepository.java b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..f97cc5dde015fbd3fde33d849389bf80d44e0417 --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseRepository.java @@ -0,0 +1,7 @@ +package cz.muni.fi.pa165.core.house; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface HouseRepository extends JpaRepository<House, String> {} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/house/HouseService.java b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseService.java new file mode 100644 index 0000000000000000000000000000000000000000..713710c525bbd79ca6ba10f6d50e15d6a756c0b0 --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/house/HouseService.java @@ -0,0 +1,26 @@ +package cz.muni.fi.pa165.core.house; + +import cz.muni.fi.pa165.core.common.DomainService; +import jakarta.persistence.EntityNotFoundException; +import lombok.Getter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class HouseService extends DomainService<House> { + + @Getter private final HouseRepository repository; + + @Autowired + public HouseService(HouseRepository houseRepository) { + repository = houseRepository; + } + + @Transactional(readOnly = true) + public House findById(String id) { + return repository + .findById(id) + .orElseThrow(() -> new EntityNotFoundException("House with '" + id + "' not found")); + } +} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/Manufacturer.java b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/Manufacturer.java new file mode 100644 index 0000000000000000000000000000000000000000..1b6bb889fb98ed56f82d1a0400006d31f0043a37 --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/Manufacturer.java @@ -0,0 +1,24 @@ +package cz.muni.fi.pa165.core.manufacturer; + +import cz.muni.fi.pa165.core.common.DomainObject; +import cz.muni.fi.pa165.core.device.Device; +import jakarta.persistence.Entity; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import lombok.*; + +import java.util.List; + +@Getter +@Setter +@Entity +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "domain_manufacturer") +public class Manufacturer extends DomainObject { + + private String name; + + @OneToMany private List<Device> deviceList; +} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerController.java b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerController.java new file mode 100644 index 0000000000000000000000000000000000000000..fec1c1dbd6a12cb83e4083fa14b61e9b728d67ab --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerController.java @@ -0,0 +1,61 @@ +package cz.muni.fi.pa165.core.manufacturer; + +import cz.muni.fi.pa165.core.house.House; +import cz.muni.fi.pa165.model.dto.house.HouseCreateDto; +import cz.muni.fi.pa165.model.dto.house.HouseDto; +import cz.muni.fi.pa165.model.dto.manufacturer.ManufacturerCreateDto; +import cz.muni.fi.pa165.model.dto.manufacturer.ManufacturerDto; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/manufacturer") +public class ManufacturerController { + + private final ManufacturerService manufacturerService; + private final ManufacturerMapper mapper; + + @Autowired + public ManufacturerController( + ManufacturerService manufacturerService, ManufacturerMapper mapper) { + this.manufacturerService = manufacturerService; + this.mapper = mapper; + } + + @Operation( // metadata for inclusion into OpenAPI document + summary = "Get all manufacturer pageable", + description = "...") + @GetMapping("pageable") + public List<ManufacturerDto> findAllPageable(Pageable pageable) { + return mapper.toDtoList((List<Manufacturer>) manufacturerService.findAllPageable(pageable)); + } + + @Operation( // metadata for inclusion into OpenAPI document + summary = "Get all manufacturers", + description = "...") + @CrossOrigin(origins = "*") + @GetMapping // CORS headers needed for JavaScript clients + public List<ManufacturerDto> findAll() { + return mapper.toDtoList(manufacturerService.findAll()); + } + + @Operation( // metadata for inclusion into OpenAPI document + summary = "Get manufacturer by id", + description = "...") + @GetMapping("/{id}") + public ManufacturerDto find(@PathVariable String id) { + return mapper.toDto(manufacturerService.findById(id)); + } + + @Operation( // metadata for inclusion into OpenAPI document + summary = "Create manufacturer", + description = "...") + @PostMapping + public ManufacturerDto create(@RequestBody ManufacturerCreateDto manufacturerDto) { + return mapper.toDto(manufacturerService.create(mapper.fromCreateDto(manufacturerDto))); + } +} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerMapper.java b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..34081e24aa59a5a4f43f28a9081ae8dd01b77fa2 --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerMapper.java @@ -0,0 +1,12 @@ +package cz.muni.fi.pa165.core.manufacturer; + +import cz.muni.fi.pa165.core.common.DomainMapper; +import cz.muni.fi.pa165.model.dto.manufacturer.ManufacturerCreateDto; +import cz.muni.fi.pa165.model.dto.manufacturer.ManufacturerDto; +import org.mapstruct.Mapper; + +@Mapper +public interface ManufacturerMapper extends DomainMapper<Manufacturer, ManufacturerDto> { + + Manufacturer fromCreateDto(ManufacturerCreateDto dto); +} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerRepository.java b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..1369520c2a6ef400cc4b74c0512907b0527c7b04 --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerRepository.java @@ -0,0 +1,7 @@ +package cz.muni.fi.pa165.core.manufacturer; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ManufacturerRepository extends JpaRepository<Manufacturer, String> {} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerService.java b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerService.java new file mode 100644 index 0000000000000000000000000000000000000000..4068b76a7a0a09b3df31efc14d22e614e5a5885d --- /dev/null +++ b/core/src/main/java/cz/muni/fi/pa165/core/manufacturer/ManufacturerService.java @@ -0,0 +1,26 @@ +package cz.muni.fi.pa165.core.manufacturer; + +import cz.muni.fi.pa165.core.common.DomainService; +import jakarta.persistence.EntityNotFoundException; +import lombok.Getter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +public class ManufacturerService extends DomainService<Manufacturer> { + + @Getter private final ManufacturerRepository repository; + + @Autowired + public ManufacturerService(ManufacturerRepository manufacturerRepository) { + repository = manufacturerRepository; + } + + @Transactional(readOnly = true) + public Manufacturer findById(String id) { + return repository + .findById(id) + .orElseThrow(() -> new EntityNotFoundException("Manufacturer with '" + id + "' not found")); + } +} diff --git a/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeter.java b/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeter.java index 7f4c51dd7d100ef70df8a2e74cf0ed297053ba68..19a51f7fcd5f7be75b752f7f850df1accb43e83a 100644 --- a/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeter.java +++ b/core/src/main/java/cz/muni/fi/pa165/core/smartmeter/SmartMeter.java @@ -2,6 +2,7 @@ package cz.muni.fi.pa165.core.smartmeter; import cz.muni.fi.pa165.core.common.DomainObject; import cz.muni.fi.pa165.core.device.Device; +import cz.muni.fi.pa165.core.house.House; import jakarta.persistence.Entity; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; @@ -17,4 +18,6 @@ import lombok.*; public class SmartMeter extends DomainObject { @ManyToOne private Device device; private String smartMeterIdentityNumber = getId(); + + @ManyToOne private House house; } diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseCreateDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseCreateDto.java new file mode 100644 index 0000000000000000000000000000000000000000..99a6baf45a21df52cdcb3817e39605db2dd26b66 --- /dev/null +++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseCreateDto.java @@ -0,0 +1,11 @@ +package cz.muni.fi.pa165.model.dto.house; + +import cz.muni.fi.pa165.model.dto.common.DomainObjectDto; + +public class HouseCreateDto extends DomainObjectDto { + + public String address; + public String city; + public String state; + public String zipcode; +} diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseDto.java new file mode 100644 index 0000000000000000000000000000000000000000..fad881fffadd02fd6b5e37b618e07b4acdbdfbf5 --- /dev/null +++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/house/HouseDto.java @@ -0,0 +1,11 @@ +package cz.muni.fi.pa165.model.dto.house; + +import cz.muni.fi.pa165.model.dto.common.DomainObjectDto; + +public class HouseDto extends DomainObjectDto { + + public String address; + public String city; + public String state; + public String zipcode; +} diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerCreateDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerCreateDto.java new file mode 100644 index 0000000000000000000000000000000000000000..cf2890f22e68d95936018642bc364102527a8ffa --- /dev/null +++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerCreateDto.java @@ -0,0 +1,8 @@ +package cz.muni.fi.pa165.model.dto.manufacturer; + +import cz.muni.fi.pa165.model.dto.common.DomainObjectDto; + +public class ManufacturerCreateDto extends DomainObjectDto { + + public String name; +} diff --git a/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerDto.java b/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerDto.java new file mode 100644 index 0000000000000000000000000000000000000000..16bd260c52c27235f5d8b0cf5c84fc096be0bfbe --- /dev/null +++ b/model/src/main/java/cz/muni/fi/pa165/model/dto/manufacturer/ManufacturerDto.java @@ -0,0 +1,8 @@ +package cz.muni.fi.pa165.model.dto.manufacturer; + +import cz.muni.fi.pa165.model.dto.common.DomainObjectDto; + +public class ManufacturerDto extends DomainObjectDto { + + public String name; +}