{"id":22972810,"url":"https://github.com/zabavb/libro","last_synced_at":"2025-08-13T13:31:30.596Z","repository":{"id":266554466,"uuid":"898367685","full_name":"zabavb/Libro","owner":"zabavb","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-09T18:10:49.000Z","size":932,"stargazers_count":2,"open_issues_count":23,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-09T18:37:12.465Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zabavb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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-12-04T09:15:03.000Z","updated_at":"2024-12-08T21:20:12.000Z","dependencies_parsed_at":"2024-12-06T15:30:42.693Z","dependency_job_id":null,"html_url":"https://github.com/zabavb/Libro","commit_stats":null,"previous_names":["zabavb/book-store","zabavb/bookoria","zabavb/libro"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabavb%2FLibro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabavb%2FLibro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabavb%2FLibro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zabavb%2FLibro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zabavb","download_url":"https://codeload.github.com/zabavb/Libro/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229764601,"owners_count":18120652,"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","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":[],"created_at":"2024-12-14T23:19:32.615Z","updated_at":"2025-08-13T13:31:30.583Z","avatar_url":"https://github.com/zabavb.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"client/src/assets/logoLibro.svg\" alt=\"Libro Logo\" width=\"200\"/\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eLibro – Online Bookstore Web Application\n\t\u003cspan\u003e(\u003ci\u003e\u003ca href=\"Libro - Cover letter.pdf\"\u003eCover letter\u003c/a\u003e\u003c/i\u003e)\u003c/span\u003e\n\u003c/h1\u003e\n\n\u003cp\u003e\n  \u003cstrong\u003eLibro\u003c/strong\u003e is a full-stack web application modeled after the Ukrainian book store \u003ca href=\"https://www.yakaboo.ua/\"\u003eYakaboo\u003c/a\u003e.\n  It enables users to browse, search, and purchase books online — including physical books, e-books, and audiobooks.\n\u003c/p\u003e\n\n\u003cp\u003e\n  This project was developed as a diploma thesis by a team of 5 programmers and 3 designers at \u003cstrong\u003eIT Step Academy (Lviv)\u003c/strong\u003e.\n\u003c/p\u003e\n\n\u003ch2\u003e🧱 Architecture Overview\u003c/h2\u003e\n\n\u003cul\u003e\n  \u003cli\u003e\u003cstrong\u003eBackend:\u003c/strong\u003e ASP.NET Core 8 with a microservices-based architecture\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eFrontend:\u003c/strong\u003e React with TypeScript\u003c/li\u003e\n  \u003cli\u003e\u003cstrong\u003eGateway:\u003c/strong\u003e Ocelot API Gateway and GraphQL-based APIComposer (HotChocolate)\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003chr/\u003e\n\n\u003ch2\u003e🔙 Backend Details\u003c/h2\u003e\n\n\u003ch3\u003eMicroservices\u003c/h3\u003e\n\n\u003cul\u003e\n  \u003cli\u003e\n    \u003cstrong\u003eUserAPI\u003c/strong\u003e – Manages users and subscriptions. Features:\n    \u003cul\u003e\n      \u003cli\u003eRole-based authentication (JWT)\u003c/li\u003e\n      \u003cli\u003eOAuth (Google login)\u003c/li\u003e\n      \u003cli\u003eRoles:\n        \u003cul\u003e\n          \u003cli\u003e\u003cstrong\u003eAdmin\u003c/strong\u003e – Full access to admin dashboard\u003c/li\u003e\n          \u003cli\u003e\u003cstrong\u003eModerator\u003c/strong\u003e – Partial dashboard access (no user management)\u003c/li\u003e\n          \u003cli\u003e\u003cstrong\u003eUser\u003c/strong\u003e – Standard access to personal features like basket, orders, and favorites\u003c/li\u003e\n        \u003c/ul\u003e\n      \u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n\n  \u003cli\u003e\n    \u003cstrong\u003eBookAPI\u003c/strong\u003e – Handles:\n    \u003cul\u003e\n      \u003cli\u003eBooks, authors, publishers, categories, subcategories\u003c/li\u003e\n      \u003cli\u003eDiscounts and feedback (no edit/delete)\u003c/li\u003e\n      \u003cli\u003eThree book types: Paper (delivery), E-book, Audiobook (added to personal library)\u003c/li\u003e\n      \u003cli\u003e\u003cem\u003eNo real transactions yet – mock purchase flow only\u003c/em\u003e\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n\n  \u003cli\u003e\n    \u003cstrong\u003eOrderAPI\u003c/strong\u003e – Processes orders manually\n    \u003cul\u003e\n      \u003cli\u003eOrder status managed manually by Admin/Moderator\u003c/li\u003e\n      \u003cli\u003eNo delivery tracking implemented yet\u003c/li\u003e\n    \u003c/ul\u003e\n  \u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch3\u003eCommon Backend Features\u003c/h3\u003e\n\n\u003cul\u003e\n  \u003cli\u003ePagination, filtering, sorting, and searching across all major entities (books, users, orders, etc.)\u003c/li\u003e\n  \u003cli\u003eRedis caching for optimized GET requests\u003c/li\u003e\n  \u003cli\u003eAsynchronous programming used wherever possible\u003c/li\u003e\n  \u003cli\u003eFile storage on AWS S3: user avatars, subscription images, book covers, e-book \u0026 audio-book files\u003c/li\u003e\n  \u003cli\u003eAccess to e-books and audiobooks is secured using signed URLs\u003c/li\u003e\n  \u003cli\u003eSerilog for logging and monitoring\u003c/li\u003e\n  \u003cli\u003eCustom Exception Middleware for error handling\u003c/li\u003e\n  \u003cli\u003eDTOs and AutoMapper used for data transfer\u003c/li\u003e\n  \u003cli\u003eDatabase seeding for test/demo purposes\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch3\u003eArchitecture Pattern\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eMicroservice → Controller → Service → Repository\u003c/code\u003e\u003c/p\u003e\n\n\u003chr/\u003e\n\n\u003ch2\u003e🖥️ Frontend Details\u003c/h2\u003e\n\n\u003ch3\u003eArchitecture\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eapiConfig → repository → service → container → component\u003c/code\u003e\u003c/p\u003e\n\n\u003ch3\u003eMain Features\u003c/h3\u003e\n\n\u003cul\u003e\n  \u003cli\u003eReact with TypeScript, Vite for bundling\u003c/li\u003e\n  \u003cli\u003eTailwind CSS for styling\u003c/li\u003e\n  \u003cli\u003eZod schema validation for form inputs\u003c/li\u003e\n  \u003cli\u003eImage + entity data uploads via FormData\u003c/li\u003e\n  \u003cli\u003eAxios for HTTP communication\u003c/li\u003e\n  \u003cli\u003eAuthentication and user info stored in \u003ccode\u003elocalStorage\u003c/code\u003e\u003c/li\u003e\n  \u003cli\u003eNotifications using React/Redux\u003c/li\u003e\n  \u003cli\u003eLazy loading of images\u003c/li\u003e\n  \u003cli\u003eMemoization and virtualization for performance\u003c/li\u003e\n  \u003cli\u003eAsynchronous data fetching and processing\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003chr/\u003e\n\n\u003ch2\u003e🔐 Authentication \u0026 Authorization\u003c/h2\u003e\n\n\u003cul\u003e\n  \u003cli\u003eJWT-based role authentication\u003c/li\u003e\n  \u003cli\u003eOAuth (Google login)\u003c/li\u003e\n  \u003cli\u003eToken-protected API routes\u003c/li\u003e\n  \u003cli\u003eFrontend reflects role-based UI access\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003chr/\u003e\n\n\u003ch2\u003e🛠️ Technologies Used\u003c/h2\u003e\n\n\u003ch3\u003eBackend\u003c/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eASP.NET Core 8\u003c/li\u003e\n  \u003cli\u003eEF Core\u003c/li\u003e\n  \u003cli\u003eRedis\u003c/li\u003e\n  \u003cli\u003eOcelot Gateway\u003c/li\u003e\n  \u003cli\u003eGraphQL (HotChocolate)\u003c/li\u003e\n  \u003cli\u003eSerilog\u003c/li\u003e\n  \u003cli\u003eAWS S3\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003ch3\u003eFrontend\u003c/h3\u003e\n\u003cul\u003e\n  \u003cli\u003eReact + TypeScript\u003c/li\u003e\n  \u003cli\u003eVite\u003c/li\u003e\n  \u003cli\u003eRedux\u003c/li\u003e\n  \u003cli\u003eZod\u003c/li\u003e\n  \u003cli\u003eTailwind CSS\u003c/li\u003e\n  \u003cli\u003eAxios\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003chr/\u003e\n\n\u003ch2\u003e🧪 Development Status\u003c/h2\u003e\n\u003cp\u003e\n  \u003cem\u003eNote: This project simulates the purchase flow without actual payment integrations. Features like real-time delivery tracking and payment processing are planned for future improvements.\u003c/em\u003e\n\u003c/p\u003e\n\n\u003chr/\u003e\n\n\u003ch2\u003e🤝 Credits\u003c/h2\u003e\n\u003cp\u003e\n  Developed by a team of 5 programmers and 3 designers as part of the diploma thesis at \u003cstrong\u003eIT Step Academy, Lviv\u003c/strong\u003e.\n\u003c/p\u003e\n\n\u003chr/\u003e\n\n\u003ch2\u003e🔗 Repository\u003c/h2\u003e\n\u003cp\u003e\n  GitHub: \u003ca href=\"https://github.com/zabavb/Libro\"\u003ehttps://github.com/zabavb/Libro\u003c/a\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzabavb%2Flibro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzabavb%2Flibro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzabavb%2Flibro/lists"}