Add item endpoints into virtual threads app.
This commit is contained in:
@@ -0,0 +1,25 @@
|
|||||||
|
package com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item;
|
||||||
|
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.model.Item;
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.port.ItemPort;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class ItemService {
|
||||||
|
private final ItemPort itemPort;
|
||||||
|
|
||||||
|
public ItemService(ItemPort itemPort) {
|
||||||
|
this.itemPort = itemPort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Item> getAllItems() {
|
||||||
|
return itemPort.getAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void create(String name, Boolean shared) {
|
||||||
|
Item newItem = new Item(name, shared);
|
||||||
|
itemPort.save(newItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.model;
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public record Item(
|
||||||
|
UUID id,
|
||||||
|
String name,
|
||||||
|
ZonedDateTime sharedDate
|
||||||
|
) {
|
||||||
|
public Item(String name, Boolean shared) {
|
||||||
|
this(
|
||||||
|
UUID.randomUUID(),
|
||||||
|
name,
|
||||||
|
shared ? ZonedDateTime.now() : null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isShared() {
|
||||||
|
return sharedDate != null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.port;
|
||||||
|
|
||||||
|
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.model.Item;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface ItemPort {
|
||||||
|
List<Item> getAll();
|
||||||
|
void save(Item newItem);
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.zeenea.experiments.virtualthreads.virtualthreadsapp.exposition.item;
|
||||||
|
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.ItemService;
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.exposition.item.model.CreateItemRequest;
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.exposition.item.model.ItemDto;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.springframework.http.HttpStatus.CREATED;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/items")
|
||||||
|
public class ItemController {
|
||||||
|
private final ItemService itemService;
|
||||||
|
|
||||||
|
public ItemController(ItemService itemService) {
|
||||||
|
this.itemService = itemService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping
|
||||||
|
@ResponseStatus(CREATED)
|
||||||
|
public void createAnItem(@RequestBody CreateItemRequest request) {
|
||||||
|
itemService.create(request.name(), request.isShared());
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public List<ItemDto> getAll() {
|
||||||
|
return itemService.getAllItems()
|
||||||
|
.stream()
|
||||||
|
.map(ItemDto::new)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
package com.zeenea.experiments.virtualthreads.virtualthreadsapp.exposition.item.model;
|
||||||
|
|
||||||
|
public record CreateItemRequest(String name, Boolean isShared) {}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.zeenea.experiments.virtualthreads.virtualthreadsapp.exposition.item.model;
|
||||||
|
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.model.Item;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public record ItemDto(
|
||||||
|
UUID id,
|
||||||
|
String name,
|
||||||
|
Boolean isShared
|
||||||
|
) {
|
||||||
|
public ItemDto(Item item) {
|
||||||
|
this(item.id(), item.name(), item.isShared());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.zeenea.experiments.virtualthreads.virtualthreadsapp.infrastructure.item;
|
||||||
|
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.model.Item;
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.port.ItemPort;
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.infrastructure.item.model.ItemJpaEntity;
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.infrastructure.item.repository.ItemJpaRepository;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class ItemJpaAdapter implements ItemPort {
|
||||||
|
private final ItemJpaRepository itemJpaRepository;
|
||||||
|
|
||||||
|
public ItemJpaAdapter(ItemJpaRepository itemJpaRepository) {
|
||||||
|
this.itemJpaRepository = itemJpaRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Item> getAll() {
|
||||||
|
return itemJpaRepository.findAll()
|
||||||
|
.stream()
|
||||||
|
.map(ItemJpaEntity::toDomain)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(Item newItem) {
|
||||||
|
ItemJpaEntity newItemJpaEntity = new ItemJpaEntity(newItem);
|
||||||
|
itemJpaRepository.save(newItemJpaEntity);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package com.zeenea.experiments.virtualthreads.virtualthreadsapp.infrastructure.item.model;
|
||||||
|
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.model.Item;
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.Table;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "item")
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class ItemJpaEntity {
|
||||||
|
@Id
|
||||||
|
private UUID id;
|
||||||
|
@Column(nullable = false)
|
||||||
|
private String name;
|
||||||
|
@Column
|
||||||
|
private ZonedDateTime sharedDate;
|
||||||
|
|
||||||
|
public ItemJpaEntity(Item item) {
|
||||||
|
id = item.id();
|
||||||
|
name = item.name();
|
||||||
|
sharedDate = item.sharedDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Item toDomain() {
|
||||||
|
return new Item(id, name, sharedDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.zeenea.experiments.virtualthreads.virtualthreadsapp.infrastructure.item.repository;
|
||||||
|
|
||||||
|
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.infrastructure.item.model.ItemJpaEntity;
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface ItemJpaRepository extends JpaRepository<ItemJpaEntity, UUID> {}
|
||||||
Reference in New Issue
Block a user