From 8d829c4dcbad53ad58629a57ce936bdf35d18696 Mon Sep 17 00:00:00 2001 From: alinjo Date: Fri, 27 Sep 2024 08:39:11 +0200 Subject: [PATCH] Finished core --- .gitignore | 1 + build.gradle | 12 ++++ dev/Dockerfile | 9 +++ dev/docker-compose.yml | 25 +++++++++ src/main/java/com/booleanuk/api/Main.java | 13 +++++ .../api/controller/UserController.java | 56 +++++++++++++++++++ .../java/com/booleanuk/api/model/User.java | 38 +++++++++++++ .../api/repository/UserRepository.java | 10 ++++ 8 files changed, 164 insertions(+) create mode 100644 dev/Dockerfile create mode 100644 dev/docker-compose.yml create mode 100644 src/main/java/com/booleanuk/api/Main.java create mode 100644 src/main/java/com/booleanuk/api/controller/UserController.java create mode 100644 src/main/java/com/booleanuk/api/model/User.java create mode 100644 src/main/java/com/booleanuk/api/repository/UserRepository.java diff --git a/.gitignore b/.gitignore index c2065bc..192fe5d 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ out/ ### VS Code ### .vscode/ +*.jar diff --git a/build.gradle b/build.gradle index fb070c4..fd8a018 100644 --- a/build.gradle +++ b/build.gradle @@ -31,3 +31,15 @@ dependencies { tasks.named('test') { useJUnitPlatform() } + + +jar { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + manifest { + attributes 'Main-Class': 'com.booleanuk.api.Main' + } + + from { + configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } + } +} \ No newline at end of file diff --git a/dev/Dockerfile b/dev/Dockerfile new file mode 100644 index 0000000..a3c522f --- /dev/null +++ b/dev/Dockerfile @@ -0,0 +1,9 @@ +FROM eclipse-temurin:21 + +WORKDIR /app + +COPY java.docker.day.2-0.0.1.jar /app/java.docker.day.2-0.0.1.jar + +EXPOSE 4000 + +ENTRYPOINT ["java", "-jar", "java.docker.day.2-0.0.1.jar"] \ No newline at end of file diff --git a/dev/docker-compose.yml b/dev/docker-compose.yml new file mode 100644 index 0000000..a477125 --- /dev/null +++ b/dev/docker-compose.yml @@ -0,0 +1,25 @@ +services: + app: + build: . + container_name: app + depends_on: + - db + ports: + - '4000:4000' + - + environment: + - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/mypostgresuser + - SPRING_DATASOURCE_USERNAME=mypostgresuser + - SPRING_DATASOURCE_PASSWORD=mypostgrespassword + - SPRING_JPA_HIBERNATE_DDL_AUTO=update + + db: + image: 'postgres:latest' + container_name: db + environment: + - POSTGRES_USER=mypostgresuser + - POSTGRES_DATABASE=mypostgresuser + - POSTGRES_PASSWORD=mypostgrespassword + - + ports: + - '5432:5432' \ No newline at end of file diff --git a/src/main/java/com/booleanuk/api/Main.java b/src/main/java/com/booleanuk/api/Main.java new file mode 100644 index 0000000..f192e13 --- /dev/null +++ b/src/main/java/com/booleanuk/api/Main.java @@ -0,0 +1,13 @@ +package com.booleanuk.api; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + + + +@SpringBootApplication +public class Main { + + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + } +} diff --git a/src/main/java/com/booleanuk/api/controller/UserController.java b/src/main/java/com/booleanuk/api/controller/UserController.java new file mode 100644 index 0000000..ec03cdf --- /dev/null +++ b/src/main/java/com/booleanuk/api/controller/UserController.java @@ -0,0 +1,56 @@ +package com.booleanuk.api.controller; +import com.booleanuk.api.model.User; +import com.booleanuk.api.repository.UserRepository; + +import org.springframework.http.ResponseEntity; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/users") +public class UserController { + + @Autowired + private UserRepository userRepository; + + @GetMapping + public List getAllUsers() { + return userRepository.findAll(); + } + + @GetMapping("{id}") + public ResponseEntity getUserById(@PathVariable Integer id) { + return userRepository.findById(id) + .map(user -> ResponseEntity.ok().body(user)) + .orElse(ResponseEntity.notFound().build()); + } + + @PostMapping + public User createUser(@RequestBody User user) { + return userRepository.save(user); + } + + @PutMapping("{id}") + public ResponseEntity updateUser(@PathVariable Integer id, @RequestBody User userDetails) { + return userRepository.findById(id) + .map(user -> { + user.setUsername(userDetails.getUsername()); + user.setEmail(userDetails.getEmail()); + user.setPassword(userDetails.getPassword()); + return ResponseEntity.ok().body(userRepository.save(user)); + }) + .orElse(ResponseEntity.notFound().build()); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteStudent(@PathVariable int id) { + if (userRepository.existsById(id)) { + userRepository.deleteById(id); + return ResponseEntity.noContent().build(); + } else { + return ResponseEntity.notFound().build(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/booleanuk/api/model/User.java b/src/main/java/com/booleanuk/api/model/User.java new file mode 100644 index 0000000..d900476 --- /dev/null +++ b/src/main/java/com/booleanuk/api/model/User.java @@ -0,0 +1,38 @@ +package com.booleanuk.api.model; +import jakarta.persistence.*; +import lombok.*; + +import java.util.List; +@Data +@AllArgsConstructor +@NoArgsConstructor +@Getter +@Setter +@Entity +@Table(name = "/users") +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + private String username; + + @Column(nullable = false) + private String email; + + @Column(nullable = false) + private String password; + + @Column(nullable=false) + private String posts; + + public User(String username, String email, String password, String posts) { + this.username = username; + this.email = email; + this.password = password; + this.posts = posts; + } + +} \ No newline at end of file diff --git a/src/main/java/com/booleanuk/api/repository/UserRepository.java b/src/main/java/com/booleanuk/api/repository/UserRepository.java new file mode 100644 index 0000000..ee850ec --- /dev/null +++ b/src/main/java/com/booleanuk/api/repository/UserRepository.java @@ -0,0 +1,10 @@ +package com.booleanuk.api.repository; +import com.booleanuk.api.model.User; +import org.springframework.data.jpa.repository.JpaRepository; + + + +public interface UserRepository extends JpaRepository +{ + +} \ No newline at end of file