from django.db import models from common.models.baseModels import BaseModel from common.models.choiceModels import InvitationStatus from django.contrib.postgres.fields import ArrayField from django.conf import settings from users.models import User class Project(BaseModel): title = models.CharField(max_length=20) is_team = models.BooleanField(default=False) team_name = models.CharField(max_length=20, blank=True) category = ArrayField(models.CharField(max_length=20), default=list) is_published = models.BooleanField(default=False) view_count = models.IntegerField(default=0) like_count = models.IntegerField(default=0) scrap_count = models.IntegerField(default=0) is_represent = models.BooleanField(default=False) thumbnail = models.ImageField(upload_to='', blank=True) code_id = models.CharField(max_length=26, blank=True) owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='owned_projects', to_field="id") likers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='liked_projects', blank=True) scrappers = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='scrapped_projects', blank=True) class ProjectTeamList(BaseModel): project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='team_project_member_list', to_field='id') user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='team_project_list',to_field='id') class ProjectInvitation(BaseModel): from_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sent_invitations') to_user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='received_invitations') project = models.ForeignKey(Project, on_delete=models.CASCADE) status = models.CharField(max_length=10, choices=InvitationStatus.choices)