package operator import ( "context" "fmt" "mstore/app/descr" "mstore/pkg/auxtool" "mstore/pkg/auxuuid" ) type CreateGrantParams struct { AccountID string `json:"accountID"` Right string `json:"operation"` Pattern string `json:"pattern"` } type CreateGrantResult struct { GrantID string `json:"grantId"` } func (oper *Operator) CreateGrant(ctx context.Context, params *CreateGrantParams) (*CreateGrantResult, error) { var err error res := &CreateGrantResult{} if params.AccountID == "" { err := fmt.Errorf("Empty accountId parameters") return res, err } if params.Right == "" { err := fmt.Errorf("Empty operation parameter") return res, err } if params.Pattern == "" { err := fmt.Errorf("Empty pattern parameter") return res, err } grantExists, _, err := oper.mdb.GetGrantByAccoundIDRightPattern(ctx, params.AccountID, params.Right, params.Pattern) if err != nil { return res, err } if grantExists { err := fmt.Errorf("Grant with this parapeters already exists") return res, err } now := auxtool.TimeNow() grantDescr := &descr.Grant{ ID: auxuuid.NewUUID(), AccountID: params.AccountID, Right: params.Right, Pattern: params.Pattern, CreatedAt: now, UpdatedAt: now, } err = oper.mdb.InsertGrant(ctx, grantDescr) if err != nil { return res, err } res.GrantID = grantDescr.ID return res, err } type UpdateGrantParams struct { GrantID string NewPattern string } type UpdateGrantResult struct{} func (oper *Operator) UpdateGrant(ctx context.Context, params *UpdateGrantParams) (*UpdateGrantResult, error) { var err error res := &UpdateGrantResult{} if params.GrantID == "" { err := fmt.Errorf("Empty grantId parameter") return res, err } var grantDescr *descr.Grant var grantExists bool grantExists, grantDescr, err = oper.mdb.GetGrantByID(ctx, params.GrantID) if err != nil { return res, err } if !grantExists { err := fmt.Errorf("Grant with ID %s dont exists", params.GrantID) return res, err } now := auxtool.TimeNow() if params.NewPattern != "" { grantDescr.UpdatedAt = now grantDescr.Pattern = params.NewPattern } err = oper.mdb.UpdateGrantByID(ctx, grantDescr.ID, grantDescr) if err != nil { return res, err } return res, err } type DeleteGrantParams struct { GrantID string `json:"grantId"` } type DeleteGrantResult struct{} func (oper *Operator) DeleteGrant(ctx context.Context, params *DeleteGrantParams) (*DeleteGrantResult, error) { var err error res := &DeleteGrantResult{} if params.GrantID == "" { err := fmt.Errorf("Empty grantId parameter") return res, err } var grantDescr *descr.Grant var grantExists bool grantExists, grantDescr, err = oper.mdb.GetGrantByID(ctx, params.GrantID) if err != nil { return res, err } if !grantExists { err := fmt.Errorf("Grant with ID %s dont exists", params.GrantID) return res, err } err = oper.mdb.DeleteGrantByID(ctx, grantDescr.ID) if err != nil { return res, err } return res, err } type ListGrantsParams struct { AccountID string `json:"accountId"` } type ListGrantsResult struct { Grants []descr.Grant `json:"grants"` } func (oper *Operator) ListGrants(ctx context.Context, params *ListGrantsParams) (*ListGrantsResult, error) { var err error res := &ListGrantsResult{ Grants: make([]descr.Grant, 0), } grantDescrs, err := oper.mdb.ListGrantsByAccountID(ctx, params.AccountID) if err != nil { return res, err } res.Grants = grantDescrs return res, err } type GetGrantParams struct { GrantID string `json:"grantId"` } type GetGrantResult struct { Grant *descr.Grant `json:"grant"` } func (oper *Operator) GetGrant(ctx context.Context, params *GetGrantParams) (*GetGrantResult, error) { var err error res := &GetGrantResult{} if params.GrantID == "" { err := fmt.Errorf("Empty grantId parameter") return res, err } var grantDescr *descr.Grant var grantExists bool grantExists, grantDescr, err = oper.mdb.GetGrantByID(ctx, params.GrantID) if err != nil { return res, err } if !grantExists { err := fmt.Errorf("Grant with ID %s dont exists", params.GrantID) return res, err } res.Grant = grantDescr return res, err }