{"id":28965865,"url":"https://github.com/ersinisgor/cloudfilestorage_microservices","last_synced_at":"2025-06-24T07:10:18.039Z","repository":{"id":294351761,"uuid":"986689924","full_name":"ersinisgor/CloudFileStorage_Microservices","owner":"ersinisgor","description":null,"archived":false,"fork":false,"pushed_at":"2025-06-16T14:45:25.000Z","size":1095,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-16T15:40:16.385Z","etag":null,"topics":["asp-net-core","asp-net-mvc","automapper","bcrypt","bootstrap","fluentvalidation","jwt","mediatr","postgresql","sqlite","yarp-gateway"],"latest_commit_sha":null,"homepage":"","language":"C#","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/ersinisgor.png","metadata":{"files":{"readme":"README.markdown","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,"zenodo":null}},"created_at":"2025-05-20T01:46:33.000Z","updated_at":"2025-06-16T14:55:35.000Z","dependencies_parsed_at":null,"dependency_job_id":"f55feb68-4c25-4b2f-95b3-12ea3814a247","html_url":"https://github.com/ersinisgor/CloudFileStorage_Microservices","commit_stats":null,"previous_names":["ersinisgor/cloudfilestorage_microservices"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ersinisgor/CloudFileStorage_Microservices","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ersinisgor%2FCloudFileStorage_Microservices","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ersinisgor%2FCloudFileStorage_Microservices/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ersinisgor%2FCloudFileStorage_Microservices/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ersinisgor%2FCloudFileStorage_Microservices/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ersinisgor","download_url":"https://codeload.github.com/ersinisgor/CloudFileStorage_Microservices/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ersinisgor%2FCloudFileStorage_Microservices/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261624969,"owners_count":23186121,"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":["asp-net-core","asp-net-mvc","automapper","bcrypt","bootstrap","fluentvalidation","jwt","mediatr","postgresql","sqlite","yarp-gateway"],"created_at":"2025-06-24T07:10:17.399Z","updated_at":"2025-06-24T07:10:18.019Z","avatar_url":"https://github.com/ersinisgor.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cloud File Storage System\n\n## Table of Contents\n\n- [Project Overview](#project-overview)\n- [Technologies Used](#technologies-used)\n- [Architecture](#architecture)\n- [Authentication and Authorization](#authentication-and-authorization)\n- [File Management](#file-management)\n- [Sharing Mechanism](#sharing-mechanism)\n- [MVC Application](#mvc-application)\n- [Learning Outcomes](#learning-outcomes)\n\n## Project Overview\n\nThe Cloud File Storage System is a web application that allows users to securely store, manage, and share files in the cloud. Built with a microservices architecture, it emphasizes modularity and scalability. Key features include:\n\n- User registration and login with secure JWT-based authentication.\n- File operations such as uploading, listing, downloading, and deleting.\n- Flexible file sharing options: private, public, or shared with specific users.\n- A Gateway API that centralizes communication between the frontend and backend services.\n- A user-friendly MVC web interface for seamless interaction.\n\n## Technologies Used\n\n- **Backend:**\n\n  - ASP.NET Core for microservices development.\n  - SQLite for the Authentication API database.\n  - PostgreSQL for the File Metadata API database.\n  - MediatR for implementing CQRS.\n  - AutoMapper for object mapping.\n  - FluentValidation for DTO validation.\n  - YARP for the Gateway API reverse proxy.\n\n- **Frontend:**\n\n  - ASP.NET Core MVC for the web application.\n  - HTML, CSS, JavaScript, and Bootstrap for the user interface.\n\n- **Authentication:**\n\n  - JWT for secure authentication.\n  - BCrypt for password hashing.\n\n- **Version Control:**\n  - GitHub for code repository and collaboration.\n\n## Architecture\n\nThe system is composed of multiple microservices, each handling a specific function:\n\n1. **Authentication API**: Manages user registration, login, and token refresh using SQLite.\n2. **File Metadata API**: Stores file metadata (e.g., name, description) in PostgreSQL.\n3. **File Storage API**: Handles file storage and retrieval on the server’s file system.\n4. **Gateway API**: Routes requests from the frontend to the appropriate microservice and validates JWT tokens.\n5. **MVC Application**: Provides the web interface, communicating with backend services via the Gateway API.\n\nThis structure simplifies client-side logic and enhances security by centralizing authentication.\n\n## Authentication and Authorization\n\nUsers authenticate through the Authentication API, receiving a JWT token upon login or registration. The token is included in subsequent requests and validated by the Gateway API. File access is restricted based on ownership or sharing permissions, ensuring secure operations.\n\n## File Management\n\n- **Upload**: Users upload files via the MVC application, which are stored by the File Storage API and cataloged by the File Metadata API.\n- **List**: Users view their files through the File Metadata API.\n- **Download**: Files are retrieved from the File Storage API using file IDs.\n- **Delete**: Files are removed from both storage and metadata records.\n\n## Sharing Mechanism\n\nFiles can be shared in three ways:\n\n- **Private**: Accessible only to the owner.\n- **Public**: Accessible to anyone with the link.\n- **Shared with Specific Users**: Owners specify user IDs and permissions (read or edit).\n\nSharing is managed via the FileShare entity, linking files to users with defined access levels.\n\n## MVC Application\n\nThe MVC application offers an intuitive interface with:\n\n- Login and registration pages.\n- A file management dashboard for uploading, listing, downloading, and deleting files.\n- Modals for editing file details and configuring sharing settings.\n\nIt communicates exclusively with the Gateway API, streamlining backend interactions.\n\n## Learning Outcomes\n\nThis project provided valuable experience in:\n\n- Designing and implementing microservices architectures.\n- Building RESTful APIs with ASP.NET Core.\n- Securing applications with JWT authentication.\n- Applying the CQRS pattern using MediatR.\n- Managing databases with Entity Framework Core.\n- Mapping objects with AutoMapper and validating data with FluentValidation.\n- Configuring a reverse proxy with YARP.\n- Handling file uploads and secure storage.\n- Developing user interfaces with ASP.NET Core MVC.\n- Practicing effective version control with GitHub.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fersinisgor%2Fcloudfilestorage_microservices","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fersinisgor%2Fcloudfilestorage_microservices","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fersinisgor%2Fcloudfilestorage_microservices/lists"}