{"id":22360844,"url":"https://github.com/ransuum/book-store-service-task","last_synced_at":"2026-05-07T00:31:54.980Z","repository":{"id":265267197,"uuid":"895337973","full_name":"ransuum/book-store-service-task","owner":"ransuum","description":null,"archived":false,"fork":false,"pushed_at":"2025-01-22T09:04:22.000Z","size":1063,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T14:34:13.837Z","etag":null,"topics":["css","generics","h2-database","html","java","spring-boot","spring-data","spring-data-jpa","spring-security","thymeleaf"],"latest_commit_sha":null,"homepage":"http://localhost:8084/api/home","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ransuum.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-28T02:45:15.000Z","updated_at":"2025-01-22T19:15:23.000Z","dependencies_parsed_at":"2025-01-31T15:46:13.886Z","dependency_job_id":"fb77c15c-2269-43c5-9bfb-c3c17233be84","html_url":"https://github.com/ransuum/book-store-service-task","commit_stats":null,"previous_names":["ransuum/book-store-service-task"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ransuum/book-store-service-task","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ransuum%2Fbook-store-service-task","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ransuum%2Fbook-store-service-task/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ransuum%2Fbook-store-service-task/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ransuum%2Fbook-store-service-task/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ransuum","download_url":"https://codeload.github.com/ransuum/book-store-service-task/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ransuum%2Fbook-store-service-task/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278459438,"owners_count":25990348,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["css","generics","h2-database","html","java","spring-boot","spring-data","spring-data-jpa","spring-security","thymeleaf"],"created_at":"2024-12-04T16:18:49.552Z","updated_at":"2025-10-05T13:15:25.783Z","avatar_url":"https://github.com/ransuum.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Book Store. Spring Project\n\nThe purpose of this task is to check your knowledge and understanding in Java and Spring.\n\nDuration: **15** hours\n\n## Description\n\nYour objective is to develop a \"Book Store Service\" following the MVC pattern.\n\n\u003e Project may have two main roles of authority: customer and employee.\n\nThe project structure is already set up, with essential classes waiting for implementation in their respective folders.\nYour project is organized into several packages. Here's a brief overview of each:\n\n### Packages Overview\n\n#### `conf`\n\n- Houses all configuration classes.\n\n#### `controller`\n\n- Contains controller files.\n\n#### `dto`\n\n- Contains DTO files.\n\n#### `model`\n\n- Contains all model classes.\n\n#### `exception`\n\n- Contains custom user exception files.\n\n#### `repo`\n\n- Contains repository files.\n\n#### `service`\n\n- Includes interfaces with declared methods for all services.\n\n- `impl`: Encompasses implementations of declared services.\n\nThe class diagram of the Domain model is shown in the figure below:\n\n\u003cimg src=\"img/Diagram.png\" alt=\"DTO\" width=\"1000\"/\u003e\n\n### Permissions\n\n\u003e For Any Registered Users\n\n- Access a list of available books.\n- View detailed information about any book.\n- Edit personal information and view user profile.\n\n\u003e For Employees\n\n- Add, edit, or delete books from the list.\n- Confirm orders placed by customers.\n- Block or unblock customer accounts.\n- Access a list of registered customers.\n\n\u003e For Customers\n\n- Add books to the basket for purchase.\n- Delete their account.\n- Submit orders for purchase.\n\n### Services\n\nBelow is a list of available services with corresponding methods for implementation.\n\n\u003e Note: You can add your own methods to existing services, as well as create additional services.\n\n#### OrderService\n\n* `getAllOrdersByClient(email: String)`\n  Retrieves a list of all orders by client's email placed in the system.\n* `getAllOrdersByEmployee(email: String)`\n  Retrieves a list of all orders by employee's email placed in the system.\n* `addOrder(order: OrderDTO)`\n  Adds a new order to the system, incorporating the provided order details.\n\n#### EmployeeService\n\n* `getAllEmployees()`\n  Retrieves a list of all employees registered in the system.\n* `getEmployeeByEmail(email: String)`\n  Fetches details of a specific employee based on their email.\n* `updateEmployeeByEmail(email: String, employee: EmployeeDTO)`\n  Updates the information of an existing employee identified by their email with the provided details.\n* `deleteEmployeeByEmail(email: String)`\n  Removes an employee from the system based on their email.\n* `addEmployee(employee: EmployeeDTO)`\n  Registers a new employee in the system with the provided details.\n\n#### ClientService\n\n* `getAllClients()`\n  Retrieves a list of all clients (customers) registered in the system.\n* `getClientByEmail(email: String)`\n  Fetches details of a specific client based on their email.\n* `updateClientByEmail(email: String, client: ClientDTO)`\n  Updates the information of an existing client identified by their email with the provided details.\n* `deleteClientByEmail(email: String)`\n  Removes a client from the system based on their email.\n* `addClient(client: ClientDTO)`\n  Registers a new client in the system with the provided details.\n\n#### BookService\n\n* `getAllBooks()`\n  Retrieves a list of all books available in the store.\n* `getBookByName(name: String)`\n  Fetches details of a specific book based on its name.\n* `updateBookByName(name: String, book: BookDTO)`\n  Updates the information of an existing book identified by its name with the provided details.\n* `deleteBookByName(name: String)`\n  Removes a book from the system based on its name.\n* `addBook(book: BookDTO)`\n  Adds a new book to the system with the provided details.\n\n## Requirements\n\nEnsure implementation of the following:\n\n- `Spring Data JPA` for efficient data management.\n-  Incorporate `Spring Security` for robust authentication and authorization.\n-  Enable `Internationalization and Localization` to support English and any language you choose.\n-  Implement `Validation` for data integrity.\n-  Establish `Error handling` for graceful error management.\n-  Utilize `DTOs` - data transfer objects structured as illustrated below:\n\n\u003cimg src=\"img/DTO.png\" alt=\"DTO\" width=\"600\"/\u003e\n\n## Would be nice\n\nConsider the following additional features:\n\n- Incorporate `Logging` for comprehensive system monitoring.\n- Implement `Pagination and Sorting` for enhanced data presentation.\n\n## Recommendations\n\n\u003e Use wrapper classes (like Long, Integer, etc.) instead of primitive types whenever possible.\n\n- Utilize `Lombok` for streamlined Java code.\n- Use `ModelMapper` for easy mapping between objects.\n- Utilize `Thymeleaf` for HTML templating.\n- Explore the `test` folder to execute provided test cases for your solution.\n- Refer to the `main\\resources\\sql` folder for SQL scripts to initialize data.\n\n## Special message\n\n- Make the most of the time available.\n  While we understand you may not cover all the points,\n  aim to accomplish as much as possible within the given duration of 15 hours.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fransuum%2Fbook-store-service-task","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fransuum%2Fbook-store-service-task","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fransuum%2Fbook-store-service-task/lists"}