diff --git a/pom.xml b/pom.xml index fc066ae..77a3efc 100644 --- a/pom.xml +++ b/pom.xml @@ -38,10 +38,10 @@ org.springframework.boot spring-boot-starter-data-rest - - org.springframework.boot - spring-boot-starter-oauth2-client - + + + + org.springframework.boot spring-boot-starter-web @@ -53,12 +53,12 @@ runtime true - - org.springframework.boot - spring-boot-docker-compose - runtime - true - + + + + + + org.postgresql postgresql @@ -70,9 +70,18 @@ test - org.springframework.security - spring-security-test - test + org.springframework.boot + spring-boot-starter-actuator + + + + + + + + com.squareup.okhttp3 + okhttp + 4.9.3 @@ -82,6 +91,16 @@ org.springframework.boot spring-boot-maven-plugin + + org.apache.maven.plugins + maven-surefire-plugin + + + -javaagent:${settings.localRepository}/org/mockito/mockito-core/${mockito.version}/mockito-core-${mockito.version}.jar + -Xshare:off + + + diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Controller/ArtisanConnectController.java b/src/main/java/_11/asktpk/artisanconnectbackend/Controller/ArtisanConnectController.java new file mode 100644 index 0000000..57f4f6d --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Controller/ArtisanConnectController.java @@ -0,0 +1,28 @@ +package _11.asktpk.artisanconnectbackend.Controller; + +import _11.asktpk.artisanconnectbackend.Model.Notice; +import _11.asktpk.artisanconnectbackend.Repository.NoticeRepository; +import _11.asktpk.artisanconnectbackend.Service.PostgresDatabase; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RequestMapping("/api/v1") +@RestController +public class ArtisanConnectController { + @Autowired + private PostgresDatabase postgresDatabase; + + @GetMapping("/notices/all") + public List getAllNotices() { + return postgresDatabase.get(); + } + + @ResponseStatus(HttpStatus.CREATED) + @PostMapping("/notices/add") + public void addNotice(@RequestBody Notice notice) { + postgresDatabase.add(notice); + } +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Model/Notice.java b/src/main/java/_11/asktpk/artisanconnectbackend/Model/Notice.java new file mode 100644 index 0000000..3472221 --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Model/Notice.java @@ -0,0 +1,63 @@ +package _11.asktpk.artisanconnectbackend.Model; + +import jakarta.persistence.*; +import java.sql.Blob; + +@Entity +public class Notice { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column + private String title; + + @Column + private String username; + + @Column + private String description; + + public Notice() { + this.title = ""; + this.username = ""; + this.description = ""; + } + + public Notice(String nTitle, String nUsername, String nDescription) { + this.title = nTitle; + this.username = nUsername; + this.description = nDescription; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getId() { + return id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String user) { + this.username = user; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Repository/NoticeRepository.java b/src/main/java/_11/asktpk/artisanconnectbackend/Repository/NoticeRepository.java new file mode 100644 index 0000000..ed19f4f --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Repository/NoticeRepository.java @@ -0,0 +1,8 @@ +package _11.asktpk.artisanconnectbackend.Repository; + +import _11.asktpk.artisanconnectbackend.Model.Notice; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface NoticeRepository extends JpaRepository { +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Service/IDatabase.java b/src/main/java/_11/asktpk/artisanconnectbackend/Service/IDatabase.java new file mode 100644 index 0000000..622d594 --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Service/IDatabase.java @@ -0,0 +1,10 @@ +package _11.asktpk.artisanconnectbackend.Service; + +import _11.asktpk.artisanconnectbackend.Model.Notice; + +import java.util.List; + +public interface IDatabase { + void add(Notice newNotice); + List get(); +} diff --git a/src/main/java/_11/asktpk/artisanconnectbackend/Service/PostgresDatabase.java b/src/main/java/_11/asktpk/artisanconnectbackend/Service/PostgresDatabase.java new file mode 100644 index 0000000..d78ce5a --- /dev/null +++ b/src/main/java/_11/asktpk/artisanconnectbackend/Service/PostgresDatabase.java @@ -0,0 +1,24 @@ +package _11.asktpk.artisanconnectbackend.Service; + +import _11.asktpk.artisanconnectbackend.Model.Notice; +import _11.asktpk.artisanconnectbackend.Repository.NoticeRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class PostgresDatabase implements IDatabase{ + @Autowired + private NoticeRepository noticeRepository; + + @Override + public void add(Notice newNotice) { + noticeRepository.save(newNotice); + } + + @Override + public List get() { + return noticeRepository.findAll(); + } +} diff --git a/src/test/java/_11/asktpk/artisanconnectbackend/ArtisanConnectBackendApplicationTests.java b/src/test/java/_11/asktpk/artisanconnectbackend/ArtisanConnectBackendApplicationTests.java index e4fa6b5..60bbb73 100644 --- a/src/test/java/_11/asktpk/artisanconnectbackend/ArtisanConnectBackendApplicationTests.java +++ b/src/test/java/_11/asktpk/artisanconnectbackend/ArtisanConnectBackendApplicationTests.java @@ -1,13 +1,43 @@ package _11.asktpk.artisanconnectbackend; +import _11.asktpk.artisanconnectbackend.Model.Notice; +import _11.asktpk.artisanconnectbackend.Service.PostgresDatabase; +import okhttp3.*; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import java.io.IOException; + @SpringBootTest class ArtisanConnectBackendApplicationTests { + private static final Logger logger = LogManager.getLogger(ArtisanConnectBackendApplicationTests.class); + + @Autowired + PostgresDatabase postgresDatabase; @Test - void contextLoads() { + void testPostgresDatabase() { + postgresDatabase.add(new Notice("Test Notice", "Username", "Test Description")); + Boolean isRecordAvailable = postgresDatabase.get().size() > 0; + if(isRecordAvailable) { + logger.info("The record is available in the database"); + } else { + logger.error("The record is not available in the database"); + } + assert isRecordAvailable; } + @Test + void getAllNotices() throws IOException { + OkHttpClient client = new OkHttpClient().newBuilder() + .build(); + MediaType mediaType = MediaType.parse("text/plain"); + Request request = new Request.Builder() + .url("http://localhost:8080/api/v1/notices/all") + .build(); + Response response = client.newCall(request).execute(); + } }