Skip to content

Commit

Permalink
created car controller and car DTO
Browse files Browse the repository at this point in the history
  • Loading branch information
DmytroV95 committed Oct 2, 2023
2 parents dbf1616 + c01e7e2 commit a50bf7a
Show file tree
Hide file tree
Showing 14 changed files with 283 additions and 18 deletions.
41 changes: 41 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,18 @@
<properties>
<java.version>17</java.version>
<maven.checkstyle.plugin.configLocation>checkstyle.xml</maven.checkstyle.plugin.configLocation>
<lombok.mapstruct.binding.version>0.2.0</lombok.mapstruct.binding.version>
<mapstruct.version>1.5.5.Final</mapstruct.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
Expand Down Expand Up @@ -66,6 +72,16 @@
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
</dependencies>

<build>
Expand Down Expand Up @@ -110,6 +126,31 @@
<sourceDirectories>src</sourceDirectories>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${lombok.mapstruct.binding.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>

Expand Down
13 changes: 13 additions & 0 deletions src/main/java/com/project/carsharingapp/config/MapperConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.project.carsharingapp.config;

import org.mapstruct.InjectionStrategy;
import org.mapstruct.NullValueCheckStrategy;

@org.mapstruct.MapperConfig(
componentModel = "spring",
injectionStrategy = InjectionStrategy.CONSTRUCTOR,
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
implementationPackage = "<PACKAGE_NAME>.impl"
)
public class MapperConfig {
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
import com.project.carsharingapp.dto.car.CreateCarRequestDto;
import com.project.carsharingapp.dto.car.UpdateCarRequestDto;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.validation.Valid;
import io.swagger.v3.oas.annotations.tags.Tag;
import java.util.List;
import javax.validation.Valid;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.DeleteMapping;
Expand All @@ -18,14 +19,16 @@
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "Car management",
description = "Endpoints for managing cars")
@RestController
@RequestMapping(value = "/cars")
public class CarController {

@PostMapping
@ResponseStatus(HttpStatus.CREATED)
@Operation(summary = "Get all cars",
description = "Get list of all cars")
@Operation(summary = "Save new car",
description = "Save new car")
public CarDto add(@RequestBody @Valid CreateCarRequestDto requestDto) {
return null;
}
Expand Down
9 changes: 8 additions & 1 deletion src/main/java/com/project/carsharingapp/dto/car/CarDto.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package com.project.carsharingapp.dto.car;


import com.project.carsharingapp.model.Car;
import java.math.BigDecimal;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class CarDto {
private Long id;
private String model;
private String brand;
private Integer inventory;
private Car.CarType carType;
private BigDecimal dailyFee;
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,31 @@
package com.project.carsharingapp.dto.car;

import lombok.Data;
import com.project.carsharingapp.model.Car;
import java.math.BigDecimal;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;

@Data
@Getter
@Setter
public class CreateCarRequestDto {

@NotNull
@Length(min = 1, max = 255)
private String model;
@NotNull
@Length(min = 1, max = 255)
private String brand;
@NotBlank
@NotNull
@Min(0)
private Integer inventory;
@NotBlank
@NotNull
private Car.CarType carType;
@NotBlank
@Min(0)
private BigDecimal dailyFee;
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,31 @@
package com.project.carsharingapp.dto.car;

import com.project.carsharingapp.model.Car;
import java.math.BigDecimal;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.validator.constraints.Length;

@Getter
@Setter
public class UpdateCarRequestDto {
@NotNull
@Length(min = 1, max = 255)
private String model;
@NotNull
@Length(min = 1, max = 255)
private String brand;
@NotBlank
@NotNull
@Min(0)
private Integer inventory;
@NotBlank
@NotNull
private Car.CarType carType;
@NotBlank
@Min(0)
private BigDecimal dailyFee;
}
48 changes: 48 additions & 0 deletions src/main/java/com/project/carsharingapp/model/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.project.carsharingapp.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.math.BigDecimal;
import javax.validation.constraints.PositiveOrZero;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

@Entity
@Getter
@Setter
@SQLDelete(sql = "UPDATE cars SET is_deleted = true WHERE id = ?")
@Where(clause = "is_deleted=false")
@Table(name = "cars")
public class Car {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String model;
@Column(nullable = false)
private String brand;
@PositiveOrZero
private Integer inventory;
@Enumerated(value = EnumType.STRING)
private CarType carType;
@PositiveOrZero
@Column(nullable = false)
private BigDecimal dailyFee;
@Column(nullable = false)
private boolean isDeleted;

public enum CarType {
SEDAN,
SUV,
HATCHBACK,
UNIVERSAL
}
}
34 changes: 34 additions & 0 deletions src/main/java/com/project/carsharingapp/model/Rental.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.project.carsharingapp.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;

@Getter
@Setter
@SQLDelete(sql = "UPDATE rentals SET is_deleted = true WHERE id = ?")
@Where(clause = "is_deleted=false")
@Entity
@Table(name = "rentals")
public class Rental {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private LocalDateTime rentalDate;
private LocalDateTime returnDate;
private LocalDateTime actualReturnDate;
//@OneToOne(fetch = FetchType.LAZY)
//private Car car;
// @ManyToOne(fetch = FetchType.LAZY)
// private User user;
@Column(nullable = false)
private boolean isDeleted;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.project.carsharingapp.repository;

import com.project.carsharingapp.model.Car;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface CarRepository extends JpaRepository<Car, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.project.carsharingapp.repository;

import com.project.carsharingapp.model.Rental;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface RentalRepository extends JpaRepository<Rental, Long> {
}
7 changes: 7 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
<<<<<<< HEAD
spring.datasource.url=jdbc:mysql://localhost:3306/car_sharing_db?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
=======
#spring.datasource.url=jdbc:mysql://localhost:3306/car_sharing_db?serverTimezone=UTC
#spring.datasource.username=root
#spring.datasource.password=anton7570857
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
>>>>>>> main

server.servlet.context-path=/api
spring.jpa.hibernate.ddl-auto=validate
Expand Down
46 changes: 46 additions & 0 deletions src/main/resources/db/changelog/changes/create-cars-table.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
databaseChangeLog:
- changeSet:
id: create-cars-table
author: Anton Zhdanov
changes:
- createTable:
tableName: cars
columns:
- column:
name: id
type: bigint
autoIncrement: true
constraints:
primaryKey: true
nullable: false
- column:
name: model
type: varchar(255)
constraints:
nullable: false
- column:
name: brand
type: varchar(255)
constraints:
nullable: false
- column:
name: inventory
type: int
constraints:
nullable: true
- column:
name: car_type
type: varchar(255)
constraints:
nullable: true
- column:
name: daily_fee
type: decimal(38, 2)
constraints:
nullable: false
- column:
name: is_deleted
type: boolean
defaultValueBoolean: false
constraints:
nullable: false
17 changes: 10 additions & 7 deletions src/main/resources/db/changelog/db.changelog-master.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
databaseChangeLog:
- include:
file: db/changelog/changes/create-roles-table.yaml
- include:
file: /db/changelog/changes/create-users-table.yaml
- include:
file: /db/changelog/changes/create-user-roles-table.yaml
databaseChangeLog:
- include:
file: db/changelog/changes/create-cars-table.yaml
- include:
file: db/changelog/changes/create-roles-table.yaml
- include:
file: /db/changelog/changes/create-users-table.yaml
- include:
file: /db/changelog/changes/create-user-roles-table.yaml

8 changes: 4 additions & 4 deletions src/main/resources/liquibase.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
url=jdbc:mysql://localhost:3306/car_sharing_db?serverTimezone=UTC
username=root
password=gjujlf123$_0
changeLogFile=/db.changelog/db.changelog-master.yaml
url=jdbc:mysql://localhost:3306/car_sharing_db?serverTimezone=UTC
username=root
password=gjujlf123$_0
changeLogFile=/db.changelog/db.changelog-master.yaml

0 comments on commit a50bf7a

Please sign in to comment.