github.com/machinefi/w3bstream@v1.6.5-rc9.0.20240426031326-b8c7c4876e72/cmd/srv-applet-mgr/apis/project/get.go (about)

     1  package project
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/pkg/errors"
     7  
     8  	"github.com/machinefi/w3bstream/cmd/srv-applet-mgr/apis/middleware"
     9  	"github.com/machinefi/w3bstream/pkg/depends/kit/httptransport/httpx"
    10  	"github.com/machinefi/w3bstream/pkg/depends/kit/logr"
    11  	"github.com/machinefi/w3bstream/pkg/errors/status"
    12  	"github.com/machinefi/w3bstream/pkg/modules/project"
    13  	"github.com/machinefi/w3bstream/pkg/types"
    14  )
    15  
    16  type GetProject struct {
    17  	httpx.MethodGet
    18  }
    19  
    20  func (r *GetProject) Path() string { return "/data" }
    21  
    22  func (r *GetProject) Output(ctx context.Context) (interface{}, error) {
    23  	ctx, err := middleware.MustCurrentAccountFromContext(ctx).
    24  		WithProjectContextByName(ctx, middleware.MustProjectName(ctx))
    25  	if err != nil {
    26  		return nil, err
    27  	}
    28  	prj := types.MustProjectFromContext(ctx)
    29  	prj.Name, err = middleware.ProjectNameForDisplay(prj.Name)
    30  	if err != nil {
    31  		return nil, status.DeprecatedProject.StatusErr().
    32  			WithDesc("this project is deprecated")
    33  	}
    34  	return prj, nil
    35  }
    36  
    37  type ListProject struct {
    38  	httpx.MethodGet
    39  	project.ListReq
    40  }
    41  
    42  func (r *ListProject) Path() string { return "/datalist" }
    43  
    44  func (r *ListProject) Output(ctx context.Context) (interface{}, error) {
    45  	ctx, l := logr.Start(ctx, "api.ListProject")
    46  	defer l.End()
    47  
    48  	ctx = middleware.MustCurrentAccountFromContext(ctx).WithAccount(ctx)
    49  	rsp, err := project.List(ctx, &r.ListReq)
    50  	if err != nil {
    51  		return nil, err
    52  	}
    53  
    54  	for i := 0; i < len(rsp.Data); i++ {
    55  		v := &rsp.Data[i]
    56  		v.Name, err = middleware.ProjectNameForDisplay(v.Name)
    57  		if err != nil {
    58  			l.WithValues("prj", v.ProjectID).Warn(
    59  				errors.New("this project is deprecated, no prefix"),
    60  			)
    61  			rsp.Data = append(rsp.Data[0:i], rsp.Data[i+1:]...)
    62  			continue
    63  		}
    64  	}
    65  	return rsp, nil
    66  }
    67  
    68  type ListProjectDetail struct {
    69  	httpx.MethodGet
    70  	project.ListReq
    71  }
    72  
    73  func (r *ListProjectDetail) Path() string { return "/detail_list" }
    74  
    75  func (r *ListProjectDetail) Output(ctx context.Context) (interface{}, error) {
    76  	ca := middleware.MustCurrentAccountFromContext(ctx)
    77  
    78  	r.AccountID = ca.AccountID
    79  	return project.ListDetail(types.WithAccount(ctx, &ca.Account), &r.ListReq)
    80  }