Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
DBURL=postgres:5432
DBNAME=library-app
DBUSERNAME=library_app
DBPASSWORD=replace-with-a-local-password
59 changes: 59 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: CI

on:
push:
branches: [main]
pull_request:

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
verify:
runs-on: ubuntu-24.04
timeout-minutes: 15

services:
postgres:
image: postgres:16-alpine
env:
POSTGRES_USER: library_app
POSTGRES_PASSWORD: local-ci-password
POSTGRES_DB: library-app
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U library_app -d library-app"
--health-interval 5s
--health-timeout 5s
--health-retries 10

env:
DBURL: localhost:5432
DBNAME: library-app
DBUSERNAME: library_app
DBPASSWORD: local-ci-password

steps:
- name: Check out fork
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7

- name: Set up Java 17
uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5
with:
distribution: temurin
java-version: "17"
cache: maven

- name: Test and package
run: ./mvnw --batch-mode --no-transfer-progress verify

- name: Validate Compose contract
run: docker compose --env-file .env.example config --quiet

- name: Build Java 17 container
run: docker build --tag library-app-spring-boot:ci .
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,5 @@ build/
### VS Code ###
.vscode/

.DS_Store
.DS_Store
.env
10 changes: 4 additions & 6 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
# syntax=docker/dockerfile:1.2

FROM maven AS build
FROM maven:3.9-eclipse-temurin-17 AS build

WORKDIR /app

# Copy only the pom.xml and download dependencies
COPY ./pom.xml /app
RUN --mount=type=cache,target=/root/.m2 mvn dependency:go-offline
RUN mvn --batch-mode --no-transfer-progress dependency:go-offline

# Copy the rest of the project files
COPY ./src /app/src

# Build the project
RUN --mount=type=cache,target=/root/.m2 mvn clean package -DskipTests
RUN mvn --batch-mode --no-transfer-progress clean package -DskipTests

FROM openjdk
FROM eclipse-temurin:17-jre-jammy

WORKDIR /app

Expand Down
31 changes: 24 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,17 @@

Kütüphaneler tarafından kullanılabilecek kayıt yönetimlerini, kitap ödünç verme ve alma işlemlerini yapabilecekleri Rest API projesidir.

> **Fork durumu:** Bu depo, [gorbadil/LibraryAppSpringBoot](https://github.com/gorbadil/LibraryAppSpringBoot) projesinin fork'udur; özgün projenin tamamı Okan'a aitmiş gibi sunulmaz. [Okan'ın upstream'den sonraki 10 commit'i](https://github.com/gorbadil/LibraryAppSpringBoot/compare/main...okturan:main) örnek veri yükleme, global hata yönetimi, repository/service düzeltmeleri, tek alanlı kategori ve yayınevi güncelleme hataları, silme hataları, Docker veri davranışı ve kurulum dokümantasyonu üzerinde çalışır.

## Okan Tarafından Eklenen Farklar

- Tekrarlanabilir örnek kütüphane verisi üreten `DataLoader`.
- API hatalarını tutarlı yanıtlara dönüştüren global exception handler.
- Yalnız adres/açıklama alanı değiştiğinde başarısız olan yayınevi ve kategori güncellemelerinin düzeltilmesi.
- Silme hatalarının ve repository sorgularının iyileştirilmesi.
- Java 17'ye sabitlenmiş container build/runtime aşamaları ve PostgreSQL servis sağlık kontrolü.
- Kaynakta parola tutmayan Compose yapılandırması ve Java 17/PostgreSQL CI doğrulaması.

## Kullanılan Teknolojiler

<code><img width="50" src="https://user-images.githubusercontent.com/25181517/117201156-9a724800-adec-11eb-9a9d-3cd0f67da4bc.png" alt="Java" title="Java"/></code>
Expand Down Expand Up @@ -72,19 +83,25 @@ Aşağıda, API'nin sunduğu temel endpoint'lerin bir listesi bulunmaktadır:
1. Projeyi klonlayın.
- `git clone https://github.com/okturan/LibraryAppSpringBoot.git`
2. Docker yüklü ise,
1. `docker-compose up`
2. `src/main/resources/application.properties` dosyasında veri tabanı konfigürasyonunu yapın.
3. Projeyi ayağa kaldırmak için IDE'nizden start edin.
1. `cp .env.example .env`
2. `.env` içindeki yerel veritabanı kullanıcı adı ve parolasını değiştirin.
3. `docker compose up --build`
3. Docker olmadan çalıştırmak için aşağıdaki ortam değişkenlerini tanımlayıp `./mvnw spring-boot:run` komutunu kullanın.
4. Swagger üzerinden API kullanılabilir. Tarayıcınızdan [http://localhost:8080/swagger-ui/index.html#/](http://localhost:8080/swagger-ui/index.html#/)'e gidin.
5. End pointlere istek atabilirsiniz.

## Ortam Değişkenleri

Bu projeyi çalıştırmak için aşağıdaki ortam değişkenlerini application.properties dosyasından değiştirmelisiniz.
Bu projeyi çalıştırmak için aşağıdaki ortam değişkenlerini tanımlayın; gerçek kimlik bilgilerini `application.properties`, `.env.example` veya Git geçmişine yazmayın.

- `DBURL` — ör. `localhost:5432`
- `DBNAME` — ör. `library-app`
- `DBUSERNAME`
- `DBPASSWORD`

## Doğrulama

spring.datasource.url
spring.datasource.username
spring.datasource.password
GitHub Actions, PostgreSQL servis konteyneri üzerinde Java 17 ile Maven testlerini ve paketlemeyi çalıştırır; ardından Compose yapılandırmasının örnek ortam dosyasıyla çözümlendiğini ve uygulama container'ının Java 17 tabanında üretildiğini doğrular. Bu bir fork olduğundan, doğrulama Okan'ın farkını kanıtlar; upstream kaynakların yazarlığını değiştirmez.

## Lisans

Expand Down
23 changes: 14 additions & 9 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,23 @@ services:
depends_on:
- postgres
environment:
DBURL: postgres:5432
DBNAME: library-app
DBUSERNAME: postgres
DBPASSWORD: postgres
DBURL: ${DBURL:-postgres:5432}
DBNAME: ${DBNAME:-library-app}
DBUSERNAME: ${DBUSERNAME:?set DBUSERNAME in .env}
DBPASSWORD: ${DBPASSWORD:?set DBPASSWORD in .env}

postgres:
image: postgres
image: postgres:16-alpine
ports:
- 5432:5432
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: library-app
POSTGRES_USER: ${DBUSERNAME:?set DBUSERNAME in .env}
POSTGRES_PASSWORD: ${DBPASSWORD:?set DBPASSWORD in .env}
POSTGRES_DB: ${DBNAME:-library-app}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
volumes:
- /var/lib/postgresql/data
- /var/lib/postgresql/data
Empty file modified mvnw
100644 → 100755
Empty file.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.3</version>
<version>42.7.11</version>
</dependency>

<dependency>
Expand Down
Loading