openapi: 3.1.0
info:
  title: Galaxy Founder Unified API
  version: "1.0.0"
  description: Access news, blogs, products, jobs, FAQs, and more from GalaxyFounder.com

servers:
  - url: https://www.galaxyfounder.com
    description: Production server

paths:
  /api/news:
    get:
      summary: Get news articles
      operationId: getNews
      parameters:
        - name: page
          in: query
          required: false
          description: Page number
          schema:
            type: integer
        - name: size
          in: query
          required: false
          description: Number of items per page
          schema:
            type: integer
      responses:
        '200':
          description: News response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewsPaginated'

  /api/blog:
    get:
      summary: Get blog posts
      operationId: getBlogs
      parameters:
        - name: page
          in: query
          required: false
          description: Page number
          schema:
            type: integer
        - name: size
          in: query
          required: false
          description: Number of items per page
          schema:
            type: integer
      responses:
        '200':
          description: Blog response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BlogPaginated'

  /api/jobs:
    get:
      summary: Get job listings
      operationId: getJobs
      parameters:
        - name: page
          in: query
          required: false
          description: Page number
          schema:
            type: integer
        - name: size
          in: query
          required: false
          description: Number of items per page
          schema:
            type: integer
      responses:
        '200':
          description: Job response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobPaginated'

  /api/faq:
    get:
      summary: Get FAQs
      operationId: getFAQs
      responses:
        '200':
          description: FAQ response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FAQPaginated'

  /api/event:
    get:
      summary: Get upcoming events
      operationId: getEvents
      parameters:
        - name: page
          in: query
          required: false
          description: Page number
          schema:
            type: integer
        - name: size
          in: query
          required: false
          description: Number of items per page
          schema:
            type: integer
      responses:
        '200':
          description: Event response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventPaginated'

  /api/product:
    get:
      summary: Get products
      operationId: getProducts
      parameters:
        - name: page
          in: query
          required: false
          description: Page number
          schema:
            type: integer
        - name: size
          in: query
          required: false
          description: Number of items per page
          schema:
            type: integer
      responses:
        '200':
          description: Product response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductPaginated'

  /api/local-business:
    get:
      summary: Get local businesses
      operationId: getLocalBusinesses
      responses:
        '200':
          description: Business response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BusinessPaginated'

  /api/lists:
    get:
      summary: Get listicles
      operationId: getListicles
      responses:
        '200':
          description: Listicles response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListiclePaginated'

  /api/press-release:
    get:
      summary: Get press releases
      operationId: getPressReleases
      responses:
        '200':
          description: Press release response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PressPaginated'

components:
  schemas:
    BaseItem:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        description:
          type: string
        url:
          type: string
          format: uri
        image_url:
          type: string
          format: uri
        published_at:
          type: string
          format: date-time
        author:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
              image:
                type: string
                format: uri
              title:
                type: string
              description:
                type: string
              authoSocMedias:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: integer
                    icon:
                      type: string
                    position:
                      type: integer
                    link:
                      type: string
                      format: uri
        keyword:
          type: string
        quillContent:
          type: string

    NewsPaginated:
      type: object
      properties:
        success:
          type: boolean
        data:
          type: object
          properties:
            totalItems:
              type: integer
            totalPages:
              type: integer
            currentPage:
              type: integer
            articles:
              type: array
              items:
                $ref: '#/components/schemas/BaseItem'

    BlogPaginated:
      allOf:
        - $ref: '#/components/schemas/NewsPaginated'

    JobPaginated:
      allOf:
        - $ref: '#/components/schemas/NewsPaginated'

    FAQPaginated:
      allOf:
        - $ref: '#/components/schemas/NewsPaginated'

    EventPaginated:
      allOf:
        - $ref: '#/components/schemas/NewsPaginated'

    ProductPaginated:
      allOf:
        - $ref: '#/components/schemas/NewsPaginated'

    BusinessPaginated:
      allOf:
        - $ref: '#/components/schemas/NewsPaginated'

    ListiclePaginated:
      allOf:
        - $ref: '#/components/schemas/NewsPaginated'

    PressPaginated:
      allOf:
        - $ref: '#/components/schemas/NewsPaginated'
