artifacts.go

Overview

The artifacts.go file defines the ArtifactsAPIRouter, responsible for configuring and exposing REST API routes related to artifact management within the system. Specifically, it maps HTTP endpoints to the corresponding handlers provided by the ArtifactsAPIController. This router manages artifact-related operations scoped under application, user, and session hierarchies, enabling clients to list, retrieve (including specific versions), and delete artifacts associated with user sessions.

This file is part of the Router Setup subtopic and contributes to the overall REST API and Web Launchers functionality by routing HTTP requests to artifact-specific controller handlers.

Entities and Their Roles

ArtifactsAPIRouter

Detailed Explanation of Methods and Routes

NewArtifactsAPIRouter

func NewArtifactsAPIRouter(controller *controllers.ArtifactsAPIController) *ArtifactsAPIRouter {
	return &ArtifactsAPIRouter{artifactsController: controller}
}
controller := controllers.NewArtifactsAPIController(...)
router := NewArtifactsAPIRouter(controller)

This constructor method is typically called during the initialization of the REST API server to set up routing for artifact endpoints.

Routes

func (r *ArtifactsAPIRouter) Routes() Routes {
	return Routes{
		Route{
			Name:        "ListArtifacts",
			Methods:     []string{http.MethodGet},
			Pattern:     "/apps/{app_name}/users/{user_id}/sessions/{session_id}/artifacts",
			HandlerFunc: r.artifactsController.ListArtifactsHandler,
		},
		Route{
			Name:        "LoadArtifact",
			Methods:     []string{http.MethodGet},
			Pattern:     "/apps/{app_name}/users/{user_id}/sessions/{session_id}/artifacts/{artifact_name}",
			HandlerFunc: r.artifactsController.LoadArtifactHandler,
		},
		Route{
			Name:        "LoadArtifact",
			Methods:     []string{http.MethodGet},
			Pattern:     "/apps/{app_name}/users/{user_id}/sessions/{session_id}/artifacts/{artifact_name}/versions/{version}",
			HandlerFunc: r.artifactsController.LoadArtifactVersionHandler,
		},
		Route{
			Name:        "DeleteArtifact",
			Methods:     []string{http.MethodDelete, http.MethodOptions},
			Pattern:     "/apps/{app_name}/users/{user_id}/sessions/{session_id}/artifacts/{artifact_name}",
			HandlerFunc: r.artifactsController.DeleteArtifactHandler,
		},
	}
}

Important Implementation Details

Interaction with Other Components

Visual Diagram: ArtifactsAPIRouter Structure and Routes

classDiagram
class ArtifactsAPIRouter {
-artifactsController: ArtifactsAPIController
+NewArtifactsAPIRouter()
+Routes()
}
class Route {
+Name
+Methods
+Pattern
+HandlerFunc
}
ArtifactsAPIRouter --> "1" ArtifactsAPIController
ArtifactsAPIRouter "1" o-- "4" Route : defines
Route : "ListArtifacts\nGET /apps/{app}/users/{user}/sessions/{session}/artifacts"
Route : "LoadArtifact\nGET /.../artifacts/{artifact_name}"
Route : "LoadArtifactVersion\nGET /.../artifacts/{artifact_name}/versions/{version}"
Route : "DeleteArtifact\nDELETE /.../artifacts/{artifact_name}"

This class diagram represents ArtifactsAPIRouter holding a reference to its controller and defining four routes corresponding to artifact operations. Each route specifies an HTTP method, URL pattern, and handler function.


References