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 }