MCPcopy Index your code
hub / github.com/coder/coder / requestTemplate

Function requestTemplate

coderd/workspaces.go:961–1019  ·  view source on GitHub ↗
(ctx context.Context, req codersdk.CreateWorkspaceRequest, db database.Store)

Source from the content-addressed store, hash-verified

959}
960
961func requestTemplate(ctx context.Context, req codersdk.CreateWorkspaceRequest, db database.Store) (database.Template, error) {
962 // If we were given a `TemplateVersionID`, we need to determine the `TemplateID` from it.
963 templateID := req.TemplateID
964
965 if templateID == uuid.Nil {
966 templateVersion, err := db.GetTemplateVersionByID(ctx, req.TemplateVersionID)
967 if httpapi.Is404Error(err) {
968 return database.Template{}, httperror.NewResponseError(http.StatusBadRequest, codersdk.Response{
969 Message: fmt.Sprintf("Template version %q doesn't exist.", req.TemplateVersionID),
970 Validations: []codersdk.ValidationError{{
971 Field: "template_version_id",
972 Detail: "template not found",
973 }},
974 })
975 }
976 if err != nil {
977 return database.Template{}, httperror.NewResponseError(http.StatusInternalServerError, codersdk.Response{
978 Message: "Internal error fetching template version.",
979 Detail: err.Error(),
980 })
981 }
982 if templateVersion.Archived {
983 return database.Template{}, httperror.NewResponseError(http.StatusInternalServerError, codersdk.Response{
984 Message: "Archived template versions cannot be used to make a workspace.",
985 Validations: []codersdk.ValidationError{
986 {
987 Field: "template_version_id",
988 Detail: "template version archived",
989 },
990 },
991 })
992 }
993
994 templateID = templateVersion.TemplateID.UUID
995 }
996
997 template, err := db.GetTemplateByID(ctx, templateID)
998 if httpapi.Is404Error(err) {
999 return database.Template{}, httperror.NewResponseError(http.StatusBadRequest, codersdk.Response{
1000 Message: fmt.Sprintf("Template %q doesn't exist.", templateID),
1001 Validations: []codersdk.ValidationError{{
1002 Field: "template_id",
1003 Detail: "template not found",
1004 }},
1005 })
1006 }
1007 if err != nil {
1008 return database.Template{}, httperror.NewResponseError(http.StatusInternalServerError, codersdk.Response{
1009 Message: "Internal error fetching template.",
1010 Detail: err.Error(),
1011 })
1012 }
1013 if template.Deleted {
1014 return database.Template{}, httperror.NewResponseError(http.StatusNotFound, codersdk.Response{
1015 Message: fmt.Sprintf("Template %q has been deleted!", template.Name),
1016 })
1017 }
1018 return template, nil

Callers 2

postUserWorkspacesMethod · 0.85
createWorkspaceFunction · 0.85

Calls 5

Is404ErrorFunction · 0.92
NewResponseErrorFunction · 0.92
GetTemplateByIDMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected