def create_customers():

    if request.method == "POST":
        request_body = request.get_json()

        if "name" not in request_body or "postal_code" not in request_body or "phone" not in request_body:
            return ({"details": "Invalid data"}, 400)
        else:
            customer = Customer(name=request_body["name"],
                                phone=request_body["phone"],
                                postal_code=request_body["postal_code"],
                                registered_at=datetime.utcnow())

            db.session.add(customer)
            db.session.commit()

            return make_response(customer.to_json(), 201)
    else:
        customers = Customer.query.all()
        customers_response = []

        for customer in customers:
            customers_response.append(customer.to_json())

        return jsonify(customers_response)
 def save(self, customer):
     """
     Save supplied customer object to database
     """
     try:
         cust = Customer(customer)
         self.customer_table.put_item(
             Item=cust.to_primitive()
         )
     except ClientError as e:
         app.logger.error('Error saving customer record {0}, exception {1}'.format(customer.email_address, str(e)))
         raise CustomerStoreError('Error saving customer record {0}, exception {1}'.format(customer.email_address,
                                                                                           str(e)))
    def put(self):
        """
        Create a customer
        ---
        tags:
          - customers
        produces:
          - application/json
        parameters:
          - in: body
            name: body
            required: true
            description: Json request for creating a customer
            schema:
              type: object
              properties:
                firstName:
                  type: string
                  default: Test
                surname:
                  type: string
                  default: McTest
                emailAddress:
                  type: string
                  default: [email protected]
        responses:
          201:
            description: Customer Created
          400:
            description: Invalid Request
          500:
            description: Server Error
        """
        # Validate request, return 400 if invalid
        try:
            customer = Customer(request.get_json())
            customer.validate()
        except DataError as e:
            return {'Error': str(e)}, 400

        try:
            customer_service = CustomerService()
            customer_service.create_or_get_customer(customer)
            return {'Status': 'SUCCESS'}, 201
        except CustomerServiceError:
            return {'Status': 'ERROR'}, 500