openapi: 3.0.0
info:
  title: Activity Feedback V2 API
  description: API for managing activity feedback (version 2)
  version: 2.0.0
servers:
  - url: https://api.repzo.me/v1
    description: Production server
security:
  - ApiKeyAuth: []
tags:
  - name: Activity Feedback V2
    description: Activity feedback v2 management operations
paths:
  /activity-feedback-v2:
    get:
      tags:
        - Activity Feedback V2
      summary: Get all activity feedback v2
      description: Retrieve a list of all activity feedback v2 with optional filtering and pagination
      parameters:
        - name: page
          in: query
          description: Page number for pagination
          required: false
          schema:
            type: integer
            minimum: 1
            default: 1
        - name: per_page
          in: query
          description: Number of items per page
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 25
        - name: sort
          in: query
          description: Sort field
          required: false
          schema:
            type: string
        - name: company_namespace
          in: query
          description: Company namespace for filtering
          required: false
          schema:
            type: array
            items:
              type: string
        - name: activity_type
          in: query
          description: Filter by activity type
          required: false
          schema:
            type: string
        - name: rep
          in: query
          description: Filter by representative ID
          required: false
          schema:
            type: string
        - name: client
          in: query
          description: Filter by client ID
          required: false
          schema:
            type: string
        - name: overall_satisfaction
          in: query
          description: Filter by overall satisfaction rating
          required: false
          schema:
            type: integer
            minimum: 1
            maximum: 10
        - name: template_id
          in: query
          description: Filter by feedback template ID
          required: false
          schema:
            type: string
        - name: _id
          in: query
          description: Filter by ID
          required: false
          schema:
            type: array
            items:
              type: string
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: array
                    items:
                      $ref: "#/components/schemas/ActivityFeedbackV2"
                  paging:
                    $ref: "#/components/schemas/PagingInfo"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "500":
          $ref: "#/components/responses/InternalServerError"
    post:
      tags:
        - Activity Feedback V2
      summary: Create new activity feedback v2
      description: Create a new activity feedback v2 entry
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateActivityFeedbackV2Request"
      responses:
        "201":
          description: Activity feedback v2 created successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    $ref: "#/components/schemas/ActivityFeedbackV2"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "422":
          $ref: "#/components/responses/ValidationError"
        "500":
          $ref: "#/components/responses/InternalServerError"
  /activity-feedback-v2/{id}:
    get:
      tags:
        - Activity Feedback V2
      summary: Get activity feedback v2 by ID
      description: Retrieve a specific activity feedback v2 by its ID
      parameters:
        - name: id
          in: path
          required: true
          description: Activity feedback v2 ID
          schema:
            type: string
      responses:
        "200":
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    $ref: "#/components/schemas/ActivityFeedbackV2"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalServerError"
    patch:
      tags:
        - Activity Feedback V2
      summary: Update activity feedback v2
      description: Update an existing activity feedback v2
      parameters:
        - name: id
          in: path
          required: true
          description: Activity feedback v2 ID
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateActivityFeedbackV2Request"
      responses:
        "200":
          description: Activity feedback v2 updated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    $ref: "#/components/schemas/ActivityFeedbackV2"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "422":
          $ref: "#/components/responses/ValidationError"
        "500":
          $ref: "#/components/responses/InternalServerError"
    delete:
      tags:
        - Activity Feedback V2
      summary: Delete activity feedback v2
      description: Delete an activity feedback v2 by ID
      parameters:
        - name: id
          in: path
          required: true
          description: Activity feedback v2 ID
          schema:
            type: string
      responses:
        "200":
          description: Activity feedback v2 deleted successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalServerError"
  /activity-feedback-v2/analytics/detailed:
    get:
      tags:
        - Activity Feedback V2
      summary: Get detailed feedback analytics
      description: Get detailed analytics and insights for activity feedback v2
      parameters:
        - name: date_from
          in: query
          description: Start date for analytics
          required: false
          schema:
            type: string
            format: date
        - name: date_to
          in: query
          description: End date for analytics
          required: false
          schema:
            type: string
            format: date
        - name: activity_type
          in: query
          description: Filter by activity type
          required: false
          schema:
            type: string
        - name: rep
          in: query
          description: Filter by representative ID
          required: false
          schema:
            type: string
        - name: template_id
          in: query
          description: Filter by feedback template ID
          required: false
          schema:
            type: string
      responses:
        "200":
          description: Detailed analytics data retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  data:
                    type: object
                    properties:
                      summary:
                        type: object
                        properties:
                          total_feedback:
                            type: integer
                          average_satisfaction:
                            type: number
                            format: float
                          response_rate:
                            type: number
                            format: float
                      satisfaction_trends:
                        type: array
                        items:
                          type: object
                          properties:
                            date:
                              type: string
                              format: date
                            average_satisfaction:
                              type: number
                              format: float
                            count:
                              type: integer
                      question_analysis:
                        type: array
                        items:
                          type: object
                          properties:
                            question_id:
                              type: string
                            question_text:
                              type: string
                            average_score:
                              type: number
                              format: float
                            response_count:
                              type: integer
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "500":
          $ref: "#/components/responses/InternalServerError"
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: "Use format: Bearer {api_key}"
  schemas:
    ActivityFeedbackV2:
      type: object
      properties:
        _id:
          type: string
          description: Unique identifier
          example: "507f1f77bcf86cd799439011"
        activity_type:
          type: string
          description: Type of activity this feedback is for
          example: "sales_visit"
        activity_id:
          type: string
          description: ID of the related activity
          example: "507f1f77bcf86cd799439012"
        rep:
          type: string
          description: Representative ID
          example: "507f1f77bcf86cd799439013"
        client:
          type: string
          description: Client ID
          example: "507f1f77bcf86cd799439014"
        template_id:
          type: string
          description: Feedback template ID used
          example: "507f1f77bcf86cd799439015"
        overall_satisfaction:
          type: integer
          description: Overall satisfaction rating (1-10 scale)
          minimum: 1
          maximum: 10
          example: 8
        responses:
          type: array
          items:
            type: object
            properties:
              question_id:
                type: string
                description: ID of the question
              question_text:
                type: string
                description: Text of the question
              question_type:
                type: string
                enum: ["rating", "multiple_choice", "text", "yes_no", "scale"]
              response_value:
                oneOf:
                  - type: string
                  - type: integer
                  - type: boolean
                description: The response value
              response_text:
                type: string
                description: Additional text response
        nps_score:
          type: integer
          description: Net Promoter Score (0-10)
          minimum: 0
          maximum: 10
          example: 9
        sentiment_analysis:
          type: object
          properties:
            overall_sentiment:
              type: string
              enum:
                [
                  "very_positive",
                  "positive",
                  "neutral",
                  "negative",
                  "very_negative",
                ]
            confidence_score:
              type: number
              format: float
              minimum: 0
              maximum: 1
            keywords:
              type: array
              items:
                type: string
        completion_time:
          type: integer
          description: Time taken to complete feedback (in seconds)
          example: 180
        completion_rate:
          type: number
          format: float
          description: Percentage of questions completed
          example: 100.0
        session_data:
          type: object
          properties:
            device_type:
              type: string
              enum: ["mobile", "desktop", "tablet"]
            browser:
              type: string
            ip_address:
              type: string
            location:
              type: object
              properties:
                country:
                  type: string
                city:
                  type: string
        follow_up_actions:
          type: array
          items:
            type: object
            properties:
              action_type:
                type: string
                enum: ["call", "email", "visit", "escalate"]
              priority:
                type: string
                enum: ["high", "medium", "low"]
              assigned_to:
                type: string
              due_date:
                type: string
                format: date
              status:
                type: string
                enum: ["pending", "in_progress", "completed"]
        is_anonymous:
          type: boolean
          description: Whether the feedback is anonymous
          example: false
        company_namespace:
          type: array
          items:
            type: string
          description: Company namespace
        createdAt:
          type: string
          format: date-time
          description: Creation timestamp
        modifiedAt:
          type: string
          format: date-time
          description: Last modification timestamp
        SVClient:
          type: integer
          description: Client version
        __v:
          type: integer
          description: Document version
      required:
        - activity_type
        - rep
        - template_id
        - overall_satisfaction
    CreateActivityFeedbackV2Request:
      type: object
      properties:
        activity_type:
          type: string
          description: Type of activity this feedback is for
          example: "sales_visit"
        activity_id:
          type: string
          description: ID of the related activity
          example: "507f1f77bcf86cd799439012"
        rep:
          type: string
          description: Representative ID
          example: "507f1f77bcf86cd799439013"
        client:
          type: string
          description: Client ID
          example: "507f1f77bcf86cd799439014"
        template_id:
          type: string
          description: Feedback template ID used
          example: "507f1f77bcf86cd799439015"
        overall_satisfaction:
          type: integer
          description: Overall satisfaction rating (1-10 scale)
          minimum: 1
          maximum: 10
          example: 8
        responses:
          type: array
          items:
            type: object
            properties:
              question_id:
                type: string
              question_type:
                type: string
                enum: ["rating", "multiple_choice", "text", "yes_no", "scale"]
              response_value:
                oneOf:
                  - type: string
                  - type: integer
                  - type: boolean
              response_text:
                type: string
        nps_score:
          type: integer
          description: Net Promoter Score (0-10)
          minimum: 0
          maximum: 10
        completion_time:
          type: integer
          description: Time taken to complete feedback (in seconds)
        session_data:
          type: object
          properties:
            device_type:
              type: string
              enum: ["mobile", "desktop", "tablet"]
            browser:
              type: string
            ip_address:
              type: string
        is_anonymous:
          type: boolean
          description: Whether the feedback is anonymous
          default: false
        company_namespace:
          type: array
          items:
            type: string
          description: Company namespace
      required:
        - activity_type
        - rep
        - template_id
        - overall_satisfaction
    UpdateActivityFeedbackV2Request:
      type: object
      properties:
        overall_satisfaction:
          type: integer
          description: Overall satisfaction rating (1-10 scale)
          minimum: 1
          maximum: 10
        responses:
          type: array
          items:
            type: object
            properties:
              question_id:
                type: string
              question_type:
                type: string
                enum: ["rating", "multiple_choice", "text", "yes_no", "scale"]
              response_value:
                oneOf:
                  - type: string
                  - type: integer
                  - type: boolean
              response_text:
                type: string
        nps_score:
          type: integer
          description: Net Promoter Score (0-10)
          minimum: 0
          maximum: 10
        follow_up_actions:
          type: array
          items:
            type: object
            properties:
              action_type:
                type: string
                enum: ["call", "email", "visit", "escalate"]
              priority:
                type: string
                enum: ["high", "medium", "low"]
              assigned_to:
                type: string
              due_date:
                type: string
                format: date
              status:
                type: string
                enum: ["pending", "in_progress", "completed"]
        company_namespace:
          type: array
          items:
            type: string
          description: Company namespace
    PagingInfo:
      type: object
      properties:
        total:
          type: integer
          description: Total number of items
        page:
          type: integer
          description: Current page number
        per_page:
          type: integer
          description: Items per page
        pages:
          type: integer
          description: Total number of pages
  responses:
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                example: false
              error:
                type: string
                example: "Invalid request parameters"
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                example: false
              error:
                type: string
                example: "Authentication required"
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                example: false
              error:
                type: string
                example: "Insufficient permissions"
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                example: false
              error:
                type: string
                example: "Resource not found"
    ValidationError:
      description: Validation error
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                example: false
              error:
                type: string
                example: "Validation failed"
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            type: object
            properties:
              success:
                type: boolean
                example: false
              error:
                type: string
                example: "Internal server error"
