Skip to content

Commit 098e266

Browse files
Rup-Narayan-Rajbanshitnagorra
authored andcommitted
chore(firebase): sync team members to firebase while removing team member
1 parent 2a7b43e commit 098e266

File tree

5 files changed

+77
-44
lines changed

5 files changed

+77
-44
lines changed

apps/contributor/admin.py

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import typing
2-
from datetime import datetime
32

43
from django.contrib import admin
54
from django.db import transaction
@@ -9,7 +8,7 @@
98

109
from apps.common.admin import ArchivableResourceAdmin
1110

12-
from .firebase import FirebaseContributorTeam
11+
from .firebase import FirebaseContributorTeam, firebase_contributor_user
1312
from .models import ContributorTeam, ContributorUser, ContributorUserGroup, ContributorUserGroupMembership
1413

1514

@@ -40,6 +39,11 @@ def has_add_permission(self, *args, **kwargs):
4039
def has_delete_permission(self, *args, **kwargs):
4140
return False
4241

42+
@typing.override
43+
def save_model(self, request, obj, form, change):
44+
super().save_model(request, obj, form, change) # type: ignore[reportAttributeAccessIssue]
45+
transaction.on_commit(lambda: firebase_contributor_user.delay(obj.id))
46+
4347

4448
@admin.register(ContributorUserGroup)
4549
class ContributorUserGroupAdmin(DjangoQLSearchMixin, admin.ModelAdmin):
@@ -53,27 +57,18 @@ class ContributorTeamAdmin(ArchivableResourceAdmin, DjangoQLSearchMixin, admin.M
5357
"is_archived",
5458
"created_at",
5559
"modified_at",
56-
"view_contributor_users",
60+
"view_team_members",
5761
)
5862
list_filter = ("is_archived",)
5963

6064
@typing.override
6165
def save_model(self, request, obj, form, change):
62-
if not change:
63-
obj.created_by = request.user
64-
obj.modified_by = request.user
65-
if obj.is_archived:
66-
obj.archived_by = request.user
67-
obj.archived_at = datetime.now()
68-
else:
69-
obj.archived_by = None
70-
obj.archived_at = None
7166
super().save_model(request, obj, form, change) # type: ignore[reportAttributeAccessIssue]
7267
transaction.on_commit(lambda: FirebaseContributorTeam.task.delay(obj.id))
7368

74-
def view_contributor_users(self, obj):
69+
def view_team_members(self, obj):
7570
url = reverse("admin:contributor_contributoruser_changelist") + f"?team__id__exact={obj.id}"
76-
return format_html('<a href="{}">View Contributors</a>', url)
71+
return format_html('<a href="{}">View Team Members</a>', url)
7772

7873

7974
@admin.register(ContributorUserGroupMembership)

apps/contributor/firebase.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,10 @@ def handle_new_object_on_firebase(self, model_obj: ContributorUser, fb_reference
6464

6565
@typing.override
6666
def handle_object_update_on_firebase(self, model_obj: ContributorUser, fb_reference: FbReference):
67-
team_id = str(model_obj.team.id) if model_obj.team else ""
6867
fb_reference.update(
6968
value=firebase_utils.serialize(
7069
firebase_models.FbUserUpdateInput(
71-
teamId=team_id or firebase_models.UNDEFINED,
70+
teamId=model_obj.team.firebase_id if model_obj.team else firebase_models.UNDEFINED,
7271
),
7372
),
7473
)

apps/contributor/management/commands/create_contributor_users.py

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,50 @@
44

55
from django.conf import settings
66
from django.core.management.base import BaseCommand
7-
from django.db import transaction
7+
from django.utils import timezone
8+
from pyfirebase_mapswipe import extended_models as firebase_extended_models
9+
from pyfirebase_mapswipe import models as firebase_models
10+
from pyfirebase_mapswipe import utils as firebase_utils
811

912
from apps.contributor.factories import ContributorTeamFactory, ContributorUserFactory
10-
from apps.contributor.firebase import FirebaseContributorTeam
13+
from apps.contributor.models import ContributorTeam, ContributorUser
1114
from apps.user.factories import UserFactory
15+
from main.config import Config
1216

1317
logger = logging.getLogger(__name__)
1418

1519

20+
def push_team_to_firebase(team: ContributorTeam):
21+
fb_reference = Config.FIREBASE_HELPER.ref(
22+
Config.FirebaseKeys.contributor_team(team.firebase_id),
23+
)
24+
contributor_team_data = firebase_models.FbTeam(
25+
teamName=team.name,
26+
isArchived=team.is_archived,
27+
teamToken=str(team.token),
28+
)
29+
fb_reference.set(
30+
value=firebase_utils.serialize(contributor_team_data),
31+
)
32+
33+
34+
def push_team_member_to_firebase(member: ContributorUser):
35+
fb_reference = Config.FIREBASE_HELPER.ref(
36+
Config.FirebaseKeys.contributor_user(member.firebase_id),
37+
)
38+
team_member_data = firebase_extended_models.FbUser(
39+
userName=member.username,
40+
username=member.username,
41+
userNameKey=member.username.lower(),
42+
usernameKey=member.username.lower(),
43+
teamId=member.team.firebase_id if member.team else firebase_models.UNDEFINED,
44+
created=timezone.now(),
45+
)
46+
fb_reference.set(
47+
value=firebase_utils.serialize(team_member_data),
48+
)
49+
50+
1651
class Command(BaseCommand):
1752
help = "Create dummy contributor users. Also sync these users to firebase"
1853

@@ -26,13 +61,17 @@ def handle(self, *args, **options):
2661
user_resources = dict(
2762
created_by=user,
2863
modified_by=user,
64+
firebase_last_pushed=timezone.now(),
2965
)
3066
team_a, team_b = ContributorTeamFactory.create_batch(2, **user_resources)
3167
for team in [team_a, team_b]:
32-
transaction.on_commit(lambda team_id=team.pk: FirebaseContributorTeam.task.delay(team_id))
68+
push_team_to_firebase(team)
3369

34-
ContributorUserFactory.create_batch(5, team=team_a)
35-
ContributorUserFactory.create_batch(5, team=team_b)
36-
ContributorUserFactory.create_batch(20)
70+
team_a_members = ContributorUserFactory.create_batch(5, team=team_a, firebase_last_pushed=timezone.now())
71+
team_b_members = ContributorUserFactory.create_batch(5, team=team_b, firebase_last_pushed=timezone.now())
72+
no_team_members = ContributorUserFactory.create_batch(5, firebase_last_pushed=timezone.now())
73+
for team_members in [team_a_members, team_b_members, no_team_members]:
74+
for member in team_members:
75+
push_team_member_to_firebase(member)
3776

3877
logger.info("Contributor users created successfully")

schema.graphql

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ type ContributorSwipeStatType {
300300
}
301301

302302
"""
303-
ContributorTeam(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, name, token)
303+
ContributorTeam(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, name, token)
304304
"""
305305
input ContributorTeamFilter {
306306
id: IDBaseFilterLookup
@@ -318,7 +318,7 @@ input ContributorTeamOrder {
318318
}
319319

320320
"""
321-
ContributorTeam(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, name, token)
321+
ContributorTeam(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, name, token)
322322
"""
323323
type ContributorTeamType implements UserResourceTypeMixin {
324324
clientId: String!
@@ -353,7 +353,7 @@ type ContributorTimeStatType {
353353
}
354354

355355
"""
356-
ContributorUser(id, old_id, firebase_push_status, firebase_last_pushed, canonical_id, user_id, team, username, created_at, modified_at)
356+
ContributorUser(id, old_id, firebase_id, firebase_push_status, firebase_last_pushed, user_id, team, username, created_at, modified_at)
357357
"""
358358
input ContributorUserFilter {
359359
id: IDBaseFilterLookup
@@ -376,7 +376,7 @@ type ContributorUserFilteredStats implements ContributorUserUserGroupBaseFilterS
376376
}
377377

378378
"""
379-
ContributorUserGroup(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, name, description)
379+
ContributorUserGroup(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, name, description)
380380
"""
381381
input ContributorUserGroupCreateInput {
382382
clientId: String!
@@ -385,7 +385,7 @@ input ContributorUserGroupCreateInput {
385385
}
386386

387387
"""
388-
ContributorUserGroup(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, name, description)
388+
ContributorUserGroup(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, name, description)
389389
"""
390390
input ContributorUserGroupFilter {
391391
id: IDBaseFilterLookup
@@ -483,7 +483,7 @@ type ContributorUserGroupStatsType {
483483
}
484484

485485
"""
486-
ContributorUserGroup(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, name, description)
486+
ContributorUserGroup(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, name, description)
487487
"""
488488
type ContributorUserGroupType implements UserResourceTypeMixin {
489489
clientId: String!
@@ -518,7 +518,7 @@ type ContributorUserGroupTypeOffsetPaginated {
518518
}
519519

520520
"""
521-
ContributorUserGroup(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, name, description)
521+
ContributorUserGroup(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, name, description)
522522
"""
523523
input ContributorUserGroupUpdateInput {
524524
clientId: String!
@@ -560,7 +560,7 @@ type ContributorUserStats {
560560
}
561561

562562
"""
563-
ContributorUser(id, old_id, firebase_push_status, firebase_last_pushed, canonical_id, user_id, team, username, created_at, modified_at)
563+
ContributorUser(id, old_id, firebase_id, firebase_push_status, firebase_last_pushed, user_id, team, username, created_at, modified_at)
564564
"""
565565
type ContributorUserType {
566566
id: ID!
@@ -845,7 +845,7 @@ enum Ordering {
845845
}
846846

847847
"""
848-
Organization(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, name, description, abbreviation, unique_name)
848+
Organization(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, name, description, abbreviation, unique_name)
849849
"""
850850
input OrganizationCreateInput {
851851
clientId: String!
@@ -855,7 +855,7 @@ input OrganizationCreateInput {
855855
}
856856

857857
"""
858-
Organization(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, name, description, abbreviation, unique_name)
858+
Organization(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, name, description, abbreviation, unique_name)
859859
"""
860860
input OrganizationFilter {
861861
id: IDBaseFilterLookup
@@ -878,7 +878,7 @@ type OrganizationSwipeStatsType {
878878
}
879879

880880
"""
881-
Organization(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, name, description, abbreviation, unique_name)
881+
Organization(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, name, description, abbreviation, unique_name)
882882
"""
883883
type OrganizationType implements UserResourceTypeMixin {
884884
clientId: String!
@@ -912,7 +912,7 @@ type OrganizationTypeOffsetPaginated {
912912
}
913913

914914
"""
915-
Organization(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, name, description, abbreviation, unique_name)
915+
Organization(id, client_id, created_at, modified_at, created_by, modified_by, is_archived, archived_at, archived_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, name, description, abbreviation, unique_name)
916916
"""
917917
input OrganizationUpdateInput {
918918
clientId: String!
@@ -928,7 +928,7 @@ enum OverlayLayerTypeEnum {
928928
}
929929

930930
"""
931-
Project(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, project_type, requesting_organization, topic, region, project_number, look_for, additional_info_url, description, image, tutorial, verification_number, group_size, max_tasks_per_user, project_type_specifics, project_type_specific_output, centroid, is_featured, status, processing_status, team, is_private, progress, required_results, result_count)
931+
Project(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, project_type, requesting_organization, topic, region, project_number, look_for, additional_info_url, description, image, tutorial, verification_number, group_size, max_tasks_per_user, project_type_specifics, project_type_specific_output, centroid, is_featured, status, processing_status, team, is_private, progress, required_results, result_count)
932932
"""
933933
input ProcessedProjectUpdateInput {
934934
clientId: String!
@@ -1028,7 +1028,7 @@ type ProjectAssetTypeOffsetPaginated {
10281028
}
10291029

10301030
"""
1031-
Project(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, project_type, requesting_organization, topic, region, project_number, look_for, additional_info_url, description, image, tutorial, verification_number, group_size, max_tasks_per_user, project_type_specifics, project_type_specific_output, centroid, is_featured, status, processing_status, team, is_private, progress, required_results, result_count)
1031+
Project(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, project_type, requesting_organization, topic, region, project_number, look_for, additional_info_url, description, image, tutorial, verification_number, group_size, max_tasks_per_user, project_type_specifics, project_type_specific_output, centroid, is_featured, status, processing_status, team, is_private, progress, required_results, result_count)
10321032
"""
10331033
input ProjectCreateInput {
10341034
clientId: String!
@@ -1074,7 +1074,7 @@ type ProjectCustomSubOption {
10741074
}
10751075

10761076
"""
1077-
Project(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, project_type, requesting_organization, topic, region, project_number, look_for, additional_info_url, description, image, tutorial, verification_number, group_size, max_tasks_per_user, project_type_specifics, project_type_specific_output, centroid, is_featured, status, processing_status, team, is_private, progress, required_results, result_count)
1077+
Project(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, project_type, requesting_organization, topic, region, project_number, look_for, additional_info_url, description, image, tutorial, verification_number, group_size, max_tasks_per_user, project_type_specifics, project_type_specific_output, centroid, is_featured, status, processing_status, team, is_private, progress, required_results, result_count)
10781078
"""
10791079
input ProjectFilter {
10801080
id: IDBaseFilterLookup
@@ -1290,7 +1290,7 @@ input ProjectStatusEnumFilterLookup {
12901290
}
12911291

12921292
"""
1293-
Project(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, project_type, requesting_organization, topic, region, project_number, look_for, additional_info_url, description, image, tutorial, verification_number, group_size, max_tasks_per_user, project_type_specifics, project_type_specific_output, centroid, is_featured, status, processing_status, team, is_private, progress, required_results, result_count)
1293+
Project(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, project_type, requesting_organization, topic, region, project_number, look_for, additional_info_url, description, image, tutorial, verification_number, group_size, max_tasks_per_user, project_type_specifics, project_type_specific_output, centroid, is_featured, status, processing_status, team, is_private, progress, required_results, result_count)
12941294
"""
12951295
type ProjectType implements UserResourceTypeMixin {
12961296
clientId: String!
@@ -1449,7 +1449,7 @@ type ProjectTypeSwipeStatsType {
14491449
}
14501450

14511451
"""
1452-
Project(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_push_status, firebase_last_pushed, canonical_id, project_type, requesting_organization, topic, region, project_number, look_for, additional_info_url, description, image, tutorial, verification_number, group_size, max_tasks_per_user, project_type_specifics, project_type_specific_output, centroid, is_featured, status, processing_status, team, is_private, progress, required_results, result_count)
1452+
Project(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, project_type, requesting_organization, topic, region, project_number, look_for, additional_info_url, description, image, tutorial, verification_number, group_size, max_tasks_per_user, project_type_specifics, project_type_specific_output, centroid, is_featured, status, processing_status, team, is_private, progress, required_results, result_count)
14531453
"""
14541454
input ProjectUpdateInput {
14551455
clientId: String!
@@ -1703,7 +1703,7 @@ type TutorialAssetTypeOffsetPaginated {
17031703
}
17041704

17051705
"""
1706-
Tutorial(id, client_id, created_at, modified_at, created_by, modified_by, old_id, project, name, status)
1706+
Tutorial(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, project, name, status)
17071707
"""
17081708
input TutorialCreateInput {
17091709
clientId: String!
@@ -1714,7 +1714,7 @@ input TutorialCreateInput {
17141714
}
17151715

17161716
"""
1717-
Tutorial(id, client_id, created_at, modified_at, created_by, modified_by, old_id, project, name, status)
1717+
Tutorial(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, project, name, status)
17181718
"""
17191719
input TutorialFilter {
17201720
id: IDBaseFilterLookup
@@ -2003,7 +2003,7 @@ input TutorialTaskUpdateInput {
20032003
}
20042004

20052005
"""
2006-
Tutorial(id, client_id, created_at, modified_at, created_by, modified_by, old_id, project, name, status)
2006+
Tutorial(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, project, name, status)
20072007
"""
20082008
type TutorialType implements UserResourceTypeMixin {
20092009
clientId: String!
@@ -2038,7 +2038,7 @@ type TutorialTypeOffsetPaginated {
20382038
}
20392039

20402040
"""
2041-
Tutorial(id, client_id, created_at, modified_at, created_by, modified_by, old_id, project, name, status)
2041+
Tutorial(id, client_id, created_at, modified_at, created_by, modified_by, old_id, firebase_id, firebase_push_status, firebase_last_pushed, project, name, status)
20422042
"""
20432043
input TutorialUpdateInput {
20442044
clientId: String!

0 commit comments

Comments
 (0)