diff --git a/src/main/java/com/collicode/propertytracker/infrastructure/repository/PropertyRepository.java b/src/main/java/com/collicode/propertytracker/infrastructure/repository/PropertyRepository.java new file mode 100644 index 0000000..2a08f51 --- /dev/null +++ b/src/main/java/com/collicode/propertytracker/infrastructure/repository/PropertyRepository.java @@ -0,0 +1,10 @@ +package com.collicode.propertytracker.infrastructure.repository; + +import com.collicode.propertytracker.infrastructure.projections.Property; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PropertyRepository extends JpaRepository { + +} diff --git a/src/main/java/com/collicode/propertytracker/service/dto/request/PropertyRequestDTO.java b/src/main/java/com/collicode/propertytracker/service/dto/request/PropertyRequestDTO.java new file mode 100644 index 0000000..7b785f6 --- /dev/null +++ b/src/main/java/com/collicode/propertytracker/service/dto/request/PropertyRequestDTO.java @@ -0,0 +1,15 @@ +package com.collicode.propertytracker.service.dto.request; + +import lombok.Getter; + +import java.math.BigDecimal; + +@Getter +public class PropertyRequestDTO { + private long propertyId; + private String description; + private String propertyName; + private BigDecimal price; + private String address; + private String location; +} diff --git a/src/main/java/com/collicode/propertytracker/service/dto/request/PropertyUpdateRequestDTO.java b/src/main/java/com/collicode/propertytracker/service/dto/request/PropertyUpdateRequestDTO.java new file mode 100644 index 0000000..c5b2ae2 --- /dev/null +++ b/src/main/java/com/collicode/propertytracker/service/dto/request/PropertyUpdateRequestDTO.java @@ -0,0 +1,12 @@ +package com.collicode.propertytracker.service.dto.request; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class PropertyUpdateRequestDTO { + private String description; + private String propertyName; + private BigDecimal price; +} diff --git a/src/main/java/com/collicode/propertytracker/service/dto/response/PropertyResponseDTO.java b/src/main/java/com/collicode/propertytracker/service/dto/response/PropertyResponseDTO.java new file mode 100644 index 0000000..fa55582 --- /dev/null +++ b/src/main/java/com/collicode/propertytracker/service/dto/response/PropertyResponseDTO.java @@ -0,0 +1,17 @@ +package com.collicode.propertytracker.service.dto.response; + +import lombok.Builder; +import lombok.Getter; + +import java.math.BigDecimal; + +@Getter +@Builder +public class PropertyResponseDTO { + private long propertyId; + private String description; + private String propertyName; + private BigDecimal price; + private String address; + private String location; +} diff --git a/src/main/java/com/collicode/propertytracker/service/impl/ApartmentServiceImpl.java b/src/main/java/com/collicode/propertytracker/service/impl/ApartmentServiceImpl.java index 421535a..d843233 100644 --- a/src/main/java/com/collicode/propertytracker/service/impl/ApartmentServiceImpl.java +++ b/src/main/java/com/collicode/propertytracker/service/impl/ApartmentServiceImpl.java @@ -39,9 +39,9 @@ public void createApartment(ApartmentRequestDTO apartmentRequestDTO) { } @Override - public ApartmentUpdateRequestDTO updateApartment(long appartmentId,ApartmentUpdateRequestDTO apartmentUpdateRequestDTO) { + public ApartmentUpdateRequestDTO updateApartment(long apartmentId,ApartmentUpdateRequestDTO apartmentUpdateRequestDTO) { try { - Apartment apartment = apartmentRepository.findById(appartmentId) + Apartment apartment = apartmentRepository.findById(apartmentId) .orElseThrow(() -> EntityNotFoundException.notFound("APARTMENT NOT FOUND")); if (Objects.nonNull(apartmentUpdateRequestDTO.getApartmentName())){ apartment.setApartmentName(apartmentUpdateRequestDTO.getApartmentName()); diff --git a/src/main/java/com/collicode/propertytracker/service/impl/PropertyServiceImpl.java b/src/main/java/com/collicode/propertytracker/service/impl/PropertyServiceImpl.java new file mode 100644 index 0000000..bc9b2bd --- /dev/null +++ b/src/main/java/com/collicode/propertytracker/service/impl/PropertyServiceImpl.java @@ -0,0 +1,66 @@ +package com.collicode.propertytracker.service.impl; + +import com.collicode.propertytracker.exceptions.EntityNotFoundException; +import com.collicode.propertytracker.service.dto.request.PropertyUpdateRequestDTO; +import com.collicode.propertytracker.exceptions.StorageException; +import com.collicode.propertytracker.infrastructure.projections.Property; +import com.collicode.propertytracker.infrastructure.repository.PropertyRepository; +import com.collicode.propertytracker.service.dto.request.PropertyRequestDTO; +import com.collicode.propertytracker.service.spec.PropertyService; +import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; +import java.util.Objects; + +@Service +public class PropertyServiceImpl implements PropertyService { + + private final PropertyRepository propertyRepository; + + public PropertyServiceImpl(PropertyRepository propertyRepository) { + this.propertyRepository = propertyRepository; + } + @Override + public void createProperty(PropertyRequestDTO propertyRequestDTO) { + try { + Property property = new Property(); + property.setDescription(propertyRequestDTO.getDescription()); + property.setPropertyName(propertyRequestDTO.getPropertyName()); + property.setPrice(propertyRequestDTO.getPrice()); + property.setAddress(propertyRequestDTO.getAddress()); + property.setLocation(propertyRequestDTO.getLocation()); + property.setCreatedAt(LocalDateTime.now()); + propertyRepository.save(property); + } catch (Exception e) { + throw StorageException.exception("ERROR WHILE CREATING PROPERTY"); + } + + } + @Override + public PropertyUpdateRequestDTO updateProperty(long propertyId, PropertyUpdateRequestDTO propertyUpdateRequestDTO) { + try { + Property property = propertyRepository.findById(propertyId) + .orElseThrow(() -> EntityNotFoundException.notFound("PROPERTY NOT FOUND")); + if (Objects.nonNull(propertyUpdateRequestDTO.getPropertyName())){ + property.setPropertyName(propertyUpdateRequestDTO.getPropertyName()); + } + propertyRepository.save(property); + }catch (Exception e){ + throw StorageException.exception("ERROR WHILE UPDATING PROPERTY"); + } + return propertyUpdateRequestDTO; + } + @Override + public String deleteProperty(long propertyId) { + Property property = propertyRepository.findById(propertyId) + .orElseThrow(() -> EntityNotFoundException.notFound("PROPERTY NOT FOUND")); + try{ + propertyRepository.delete(property); + return "PROPERTY DELETED"; + }catch (Exception e){ + throw StorageException.exception("ERROR WHILE DELETING PROPERTY"); + } + } + + +} diff --git a/src/main/java/com/collicode/propertytracker/service/spec/ApartmentService.java b/src/main/java/com/collicode/propertytracker/service/spec/ApartmentService.java index 8825c2f..178f710 100644 --- a/src/main/java/com/collicode/propertytracker/service/spec/ApartmentService.java +++ b/src/main/java/com/collicode/propertytracker/service/spec/ApartmentService.java @@ -6,7 +6,7 @@ public interface ApartmentService { void createApartment(ApartmentRequestDTO apartmentRequestDTO); - ApartmentUpdateRequestDTO updateApartment(long appartmentId,ApartmentUpdateRequestDTO apartmentUpdateRequestDTO); + ApartmentUpdateRequestDTO updateApartment(long apartmentId,ApartmentUpdateRequestDTO apartmentUpdateRequestDTO); String deleteApartment(long apartmentId); } diff --git a/src/main/java/com/collicode/propertytracker/service/spec/PropertyService.java b/src/main/java/com/collicode/propertytracker/service/spec/PropertyService.java new file mode 100644 index 0000000..8eb80f9 --- /dev/null +++ b/src/main/java/com/collicode/propertytracker/service/spec/PropertyService.java @@ -0,0 +1,13 @@ +package com.collicode.propertytracker.service.spec; + +import com.collicode.propertytracker.service.dto.request.PropertyRequestDTO; +import com.collicode.propertytracker.service.dto.request.PropertyUpdateRequestDTO; + +public interface PropertyService { + + void createProperty(PropertyRequestDTO propertyRequestDTO); + + PropertyUpdateRequestDTO updateProperty(long propertyId, PropertyUpdateRequestDTO propertyUpdateRequestDTO); + + String deleteProperty(long propertyId); +} diff --git a/src/main/resources/db/migration/V20241015000008__tbl_property.sql b/src/main/resources/db/migration/V20241015000008__tbl_property.sql new file mode 100644 index 0000000..51da3fe --- /dev/null +++ b/src/main/resources/db/migration/V20241015000008__tbl_property.sql @@ -0,0 +1,15 @@ +CREATE SEQUENCE IF NOT EXISTS property-sequence START WITH 1 INCREMENT BY 1; + + CREATE TABLE IF NOT EXISTS tbl_property + ( + property_id bigint NOT NULL + property_name varchar(255) NOT NULL + description varchar(255) NOT NULL + price numeric NOT NULL + address varchar(255) NOT NULL + location varchar(255) NOT NULL + created_at timestamp NOT NULL +update_at timestamp NULL +audit_info text DEFAULT'{}' +PRIMARY KEY (property_id) + ) \ No newline at end of file