(ctx context.Context, req *adminv1.DeleteVirtualFileRequest)
| 199 | } |
| 200 | |
| 201 | func (s *Server) DeleteVirtualFile(ctx context.Context, req *adminv1.DeleteVirtualFileRequest) (*adminv1.DeleteVirtualFileResponse, error) { |
| 202 | observability.AddRequestAttributes(ctx, |
| 203 | attribute.String("args.project_id", req.ProjectId), |
| 204 | attribute.String("args.path", req.Path), |
| 205 | ) |
| 206 | |
| 207 | proj, err := s.admin.DB.FindProject(ctx, req.ProjectId) |
| 208 | if err != nil { |
| 209 | return nil, err |
| 210 | } |
| 211 | |
| 212 | claims := auth.GetClaims(ctx) |
| 213 | permissions := claims.ProjectPermissions(ctx, proj.OrganizationID, proj.ID) |
| 214 | forceAccess := claims.Superuser(ctx) && req.SuperuserForceAccess |
| 215 | if !permissions.ManageProd && !forceAccess { |
| 216 | return nil, status.Error(codes.PermissionDenied, "does not have permission to delete virtual files") |
| 217 | } |
| 218 | |
| 219 | environment := req.Environment |
| 220 | if environment == "" { |
| 221 | if claims.OwnerType() == auth.OwnerTypeDeployment { |
| 222 | depl, err := s.admin.DB.FindDeployment(ctx, claims.OwnerID()) |
| 223 | if err != nil { |
| 224 | return nil, err |
| 225 | } |
| 226 | environment = depl.Environment |
| 227 | } else { |
| 228 | environment = "prod" |
| 229 | } |
| 230 | } |
| 231 | |
| 232 | // Directly mark the virtual file as deleted without parsing |
| 233 | err = s.admin.DB.UpdateVirtualFileDeleted(ctx, proj.ID, environment, req.Path) |
| 234 | if err != nil { |
| 235 | return nil, err |
| 236 | } |
| 237 | |
| 238 | return &adminv1.DeleteVirtualFileResponse{}, nil |
| 239 | } |
| 240 | |
| 241 | func virtualFileToDTO(vf *database.VirtualFile) *adminv1.VirtualFile { |
| 242 | return &adminv1.VirtualFile{ |
nothing calls this directly
no test coverage detected