diff --git a/pom.xml b/pom.xml
index 263e454..92bbfa3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,7 +42,6 @@
org.springframework.boot
spring-boot-starter-web
-
org.projectlombok
lombok
@@ -53,6 +52,18 @@
spring-boot-starter-test
test
+
+ org.postgresql
+ postgresql
+ 42.7.7
+ runtime
+
+
+
+ org.apache.commons
+ commons-lang3
+ 3.18.0
+
diff --git a/src/main/java/id/my/luxic/pastebin/controller/PasteController.java b/src/main/java/id/my/luxic/pastebin/controller/PasteController.java
new file mode 100644
index 0000000..eff3f51
--- /dev/null
+++ b/src/main/java/id/my/luxic/pastebin/controller/PasteController.java
@@ -0,0 +1,33 @@
+package id.my.luxic.pastebin.controller;
+
+import id.my.luxic.pastebin.model.Paste;
+import id.my.luxic.pastebin.request.PasteCreateRequest;
+import id.my.luxic.pastebin.service.PasteService;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+public class PasteController {
+
+ private final PasteService service;
+
+ public PasteController(PasteService service) {
+ this.service = service;
+ }
+
+ @GetMapping("/api/paste/findAll")
+ public ResponseEntity> findAll() {
+ return ResponseEntity.ok(service.findAll());
+ }
+
+ @PostMapping("/api/paste/create")
+ public ResponseEntity create(@RequestBody PasteCreateRequest pasteCreateRequest) {
+ return ResponseEntity.ok(service.save(pasteCreateRequest));
+ }
+
+}
diff --git a/src/main/java/id/my/luxic/pastebin/model/Paste.java b/src/main/java/id/my/luxic/pastebin/model/Paste.java
new file mode 100644
index 0000000..be63956
--- /dev/null
+++ b/src/main/java/id/my/luxic/pastebin/model/Paste.java
@@ -0,0 +1,29 @@
+package id.my.luxic.pastebin.model;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.Table;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+@Entity
+@Getter
+@Setter
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Table(name = "paste")
+public class Paste {
+
+ @Id
+ private String id;
+ private String content;
+ private String title;
+ private LocalDateTime expireAt;
+ private LocalDateTime created;
+ private LocalDateTime updated;
+ private Boolean isPrivate;
+ private Boolean isDeleted;
+
+}
diff --git a/src/main/java/id/my/luxic/pastebin/repository/PasteRepository.java b/src/main/java/id/my/luxic/pastebin/repository/PasteRepository.java
new file mode 100644
index 0000000..17de0c1
--- /dev/null
+++ b/src/main/java/id/my/luxic/pastebin/repository/PasteRepository.java
@@ -0,0 +1,7 @@
+package id.my.luxic.pastebin.repository;
+
+import id.my.luxic.pastebin.model.Paste;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface PasteRepository extends JpaRepository {
+}
diff --git a/src/main/java/id/my/luxic/pastebin/request/PasteCreateRequest.java b/src/main/java/id/my/luxic/pastebin/request/PasteCreateRequest.java
new file mode 100644
index 0000000..47e52a8
--- /dev/null
+++ b/src/main/java/id/my/luxic/pastebin/request/PasteCreateRequest.java
@@ -0,0 +1,47 @@
+package id.my.luxic.pastebin.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.sql.Timestamp;
+import java.time.LocalDateTime;
+
+@Getter
+@Setter
+public class PasteCreateRequest {
+
+ private String content;
+ private String title;
+ private Boolean isPrivate;
+ private Expiration expiration;
+
+ public enum Expiration {
+ NEVER {
+ @Override
+ public LocalDateTime getTimestamp() {
+ return null;
+ }
+ },
+ ONE_HOUR {
+ @Override
+ public LocalDateTime getTimestamp() {
+ return LocalDateTime.now().plusHours(1);
+ }
+ },
+ ONE_DAY {
+ @Override
+ public LocalDateTime getTimestamp() {
+ return LocalDateTime.now().plusDays(1);
+ }
+ },
+ ONE_WEEK {
+ @Override
+ public LocalDateTime getTimestamp() {
+ return LocalDateTime.now().plusWeeks(1);
+ }
+ };
+
+ public abstract LocalDateTime getTimestamp();
+ }
+
+}
diff --git a/src/main/java/id/my/luxic/pastebin/service/PasteService.java b/src/main/java/id/my/luxic/pastebin/service/PasteService.java
new file mode 100644
index 0000000..7dbed42
--- /dev/null
+++ b/src/main/java/id/my/luxic/pastebin/service/PasteService.java
@@ -0,0 +1,18 @@
+package id.my.luxic.pastebin.service;
+
+import id.my.luxic.pastebin.model.Paste;
+import id.my.luxic.pastebin.request.PasteCreateRequest;
+
+import java.util.List;
+
+public interface PasteService {
+
+ Paste findById(String id);
+
+ List findAll();
+
+ Paste save(PasteCreateRequest pasteCreateRequest);
+
+ void delete(String id);
+
+}
diff --git a/src/main/java/id/my/luxic/pastebin/service/impl/PasteServiceImpl.java b/src/main/java/id/my/luxic/pastebin/service/impl/PasteServiceImpl.java
new file mode 100644
index 0000000..06893ba
--- /dev/null
+++ b/src/main/java/id/my/luxic/pastebin/service/impl/PasteServiceImpl.java
@@ -0,0 +1,51 @@
+package id.my.luxic.pastebin.service.impl;
+
+import id.my.luxic.pastebin.model.Paste;
+import id.my.luxic.pastebin.repository.PasteRepository;
+import id.my.luxic.pastebin.request.PasteCreateRequest;
+import id.my.luxic.pastebin.service.PasteService;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Service
+public class PasteServiceImpl implements PasteService {
+
+ private final PasteRepository repository;
+
+ public PasteServiceImpl(PasteRepository repository) {
+ this.repository = repository;
+ }
+
+ @Override
+ public Paste findById(String id) {
+ return repository.findById(id).orElse(null);
+ }
+
+ @Override
+ public List findAll() {
+ return repository.findAll();
+ }
+
+ @Override
+ public Paste save(PasteCreateRequest pasteCreateRequest) {
+
+ Paste paste = Paste.builder()
+ .id(RandomStringUtils.secure().nextAlphanumeric(10))
+ .title(pasteCreateRequest.getTitle())
+ .content(pasteCreateRequest.getContent())
+ .isPrivate(pasteCreateRequest.getIsPrivate())
+ .expireAt(pasteCreateRequest.getExpiration().getTimestamp())
+ .created(LocalDateTime.now())
+ .build();
+
+ return repository.save(paste);
+ }
+
+ @Override
+ public void delete(String id) {
+ repository.deleteById(id);
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index bc48692..d11cc43 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1 +1,7 @@
spring.application.name=pastebin
+
+spring.datasource.url=jdbc:postgresql://localhost:5432/pastebin
+spring.datasource.username=postgres
+spring.datasource.password=password
+
+spring.jpa.hibernate.ddl-auto=update
\ No newline at end of file