Create Restaurant Dtos
In our restaurant review platform, we need to create several new Data Transfer Objects (DTOs).
Create Flow DTOs
Lets start with the DTOs we need for the create flow:
The AddressDto represents the restaurant's postal address:
package com.devtiro.restaurant.domain.dtos;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class AddressDto {
@NotBlank(message = "Street number is required")
@Pattern(regexp = "^[0-9]{1,5}[a-zA-Z]?$", message = "Invalid street number format")
private String streetNumber;
@NotBlank(message = "Street name is required")
private String streetName;
private String unit;
@NotBlank(message = "City is required")
private String city;
@NotBlank(message = "State is required")
private String state;
@NotBlank(message = "Postal code is required")
private String postalCode;
@NotBlank(message = "Country is required")
private String country;
}For handling operating hours, we create two DTOs:
package com.devtiro.restaurant.domain.dtos;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TimeRangeDto {
@NotBlank(message = "Open time must be provided")
@Pattern(regexp = "^([01]?[0-9]|2[0-3]):[0-5][0-9]$")
private String openTime;
@NotBlank(message = "Close time must be provided")
@Pattern(regexp = "^([01]?[0-9]|2[0-3]):[0-5][0-9]$")
private String closeTime;
}package com.devtiro.restaurant.domain.dtos;
import jakarta.validation.Valid;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class OperatingHoursDto {
@Valid
private TimeRangeDto monday;
@Valid
private TimeRangeDto tuesday;
@Valid
private TimeRangeDto wednesday;
@Valid
private TimeRangeDto thursday;
@Valid
private TimeRangeDto friday;
@Valid
private TimeRangeDto saturday;
@Valid
private TimeRangeDto sunday;
}Then the RestaurantCreateUpdateRequestDto class:
package com.devtiro.restaurant.domain.dtos;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RestaurantCreateUpdateRequestDto {
@NotBlank(message = "Restaurant name is required")
private String name;
@NotBlank(message = "Cuisine type is required")
private String cuisineType;
@NotBlank(message = "Contact information is required")
private String contactInformation;
@Valid
private AddressDto address;
@Valid
private OperatingHoursDto operatingHours;
@Size(min = 1, message = "At least one photo ID is required")
private List<String> photoIds;
}
Return Flow DTOs
Now we need several DTOs to represent the create restaurant:
First the GeoPointDto:
package com.devtiro.restaurant.domain.dtos;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class GeoPointDto {
private Double latitude;
private Double longitude;
}Next the UserDto:
package com.devtiro.restaurant.domain.dtos;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserDto {
private String id;
private String username;
private String givenName;
private String familyName;
}Which allows us to create the ReviewDto:
package com.devtiro.restaurant.domain.dtos;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ReviewDto {
private String id;
private String content;
private Integer rating;
private LocalDateTime datePosted;
private LocalDateTime lastEdited;
private List<PhotoDto> photos = new ArrayList<>();
private UserDto writtenBy;
}Which, in turn, allows us to create the RestaurantDto:
package com.devtiro.restaurant.domain.dtos;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RestaurantDto {
private String id;
private String name;
private String cuisineType;
private String contactInformation;
private Float averageRating;
private GeoPointDto geoLocation;
private AddressDto address;
private OperatingHoursDto operatingHours;
private List<PhotoDto> photos = new ArrayList<>();
private List<ReviewDto> reviews = new ArrayList<>();
private UserDto createdBy;
}Summary
- Created
TimeRangeDtoandOperatingHoursDtoto handle restaurant opening times - Created
AddressDtoto represent the restaurant's address - Created
RestaurantCreateUpdateRequestDtofor new restaurant creation - Created
RestaurantDtoto represent the created restaurant