Skip to content
Snippets Groups Projects
Commit d3e3716a authored by Filip Bugoš's avatar Filip Bugoš
Browse files

Merge branch 'addHouseManufacturer' into 'milestone-1'

Add House and Manufacturer

See merge request !10
parents 48a8f879 46d76212
No related branches found
No related tags found
2 merge requests!25Milestone 1,!10Add House and Manufacturer
Pipeline #
Showing
with 312 additions and 2 deletions
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;
......
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;
}
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)));
}
}
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);
}
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> {}
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"));
}
}
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;
}
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)));
}
}
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);
}
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> {}
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"));
}
}
......@@ -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;
}
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;
}
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;
}
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;
}
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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment