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