def mutate_and_get_payload(cls, root, info, scope=Scope.DAY.value, start=None, content='', keywords=''): user = info.context.user if not start: start = get_scope_by_name(scope)().start entry = user.journal_entries.create(scope=scope, start=start, content=content, keywords=keywords) # Updating streak today = timezone.localtime(timezone.now()).date() if entry.scope == Scope.DAY.value and entry.start == today: # Only update if this is today's day-entry. user.journal.streak += 1 user.journal.save(update_fields=['streak']) add_experience(user, 'studio') return AddJournalEntryMutation(journal_entry=entry)
def mutate_and_get_payload(cls, root, info, id, name=None, toggle=None, order=None): user = info.context.user require_authentication(user) # Getting step and checking permission. _type, id = from_global_id(id) step = Step.objects.get(id=id, outcome__owner=user) if name is not None: step.name = name if toggle is not None: step.toggle() if step.is_closed and step.outcome.is_focus: add_experience(user, 'office') if order is not None: step.to(order) step.save() return UpdateStepMutation(success=True, step=step)
def mutate_and_get_payload(cls, root, info, scope=Scope.DAY.value, start=None, content='', keywords=''): user = info.context.user if not start: start = get_scope_by_name(scope)().start entry = user.journal_entries.create(scope=scope, start=start, content=content, keywords=keywords) # Updating streak today = timezone.localtime(timezone.now()).date() if entry.scope == Scope.DAY.value and entry.start == today: # Only update if this is today's day-entry. habit = get_controlled_habit(user, ControlledHabit.JOURNAL_HABIT) tracked = habit.track() if tracked: habit.save() add_experience(user, 'studio') return AddJournalEntryMutation(journal_entry=entry)
def mutate_and_get_payload(cls, root, info, id): user = info.context.user require_authentication(user) _type, id = from_global_id(id) habit = user.habits.get(id=id) # Handle system controlled habits. if habit.is_controlled: raise Exception('Controlled habits cannot be tracked manually.') track = habit.track() if track: habit.save() # Limit how many experience I can get per day. # Get the number of today's track events: today = timezone.localtime(timezone.now()).date() number_of_tracks_today = HabitTrackEvent.objects.filter( habit__owner=user, created__date=today).count() if number_of_tracks_today <= 4: add_experience(user, 'home') return TrackHabitMutation(track=track)
def mutate_and_get_payload( cls, root, info, id=None, scope=None, start=None, **kwargs): user = info.context.user if not kwargs.get('outcomes'): raise Exception('No outcomes provided for focus.') if id is not None and 'reason' in kwargs: _type, id = from_global_id(id) focus = user.focuses.get(id=id) elif scope is not None and start is not None: focus, created = user.focuses.get_or_create(scope=scope, start=start) if created: add_experience(user, 'office') else: raise Exception('ID or scope and start needed to get focus.') if 'outcomes' in kwargs: # TODO: Replace workaround (for removing outcomes). focus.outcome_1 = None focus.outcome_2 = None focus.outcome_3 = None focus.outcome_4 = None outcome_ids = [from_global_id(id)[1] for id in kwargs.get('outcomes', [])] new_outcomes = user.outcomes.filter(id__in=outcome_ids) for index, outcome in enumerate(new_outcomes): setattr(focus, f'outcome_{index+1}', outcome) focus.save() return UpdateFocusMutation(success=True, focus=focus)
def mutate_and_get_payload( cls, root, info, id=None, scope=None, start=None, **kwargs): user = info.context.user if not kwargs.get('outcomes'): raise Exception('No outcomes provided for focus.') if id is not None and 'reason' in kwargs: _type, id = from_global_id(id) focus = user.focuses.get(id=id) elif scope is not None and start is not None: focus, created = user.focuses.get_or_create(scope=scope, start=start) if created: habit = get_controlled_habit(user, ControlledHabit.FOCUS_HABIT) tracked = habit.track() if tracked: habit.save() add_experience(user, 'office') else: raise Exception('ID or scope and start needed to get focus.') if 'outcomes' in kwargs: # TODO: Replace workaround (for removing outcomes). focus.outcome_1 = None focus.outcome_2 = None focus.outcome_3 = None focus.outcome_4 = None outcome_ids = [from_global_id(id)[1] for id in kwargs.get('outcomes', [])] new_outcomes = [user.outcomes.get(id=outcome_id) for outcome_id in outcome_ids] for index, outcome in enumerate(new_outcomes): setattr(focus, f'outcome_{index+1}', outcome) focus.save() return UpdateFocusMutation(success=True, focus=focus)
def resolve_dashboard_streak(self, info): user = info.context.user if user.is_authenticated: habit = get_controlled_habit(user, ControlledHabit.DASHBOARD_HABIT) tracked = habit.track() if tracked: habit.save() add_experience(user, 'home') return habit.streak
def mutate_and_get_payload(cls, root, info, *args, **kwargs): user = info.context.user scan = user.scans.create(*args, **kwargs) # Updating the habit habit = get_controlled_habit(user, ControlledHabit.STATS_HABIT) tracked = habit.track() if tracked: habit.save() add_experience(user, 'home') return CreateScanMutation(success=True, scan=scan)
def mutate_and_get_payload(cls, root, info, name='', content=''): user = info.context.user if not (name or content): raise ValidationError('Please provide at leat "name" or "content"') chapter = Chapter.objects.create(story=user.story, name=name, content=content) today = timezone.localtime(timezone.now()).date() if not user.story.chapters.filter(created__year=today.year, created__month=today.month).exists(): add_experience(user, 'studio', 4) return AddChapter(chapter=chapter)
def mutate_and_get_payload(cls, root, info, id): user = info.context.user success = False if user.is_authenticated: user.chat_id = id user.save() checkpoint = user.add_checkpoint('chat') quest_status = user.quest_statuses.first() if checkpoint and quest_status and not quest_status.is_complete: objective = QuestObjective.objects.get(code='chat_join') quest_status.complete_objective(objective) success = True add_experience(user, 'journey') return AcceptGuidelinesMutation(success=success)
def mutate_and_get_payload(cls, root, info, adventure, rating, content, **kwargs): user = info.context.user _type, adventure = from_global_id(adventure) form = AdventureReviewForm({ "owner": user.id, "adventure": adventure, "rating": rating, "content": content, **kwargs }) if form.is_valid(): review = form.save() add_experience(user, 'arcade') else: raise Exception(form.errors.as_json()) return CreateAdventureReviewMutation(review=review)
def mutate_and_get_payload(cls, root, info, book, rating, area_1, area_2, area_3, area_4, area_5, area_6, area_7, content): user = info.context.user _type, book = from_global_id(book) form = BookReviewForm({ "owner": user.id, "book": book, "rating": rating, "area_1": area_1, "area_2": area_2, "area_3": area_3, "area_4": area_4, "area_5": area_5, "area_6": area_6, "area_7": area_7, "content": content, }) if form.is_valid(): review = form.save() add_experience(user, 'academy') else: raise Exception(form.errors.as_json()) return CreateBookReviewMutation(review=review)
def mutate_and_get_payload(cls, root, info, id): user = info.context.user require_authentication(user) _type, id = from_global_id(id) habit = user.habits.get(id=id) # Handle system controlled habits. if habit.is_controlled: raise Exception('Controlled habits cannot be tracked manually.') track = habit.track() if track: habit.save() # Limit how many experience I can get per day. # Get the number of today's track events: today = timezone.localtime(timezone.now()).date() number_of_tracks_today = HabitTrackEvent.objects.filter(habit__owner=user, created__date=today).count() if number_of_tracks_today <= 4: add_experience(user, 'home') return TrackHabitMutation(track=track)
def mutate_and_get_payload(cls, root, info, *args, **kwargs): user = info.context.user scan = user.scans.create(*args, **kwargs) add_experience(user, 'home') return CreateScan(success=True, scan=scan)
def perform_create(self, serializer): self.perform_update(serializer) # Add experience. user = serializer.instance.owner add_experience(user, 'office')
def perform_create(self, serializer): serializer.save(owner=self.request.user) # Add experience. user = serializer.instance.owner add_experience(user, 'studio')