Skip to content

SaveX is a platform that allows users to compare the prices of products between different supermarkets.

License

Notifications You must be signed in to change notification settings

CuB1z/SaveX

 
 

Repository files navigation

🚀 SaveX - Pricing Comparison Platform

SaveX is a platform that allows users to compare the prices of products between different supermarkets. Users can create shopping lists, add products to them, and compare pricings between the different supermarkets to save money.


🎥 Video Overview

Watch a quick video summary of the SaveX platform, showcasing its features, user interface, and functionality:

SaveX Video Overview
Click the image above to watch the video on YouTube.


📎 Credits

Name URJC Mail LinkedIn Github
Daniel Santos López d.santos.2022@alumnos.urjc.es Daniel Santos danisntoss
Elena Tordesillas Fernández e.tordesillas.2022@alumnos.urjc.es Elena Tordesillas elenxt4
Diego Sánchez Rincón d.sanchezr.2022@alumnos.urjc.es Diego Sánchez CuB1z
Victor Arroyo Madera v.arroyom.2021@alumnos.urjc.es Victor Arroyo victorrosalejo
Jaime Portillo Pérez jj.portillo.2022@alumnos.urjc.es Jaime Portillo PortiESP

🚀 Getting Started without Docker

To get started with SaveX, follow these steps:

🛠️ Prerequisites

Technology Version Description
Java 21 Programming language used for backend development.
Spring Boot 3.4.3 Framework for building Java-based enterprise applications.
MySQL 8.0.33 Relational database management system for data storage.
Maven 3.8.3+ Build automation tool used for managing project dependencies.

🏗️ Installation and Set Up

  1. Clone the repository
git clone https://github.com/CodeURJC-DAW-2024-25/webapp01.git SaveX --branch main --depth 1
cd ./SaveX/backend
  1. Install MySQL Download and install MySQL from the official website: MySQL Downloads. Once installed, create a new database named savexdb.

  2. Set up the application properties Open the src/main/resources/application.properties file and configure the database connection settings by replacing the placeholders with your MySQL configuration:

spring.datasource.url=jdbc:mysql://localhost:3306/savexdb
spring.datasource.username=root
spring.datasource.password={{your_password}}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.hibernate.ddl-auto={{create-drop|update}}
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
  1. Build the project with Maven
# Linux
./mvnw clean install

# Windows
.\mvnw.cmd clean install
  1. Run the application
# Linux
./mvnw spring-boot:run

# Windows
.\mvnw.cmd spring-boot:run

🌐 Access the application Open your web browser and navigate to https://localhost:8443 to access the SaveX platform.

🚀 Launching Angular SPA

Warning

The Angular SPA uses the Spring Boot backend API, so ensure the backend is running before launching the frontend.

To run the Angular Single Page Application (SPA), follow these steps:

  1. Navigate to the frontend directory
cd ./SaveX/frontend
  1. Install dependencies
npm install
  1. Run the Angular application
npm run start

🌐 Access the Angular SPA Open your web browser and navigate to http://localhost:4200 to access the Angular SPA.


🐳 Getting Started with Docker

To get started with SaveX using Docker, follow these steps:

🛠️ Prerequisites

Technology Version Description
Docker 20.10.8 Containerization platform for building, shipping, and running applications.
Docker Compose 1.29.2 Tool for defining and running multi-container Docker applications.

🏗️ Installation and Set Up

  1. Clone the repository
git clone https://github.com/CodeURJC-DAW-2024-25/webapp01.git SaveX --branch main --depth 1
cd ./SaveX/docker
  1. Build the Docker image
# Linux
chmod +x ./create_image.sh
./create_image.sh

# Windows
.\create_image.bat
  1. Run the Docker container
docker compose up

🌐 Access the application Open your web browser and navigate to https://localhost:8443 to access the SaveX platform.

🚀 Deployment on ETSII Server

To deploy the application on the ETSII server, follow provided instructions in the section above and leave the application running on the server.

For access to the application, navigate to appWeb01.dawgis.etsii.urjc.es or 10.100.139.82 in your web browser or set up Postman to interact with the API.

By default, the application will have some users and posts preloaded for testing purposes.

Admin User:

  • Username: admin
  • Password: admin

Regular User:

  • Username: userDefault1
  • Password: pass1

📚 API Documentation

The SaveX API provides endpoints for managing users, shopping lists, products, posts, and comments. The API documentation is available via Swagger UI, allowing users to explore and test the available endpoints.

In order to access the API documentation, follow these steps:

  1. Access the OpenAPI YAML file Follow this link to access the OpenAPI YAML file: OpenAPI Documentation.

  2. View the API documentation in Swagger UI Open the Swagger UI interface by navigating to https://localhost:8443/swagger-ui.html in your web browser or by using the following link: Swagger UI.


📦 Entities

👤 User

Field Type
id Primary key
email String (unique)
username String (unique)
name String
password String (encrypted)
avatar Blob
created Date

🛒 Supermarket

Field Type
id Primary key
name String (unique)

🛍️ Product (For caching data)

Field Type
id Primary key
name String
description String
price Float
supermarket Foreign key (Supermarket.id)
category String
image String
last_updated Date
created Date

📝 Shopping List

Field Type
id Primary key
name String
user_id Foreign key (User.id)
created Date

📝 Post

Field Type
id Primary key
title String
description String
banner Blob
content String
created Date
modified Date
author String
visibility Enum (public, private)

💬 Comment

Field Type
id Primary key
content String
author Foreign key (User.id)
created Date
modified Date

📐 Database Schema Diagram

The following diagram illustrates the structure of our database, including tables, relationships, and key constraints:

Database Schema

This schema provides an overview of how different entities interact within the system. It helps in understanding the data flow and ensuring efficient database design.


🔒 User Permissions

Permission Anonymous User Registered User Admin User
Can view homepage
Can view products
Can view product details
Can search for products
Can compare products
Can view posts and comments
Can create / edit / delete own profile
Can create / edit / delete shopping lists
Can create / edit / delete comments
Can manage other users' accounts
Can view user activity logs
Can create / edit / delete posts

🖼️ Images

  • Users will be able to upload images to set a profile picture.
  • Products will have images provided by the supermarkets API.
  • Posts will have a banner image.

📊 Graphics

  • Admin dashboard will have some graphs to visualize users activity and supermarkets statistics

🛠️ Additional Technology

  • API: We will use a supermarket API to get the products and their details (prices, descriptions, etc).

🧠 Algorithm

  • Price Comparison: We will implement an algorithm to compare the prices of the products in the shopping list between the different supermarkets.

  • Recommendation System: We will implement a recommendation system to suggest products to the users based on the current product being viewed or added to the shopping list.

  • Search Algorithm: We will implement a search algorithm to find the most relevant products based on the user's search query.

    🔎 Price Comparison Algorithm

    The price comparison algorithm used in SaveX is designed to find the most suitable product match across different supermarkets. This is essential for ensuring that the user is comparing the same or very similar products between stores, even if the product names or packaging differ slightly.

    The algorithm is located in the comparationAlgorithm.js file and follows a series of steps to determine the best match. The algorithm takes a main product and a list of candidate products, then calculates a similarity score for each candidate based on various factors such as name, brand, and keywords.

    Steps of the Algorithm

    1. Calculate score (penalization)
      The score determines how different the products are. The lowest score indicates the best match.

      1.1. Calculate specific score for the attributes:

      • brandScore: Calculates the levenstein distance and divides it by the length of the brand name.
      • nameScore: Calculates the levenstein distance and divides it by the length of the product name.
      • keywordsScore: Calculates the keywords similarity between the product names.
        • The keywords similarity is calculated checking the ammout of keywords that are from main product in the candidate product. 2.2. Calculate the final score:
      • The final score is calculated by adding the three previous scores and dividing it by the number of attributes.
    2. Sort the cadidates based on their score
      The candidates are sorted based on their score, with the lowest score being the best match.

    3. Find the best match for each supermarket
      From all the candidates, the algorithm selects the best match for each supermarket.


📸 Screenshots

Here are some screenshots of the SaveX platform to give you a visual overview of its features and user interface:

Home Page

SaveX's home page provides an intuitive interface where users can quickly access the main features of the platform, including product search, price comparison, and shopping list management (for registered users). Home Page

Post Page

Lists available blog posts about saving money and shopping tips. Users can browse and read various articles. Post Page

Post Details

Displays a full blog post with a comments section where users can interact by leaving feedback. Post Details

Login/Register Page

A dual-section screen allowing users to either sign in with their credentials or create a new account. Login/Register Page

Product Search Page

A search interface where users can look up products, filter results by supermarket, and set price ranges to find the best deals. Product Search Page

Product Details

Provides detailed information about a selected product, including price comparisons from different supermarkets and related product recommendations. Product Details

Show List Page

Shows a specific shopping list, including its description and added products. Users can add or remove products from the list. Show List Page

Profile Page

Displays the user’s profile with their name, username, and account creation date. Users can manage their lists and access account settings. Profile Page

Settings Page

Users can update their profile information, such as name, email, and username. They can also change their password or delete their account. Settings Page

Dashboard Page (Admin)

An admin panel displaying app statistics, user management options, and a control panel for posts, allowing admins to delete users or content. Dashboard Page

Create New Post (Admin)

A form where users (likely admins) can create new blog posts by entering details such as title, category, visibility, and content. Create New Post


🗺️ Navigation Flow Diagram

Navigation Flow Diagram

The following diagram represents the navigation flow and user interactions within our application. It provides a visual overview of the different pages and their accessibility based on user roles:

  • Green (All users): Pages accessible to both guests and registered users.
  • Blue (Registered users): Features that require user authentication.
  • Red (Admin): Sections restricted to administrators for content management and analytics.

The diagram illustrates the relationships between key components such as authentication, product browsing, user profile management, and administrative controls. This structure ensures a seamless user experience while maintaining proper role-based access control.


📐 Class Diagram and Templates

This diagram provides an overview of the application's structure, showing how different classes interact with each other and with the templates. It helps to understand the system architecture and facilitates code maintenance and evolution.

Class Diagram

  • Green: @Controller
  • Red: @Service
  • Blue: @Repository
  • Yellow: Domain entities
  • Purple: Templates

🗺️ SPA Class Diagram and Templates

SPA Class Diagram and Templates

This diagram provides a visual representation of the application's component-service structure in Angular. It shows the connection between templates (@Template), components (@Component), and services (@Service), illustrating the frontend architecture:

  • Components manage user interactions, routing, and UI behavior.
  • Templates define the HTML structure for each component.
  • Services handle business logic, data operations, and API communications.

The diagram covers core areas like authentication, product browsing, shopping list management, post and comment functionality, and administrative operations, ensuring a modular, scalable, and maintainable application design.


✋ Participation (I)

🧑‍💻 Victor Arroyo Madera

  • Refactored the RestShoppingListController by removing unused imports and dependencies.
  • Implemented REST endpoints to create and delete shopping lists, with proper request validation.
  • Simplified controller methods and improved response structure for consistency across the shopping list API.
  • Refactored product management within shopping lists to enhance response handling and ensure proper user validation.
  • Created structured response DTOs like ListResponse to support better client integration.
  • Updated and enhanced API security configuration, improving JWT token handling via headers and cookies.
  • Improved API documentation for shopping list and user-related endpoints.
  • Updated pagination DTO structure and added request DTOs for product search functionality.
  • Removed deprecated demo content and outdated TODOs for cleaner, production-ready code.

Commits

# Commit Message File(s)
refactor: Remove unused imports and dependencies in RestShoppingListController RestShoppingListController.java
Feat: Implement create and delete shopping list endpoints with request validation RestShoppingListController.java
Feat: Simplify shopping list controller methods and enhance response handling RestShoppingListController.java
Feat: Refactor addProductToList method to improve response handling and user validation; add listResponse DTO for structured responses ShoppingListService.java, ListResponse.java
Feat: Update security configuration and improve API documentation for user and shopping list endpoints SecurityConfig.java, JwtTokenProvider.java

🧑‍💻 Diego Sánchez Rincón

  • Developed the post management system, allowing administrators to create, edit, and delete blog posts.
  • Implemented a Markdown Service to convert user input into formatted HTML content for blog posts.
  • Implemented an API Service to unify API calls and handle data retrieval for product information.
  • Integrated pagination with AJAX for blog posts, comments and product search results to enhance user experience.
  • Created a Cache Frontend Service to store and retrieve data that is frequently accessed by users.
  • Implemented a FetchData Frontend Service to unify backend API calls and handle caching for improved performance.
  • Allow users to upload images for their profile picture without reloading the page.
  • Database initial data population for testing purposes.
  • Styling and design of the user interface for a consistent and visually appealing user experience.
  • General code refactoring and optimization for improved performance and maintainability.

Commits

# Commit Message File(s)
Feat: Enhance product search functionality with pagination and filtering options ProductsController.java
feat: implement caching and data fetching services for improved product loading fetchService.js
Feat: Add Markdown rendering for post content and improve post detail styling MarkdownService.java
Refactor: Simplify product search logic and add REST API for product retrieval RestProductsController.java
Feat: Implement load more functionality for posts with AJAX fetchPosts.js

🧑‍💻 Jaime José Portillo Pérez

  • Developed the searchbar algorithm
  • Developed the suggested/related products algorithm
  • Developed price caparator algorithm
  • Implemented admin dashboard
  • Implemented admin commands
    • List all users
    • Delete user
    • List all posts
    • Delete post
  • Implemented products and activity graphs

Commits

# Commit Message File(s)
feat: Comparation of products algorithm ProductsController.java
feat: async admin lists all users AdminController.java
feat: suggested products suggestedProducts.js
posts page post-page.css
temp: admin controller adminGraphs.js

🧑‍💻 Daniel Santos López

  • Developed shopping list management features, allowing users to create, edit, and delete lists.
  • Implemented the product addition and removal functionality for shopping lists, enabling users to manage their items.
  • Implemented modals for dynamic list creation and dynamic product addition to list.
  • Styled the profile page and settings page for a consistent and intuitive user interface.
  • Implemented popups for user feedback and error messages to enhance the user experience.
  • Developed the settings page for users to manage their profile information, change passwords, and delete accounts.
  • Started implementing avatar upload functionality for user profiles.
  • Added validation and error handling to the user registration and login forms to ensure data integrity.
  • Implmented functionality to save post banner image

Commits

# Commit Message File(s)
Feat: add functionality to add products to user shopping lists RestShoppingListController.java
Feat: Add validation to user registration and enhance error handling in AuthController AuthController.java
Feat: implemented functionality to change user password with validations SettingsController.java
Feat: Implement error handling on the login page with an informational popup AuthController.java
Feat: Implement avatar upload and retrieval functionality in user profile RestUserController.java

🧑‍💻 Elena Tordesillas Fernández

  • Developed the admin command implementation, allowing administrators to manage system settings efficiently.
  • Implemented post creation functionality, enabling users to publish content seamlessly.
  • Developed post editing functionality, allowing users to modify their posts easily.
  • Developed the user command implementation, providing users with intuitive controls for managing their data.
  • Developed the delete product list feature, ensuring users can remove unnecessary lists effortlessly.

Commits

# Commit Message File(s)
feat: add post editing functionality and improve create post form with dynamic data PostController.java
feat: add delete functionality for shopping lists ShoppingListController.java
add shoppingList to profile ShoppingListController.java
create post PostController.java
modify admin page admin.html

✋ Participation (II)

Victor Arroyo Madera

  • Refactored the RestShoppingListController by removing unused imports and dependencies.
  • Implemented REST endpoints to create and delete shopping lists, with proper request validation.
  • Simplified controller methods and improved response structure for consistency across the shopping list API.
  • Refactored product management within shopping lists to enhance response handling and ensure proper user validation.
  • Created structured response DTOs like ListResponse to support better client integration.
  • Updated and enhanced API security configuration, improving JWT token handling via headers and cookies.
  • Improved API documentation for shopping list and user-related endpoints.
  • Updated pagination DTO structure and added request DTOs for product search functionality.
  • Removed deprecated demo content and outdated TODOs for cleaner, production-ready code.

Commits

# Commit Message File(s)
refactor: Remove unused imports and dependencies in RestShoppingListController RestShoppingListController.java
Feat: Implement create and delete shopping list endpoints with request validation RestShoppingListController.java
Feat: Simplify shopping list controller methods and enhance response handling RestShoppingListController.java
Feat: Refactor addProductToList method to improve response handling and user validation; add listResponse DTO for structured responses ShoppingListService.java, ListResponse.java
Feat: Update security configuration and improve API documentation for user and shopping list endpoints SecurityConfig.java, JwtTokenProvider.java

🧑‍💻 Jaime José Portillo Pérez

  • API REST Endpoints for admin features (users and posts management).
    • Delete user.
    • List all users.
    • List all posts.
  • Swagger documentation for (comments, shopping list controller, posts).
  • Developed the APIResponseDTO class.
    • Normalized all the API responses using the APIResponseDTO class.
    • ApiError class for error responses.
  • Created several API queries in Postman to test the API.
    • Added Postman tests dedicated for every query.
  • Server management and deployment with Docker (developed alongside Diego).
    • Developed the DockerFile and DockerCompose file.
    • Deployed the server on ETSII server.
  • Removed sensitive information from API responses (passwords).

✅ Top 5 Most Significant Commits

# Commit Message Most Significant File
merge: admin features (admin endpoints) ApiResponseDTO.java
postman: posts batch tests postman-batch-test.json
Swagger annotations (comments, posts, shoppinglist) - Added 404 code in the corresponding routes RestPostsController.java
api: normalized endpoints and fixed errors RestUserController.java
postman: batch test for unauthorized & users - api: create users from API postman-batch-test.json

🧑‍💻 Diego Sánchez Rincón

  • Contribute to the creation of the Postman collection.
  • Initial API configuration.
  • Features related to posts (mappers, DTOs, endpoints).
  • Features related to comments (mappers, DTOs, endpoints).
  • Utilities for centralized date formatting.
  • Dockerfile and docker-compose files.
  • Standardization of product models for interaction with the database and external API.
  • Endpoints to query advanced algorithms (suggested products and price comparison).
  • Code cleanup and optimization.
  • Generation of OpenAPI documentation and web route access.
  • Contribution to shopping list functionalities.
  • Help unify form field validation.
  • Endpoints to retrieve app chart statistics.

✅ Top 5 Most Significant Commits

# Commit Message File(s)
Docker: Add Dockerfile and docker-compose config Dockerfile & docker-compose.yml
Feature: Add ComparationAlgorithm and LevenshteinUtils for product comparison logic ComparationAlgorithm.java & LevenshteinUtils.java
Feat: Implement post creation and update functionality with enhanced reading time calculation and security restrictions RestPostsController.java & PostMapper.java
feat: Add OpenAPI generator configuration and update API documentation settings pom.xml & application.properties
Refactor: Enhance user modification validation and update UserMapper to support partial updates ValidationUtils.java & UserMapper.java

🧑‍💻 Daniel Santos López

  • Added Swagger/OpenAPI annotations to enhance API documentation.
  • Refactored Postman collection for better organization.
  • Simplified validation logic in ValidationUtils.
  • Refactored user registration and added validation utilities.
  • Implemented user registration with security updates.
  • Added modifyPassword method and updated user modification logic with DTOs.
  • Implemented user profile management endpoints.
  • Implemented avatar management endpoints: upload, modify, delete, and retrieval.

✅ Top 5 Most Significant Commits

# Commit Message File(s)
feat: Enhance API documentation with OpenAPI annotations for product endpoints RestProductsController&RestUserController
Postman: Refactor, group the API into folders, and structure the request format. SaveX Postman Collection
Refactor: add user modification DTOs and update user modification logic in UserService and RestUserController RestUserController & UserMapper.java
Feat: Implement user avatar management endpoints for upload, modification, and deletion RestUserController
Feat: Implement user avatar management endpoints for upload, modification, and deletion ValidationUtils.java & UserMapper.java

🧑‍💻 Elena Tordesillas Fernández

  • Implemented endpoints for retrieving and updating shopping lists.
  • Implemented update comment functionality.
  • Improved list creation and deletion functionality.
  • Added activity data management.
  • Updated API documentation for shopping list operations.
  • Enhanced Postman collection with dynamic API URLs and new test queries.

✅ Top 5 Most Significant Commits

# Commit Message File(s)
feat: Implement update comment functionality CommentService.java
feat: Add list update method and fix list deletion RestShoppingListController
feat: Implement activity data RestProductController
feat: Update API documentation PATCH methods in shopping list SaveX API.postman_collection.json
feat: Update CreateList endpoint to use ModelAttribute and modify Postman collection for form data SaveX API.postman_collection.json

✋ Participation (III)

Victor Arroyo Madera

  • Implemented add-to-list popup component and integrated product addition to shopping lists.
  • Refactored the create shopping list modal, improving event handling for new list creation.
  • Created CreateShoppingListComponent with form validation and routing to allow users to create new shopping lists.
  • Developed ShoppingListDetailsComponent to enable viewing and deletion of shopping lists with integrated service communication.
  • Removed the item count display from shopping list cards to simplify UI and improve user experience.
  • Developed the Products module entirely in Angular, including:
    • Product listing view with search, filtering, and pagination.
    • Product details page with related products section.
    • Service integration for fetching and managing product data.
    • Improved UI/UX with default images and clean routing between product pages.

Commits

# Commit Message File(s)
feat: implement add-to-list popup component and integrate product addition to shopping lists AddToListPopupComponent.tsx, ShoppingListService.ts
feat: refactor create shopping list modal and integrate list creation event handling CreateShoppingListModal.tsx
Feature: add CreateShoppingListComponent for creating new shopping lists with form validation and routing CreateShoppingListComponent.tsx, app-routing.module.ts
Feature: add ShoppingListDetailsComponent with routing and service integration for viewing and deleting shopping lists ShoppingListDetailsComponent.tsx, ShoppingListService.ts
Refactor: implement getter/setter for search query in products component ProductsComponent.tsx, ProductService.ts, ProductCard.tsx

🧑‍💻 Jaime José Portillo Pérez

  • Migrated project from Spring to Angular, implementing the frontend using Angular and TypeScript.
    • Initialized the Angular project.
    • Implemented the core components and services for the application (user data, theme toggle, about page, login, register, nav, footer, etc.).
  • Migrated static routing to Angular (SPA) routing.
  • Product comparison table minimum price detection.
  • User deletion feature.
  • Added bootstrap to the admin panel
  • Implemented the admin panel.
    • Charts style
    • Charts bootstrap
    • Charts service
    • Admin users and posts list
      • Pagination
      • Deletion button
  • Included the SPA as a static resource in the Java backend.
  • Fixed the CORS issue in the Java backend.
  • Fixed the paths issue (paths used to require '#' in the URL).

✅ Top 5 Most Significant Commits

# Commit Message File(s)
view: main component (hero, product-view, cta) user-data.service.ts
cors auth.service.ts
feat: added stats service and implemented stats stats.service.ts
init angular: feat: Added Bootstrap to the admin panel admin.component.ts
Added the SPA as a static resource SPAController.java

🧑‍💻 Diego Sánchez Rincón

✅ Top 5 Most Significant Commits

  • Implemented authentication and authorization features, including session management and permissions handling.
  • Implemented posts pagination rendering and AJAX loading for improved performance.
  • Developed posts rendering
  • Added support for comments rendering and AJAX loading.
  • Allow users to view comments update in real-time.
  • Product reposnse caching and data fetching services for improved performance.
  • Help to implement shopping list features.
  • Aliases for better project organization and readability.
  • TypeScript refactoring for long support and better code organization.
  • UX/UI improvements for the application.
  • Update Dockerfile to handle new Angular structure and dependencies to be served as static resources.
  • Deploy the application on the ETSII server.
  • Different support tasks for the team.
# Commit Message File(s)
Feature: Add user and authentication types, implement default avatar handling, and update AuthResponse structure auth.service.ts
feat: refactor admin component and services for improved user and post management admin.component.ts
Feature: Implement caching for product loading to improve performance products.service.ts
Feature: Implement comment submission functionality in post detail view post-detail.component.ts
Dockerfile: Updated Dockerfile to include Angular build stage and copy output to the backend resources. Dockerfile

🧑‍💻 Daniel Santos López

✅ Top 5 Most Significant Commits

  • Created settings component
    • Implemented user avatar upload functionality.
    • Implemented user profile update functionality.
    • Implemented user password change functionality.
    • Implemented user account deletion functionality.
    • Managed error handling and validation for user input.
  • Created validation utilities for user input.
    • Implemented frontend validation for user registration and login forms.
    • Implemented frontend validation for user profile update and password change forms.
  • Created popup component for user feedback and error messages.
  • Managed error handling and validation for user login and registration forms.
  • Managed user feedback for successful operations.
# Commit Message File(s)
Feature: Refactor PopupComponent to include dynamic header and content, and improve styling and animations settings.component.ts, popup.component.ts
Feature: Add validation error handling for user modification and password update settings.component.ts, user.service.ts
Feature: Add validation utilities for user modification and password update validationUtils.ts
Feature: Refactor user settings component to use modifyUser and userPassword structures for data handling settings.component.ts, user.service.ts
Feature: Add user email retrieval and update settings component navbar.component.ts , user.service.ts

🧑‍💻 Elena Tordesillas Fernández

  • Created AdminComponent with user and post management functionality.
    • Added charts to the admin panel for product and user statistics.
  • Created create-postComponent
    • Added edit post functionality.
    • Added create post functionality.

✅ Top 5 Most Significant Commits

# Commit Message File(s)
feat: add AdminComponent with user and post management functionality admin.component.html
Feature: Add create post functionality create-post-form.html
Feature: Add edit post functionality create-post-form.ts
feat: add charts to admin panel for product and user statistics admin.component.ts
Feature: update post with banner create-post-form.ts

📄 License

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

SaveX is a platform that allows users to compare the prices of products between different supermarkets.

Topics

Resources

License

Stars

Watchers

Forks

Languages

  • HTML 92.3%
  • Java 3.7%
  • CSS 1.9%
  • TypeScript 1.4%
  • JavaScript 0.7%
  • Dockerfile 0.0%