From 8a3ea1d4efffce781fa89fbe46185c0137d170c7 Mon Sep 17 00:00:00 2001 From: CodeDevMLH Date: Sun, 6 Apr 2025 15:48:37 +0200 Subject: [PATCH] update readme --- README.md | 150 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 148 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0bb1d5b..8ad14e7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,149 @@ -# ToDo-App_Node.js_Test +# Todo App with Node.js, Express, and PostgreSQL -Tests für node.js mit auth \ No newline at end of file +A full-stack Todo application with user authentication built using Node.js, Express, PostgreSQL, and JWT. + +## Features + +- User authentication (register, login, logout) +- JWT-based session management with HTTP-only cookies +- Create, read, update, and delete todo items +- Responsive UI with real-time updates +- PostgreSQL database storage +- Docker support for development + +## Technologies Used + +- **Backend**: Node.js, Express.js +- **Database**: PostgreSQL +- **Authentication**: JWT (JSON Web Tokens), bcrypt for password hashing +- **Frontend**: HTML, CSS, JavaScript (Vanilla) +- **Development Tools**: Docker, Nodemon + +## Setup Instructions + +### Prerequisites + +- Node.js (v14 or newer) +- npm or yarn +- Docker and Docker Compose (for containerized database) +- PostgreSQL (if not using Docker) + +### Installation + +1. Clone the repository: + ```bash + git clone + cd ToDo-App_Node.js_Test + ``` + +2. Install dependencies: + ```bash + npm install + ``` + +### Database Setup + +#### Using Docker: + +1. Start PostgreSQL container: + ```bash + npm run create-db-container + ``` + +2. Create the database: + ```bash + npm run db:create + ``` + +3. Initialize the database with tables: + ```bash + npm run db:init + ``` + +#### Manual Setup: + +1. Create a PostgreSQL database named `todo_app_db` +2. Run the SQL script in `/db/init_postgres.sql` to create tables + +### Environment Configuration + +Create a `.env` file in the root directory with the following variables: + +``` +# PostgreSQL Database Configuration +DB_USER=postgres +DB_HOST=localhost +DB_DATABASE=todo_app_db +DB_PASSWORD=password +DB_PORT=5432 + +# JWT Configuration +JWT_SECRET=your_secure_secret_key +JWT_EXPIRES_IN=1h + +# Server Configuration +PORT=3000 +``` + +> **Important**: Replace `your_secure_secret_key` with a strong, random secret for production use. + +### Running the Application + +Development mode with auto-restart: +```bash +npm run dev +``` + +Production mode: +```bash +npm start +``` + +Access the application at: http://localhost:3000 + +## API Endpoints + +### Authentication + +- **POST** `/api/auth/register` - Register a new user +- **POST** `/api/auth/login` - Log in a user +- **POST** `/api/auth/logout` - Log out the current user +- **GET** `/api/auth/status` - Check user's authentication status + +### Todo Items + +- **GET** `/api/todos` - Get all todos for logged-in user +- **POST** `/api/todos/newEntry` - Create a new todo +- **PUT** `/api/todos/:id` - Update a todo's completion status +- **DELETE** `/api/todos/:id` - Delete a todo + +## Project Structure + +``` +. +├── db/ +│ └── init_postgres.sql # Database initialization script +├── middleware/ +│ └── authMiddleware.js # JWT authentication middleware +├── public/ # Static frontend files +│ ├── index.html # Main todo app page +│ ├── login.html # Login page +│ ├── register.html # Registration page +│ ├── script.js # Frontend JavaScript +│ └── style.css # CSS styles +├── routes/ +│ ├── authRoutes.js # Authentication routes +│ ├── todoRoutes.js # Todo CRUD operations +│ └── viewRoutes.js # HTML page serving +├── .env # Environment variables +├── .gitignore # Git ignore file +├── db.js # Database connection setup +├── package.json # Project dependencies +├── README.md # Project documentation +└── server.js # Main application entry point +``` + + +--- + +*This project was created for learning and demonstration purposes only.* \ No newline at end of file