Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
    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)
Exemple #7
0
    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
Exemple #8
0
    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
Exemple #9
0
    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)
Exemple #10
0
    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)
Exemple #11
0
 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)
Exemple #12
0
 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)
Exemple #13
0
 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)
Exemple #14
0
 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)
Exemple #15
0
    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)
Exemple #16
0
 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)
Exemple #17
0
 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)
Exemple #18
0
    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)
Exemple #19
0
 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)
Exemple #20
0
 def perform_create(self, serializer):
     self.perform_update(serializer)
     # Add experience.
     user = serializer.instance.owner
     add_experience(user, 'office')
Exemple #21
0
 def perform_create(self, serializer):
     serializer.save(owner=self.request.user)
     # Add experience.
     user = serializer.instance.owner
     add_experience(user, 'studio')
Exemple #22
0
 def perform_create(self, serializer):
     self.perform_update(serializer)
     # Add experience.
     user = serializer.instance.owner
     add_experience(user, 'office')