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.
Watch a quick video summary of the SaveX platform, showcasing its features, user interface, and functionality:

Click the image above to watch the video on YouTube.
| Name | URJC Mail | 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 |
To get started with SaveX, follow these steps:
| 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. |
- Clone the repository
git clone https://github.com/CodeURJC-DAW-2024-25/webapp01.git SaveX --branch main --depth 1
cd ./SaveX/backend-
Install MySQL Download and install MySQL from the official website: MySQL Downloads. Once installed, create a new database named
savexdb. -
Set up the application properties Open the
src/main/resources/application.propertiesfile 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- Build the project with Maven
# Linux
./mvnw clean install
# Windows
.\mvnw.cmd clean install- 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.
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:
- Navigate to the frontend directory
cd ./SaveX/frontend- Install dependencies
npm install- 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.
To get started with SaveX using Docker, follow these steps:
| 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. |
- Clone the repository
git clone https://github.com/CodeURJC-DAW-2024-25/webapp01.git SaveX --branch main --depth 1
cd ./SaveX/docker- Build the Docker image
# Linux
chmod +x ./create_image.sh
./create_image.sh
# Windows
.\create_image.bat- 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.
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
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:
-
Access the OpenAPI YAML file Follow this link to access the OpenAPI YAML file: OpenAPI Documentation.
-
View the API documentation in Swagger UI Open the Swagger UI interface by navigating to
https://localhost:8443/swagger-ui.htmlin your web browser or by using the following link: Swagger UI.
| Field | Type |
|---|---|
| id | Primary key |
| String (unique) | |
| username | String (unique) |
| name | String |
| password | String (encrypted) |
| avatar | Blob |
| created | Date |
| Field | Type |
|---|---|
| id | Primary key |
| name | String (unique) |
| 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 |
| Field | Type |
|---|---|
| id | Primary key |
| name | String |
| user_id | Foreign key (User.id) |
| created | Date |
| Field | Type |
|---|---|
| id | Primary key |
| title | String |
| description | String |
| banner | Blob |
| content | String |
| created | Date |
| modified | Date |
| author | String |
| visibility | Enum (public, private) |
| Field | Type |
|---|---|
| id | Primary key |
| content | String |
| author | Foreign key (User.id) |
| created | Date |
| modified | Date |
The following diagram illustrates the structure of our database, including tables, relationships, and key constraints:
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.
| 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 | ❌ | ❌ | ✅ |
- 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.
- Admin dashboard will have some graphs to visualize users activity and supermarkets statistics
- API: We will use a supermarket API to get the products and their details (prices, descriptions, etc).
-
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.
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.jsfile 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.-
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.
-
Sort the cadidates based on their score
The candidates are sorted based on their score, with the lowest score being the best match. -
Find the best match for each supermarket
From all the candidates, the algorithm selects the best match for each supermarket.
-
Here are some screenshots of the SaveX platform to give you a visual overview of its features and user interface:
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).

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

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

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

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

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

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

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

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

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

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

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.
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.
- Green: @Controller
- Red: @Service
- Blue: @Repository
- Yellow: Domain entities
- Purple: 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.
- Refactored the
RestShoppingListControllerby 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
ListResponseto 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.
| # | Commit Message | File(s) |
|---|---|---|
| 1º | refactor: Remove unused imports and dependencies in RestShoppingListController | RestShoppingListController.java |
| 2º | Feat: Implement create and delete shopping list endpoints with request validation | RestShoppingListController.java |
| 3º | Feat: Simplify shopping list controller methods and enhance response handling | RestShoppingListController.java |
| 4º | Feat: Refactor addProductToList method to improve response handling and user validation; add listResponse DTO for structured responses | ShoppingListService.java, ListResponse.java |
| 5º | Feat: Update security configuration and improve API documentation for user and shopping list endpoints | SecurityConfig.java, JwtTokenProvider.java |
- 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.
| # | Commit Message | File(s) |
|---|---|---|
| 1º | Feat: Enhance product search functionality with pagination and filtering options | ProductsController.java |
| 2º | feat: implement caching and data fetching services for improved product loading | fetchService.js |
| 3º | Feat: Add Markdown rendering for post content and improve post detail styling | MarkdownService.java |
| 4º | Refactor: Simplify product search logic and add REST API for product retrieval | RestProductsController.java |
| 5º | Feat: Implement load more functionality for posts with AJAX | fetchPosts.js |
- 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
| # | Commit Message | File(s) |
|---|---|---|
| 1º | feat: Comparation of products algorithm | ProductsController.java |
| 2º | feat: async admin lists all users | AdminController.java |
| 3º | feat: suggested products | suggestedProducts.js |
| 4º | posts page | post-page.css |
| 5º | temp: admin controller | adminGraphs.js |
- 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
| # | Commit Message | File(s) |
|---|---|---|
| 1º | Feat: add functionality to add products to user shopping lists | RestShoppingListController.java |
| 2º | Feat: Add validation to user registration and enhance error handling in AuthController | AuthController.java |
| 3º | Feat: implemented functionality to change user password with validations | SettingsController.java |
| 4º | Feat: Implement error handling on the login page with an informational popup | AuthController.java |
| 5º | Feat: Implement avatar upload and retrieval functionality in user profile | RestUserController.java |
- 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.
| # | Commit Message | File(s) |
|---|---|---|
| 1º | feat: add post editing functionality and improve create post form with dynamic data | PostController.java |
| 2º | feat: add delete functionality for shopping lists | ShoppingListController.java |
| 3º | add shoppingList to profile | ShoppingListController.java |
| 4º | create post | PostController.java |
| 5º | modify admin page | admin.html |
- Refactored the
RestShoppingListControllerby 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
ListResponseto 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.
| # | Commit Message | File(s) |
|---|---|---|
| 1º | refactor: Remove unused imports and dependencies in RestShoppingListController | RestShoppingListController.java |
| 2º | Feat: Implement create and delete shopping list endpoints with request validation | RestShoppingListController.java |
| 3º | Feat: Simplify shopping list controller methods and enhance response handling | RestShoppingListController.java |
| 4º | Feat: Refactor addProductToList method to improve response handling and user validation; add listResponse DTO for structured responses | ShoppingListService.java, ListResponse.java |
| 5º | Feat: Update security configuration and improve API documentation for user and shopping list endpoints | SecurityConfig.java, JwtTokenProvider.java |
- 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).
| # | Commit Message | Most Significant File |
|---|---|---|
| 1º | merge: admin features (admin endpoints) | ApiResponseDTO.java |
| 2º | postman: posts batch tests | postman-batch-test.json |
| 3º | Swagger annotations (comments, posts, shoppinglist) - Added 404 code in the corresponding routes | RestPostsController.java |
| 4º | api: normalized endpoints and fixed errors | RestUserController.java |
| 5º | postman: batch test for unauthorized & users - api: create users from API | postman-batch-test.json |
- 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.
| # | Commit Message | File(s) |
|---|---|---|
| 1º | Docker: Add Dockerfile and docker-compose config | Dockerfile & docker-compose.yml |
| 2º | Feature: Add ComparationAlgorithm and LevenshteinUtils for product comparison logic | ComparationAlgorithm.java & LevenshteinUtils.java |
| 3º | Feat: Implement post creation and update functionality with enhanced reading time calculation and security restrictions | RestPostsController.java & PostMapper.java |
| 4º | feat: Add OpenAPI generator configuration and update API documentation settings | pom.xml & application.properties |
| 5º | Refactor: Enhance user modification validation and update UserMapper to support partial updates | ValidationUtils.java & UserMapper.java |
- 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.
| # | Commit Message | File(s) |
|---|---|---|
| 1º | feat: Enhance API documentation with OpenAPI annotations for product endpoints | RestProductsController&RestUserController |
| 2º | Postman: Refactor, group the API into folders, and structure the request format. | SaveX Postman Collection |
| 3º | Refactor: add user modification DTOs and update user modification logic in UserService and RestUserController | RestUserController & UserMapper.java |
| 4º | Feat: Implement user avatar management endpoints for upload, modification, and deletion | RestUserController |
| 5º | Feat: Implement user avatar management endpoints for upload, modification, and deletion | ValidationUtils.java & UserMapper.java |
- 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.
| # | Commit Message | File(s) |
|---|---|---|
| 1º | feat: Implement update comment functionality | CommentService.java |
| 2º | feat: Add list update method and fix list deletion | RestShoppingListController |
| 3º | feat: Implement activity data | RestProductController |
| 4º | feat: Update API documentation PATCH methods in shopping list | SaveX API.postman_collection.json |
| 5º | feat: Update CreateList endpoint to use ModelAttribute and modify Postman collection for form data | SaveX API.postman_collection.json |
- 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.
| # | Commit Message | File(s) |
|---|---|---|
| 1º | feat: implement add-to-list popup component and integrate product addition to shopping lists | AddToListPopupComponent.tsx, ShoppingListService.ts |
| 2º | feat: refactor create shopping list modal and integrate list creation event handling | CreateShoppingListModal.tsx |
| 3º | Feature: add CreateShoppingListComponent for creating new shopping lists with form validation and routing | CreateShoppingListComponent.tsx, app-routing.module.ts |
| 4º | Feature: add ShoppingListDetailsComponent with routing and service integration for viewing and deleting shopping lists | ShoppingListDetailsComponent.tsx, ShoppingListService.ts |
| 5º | Refactor: implement getter/setter for search query in products component | ProductsComponent.tsx, ProductService.ts, ProductCard.tsx |
- 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).
| # | Commit Message | File(s) |
|---|---|---|
| 1º | view: main component (hero, product-view, cta) | user-data.service.ts |
| 2º | cors | auth.service.ts |
| 3º | feat: added stats service and implemented stats | stats.service.ts |
| 4º | init angular: feat: Added Bootstrap to the admin panel | admin.component.ts |
| 5º | Added the SPA as a static resource | SPAController.java |
- 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) |
|---|---|---|
| 1º | Feature: Add user and authentication types, implement default avatar handling, and update AuthResponse structure | auth.service.ts |
| 2º | feat: refactor admin component and services for improved user and post management | admin.component.ts |
| 3º | Feature: Implement caching for product loading to improve performance | products.service.ts |
| 4º | Feature: Implement comment submission functionality in post detail view | post-detail.component.ts |
| 5º | Dockerfile: Updated Dockerfile to include Angular build stage and copy output to the backend resources. | Dockerfile |
- 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) |
|---|---|---|
| 1º | Feature: Refactor PopupComponent to include dynamic header and content, and improve styling and animations | settings.component.ts, popup.component.ts |
| 2º | Feature: Add validation error handling for user modification and password update | settings.component.ts, user.service.ts |
| 3º | Feature: Add validation utilities for user modification and password update | validationUtils.ts |
| 4º | Feature: Refactor user settings component to use modifyUser and userPassword structures for data handling | settings.component.ts, user.service.ts |
| 5º | Feature: Add user email retrieval and update settings component | navbar.component.ts , user.service.ts |
- 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.
| # | Commit Message | File(s) |
|---|---|---|
| 1º | feat: add AdminComponent with user and post management functionality | admin.component.html |
| 2º | Feature: Add create post functionality | create-post-form.html |
| 3º | Feature: Add edit post functionality | create-post-form.ts |
| 4º | feat: add charts to admin panel for product and user statistics | admin.component.ts |
| 5º | Feature: update post with banner | create-post-form.ts |
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.



