Skip to content

Conversation

@edospadoni
Copy link
Member

@edospadoni edospadoni commented Jan 19, 2026

Summary

This PR adds a complete applications management system that extracts and tracks applications from NS8 system inventories.

Changes

New Features:

  • Applications table and migrations for storing application instances extracted from system inventory
  • Full CRUD API endpoints for applications at /api/applications
  • Organization assignment/unassignment for applications
  • Application statistics and totals endpoint
  • Filter endpoints for types, versions, systems, and organizations
  • Export functionality support

Naming Refactor:

  • Renamed existing applications (Logto third-party apps) → third_party_applications
  • Renamed ns8_applicationsapplications (inventory apps)
  • Updated all routes, handlers, models, and OpenAPI specification accordingly

New Files:

  • database/migrations/001_add_applications.sql - Database migration
  • database/migrations/001_add_applications_rollback.sql - Rollback migration
  • entities/local_applications.go - Repository layer
  • services/local/applications.go - Service layer
  • methods/applications.go - HTTP handlers
  • methods/third_party_applications.go - Renamed third-party apps handler
  • models/applications.go - Application models
  • models/third_party_applications.go - Third-party app models

References:

@github-actions
Copy link
Contributor

🔗 Redirect URIs Added to Logto

The following redirect URIs have been automatically added to the Logto application configuration:

Redirect URIs:

  • https://my-frontend-qa-pr-32.onrender.com/login-redirect
  • https://my-proxy-qa-pr-32.onrender.com/login-redirect

Post-logout redirect URIs:

  • https://my-frontend-qa-pr-32.onrender.com/login
  • https://my-proxy-qa-pr-32.onrender.com/login

These will be automatically removed when the PR is closed or merged.

@github-actions
Copy link
Contributor

github-actions bot commented Jan 19, 2026

🚨 Breaking My API change detected

Preview documentation

Structural change details

Added (19)

  • DELETE /applications/{id}
  • GET /applications/totals
  • GET /applications/{id}
  • GET /filters/applications/organizations
  • GET /filters/applications/systems
  • GET /filters/applications/types
  • GET /filters/applications/versions
  • GET /filters/users/organizations
  • GET /filters/users/roles
  • GET /third-party-applications
  • PATCH /applications/{id}/assign
  • PATCH /applications/{id}/unassign
  • PATCH /customers/{id}/reactivate
  • PATCH /customers/{id}/suspend
  • PATCH /distributors/{id}/reactivate
  • PATCH /distributors/{id}/suspend
  • PATCH /resellers/{id}/reactivate
  • PATCH /resellers/{id}/suspend
  • PUT /applications/{id}

Modified (17)

  • GET /applications
    • Response modified: 200
      • Content type modified: application/json
        • [Breaking] Property modified: data
          • Type went from array[object] to object [Breaking]
          • Properties added: items, total, page, page_size, total_pages
    • [Breaking] Response removed: 500
      • Removing a resource is always breaking unless it was deprecated before [Breaking]
    • Query parameters added: page, page_size, search, sort_by, sort_direction, type, version, system_id, organization_id, status
    • Response added: 403
  • GET /customers
    • Response modified: 200
      • Content type modified: application/json
        • Property modified: data
          • Property modified: customers
    • Query parameter added: status
  • GET /customers/{id}
    • Response modified: 200
      • Content type modified: application/json
        • Property modified: data
          • Property added: suspended_at
  • GET /distributors
    • Response modified: 200
      • Content type modified: application/json
        • Property modified: data
          • Property modified: distributors
    • Query parameter added: status
  • GET /distributors/{id}
    • Response modified: 200
      • Content type modified: application/json
        • Property modified: data
          • Property added: suspended_at
  • [Breaking] GET /filters/systems/created-by
    • Path went from /filters/created-by to /filters/systems/created-by (same operationId) [Breaking]
  • [Breaking] GET /filters/systems/organizations
    • Path went from /filters/organizations to /filters/systems/organizations (same operationId) [Breaking]
  • [Breaking] GET /filters/systems/products
    • Path went from /filters/products to /filters/systems/products (same operationId) [Breaking]
  • [Breaking] GET /filters/systems/versions
    • Path went from /filters/versions to /filters/systems/versions (same operationId) [Breaking]
  • GET /resellers
    • Response modified: 200
      • Content type modified: application/json
        • Property modified: data
          • Property modified: resellers
    • Query parameter added: status
  • GET /resellers/{id}
    • Response modified: 200
      • Content type modified: application/json
        • Property modified: data
          • Property added: suspended_at
  • POST /customers
    • Response modified: 201
      • Content type modified: application/json
        • Property modified: data
          • Property added: suspended_at
  • POST /distributors
    • Response modified: 201
      • Content type modified: application/json
        • Property modified: data
          • Property added: suspended_at
  • POST /resellers
    • Response modified: 201
      • Content type modified: application/json
        • Property modified: data
          • Property added: suspended_at
  • PUT /customers/{id}
    • Response modified: 200
      • Content type modified: application/json
        • Property modified: data
          • Property added: suspended_at
  • PUT /distributors/{id}
    • Response modified: 200
      • Content type modified: application/json
        • Property modified: data
          • Property added: suspended_at
  • PUT /resellers/{id}
    • Response modified: 200
      • Content type modified: application/json
        • Property modified: data
          • Property added: suspended_at
Powered by Bump.sh

@edospadoni edospadoni marked this pull request as draft January 19, 2026 14:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants