Compare commits
11 Commits
386f5137c6
...
v0.0.12
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c6eebe61f | ||
|
|
24424cc226 | ||
|
|
a45d2269eb | ||
|
|
f450b6fdce | ||
|
|
1479827612 | ||
|
|
b3f09d5dfc | ||
|
|
4c83f6670d | ||
|
|
d9e69e03ad | ||
|
|
c1c326aa5d | ||
|
|
c26ee4f400 | ||
|
|
0f7339d5c1 |
@@ -147,3 +147,11 @@ jobs:
|
|||||||
build-args: |
|
build-args: |
|
||||||
VITE_APP_VERSION=${{ steps.generate.outputs.new_tag }}
|
VITE_APP_VERSION=${{ steps.generate.outputs.new_tag }}
|
||||||
VITE_BASE_URL=https://todo.almazlar.com/api
|
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 }}"
|
||||||
25
CHANGELOG.md
25
CHANGELOG.md
@@ -1,3 +1,28 @@
|
|||||||
|
## [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)
|
||||||
|
* fix: update application properties and Dockerfile for local development configuration (b5dcba1)
|
||||||
|
* fix: update Dockerfile to run tests during build and adjust TodoController request mapping (854a0ba)
|
||||||
|
* fix: add CrossOrigin annotation to TodoController for CORS support (fda1f39)
|
||||||
|
|
||||||
## [v0.0.7] - 2026-02-22
|
## [v0.0.7] - 2026-02-22
|
||||||
|
|
||||||
* fix: update API base URL and add healthcheck for backend service (4050c08)
|
* fix: update API base URL and add healthcheck for backend service (4050c08)
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ RUN apt-get update && \
|
|||||||
apt-get install -y curl && \
|
apt-get install -y curl && \
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
|
||||||
COPY --from=build /app/target/*.jar app.jar
|
COPY --from=build /app/target/*.jar app.jar
|
||||||
EXPOSE 8082
|
EXPOSE 8080
|
||||||
ENTRYPOINT ["java", "-jar", "app.jar"]
|
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"?>
|
<?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">
|
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>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
<version>4.0.3</version>
|
<version>4.0.3</version>
|
||||||
<relativePath/> <!-- lookup parent from repository -->
|
<relativePath /> <!-- lookup parent from repository -->
|
||||||
</parent>
|
</parent>
|
||||||
<groupId>com.example</groupId>
|
<groupId>com.example</groupId>
|
||||||
<artifactId>backend</artifactId>
|
<artifactId>backend</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
<name>backend</name>
|
<name>backend</name>
|
||||||
<description>Demo project for Spring Boot</description>
|
<description>Demo project for Spring Boot</description>
|
||||||
<url/>
|
<url />
|
||||||
<licenses>
|
<licenses>
|
||||||
<license/>
|
<license />
|
||||||
</licenses>
|
</licenses>
|
||||||
<developers>
|
<developers>
|
||||||
<developer/>
|
<developer />
|
||||||
</developers>
|
</developers>
|
||||||
<scm>
|
<scm>
|
||||||
<connection/>
|
<connection />
|
||||||
<developerConnection/>
|
<developerConnection />
|
||||||
<tag/>
|
<tag />
|
||||||
<url/>
|
<url />
|
||||||
</scm>
|
</scm>
|
||||||
<properties>
|
<properties>
|
||||||
<java.version>25</java.version>
|
<java.version>25</java.version>
|
||||||
@@ -69,8 +70,19 @@
|
|||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-actuator</artifactId>
|
<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>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.todo.backend.model;
|
package com.todo.backend.model;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@@ -19,6 +21,9 @@ public class Todo {
|
|||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
private boolean completed = false;
|
private boolean completed = false;
|
||||||
|
|
||||||
|
@Column(nullable = false, updatable = false)
|
||||||
|
private LocalDateTime createdAt = LocalDateTime.now();
|
||||||
|
|
||||||
// Default constructor is required by JPA
|
// Default constructor is required by JPA
|
||||||
public Todo() {
|
public Todo() {
|
||||||
}
|
}
|
||||||
@@ -62,4 +67,9 @@ public class Todo {
|
|||||||
public void setCompleted(boolean completed) {
|
public void setCompleted(boolean completed) {
|
||||||
this.completed = completed;
|
this.completed = completed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getCreatedAt() {
|
||||||
|
return createdAt;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
# backend/src/main/resources/application.properties
|
server.port=8080
|
||||||
|
|
||||||
server.port=8082
|
|
||||||
server.servlet.context-path=/api
|
server.servlet.context-path=/api
|
||||||
spring.application.name=backend
|
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.show-sql=true
|
||||||
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
|
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
|
||||||
management.endpoints.web.exposure.include=health,info,metrics
|
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
|
ARG VITE_APP_VERSION=dev
|
||||||
ENV VITE_APP_VERSION=${VITE_APP_VERSION}
|
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}
|
ENV VITE_BASE_URL=${VITE_BASE_URL}
|
||||||
|
|
||||||
RUN npm run build
|
RUN npm run build
|
||||||
|
|||||||
@@ -1,12 +1,73 @@
|
|||||||
:root {
|
:root {
|
||||||
--bg-color: #0f172a;
|
--rich-cerulean-50: #eaf4fb;
|
||||||
|
--rich-cerulean-100: #d5eaf6;
|
||||||
|
--rich-cerulean-200: #aad5ee;
|
||||||
|
--rich-cerulean-300: #80c0e5;
|
||||||
|
--rich-cerulean-400: #56abdc;
|
||||||
|
--rich-cerulean-500: #2b96d4;
|
||||||
|
--rich-cerulean-600: #2378a9;
|
||||||
|
--rich-cerulean-700: #1a5a7f;
|
||||||
|
--rich-cerulean-800: #113c55;
|
||||||
|
--rich-cerulean-900: #091e2a;
|
||||||
|
--rich-cerulean-950: #06151e;
|
||||||
|
|
||||||
|
--sand-dune-50: #f7f5ed;
|
||||||
|
--sand-dune-100: #f0ebdb;
|
||||||
|
--sand-dune-200: #e1d6b7;
|
||||||
|
--sand-dune-300: #d2c293;
|
||||||
|
--sand-dune-400: #c3ae6f;
|
||||||
|
--sand-dune-500: #b49a4b;
|
||||||
|
--sand-dune-600: #907b3c;
|
||||||
|
--sand-dune-700: #6c5c2d;
|
||||||
|
--sand-dune-800: #483d1e;
|
||||||
|
--sand-dune-900: #241f0f;
|
||||||
|
--sand-dune-950: #19160b;
|
||||||
|
|
||||||
|
--alice-blue-50: #ecf3f8;
|
||||||
|
--alice-blue-100: #dae7f1;
|
||||||
|
--alice-blue-200: #b4cfe4;
|
||||||
|
--alice-blue-300: #8fb7d6;
|
||||||
|
--alice-blue-400: #699fc9;
|
||||||
|
--alice-blue-500: #4487bb;
|
||||||
|
--alice-blue-600: #366c96;
|
||||||
|
--alice-blue-700: #295170;
|
||||||
|
--alice-blue-800: #1b364b;
|
||||||
|
--alice-blue-900: #0e1b25;
|
||||||
|
--alice-blue-950: #09131a;
|
||||||
|
|
||||||
|
--ink-black-50: #eef2f6;
|
||||||
|
--ink-black-100: #dee6ed;
|
||||||
|
--ink-black-200: #bdccdb;
|
||||||
|
--ink-black-300: #9cb2c9;
|
||||||
|
--ink-black-400: #7a99b8;
|
||||||
|
--ink-black-500: #597fa6;
|
||||||
|
--ink-black-600: #476685;
|
||||||
|
--ink-black-700: #364c63;
|
||||||
|
--ink-black-800: #243342;
|
||||||
|
--ink-black-900: #121921;
|
||||||
|
--ink-black-950: #0c1217;
|
||||||
|
|
||||||
|
--taupe-50: #f4f2f0;
|
||||||
|
--taupe-100: #e9e4e2;
|
||||||
|
--taupe-200: #d3cac5;
|
||||||
|
--taupe-300: #bdafa8;
|
||||||
|
--taupe-400: #a7958b;
|
||||||
|
--taupe-500: #917a6e;
|
||||||
|
--taupe-600: #746258;
|
||||||
|
--taupe-700: #574942;
|
||||||
|
--taupe-800: #3a312c;
|
||||||
|
--taupe-900: #1d1816;
|
||||||
|
--taupe-950: #14110f;
|
||||||
|
|
||||||
|
/* New CSS Variables */
|
||||||
|
--bg-color: var(--rich-cerulean-950);
|
||||||
--panel-bg: rgba(30, 41, 59, 0.7);
|
--panel-bg: rgba(30, 41, 59, 0.7);
|
||||||
--text-main: #f8fafc;
|
--text-main: var(--alice-blue-200);
|
||||||
--text-muted: #94a3b8;
|
--text-muted: var(--sand-dune-600);
|
||||||
--accent-primary: #8b5cf6;
|
--accent-primary: var(--taupe-500);
|
||||||
--accent-secondary: #ec4899;
|
--accent-secondary: var(--rich-cerulean-300);
|
||||||
--success: #10b981;
|
--success: var(--sand-dune-200);
|
||||||
--danger: #ef4444;
|
--danger: var(--ink-black-400);
|
||||||
--border-color: rgba(255, 255, 255, 0.1);
|
--border-color: rgba(255, 255, 255, 0.1);
|
||||||
--glass-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
|
--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;
|
--font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||||
@@ -50,9 +111,18 @@ button {
|
|||||||
border: none;
|
border: none;
|
||||||
outline: none;
|
outline: none;
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
|
background-color: var(--accent-primary);
|
||||||
|
color: var(--text-main);
|
||||||
|
padding: 10px 20px;
|
||||||
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input {
|
input {
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
outline: none;
|
outline: none;
|
||||||
|
background-color: var(--bg-color);
|
||||||
|
color: var(--text-main);
|
||||||
|
padding: 8px 12px;
|
||||||
|
border: 1px solid var(--border-color);
|
||||||
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user