Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,19 @@
</properties>

<dependencies>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-jdbc</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.zalando</groupId>
<artifactId>logbook-spring-boot-starter</artifactId>
<version>3.7.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/ru/practicum/shareit/ShareItApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
@SpringBootApplication
public class ShareItApp {

public static void main(String[] args) {
SpringApplication.run(ShareItApp.class, args);
}
public static void main(String[] args) {
SpringApplication.run(ShareItApp.class, args);
}

}
14 changes: 11 additions & 3 deletions src/main/java/ru/practicum/shareit/booking/Booking.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package ru.practicum.shareit.booking;

/**
* TODO Sprint add-bookings.
*/
import lombok.Data;

import java.time.LocalDateTime;

@Data
public class Booking {
private Long id;
private LocalDateTime start;
private LocalDateTime end;
private Long itemId;
private Long booker;
private Status status;
}
8 changes: 8 additions & 0 deletions src/main/java/ru/practicum/shareit/booking/Status.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ru.practicum.shareit.booking;

public enum Status {
WAITING,
APPROVED,
REJECTED,
CANCELED;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package ru.practicum.shareit.booking.dto;

import jakarta.validation.constraints.Null;
import lombok.Data;
import ru.practicum.shareit.booking.Status;

import java.time.LocalDateTime;

@Data
public class BookingCreateDto {
private Long id;
@Null
private LocalDateTime start;
@Null
private LocalDateTime end;
@Null
private Long itemId;
@Null
private Long booker;
private Status status;
}
17 changes: 13 additions & 4 deletions src/main/java/ru/practicum/shareit/booking/dto/BookingDto.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
package ru.practicum.shareit.booking.dto;

/**
* TODO Sprint add-bookings.
*/
public class BookingDto {
import lombok.Data;
import ru.practicum.shareit.booking.Status;

import java.time.LocalDateTime;

@Data
public class BookingDto {
private Long id;
private LocalDateTime start;
private LocalDateTime end;
private Long itemId;
private Long booker;
private Status status;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.practicum.shareit.booking.dto;

import jakarta.validation.constraints.Null;
import lombok.Data;
import ru.practicum.shareit.booking.Status;

import java.time.LocalDateTime;

@Data
public class BookingUpdateDto {
@Null
private Long id;
private LocalDateTime start;
private LocalDateTime end;
private Long itemId;
private Long booker;
private Status status;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.practicum.shareit.exception;

public class ConflictException extends RuntimeException {
public ConflictException(String message) {
super(message);
}
}
38 changes: 38 additions & 0 deletions src/main/java/ru/practicum/shareit/exception/ErrorHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package ru.practicum.shareit.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;


@RestControllerAdvice
public class ErrorHandler {

@ExceptionHandler
@ResponseStatus(HttpStatus.NOT_FOUND)
public ErrorResponse handleNotFoundException(final NotFoundException e) {
return new ErrorResponse("Error", e.getMessage());
}

@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ErrorResponse handleValidationException(final ValidationException e) {
return new ErrorResponse("Error", e.getMessage());
}

@ExceptionHandler
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public ErrorResponse handleInternalServerErrorException(final InternalServerErrorException e) {
return new ErrorResponse("Error", e.getMessage());
}

@ExceptionHandler
@ResponseStatus(HttpStatus.CONFLICT)
public ErrorResponse handleConflictException(final ConflictException e) {
return new ErrorResponse("Error", e.getMessage());
}

}


19 changes: 19 additions & 0 deletions src/main/java/ru/practicum/shareit/exception/ErrorResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package ru.practicum.shareit.exception;

public class ErrorResponse {
private final String error;
private final String description;

public ErrorResponse(String error, String description) {
this.error = error;
this.description = description;
}

public String getError() {
return error;
}

public String getDescription() {
return description;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ru.practicum.shareit.exception;

public class InternalServerErrorException extends RuntimeException {
public InternalServerErrorException(String message) {
super(message);
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package ru.practicum.shareit.exception;

public class NotFoundException extends RuntimeException {
public NotFoundException(String message) {
super(message);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ru.practicum.shareit.exception;

public class ValidationException extends RuntimeException {

public ValidationException(String message) {
super(message);
}
}
50 changes: 45 additions & 5 deletions src/main/java/ru/practicum/shareit/item/ItemController.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,52 @@
package ru.practicum.shareit.item;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import ru.practicum.shareit.item.dto.ItemCreateDto;
import ru.practicum.shareit.item.dto.ItemDto;
import ru.practicum.shareit.item.dto.ItemUpdateDto;
import ru.practicum.shareit.item.model.Item;
import ru.practicum.shareit.item.service.ItemService;

/**
* TODO Sprint add-controllers.
*/
import java.util.List;

@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping("/items")
public class ItemController {
private final ItemService itemService;
private final ItemMapper itemMapper;

@PostMapping
public ItemDto create(@RequestHeader("X-Sharer-User-Id") Long userId,
@Validated @RequestBody ItemCreateDto createDto) {
Item item = itemService.create(itemMapper.createDtoToModel(createDto, userId));
return itemMapper.modelToItemDto(item);
}

@PatchMapping("/{itemId}")
public ItemDto update(@RequestHeader("X-Sharer-User-Id") Long userId, @PathVariable Long itemId,
@Validated @RequestBody ItemUpdateDto updateDto) {
Item item = itemService.update(itemMapper.updateDtoToModel(updateDto, userId, itemId));
return itemMapper.modelToItemDto(item);
}


@GetMapping("/{itemId}")
public ItemDto getItemById(@PathVariable Long itemId) {
return itemMapper.modelToItemDto(itemService.getItemById(itemId));
}

@GetMapping
public List<ItemDto> getItemByOwnerId(@RequestHeader("X-Sharer-User-Id") Long userId) {
return itemMapper.listModelToDto(itemService.getItemByOwnerId(userId));
}

@GetMapping("/search")
public List<ItemDto> getItemsByNameOrDescription(@RequestParam String text) {
return itemMapper.listModelToDto(itemService.getItemsByNameOrDescription(text));
}

}
52 changes: 52 additions & 0 deletions src/main/java/ru/practicum/shareit/item/ItemMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package ru.practicum.shareit.item;

import org.springframework.stereotype.Component;
import ru.practicum.shareit.item.dto.ItemCreateDto;
import ru.practicum.shareit.item.dto.ItemDto;
import ru.practicum.shareit.item.dto.ItemUpdateDto;
import ru.practicum.shareit.item.model.Item;

import java.util.ArrayList;
import java.util.List;

@Component
public class ItemMapper {

public Item createDtoToModel(ItemCreateDto dto, long ownerId) {
return Item.builder()
.name(dto.getName())
.description(dto.getDescription())
.available(dto.getAvailable())
.owner(ownerId)
.build();
}

public Item updateDtoToModel(ItemUpdateDto dto, long ownerId, long itemId) {
return Item.builder()
.id(itemId)
.name(dto.getName())
.description(dto.getDescription())
.available(dto.getAvailable())
.owner(ownerId)
.build();
}

public ItemDto modelToItemDto(Item item) {
return ItemDto.builder()
.id(item.getId())
.name(item.getName())
.description(item.getDescription())
.available(item.getAvailable())
.owner(item.getOwner())
.build();
}

public List<ItemDto> listModelToDto(List<Item> items) {
List<ItemDto> list = new ArrayList<>();
for (Item item : items) {
list.add(modelToItemDto(item));
}
return list;
}

}
17 changes: 17 additions & 0 deletions src/main/java/ru/practicum/shareit/item/dto/ItemCreateDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package ru.practicum.shareit.item.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

@Data
public class ItemCreateDto {
@NotNull
@NotBlank
private String name;
@NotNull
private String description;
@NotNull
private Boolean available;
private Long owner;
}
13 changes: 10 additions & 3 deletions src/main/java/ru/practicum/shareit/item/dto/ItemDto.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
package ru.practicum.shareit.item.dto;

/**
* TODO Sprint add-controllers.
*/
import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class ItemDto {
private Long id;
private String name;
private String description;
private Boolean available;
private Long owner;
}
10 changes: 10 additions & 0 deletions src/main/java/ru/practicum/shareit/item/dto/ItemUpdateDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ru.practicum.shareit.item.dto;

import lombok.Data;

@Data
public class ItemUpdateDto {
private String name;
private String description;
private Boolean available;
}
14 changes: 11 additions & 3 deletions src/main/java/ru/practicum/shareit/item/model/Item.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package ru.practicum.shareit.item.model;

/**
* TODO Sprint add-controllers.
*/
import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class Item {
private long id;
private String name;
private String description;
private Boolean available;
private long owner;
private long requestId;
}
Loading