Loading...
User: Represents a user of the platform.
File: Represents a file that can be uploaded, shared, and collaborated on.
Permission: Manages user permissions for accessing files.
Version: Manages different versions of a file.
ShareLink: Manages sharing links for files.
CloudStorage: Manages cloud storage integration.
from datetime import datetime, timedelta
from enum import Enum
class FileType(Enum):
TEXT = 1
IMAGE = 2
VIDEO = 3
OTHER = 4
class User:
def init(self, user_id, name):
self.user_id = user_id
self.name = name
self.permissions = {}
def add_permission(self, file, permission):
self.permissions[file] = permission
class Permission(Enum):
READ = 1
WRITE = 2
READ_WRITE = 3
class File:
def init(self, file_id, name, user, file_type):
self.file_id = file_id
self.name = name
self.user = user
self.file_type = file_type
self.versions = []
self.share_links = []
self.cloud_storage = None
def upload(self, content):
version = Version(len(self.versions) + 1, content)
self.versions.append(version)
if self.cloud_storage:
self.cloud_storage.store(self, version)
def add_share_link(self, link, expiration_date):
share_link = ShareLink(link, expiration_date)
self.share_links.append(share_link)
class Version:
def init(self, version_number, content):
self.version_number = version_number
self.content = content
self.upload_date = datetime.now()
class ShareLink:
def init(self, link, expiration_date):
self.link = link
self.expiration_date = expiration_date
class CloudStorage:
def store(self, file, version):
print(f"Storing file {file.name} version {version.version_number} in cloud storage.")
class FileSharingPlatform:
def init(self):
self.users = {}
self.files = {}
def create_user(self, user_id, name):
user = User(user_id, name)
self.users[user_id] = user
return user
def create_file(self, file_id, name, user, file_type):
file = File(file_id, name, user, file_type)
self.files[file_id] = file
return file
def upload_file(self, file_id, content):
file = self.files[file_id]
file.upload(content)
def share_file(self, file_id, link, expiration_date):
file = self.files[file_id]
file.add_share_link(link, expiration_date)
def set_cloud_storage(self, file_id, cloud_storage):
file = self.files[file_id]
file.cloud_storage = cloud_storage
1. **Single Responsibility Principle**: Each class has a single responsibility.
2. **Open/Closed Principle**: The system can be extended with new features without modifying existing code.
3. **Liskov Substitution Principle**: Not applicable in this simple design, but can be considered for future extensions.
4. **Interface Segregation Principle**: Not applicable in this simple design, but can be considered for future extensions.
5. **Dependency Inversion Principle**: CloudStorage is an abstraction that can be replaced with different implementations.