Skip to content

Commit fa23800

Browse files
authored
Merge pull request #11 from PROCOLLAB-github/feature/auth
Feature/auth
2 parents 602b4ee + 81f4ae2 commit fa23800

14 files changed

Lines changed: 265 additions & 109 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ To install pre-commit simply run inside the shell:
3131

3232
```bash
3333
pre-commit install
34-
```
34+
```

poetry.lock

Lines changed: 13 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

procollab/settings.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@
120120
"rest_framework.renderers.AdminRenderer",
121121
],
122122
}
123-
124123
# Database
125124
if DEBUG:
126125
DATABASES = {

projects/serializers.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,24 @@ class Meta:
2222

2323

2424
class ProjectCollaboratorSerializer(serializers.ModelSerializer):
25+
key_skills = serializers.SerializerMethodField()
26+
2527
class Meta:
2628
model = CustomUser
2729
fields = [
2830
"id",
2931
"first_name",
3032
"last_name",
3133
"avatar",
34+
"key_skills",
3235
]
3336

37+
def get_key_skills(self, obj):
38+
return obj.get_member_key_skills()
39+
40+
def get_queryset(self):
41+
return CustomUser.objects.all()
42+
3443

3544
class ProjectDetailSerializer(serializers.ModelSerializer):
3645
achievements = AchievementListSerializer(many=True, read_only=True)

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ django-filter = "^22.1"
4747
setuptools = "^65.5.0"
4848
drf-yasg = "^1.21.4"
4949
sentry-sdk = "^1.10.1"
50-
uvicorn = "^0.19.0"
5150
whitenoise = "^6.2.0"
51+
six = "^1.16.0"
5252

5353

5454
[build-system]
5555
requires = ["poetry-core"]
56-
build-backend = "poetry.core.masonry.api"
56+
build-backend = "poetry.core.masonry.api"

users/admin.py

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -91,32 +91,6 @@ class CustomUserAdmin(admin.ModelAdmin):
9191
"id",
9292
)
9393

94-
95-
# TODO display additional fields
96-
97-
# @admin.register(Member)
98-
# class MemberAdmin(admin.ModelAdmin):
99-
# inlines = (CustomUserInlined,)
100-
# fieldsets = (
101-
# (
102-
# "Дополнительные поля",
103-
# {
104-
# "fields": (
105-
# "key_skills",
106-
# "useful_to_project",
107-
# "speciality",
108-
# )
109-
# },
110-
# ),
111-
# )
112-
113-
# list_display = (
114-
# "id",
115-
# )
116-
# search_fields = (
117-
# "id",
118-
# )
119-
120-
# list_filter = (
121-
# "id",
122-
# )
94+
def save_model(self, request, obj, form, change):
95+
obj.set_password(form.cleaned_data["password"])
96+
obj.save()
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 4.1.2 on 2022-11-01 10:09
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
("users", "0008_alter_customuser_user_type_delete_usertype"),
12+
]
13+
14+
operations = [
15+
migrations.AlterField(
16+
model_name="member",
17+
name="user",
18+
field=models.ForeignKey(
19+
on_delete=django.db.models.deletion.CASCADE,
20+
related_name="member",
21+
to=settings.AUTH_USER_MODEL,
22+
),
23+
),
24+
]
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Generated by Django 4.1.2 on 2022-11-01 10:15
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
("users", "0009_alter_member_user"),
12+
]
13+
14+
operations = [
15+
migrations.AlterField(
16+
model_name="expert",
17+
name="user",
18+
field=models.OneToOneField(
19+
on_delete=django.db.models.deletion.CASCADE,
20+
related_name="expert",
21+
to=settings.AUTH_USER_MODEL,
22+
),
23+
),
24+
migrations.AlterField(
25+
model_name="investor",
26+
name="user",
27+
field=models.OneToOneField(
28+
on_delete=django.db.models.deletion.CASCADE,
29+
related_name="investor",
30+
to=settings.AUTH_USER_MODEL,
31+
),
32+
),
33+
migrations.AlterField(
34+
model_name="member",
35+
name="user",
36+
field=models.OneToOneField(
37+
on_delete=django.db.models.deletion.CASCADE,
38+
related_name="member",
39+
to=settings.AUTH_USER_MODEL,
40+
),
41+
),
42+
migrations.AlterField(
43+
model_name="mentor",
44+
name="user",
45+
field=models.OneToOneField(
46+
on_delete=django.db.models.deletion.CASCADE,
47+
related_name="mentor",
48+
to=settings.AUTH_USER_MODEL,
49+
),
50+
),
51+
]

users/models.py

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -77,19 +77,26 @@ class CustomUser(AbstractUser):
7777

7878
objects = CustomUserManager()
7979

80+
def get_member_key_skills(self):
81+
if self.user_type == CustomUser.MEMBER:
82+
return str(self.member.key_skills)
83+
return ""
84+
8085
def __str__(self):
8186
return f"User<{self.id}> - {self.first_name} {self.last_name}"
8287

8388

8489
class Member(models.Model):
85-
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
90+
user = models.OneToOneField(
91+
CustomUser, on_delete=models.CASCADE, related_name="member"
92+
)
8693

8794
key_skills = models.CharField(max_length=255, blank=True) # TODO
8895
useful_to_project = models.TextField(blank=True)
8996
speciality = models.CharField(max_length=255, blank=True)
9097

9198
def __str__(self):
92-
return f"Member<{self.id}> - {self.first_name} {self.last_name}"
99+
return f"Member<{self.id}> - {self.user.first_name} {self.user.last_name}"
93100

94101

95102
class Mentor(models.Model):
@@ -101,13 +108,15 @@ class Mentor(models.Model):
101108
useful_to_project: CharField instance some text.
102109
"""
103110

104-
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name="mentors")
111+
user = models.OneToOneField(
112+
CustomUser, on_delete=models.CASCADE, related_name="mentor"
113+
)
105114

106115
job = models.CharField(max_length=255, blank=True)
107116
useful_to_project = models.TextField(blank=True)
108117

109118
def __str__(self):
110-
return f"Mentor<{self.id}> - {self.first_name} {self.last_name}"
119+
return f"Mentor<{self.id}> - {self.user.first_name} {self.user.last_name}"
111120

112121

113122
class Expert(models.Model):
@@ -119,7 +128,9 @@ class Expert(models.Model):
119128
useful_to_project: CharField instance TODO
120129
"""
121130

122-
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
131+
user = models.OneToOneField(
132+
CustomUser, on_delete=models.CASCADE, related_name="expert"
133+
)
123134

124135
preferred_industries = models.ManyToManyField(
125136
Industry, blank=True, related_name="experts"
@@ -129,7 +140,7 @@ class Expert(models.Model):
129140
# TODO reviews
130141

131142
def __str__(self):
132-
return f"Expert<{self.id}> - {self.first_name} {self.last_name}"
143+
return f"Expert<{self.id}> - {self.user.first_name} {self.user.last_name}"
133144

134145

135146
class Investor(models.Model):
@@ -142,15 +153,17 @@ class Investor(models.Model):
142153
143154
"""
144155

145-
user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
156+
user = models.OneToOneField(
157+
CustomUser, on_delete=models.CASCADE, related_name="investor"
158+
)
146159

147160
preferred_industries = models.ManyToManyField(
148161
Industry, blank=True, related_name="investors"
149162
)
150163
interaction_process_description = models.TextField(blank=True)
151164

152165
def __str__(self):
153-
return f"Investor<{self.id}> - {self.first_name} {self.last_name}"
166+
return f"Investor<{self.id}> - {self.user.first_name} {self.user.last_name}"
154167

155168

156169
@receiver(post_save, sender=CustomUser)

0 commit comments

Comments
 (0)