<reponame>arunsingh2803/professional-services<gh_stars>0
#!/usr/bin/env python3

# Copyright 2022 Google LLC

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os
import slack
import logging
from get_parent import get_parent
from case_not_found import case_not_found
from get_firestore_tracked_cases import get_firestore_tracked_cases
from firestore_write import firestore_write

logger = logging.getLogger(__name__)


def track_case(channel_id, channel_name, case, user_id):
    """
    Add a Google Cloud support case to the tracked_cases collection in Firestore. If the
    case can't be found in the list of active support cases, notify the user.

    Parameters
    ----------
    channel_id : str
        unique string used to idenify a Slack channel. Used to send messages to the channel
    channel_name : str
        designated channel name of the channel. For users to understand where their
        cases are being tracked in Slack
    case : str
        unique id of the case
    user_id : str
        the Slack user_id of the user who submitted the request. Used to send ephemeral
        messages to the user
    """
    client = slack.WebClient(token=os.environ.get('SLACK_TOKEN'))
    collection = 'tracked_cases'
    parent = get_parent(case)
    tracked_cases = get_firestore_tracked_cases()

    if parent == 'Case not found':
        case_not_found(channel_id, user_id, case)
    else:
        tracker = {
            "channel_id": channel_id,
            "case": case,
            "channel_name": channel_name
        }

        exists = False

        for tracked_case in tracked_cases:
            tc = tracked_case
            if tc['channel_id'] == channel_id and tc['case'] == case:
                exists = True
                break

        if exists is False:
            firestore_write(collection, tracker)
            client.chat_postMessage(
                channel=channel_id,
                text=f"{channel_name} is now tracking case {case}")
        else:
            client.chat_postEphemeral(
                channel=channel_id,
                user=user_id,
                text=f"Case {case} is already being tracked in {channel_name}")


if __name__ == "__main__":
    channel_id = os.environ.get('TEST_CHANNEL_ID')
    channel_name = os.environ.get('TEST_CHANNEL_NAME')
    case = os.environ.get('TEST_CASE')
    user_id = os.environ.get('TEST_USER_ID')
    track_case(channel_id, channel_name, case, user_id)
    track_case(channel_id, channel_name, case, user_id)

#!/usr/bin/env python3

# Copyright 2022 Google LLC

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os
import slack
import logging
from get_parent import get_parent
from case_not_found import case_not_found
from get_firestore_tracked_cases import get_firestore_tracked_cases
from firestore_write import firestore_write

logger = logging.getLogger(__name__)


def track_case(channel_id, channel_name, case, user_id):
    """
    Add a Google Cloud support case to the tracked_cases collection in Firestore. If the
    case can't be found in the list of active support cases, notify the user.

    Parameters
    ----------
    channel_id : str
        unique string used to idenify a Slack channel. Used to send messages to the channel
    channel_name : str
        designated channel name of the channel. For users to understand where their
        cases are being tracked in Slack
    case : str
        unique id of the case
    user_id : str
        the Slack user_id of the user who submitted the request. Used to send ephemeral
        messages to the user
    """
    client = slack.WebClient(token=os.environ.get('SLACK_TOKEN'))
    collection = 'tracked_cases'
    parent = get_parent(case)
    tracked_cases = get_firestore_tracked_cases()

    if parent == 'Case not found':
        case_not_found(channel_id, user_id, case)
    else:
        tracker = {
            "channel_id": channel_id,
            "case": case,
            "channel_name": channel_name
        }

        exists = False

        for tracked_case in tracked_cases:
            tc = tracked_case
            if tc['channel_id'] == channel_id and tc['case'] == case:
                exists = True
                break

        if exists is False:
            firestore_write(collection, tracker)
            client.chat_postMessage(
                channel=channel_id,
                text=f"{channel_name} is now tracking case {case}")
        else:
            client.chat_postEphemeral(
                channel=channel_id,
                user=user_id,
                text=f"Case {case} is already being tracked in {channel_name}")


if __name__ == "__main__":
    channel_id = os.environ.get('TEST_CHANNEL_ID')
    channel_name = os.environ.get('TEST_CHANNEL_NAME')
    case = os.environ.get('TEST_CASE')
    user_id = os.environ.get('TEST_USER_ID')
    track_case(channel_id, channel_name, case, user_id)
    track_case(channel_id, channel_name, case, user_id)
#!/usr/bin/env python3 # Copyright 2022 Google LLC # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # #     http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. Add a Google Cloud support case to the tracked_cases collection in Firestore. If the     case can't be found in the list of active support cases, notify the user.      Parameters     ----------     channel_id : str         unique string used to idenify a Slack channel. Used to send messages to the channel     channel_name : str         designated channel name of the channel. For users to understand where their         cases are being tracked in Slack     case : str         unique id of the case     user_id : str         the Slack user_id of the user who submitted the request. Used to send ephemeral         messages to the user