Skip to content

Commit a6b74d5

Browse files
committed
first commit
0 parents  commit a6b74d5

File tree

15 files changed

+321
-0
lines changed

15 files changed

+321
-0
lines changed

.env

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
POSTGRES_DB=employeedb
2+
POSTGRES_PASSWORD=mysecretpassword
3+
POSTGRES_URL=host.docker.internal
4+
POSTGRES_USER=postgres
5+
HOST_URL=host.docker.internal

db-postgres/Dockerfile

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
FROM postgres:14.7
2+
RUN chown -R postgres:postgres /docker-entrypoint-initdb.d/

db-postgres/create.sql

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
CREATE SCHEMA IF NOT EXISTS "public";
2+
3+
CREATE TABLE "public".employee (
4+
id SERIAL PRIMARY KEY,
5+
first_name VARCHAR(50),
6+
last_name VARCHAR(50),
7+
email VARCHAR(100),
8+
department VARCHAR(100),
9+
position VARCHAR(100),
10+
salary DECIMAL(10, 2),
11+
hire_date DATE
12+
);
13+
14+
-- Insert sample records into the 'employee' table
15+
INSERT INTO employee (first_name, last_name, email, department, position, salary, hire_date)
16+
VALUES
17+
('John', 'Doe', '[email protected]', 'Engineering', 'Software Developer', 75000.00, '2020-01-15'),
18+
('Jane', 'Smith', '[email protected]', 'Marketing', 'Marketing Manager', 65000.00, '2019-08-01'),
19+
('Emily', 'Jones', '[email protected]', 'Human Resources', 'HR Coordinator', 55000.00, '2021-05-23');

docker-compose.yaml

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
version: "3.8"
2+
3+
services:
4+
db:
5+
build:
6+
context: ./db-postgres
7+
dockerfile: Dockerfile
8+
ports:
9+
- "5432:5432"
10+
volumes:
11+
- ./db-postgres/postgres-data:/var/lib/postgresql/data
12+
- ./db-postgres/create.sql:/docker-entrypoint-initdb.d/create.sql
13+
env_file:
14+
- .env
15+
16+
app:
17+
depends_on:
18+
- db
19+
build:
20+
context: ./docker-postgres-spring-boot
21+
dockerfile: Dockerfile
22+
ports:
23+
- "8080:8080"
24+
env_file:
25+
- .env
26+
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM amazoncorretto:17-alpine-jdk
2+
WORKDIR /app
3+
# Install Maven
4+
RUN apk add --no-cache maven
5+
6+
# Copy your project files and build the project
7+
COPY . .
8+
RUN mvn clean install -DskipTests
9+
ENTRYPOINT ["java","-jar","target/docker-postgres-spring-boot-1.0.jar"]

docker-postgres-spring-boot/pom.xml

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>org.springframework.boot</groupId>
7+
<artifactId>spring-boot-starter-parent</artifactId>
8+
<version>3.2.2</version>
9+
<relativePath/> <!-- lookup parent from repository -->
10+
</parent>
11+
<groupId>org.purgatory</groupId>
12+
<artifactId>docker-postgres-spring-boot</artifactId>
13+
<version>1.0</version>
14+
<name>docker-postgres-spring-boot</name>
15+
<description>Demo project for Spring Boot</description>
16+
<properties>
17+
<java.version>17</java.version>
18+
</properties>
19+
<dependencies>
20+
<dependency>
21+
<groupId>org.springframework.boot</groupId>
22+
<artifactId>spring-boot-starter-data-jpa</artifactId>
23+
</dependency>
24+
<dependency>
25+
<groupId>org.springframework.boot</groupId>
26+
<artifactId>spring-boot-starter-web</artifactId>
27+
</dependency>
28+
29+
<dependency>
30+
<groupId>org.postgresql</groupId>
31+
<artifactId>postgresql</artifactId>
32+
<scope>runtime</scope>
33+
</dependency>
34+
<dependency>
35+
<groupId>org.projectlombok</groupId>
36+
<artifactId>lombok</artifactId>
37+
<optional>true</optional>
38+
</dependency>
39+
<dependency>
40+
<groupId>org.springframework.boot</groupId>
41+
<artifactId>spring-boot-starter-test</artifactId>
42+
<scope>test</scope>
43+
</dependency>
44+
</dependencies>
45+
46+
<build>
47+
<plugins>
48+
<plugin>
49+
<groupId>org.springframework.boot</groupId>
50+
<artifactId>spring-boot-maven-plugin</artifactId>
51+
</plugin>
52+
</plugins>
53+
</build>
54+
55+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.purgatory.dockerpostgresspringboot;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
6+
@SpringBootApplication
7+
public class DockerPostgresSpringBootApplication {
8+
9+
public static void main(String[] args) {
10+
SpringApplication.run(DockerPostgresSpringBootApplication.class, args);
11+
}
12+
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.purgatory.dockerpostgresspringboot.persistence.entity;
2+
3+
import jakarta.persistence.*;
4+
import java.time.LocalDate;
5+
import lombok.*;
6+
7+
@Entity
8+
@Getter
9+
@Setter
10+
@Builder
11+
@NoArgsConstructor
12+
@AllArgsConstructor
13+
@Table(name = "employee")
14+
public class EEmployee {
15+
16+
@Id
17+
@GeneratedValue(strategy = GenerationType.IDENTITY)
18+
int id;
19+
20+
@Column(name = "first_name", nullable = false, length = 50)
21+
String firstName;
22+
23+
@Column(name = "last_name", nullable = false, length = 50)
24+
String lastName;
25+
26+
@Column(name = "email", nullable = false, length = 100)
27+
String email;
28+
29+
@Column(name = "department", nullable = false, length = 100)
30+
String department;
31+
32+
@Column(name = "position", nullable = false, length = 100)
33+
String position;
34+
35+
@Column(name = "salary", nullable = false)
36+
double salary;
37+
38+
@Column(name = "hire_date", nullable = false)
39+
LocalDate hireDate;
40+
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.purgatory.dockerpostgresspringboot.persistence.repository;
2+
3+
import java.util.Optional;
4+
import org.purgatory.dockerpostgresspringboot.persistence.entity.EEmployee;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.stereotype.Repository;
7+
8+
@Repository
9+
public interface EmployeeRepository extends JpaRepository<EEmployee, Integer> {
10+
Optional<EEmployee> findByEmail(String email);
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.purgatory.dockerpostgresspringboot.rest.controller;
2+
3+
import java.net.URI;
4+
import java.time.LocalDate;
5+
6+
import org.purgatory.dockerpostgresspringboot.persistence.entity.EEmployee;
7+
import org.purgatory.dockerpostgresspringboot.persistence.repository.EmployeeRepository;
8+
import org.purgatory.dockerpostgresspringboot.rest.model.Employee;
9+
import org.purgatory.dockerpostgresspringboot.rest.service.EmployeeService;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.http.ResponseEntity;
12+
import org.springframework.web.bind.annotation.*;
13+
14+
@RestController
15+
@RequestMapping("employee")
16+
public class EmployeeController {
17+
18+
@Autowired
19+
EmployeeRepository employeeRepository;
20+
21+
@GetMapping("{email}")
22+
public ResponseEntity<?> authenticate(@PathVariable String email) {
23+
24+
return ResponseEntity.ok(employeeRepository.findByEmail(email));
25+
}
26+
27+
@PostMapping
28+
public ResponseEntity<?> register(@RequestBody Employee request){
29+
employeeRepository.save(EEmployee.builder()
30+
.email(request.getEmail())
31+
.firstName(request.getFirstName())
32+
.lastName(request.getLastName())
33+
.salary(request.getSalary())
34+
.department(request.getDepartment())
35+
.position(request.getPosition())
36+
.hireDate(LocalDate.now())
37+
.build());
38+
return ResponseEntity.created(URI.create("/api/employee")).build();
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.purgatory.dockerpostgresspringboot.rest.model;
2+
3+
import lombok.*;
4+
5+
@Getter
6+
@Setter
7+
@Builder
8+
@NoArgsConstructor
9+
@AllArgsConstructor
10+
public class Employee {
11+
12+
String firstName;
13+
String lastName;
14+
String email;
15+
String department;
16+
String position;
17+
double salary;
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.purgatory.dockerpostgresspringboot.rest.service;
2+
3+
import org.purgatory.dockerpostgresspringboot.persistence.entity.EEmployee;
4+
import org.purgatory.dockerpostgresspringboot.rest.model.Employee;
5+
import org.springframework.stereotype.Service;
6+
7+
@Service
8+
public interface EmployeeService {
9+
EEmployee getEmployee(String email);
10+
11+
void addEmployee(Employee request);
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.purgatory.dockerpostgresspringboot.rest.service.impl;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.purgatory.dockerpostgresspringboot.persistence.entity.EEmployee;
5+
import org.purgatory.dockerpostgresspringboot.persistence.repository.EmployeeRepository;
6+
import org.purgatory.dockerpostgresspringboot.rest.model.Employee;
7+
import org.purgatory.dockerpostgresspringboot.rest.service.EmployeeService;
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.stereotype.Service;
10+
11+
import java.time.LocalDate;
12+
13+
@Service
14+
@Slf4j
15+
public class EmployeeServiceImpl implements EmployeeService {
16+
17+
@Autowired EmployeeRepository employeeRepository;
18+
19+
@Override
20+
public EEmployee getEmployee(String email) {
21+
return employeeRepository.findByEmail(email).orElseThrow();
22+
}
23+
24+
@Override
25+
public void addEmployee(Employee request) {
26+
employeeRepository.save(
27+
EEmployee.builder()
28+
.email(request.getEmail())
29+
.firstName(request.getFirstName())
30+
.lastName(request.getLastName())
31+
.salary(request.getSalary())
32+
.department(request.getDepartment())
33+
.position(request.getPosition())
34+
.hireDate(LocalDate.now())
35+
.build());
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
server:
2+
port: 8080
3+
servlet:
4+
context-path: /api
5+
6+
spring:
7+
datasource:
8+
url: jdbc:postgresql://${POSTGRES_URL}:5432/${POSTGRES_DB}
9+
username: ${POSTGRES_USER}
10+
password: ${POSTGRES_PASSWORD}
11+
driver-class-name: org.postgresql.Driver
12+
jpa:
13+
database-platform: org.hibernate.dialect.PostgreSQLDialect
14+
15+
logging:
16+
level:
17+
root: info
18+
19+
#host:
20+
# url: ${HOST_URL}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.purgatory.dockerpostgresspringboot;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.springframework.boot.test.context.SpringBootTest;
5+
6+
@SpringBootTest
7+
class DockerPostgresSpringBootApplicationTests {
8+
9+
@Test
10+
void contextLoads() {
11+
}
12+
13+
}

0 commit comments

Comments
 (0)