Welcome to our manga shop website E-Ragana! This project is a responsive e-commerce platform for manga enthusiasts, featuring advanced filtering, sorting, and browsing capabilities for a wide variety of manga titles.
- Project Description
- Features
- Screenshots
- Installation
- Usage Guide
- Technologies Used
- Contributing
- License
The E-Ragana website is a modern and dynamic e-commerce platform designed to provide manga enthusiasts with an intuitive and engaging shopping experience. Users can browse, search, and filter manga titles by genre, demographics, type, and price while viewing detailed product pages.
This project was built using Angular for the frontend, with Node.js and Express for the backend API. Data is stored in a PostgreSQL database.
- User-Friendly Interface: Intuitive design with responsive layouts.
- Dynamic Product Display: Display the top 100 manga dynamically.
- Product Details: Detailed product pages with images, pricing, and descriptions.
- Search Functionality: Quickly find manga by name or author.
- Filtering and Sorting: Filter by genre, demographics, and type; sort by name, price, or score.
- Secure Backend: Node.js API with PostreSQL database integration.
- Product Management: Update, delete, list, and download (in a csv file) products via the admin page.
- Swagger API Documentation: Explore and test API endpoints via Swagger UI.
![image](https://private-user-images.githubusercontent.com/162492449/399187384-355163e0-8956-422f-ae59-808857d28a4f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTk3MDQsIm5iZiI6MTczOTM1OTQwNCwicGF0aCI6Ii8xNjI0OTI0NDkvMzk5MTg3Mzg0LTM1NTE2M2UwLTg5NTYtNDIyZi1hZTU5LTgwODg1N2QyOGE0Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMlQxMTIzMjRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05NWM2MzhhZDk2NGZiZWJiYWI4YmM2NWRiYjdhYTZjMTc2NmY4ZjI2MzFiNDAzYzJjYzU2MmQ2N2FkMzU5MGQzJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.tJWwcxIcG9di7bAoMFVcTUlDAMIO6PoLbTjuMKr9Yoo)
![image](https://private-user-images.githubusercontent.com/162492449/399186872-bcad6603-f533-4c0a-ba55-5f9980faf140.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTk3MDQsIm5iZiI6MTczOTM1OTQwNCwicGF0aCI6Ii8xNjI0OTI0NDkvMzk5MTg2ODcyLWJjYWQ2NjAzLWY1MzMtNGMwYS1iYTU1LTVmOTk4MGZhZjE0MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMlQxMTIzMjRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1iYzBmN2IwOTI1NTgwYTAwNjVhYzIwZDZkNjAyN2I4NTI3OTU4ZTAyNzYxZTIwMGY2YTcwMmU2NjRhMzkxNzAyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.JRP6WLpXphS7ymVuU4yLiQWSnaryQEKvV-Y1n7Trywg)
![image](https://private-user-images.githubusercontent.com/162492449/399187360-dfe32008-5ee0-4708-8e4f-4bf4acb2cca5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTk3MDQsIm5iZiI6MTczOTM1OTQwNCwicGF0aCI6Ii8xNjI0OTI0NDkvMzk5MTg3MzYwLWRmZTMyMDA4LTVlZTAtNDcwOC04ZTRmLTRiZjRhY2IyY2NhNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMlQxMTIzMjRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT00ZDcxODMyNDU5NGI0ZjliZDI2MjUyOWQ2MGViYTFkZjE5YjFmNTExYjcxMmJmNTMwZjBlZjJhMWQ5NzJiYmU1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.L3iUrEfPMbLPzd3CkK3N-mHkY2lnWrGlZxSBLznQaXs)
![image](https://private-user-images.githubusercontent.com/162492449/399186837-1e0e0d9a-1b39-48ad-a905-9b814f26dbaf.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTk3MDQsIm5iZiI6MTczOTM1OTQwNCwicGF0aCI6Ii8xNjI0OTI0NDkvMzk5MTg2ODM3LTFlMGUwZDlhLTFiMzktNDhhZC1hOTA1LTliODE0ZjI2ZGJhZi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMlQxMTIzMjRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kZWUyMWZhYjUyNDJkZjY0MWM5MDAxZjViY2Q0MWM2ZTgyNGFkODEwMGJlMzM5MDcwNmRjZDBlYjQ1ZmU1Y2MxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.pUXoXrRaxDsDapUQfFBnOqVQyTUpOhcU2CnIBhomEEs)
![image](https://private-user-images.githubusercontent.com/162492449/399184128-b3f5d26b-1f70-4a33-bbff-936766af9bc1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTk3MDQsIm5iZiI6MTczOTM1OTQwNCwicGF0aCI6Ii8xNjI0OTI0NDkvMzk5MTg0MTI4LWIzZjVkMjZiLTFmNzAtNGEzMy1iYmZmLTkzNjc2NmFmOWJjMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMlQxMTIzMjRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jZDRhZGNlNDMzYzljYjg2NDg0YTg3MzRlZjExOTJhMDgyZTZlYjk3ZjJmNGM5OTdjYmE2ZjY2MTVjMDFiN2ZmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.HZiioECkSdyv0i2NDGOBg1E7UCrY0cEFCSb9VpTf1AA)
![image](https://private-user-images.githubusercontent.com/162492449/399184171-6112e0ea-42b0-4c16-bccf-f6cc841d214c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTk3MDQsIm5iZiI6MTczOTM1OTQwNCwicGF0aCI6Ii8xNjI0OTI0NDkvMzk5MTg0MTcxLTYxMTJlMGVhLTQyYjAtNGMxNi1iY2NmLWY2Y2M4NDFkMjE0Yy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMlQxMTIzMjRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zMjg4OTk4NTgzZTVhMmE0NjQ3YzM5Yjc4YzcyMTY2NDUxY2NkMjZhZWRiYmY2YmE4MDA2ODcyZTYyMmM0MjljJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.NgsD7WT7tbYqI4p4gHYWM9nkbCo4eAHhG4p2l9yJ-sw)
![image](https://private-user-images.githubusercontent.com/162492449/399184185-9bbafb5f-d4b8-4d64-bdce-9ccdd4db147a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTk3MDQsIm5iZiI6MTczOTM1OTQwNCwicGF0aCI6Ii8xNjI0OTI0NDkvMzk5MTg0MTg1LTliYmFmYjVmLWQ0YjgtNGQ2NC1iZGNlLTljY2RkNGRiMTQ3YS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMlQxMTIzMjRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mNDU0MTUzNDM4Mjk0NTllMGE2YmExNDQ4NDg0MWQzODliMzNhMjVjMzg2M2U4NjYxZDI3ODEzY2ZjNTJjNDgxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.UAZ-rug7uMBw9csKbHWzGBWdzX1MGRhFDR1gqV011Pc)
![image](https://private-user-images.githubusercontent.com/162492449/399184214-fb8548a5-a3dd-458c-b205-6c7fc0d44ff5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTk3MDQsIm5iZiI6MTczOTM1OTQwNCwicGF0aCI6Ii8xNjI0OTI0NDkvMzk5MTg0MjE0LWZiODU0OGE1LWEzZGQtNDU4Yy1iMjA1LTZjN2ZjMGQ0NGZmNS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMlQxMTIzMjRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kMWIzODIzNDk1NGUyYjRiYWEyNGFhNjg5ZGE3YjY4YjE0YzY3NjE0OTgzZTBhYTVjMjQxOTJhZDYxNTczYmMxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Fw54QTBhy4Cy7nkpE8t_xUD-sucHpzhohQIoZLzWD6k)
![image](https://private-user-images.githubusercontent.com/80327821/399189973-ccdccce0-9848-41c7-8512-4f7d731ccee4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTk3MDQsIm5iZiI6MTczOTM1OTQwNCwicGF0aCI6Ii84MDMyNzgyMS8zOTkxODk5NzMtY2NkY2NjZTAtOTg0OC00MWM3LTg1MTItNGY3ZDczMWNjZWU0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDExMjMyNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTY5YTQ0YTQ1YmYyNDQzYjYxOGZhZmNjOWM5MjcxZTVjYmM3NzBiZTMxMmUyMDM5NDJlYzZkNjljZGM2ZGExOGMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.gyXHVJrct0yh_Ec0d8LCmBWc7HiCBECqid2Vyjpdg0M)
API Documentation Swagger (http://localhost:3000/api-docs/)
![image](https://private-user-images.githubusercontent.com/80327821/399190042-b0c55762-9ebf-41ba-8a6b-070e437fd039.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNTk3MDQsIm5iZiI6MTczOTM1OTQwNCwicGF0aCI6Ii84MDMyNzgyMS8zOTkxOTAwNDItYjBjNTU3NjItOWViZi00MWJhLThhNmItMDcwZTQzN2ZkMDM5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEyVDExMjMyNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVlNGNlNGQwMzc4NzZmZjU2ZDkwMzE3NjJmODJmMGNiODM3MDUxZGM1NTg4ZTVjNzYzMGM0NWZiY2FlZDhhNTgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.1tqjCkX6szi-Gi9Xy0vzHyvcBg51bttMBlgtHEHnbGE)
- Node.js (v14+)
- Angular CLI
- PostgreSQL
-
Clone the repository:
git clone https://github.com/leinapr/Node_Project.git cd Node_Project
-
Setup backend:
cd Node_Project/backend npm install
- Create a
.env
file and configure the database connection:DB_HOST=localhost DB_USER=your_postgres_user DB_PASSWORD=your_postgres_password DB_NAME=ecommerce DB_PORT=5432
- Initialize the database:
psql -U your_postgres_user -d ecommerce -c "CREATE TABLE products (id SERIAL PRIMARY KEY, name TEXT, type TEXT, score FLOAT, status TEXT, volumes INT, genres TEXT[], demographics TEXT[], authors TEXT[], description TEXT, image TEXT, url TEXT, price FLOAT);" psql -U your_postgres_user -d ecommerce -c "COPY products (id, name, type, score, status, volumes, genres, demographics, authors, description, image, url, price) FROM '/your/path/manga.csv' DELIMITER ';' CSV HEADER;"
- Start the backend server:
node server.js
- Create a
-
Setup frontend:
cd Node_Project/frontend/ecommerce-frontend npm install
- Install highcharts
npm install highcharts npm install --save-dev @types/highcharts
- Start the frontend server:
ng serve
- Install highcharts
-
Open the application in your browser at http://localhost:4200.
The Admin Page enables CRUD operations on the product database through AG Grid. Key features include:
- View Products: Display the products in a table.
- Edit Existing Products: Modify product details inline or in a popup editor.
- Delete Products: Remove products from the database.
- Export Products in a csv file: Click on a button to download a csv file containing the products.
- Browsing products: Browse through the list of manga titles. By default, the top 100 products are displayed.
- Filtering products: Use the dropdowns to filter by:
- Genre: Action, Adventure, Drama, etc.
- Demographics: Shonen, Seinen, Shojo, etc.
- Type: Manga, Novel, Light Novel, etc.
- Price Range.
- Sorting products: Sort the products by Name, Price, or Score.
- Viewing product details: Click on any product to view its detailed information. Product details include the title, price, genre, demographics, type, and rating.
- Adding Products to the Cart: Click on the button 'Add to Cart' to add a product to the cart or click on 'Buy Now' to purchase the product directly. This will redirect you to the 'Cart' page.
- Enter your name.
- Enter your email address.
- Write your message.
- We will reply to you as soon as possible.
- Navigate to this page to know more about us.
The Cart Page provides essential e-commerce functionalities for managing selected products before checkout. Key features include:
- Add Products: Items added from the shop are displayed in the cart for review.
- Remove Products: Users can remove unwanted items from the cart.
- Update Quantities: Adjust the quantity of each product directly within the cart.
- Apply Promo Code (DISCOUNT10): Users can enter a valid promotional code to receive discounts on their total purchase.
- Cart Summary: Displays a breakdown of the cart, including individual item prices, subtotal, discounts, and the final total.
For more information, download and watch the E_ragana users guide video available on the repository.
- GET
/products
: Fetch all products. - GET
/api/product/:id
: Fetch a specific product by ID. - POST
/products
: Add a new product. - PUT
/products/:id
: Update an existing product. - DELETE
/products/:id
: Remove a product.
We can test see these endpoints using Swagger UI
- Angular (v15+)
- TypeScript
- Bootstrap for responsive design
- Node.js
- Express
- MySQL for data storage
- Sequelize ORM
Contributions are welcome! To contribute:
- Fork the repository.
- Create a new branch for your feature/fix:
git checkout -b feature-name
- Commit your changes and push to your fork.
- Submit a pull request.