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 TimeRangeDto and OperatingHoursDto to handle restaurant opening times
  • Created AddressDto to represent the restaurant's address
  • Created RestaurantCreateUpdateRequestDto for new restaurant creation
  • Created RestaurantDto to represent the created restaurant
© 2026 Devtiro Ltd. All rights reserved