Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5bf01c59b5 | ||
|
|
6ba8d8b7ce | ||
|
|
5b0ea13ba0 | ||
|
|
53cb84dd14 | ||
|
|
649c9f8d69 | ||
|
|
fe20a69482 | ||
|
|
4c6eebe61f | ||
|
|
24424cc226 | ||
|
|
a45d2269eb | ||
|
|
f450b6fdce | ||
|
|
1479827612 | ||
|
|
b3f09d5dfc | ||
|
|
4c83f6670d | ||
|
|
d9e69e03ad | ||
|
|
c1c326aa5d | ||
|
|
c26ee4f400 |
@@ -147,3 +147,11 @@ jobs:
|
||||
build-args: |
|
||||
VITE_APP_VERSION=${{ steps.generate.outputs.new_tag }}
|
||||
VITE_BASE_URL=https://todo.almazlar.com/api
|
||||
|
||||
- name: Deploy to Dokploy (Backend)
|
||||
run: |
|
||||
curl -X POST "${{ secrets.DOKPLOY_BACKEND_WEBHOOK_URL }}"
|
||||
|
||||
- name: Deploy to Dokploy (Frontend)
|
||||
run: |
|
||||
curl -X POST "${{ secrets.DOKPLOY_FRONTEND_WEBHOOK_URL }}"
|
||||
30
CHANGELOG.md
30
CHANGELOG.md
@@ -1,3 +1,33 @@
|
||||
## [v0.0.15] - 2026-02-22
|
||||
|
||||
* degisiklik (6ba8d8b)
|
||||
|
||||
## [v0.0.14] - 2026-02-22
|
||||
|
||||
* feat: replace rich cerulean color variables with a new color palette for improved theming (53cb84d)
|
||||
|
||||
## [v0.0.13] - 2026-02-22
|
||||
|
||||
* feat: update button and input styles with new color variables and hover/focus states (fe20a69)
|
||||
|
||||
## [v0.0.12] - 2026-02-22
|
||||
|
||||
* feat: update CSS variables for improved theming and styling (24424cc)
|
||||
|
||||
## [v0.0.11] - 2026-02-22
|
||||
|
||||
* fix: correct spelling of 'application' in README (f450b6f)
|
||||
|
||||
## [v0.0.10] - 2026-02-22
|
||||
|
||||
* feat: add deployment steps for Backend and Frontend to Dokploy (b3f09d5)
|
||||
* fix: update VITE_BASE_URL to use port 8080 in Dockerfile (4c83f66)
|
||||
* fix: update server port to 8080 in Dockerfile and application properties (d9e69e0)
|
||||
|
||||
## [v0.0.9] - 2026-02-22
|
||||
|
||||
* feat: add createdAt field to Todo entity and update database migration script (c26ee4f)
|
||||
|
||||
## [v0.0.8] - 2026-02-22
|
||||
|
||||
* fix: update Dockerfile, application properties, and controller mappings for health check and CORS support (386f513)
|
||||
|
||||
@@ -16,6 +16,10 @@ RUN apt-get update && \
|
||||
apt-get install -y curl && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
||||
COPY --from=build /app/target/*.jar app.jar
|
||||
EXPOSE 8082
|
||||
EXPOSE 8080
|
||||
ENTRYPOINT ["java", "-jar", "app.jar"]
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=3s \
|
||||
CMD curl -f http://localhost:8080/api/actuator/health || exit 1
|
||||
@@ -1,30 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>4.0.3</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
<relativePath /> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>com.example</groupId>
|
||||
<artifactId>backend</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>backend</name>
|
||||
<description>Demo project for Spring Boot</description>
|
||||
<url/>
|
||||
<url />
|
||||
<licenses>
|
||||
<license/>
|
||||
<license />
|
||||
</licenses>
|
||||
<developers>
|
||||
<developer/>
|
||||
<developer />
|
||||
</developers>
|
||||
<scm>
|
||||
<connection/>
|
||||
<developerConnection/>
|
||||
<tag/>
|
||||
<url/>
|
||||
<connection />
|
||||
<developerConnection />
|
||||
<tag />
|
||||
<url />
|
||||
</scm>
|
||||
<properties>
|
||||
<java.version>25</java.version>
|
||||
@@ -68,9 +69,20 @@
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
||||
</dependency>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-flyway</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.flywaydb</groupId>
|
||||
<artifactId>flyway-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.flywaydb</groupId>
|
||||
<artifactId>flyway-database-postgresql</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
@@ -80,4 +92,4 @@
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
</project>
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.todo.backend.model;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
|
||||
@Entity
|
||||
@@ -19,6 +21,9 @@ public class Todo {
|
||||
@Column(nullable = false)
|
||||
private boolean completed = false;
|
||||
|
||||
@Column(nullable = false, updatable = false)
|
||||
private LocalDateTime createdAt = LocalDateTime.now();
|
||||
|
||||
// Default constructor is required by JPA
|
||||
public Todo() {
|
||||
}
|
||||
@@ -62,4 +67,9 @@ public class Todo {
|
||||
public void setCompleted(boolean completed) {
|
||||
this.completed = completed;
|
||||
}
|
||||
|
||||
public LocalDateTime getCreatedAt() {
|
||||
return createdAt;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
# backend/src/main/resources/application.properties
|
||||
|
||||
server.port=8082
|
||||
server.port=8080
|
||||
server.servlet.context-path=/api
|
||||
spring.application.name=backend
|
||||
|
||||
spring.jpa.hibernate.ddl-auto=update
|
||||
# Flyway
|
||||
spring.flyway.enabled=true
|
||||
spring.flyway.locations=classpath:db/migration
|
||||
spring.flyway.baseline-on-migrate=true
|
||||
|
||||
# Database
|
||||
spring.jpa.hibernate.ddl-auto=none
|
||||
spring.jpa.show-sql=true
|
||||
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
|
||||
management.endpoints.web.exposure.include=health,info,metrics
|
||||
|
||||
7
backend/src/main/resources/db/migration/V1__init.sql
Normal file
7
backend/src/main/resources/db/migration/V1__init.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
CREATE TABLE todos (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
description TEXT,
|
||||
completed BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
|
||||
);
|
||||
@@ -7,7 +7,7 @@ COPY . .
|
||||
ARG VITE_APP_VERSION=dev
|
||||
ENV VITE_APP_VERSION=${VITE_APP_VERSION}
|
||||
|
||||
ARG VITE_BASE_URL=http://localhost:8082/api
|
||||
ARG VITE_BASE_URL=http://localhost:8080/api
|
||||
ENV VITE_BASE_URL=${VITE_BASE_URL}
|
||||
|
||||
RUN npm run build
|
||||
|
||||
@@ -74,7 +74,7 @@ const TodoList = () => {
|
||||
|
||||
return (
|
||||
<div className="todo-wrapper">
|
||||
<h1 className="title">Tasks</h1>
|
||||
<h1 className="title">Tasks List</h1>
|
||||
|
||||
<form className="todo-form" onSubmit={handleCreate}>
|
||||
<input
|
||||
|
||||
@@ -1,58 +1,129 @@
|
||||
/* Existing CSS rules */
|
||||
:root {
|
||||
--bg-color: #0f172a;
|
||||
--panel-bg: rgba(30, 41, 59, 0.7);
|
||||
--text-main: #f8fafc;
|
||||
--text-muted: #94a3b8;
|
||||
--accent-primary: #8b5cf6;
|
||||
--accent-secondary: #ec4899;
|
||||
--success: #10b981;
|
||||
--danger: #ef4444;
|
||||
--border-color: rgba(255, 255, 255, 0.1);
|
||||
--glass-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
|
||||
--font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
--color1: #edf0f8;
|
||||
--color2: #dae1f1;
|
||||
--color3: #b6c3e2;
|
||||
--color4: #91a5d4;
|
||||
--color5: #6c87c6;
|
||||
--color6: #4769b8;
|
||||
--color7: #395493;
|
||||
--color8: #2b3f6e;
|
||||
--color9: #1d2a49;
|
||||
--color10: #0e1525;
|
||||
--color11: #0a0f1a;
|
||||
|
||||
--color12: #e8ebfc;
|
||||
--color13: #d1d7fa;
|
||||
--color14: #a3aff5;
|
||||
--color15: #7588f0;
|
||||
--color16: #4760eb;
|
||||
--color17: #1938e6;
|
||||
--color18: #142db8;
|
||||
--color19: #0f228a;
|
||||
--color20: #0a165c;
|
||||
--color21: #050b2e;
|
||||
--color22: #040820;
|
||||
--color23: #02081c;
|
||||
|
||||
--color24: #fff4e5;
|
||||
--color25: #ffe9cc;
|
||||
--color26: #ffd399;
|
||||
--color27: #ffbd66;
|
||||
--color28: #ffa733;
|
||||
--color29: #ff9100;
|
||||
--color30: #cc7400;
|
||||
--color31: #995700;
|
||||
--color32: #663a00;
|
||||
--color33: #331d00;
|
||||
--color34: #241400;
|
||||
|
||||
--color35: #eef2f7;
|
||||
--color36: #dce5ef;
|
||||
--color37: #bacade;
|
||||
--color38: #97b0ce;
|
||||
--color39: #7495be;
|
||||
--color40: #527bad;
|
||||
--color41: #41628b;
|
||||
--color42: #314a68;
|
||||
--color43: #213145;
|
||||
--color44: #101923;
|
||||
--color45: #0b1118;
|
||||
|
||||
/* New CSS Variables */
|
||||
--bg-color: var(--color45);
|
||||
--panel-bg: rgba(30, 41, 59, 0.7);
|
||||
--text-main: var(--color24);
|
||||
--text-muted: var(--color36);
|
||||
--accent-primary: var(--color41);
|
||||
--accent-secondary: var(--color38);
|
||||
--success: var(--color39);
|
||||
--danger: var(--color30);
|
||||
--border-color: rgba(255, 255, 255, 0.1);
|
||||
--glass-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
|
||||
--font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
}
|
||||
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: var(--font-family);
|
||||
background-color: var(--bg-color);
|
||||
background-image: radial-gradient(circle at top right, rgba(139, 92, 246, 0.15), transparent 40%),
|
||||
radial-gradient(circle at bottom left, rgba(236, 72, 153, 0.15), transparent 40%);
|
||||
color: var(--text-main);
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
padding: 4rem 1rem;
|
||||
font-family: var(--font-family);
|
||||
background-color: var(--bg-color);
|
||||
background-image: radial-gradient(circle at top right, rgba(139, 92, 246, 0.15), transparent 40%),
|
||||
radial-gradient(circle at bottom left, rgba(236, 72, 153, 0.15), transparent 40%);
|
||||
color: var(--text-main);
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: flex-start;
|
||||
padding: 4rem 1rem;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
body {
|
||||
padding: 2rem 1rem;
|
||||
}
|
||||
body {
|
||||
padding: 2rem 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
body {
|
||||
padding: 0;
|
||||
align-items: flex-start;
|
||||
}
|
||||
body {
|
||||
padding: 0;
|
||||
align-items: flex-start;
|
||||
}
|
||||
}
|
||||
|
||||
button {
|
||||
cursor: pointer;
|
||||
font-family: inherit;
|
||||
border: none;
|
||||
outline: none;
|
||||
transition: all 0.3s ease;
|
||||
cursor: pointer;
|
||||
font-family: inherit;
|
||||
border: none;
|
||||
outline: none;
|
||||
transition: all 0.3s ease;
|
||||
background-color: var(--color5); /* Default background color */
|
||||
color: var(--text-main);
|
||||
padding: 10px 20px;
|
||||
border-radius: 4px;
|
||||
|
||||
&:hover {
|
||||
background-color: var(--color6); /* Hover state background color */
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
font-family: inherit;
|
||||
outline: none;
|
||||
font-family: inherit;
|
||||
outline: none;
|
||||
background-color: var(--bg-color);
|
||||
color: var(--text-main);
|
||||
padding: 8px 12px;
|
||||
border: 1px solid var(--color3);
|
||||
|
||||
&:focus {
|
||||
border-color: var(--color4); /* Focus state border color */
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2, h3 {
|
||||
color: var(--color5);
|
||||
}
|
||||
Reference in New Issue
Block a user