(ctx context.Context, req codersdk.CreateWorkspaceRequest, db database.Store)
| 959 | } |
| 960 | |
| 961 | func 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 |
no test coverage detected