Exemple #1
0
    def create(self, request, *args, **kwargs):
        """Criar carona

        Crie caronas pelo usuário.

        A API irá gerar automaticamente os dados faltantes de origem e destino usando a [API de Geocoding do Google](https://developers.google.com/maps/documentation/geocoding/intro).
        Por conta disso, o fornecimento de endereços incorretos poderá resultar em endereços que estarão completamente errados, como em outras cidades ou estados.

        O Unicaronas tenta mitigar isso mapeando endereços digitados com frequência e fazendo correção gramatical dos dados de entrada, mas nem sempre isso será suficiente para corrigir entradas ruins. Dessa forma, garanta que os resultados gerados são os esperados enviando endereços o mais completos possível.
        Gerar endereços completos é difícil, então considere as seguintes opções:
        - Dê opções limitadas de busca aos seus usários. Opções essas cujos endereços completos sejam conhecidos por você. Ex: Unicamp, Posto da 1, Metro Tietê, etc
        - Use uma API como a de [Autocomplete](https://developers.google.com/places/web-service/autocomplete) para gerar endereços completos enquanto o usuário digita

        Nem todos os parâmetros são obrigatórios. Na falta deles, esses serão os padrões:

        | Campo         | Padrão        |
        | --------------|---------------|
        | `auto_approve`| `true`        |
        | `max_seats`   | 4             |
        | `details`     | *em branco*   |
        """
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        instance = self.perform_create(serializer)
        serializer = DriverTripListRetrieveSerializer(
            instance=instance, context=self.get_serializer_context())
        headers = self.get_success_headers(serializer.data)

        # Dispatch alarms announcing the new trip to users
        dispatch_alarms.delay(instance.id)

        return Response(serializer.data,
                        status=status.HTTP_201_CREATED,
                        headers=headers)
Exemple #2
0
    def create_trip(cls, user, **kwargs):
        """Creates a trip, checking if the user is a driver"""
        if not user_is_driver(user):
            raise UserNotDriverError(user.get_full_name() + ' não é motorista')
        trip = cls.objects.create(user=user, **kwargs)

        # Dispatch alarms announcing the new trip to users
        dispatch_alarms.delay(trip.id)
        # Publish on Facebook if enabled
        publish_new_trip_on_fb.delay(trip.id)
        return trip
Exemple #3
0
 def forfeit(self):
     if self.status == 'denied':
         raise PassengerDeniedError('Passageiro já negado')
     elif self.status == 'pending':
         raise PassengerPendingError('Passageiro ainda pendente')
     self.status = 'denied'
     self.save()
     trips_webhooks.PassengerForfeitWebhook(self).send()
     # if the trip was full and now it is not, send alarms
     if self.trip.get_seats_left() == 1:
         dispatch_alarms.delay(self.trip.id)
Exemple #4
0
 def deny(self):
     if self.status == 'denied':
         raise PassengerDeniedError('Passageiro já negado')
     elif self.status == 'approved':
         raise PassengerApprovedError('Passageiro já aprovado')
     self.status = 'denied'
     self.save()
     trips_webhooks.PassengerDeniedWebhook(self).send()
     # if the trip was full and now it is not, send alarms
     if self.trip.get_seats_left() == 1:
         dispatch_alarms.delay(self.trip.id)
Exemple #5
0
 def give_up(self):
     # if the trip was full and now it is not, send alarms
     if self.trip.is_full:
         dispatch_alarms.delay(self.trip.id)
     self.delete()