/* * Copyright 2026 Oleg Borodin * * This work is published and licensed under a Creative Commons * Attribution-NonCommercial-NoDerivatives 4.0 International License. * * Distribution of this work is permitted, but commercial use and * modifications are strictly prohibited. */ package accoper import ( "context" "fmt" "mstore/pkg/descr" ) type DeleteAccountParams struct { Username string `json:"username"` AccountID string `json:"accountId"` } type DeleteAccountResult struct{} func (oper *Operator) DeleteAccount(ctx context.Context, operatorID string, params *DeleteAccountParams) (*DeleteAccountResult, error) { var err error res := &DeleteAccountResult{} if params.Username == "" && params.AccountID == "" { err := fmt.Errorf("Empty username and accountId parameter") return res, err } var accountDescr *descr.Account var accountExists bool switch { case params.AccountID != "": accountExists, accountDescr, err = oper.mdb.GetAccountByID(ctx, params.AccountID) if err != nil { return res, err } if !accountExists { err := fmt.Errorf("Account with ID %s dont exists", params.AccountID) return res, err } case params.Username != "": accountExists, accountDescr, err = oper.mdb.GetAccountByUsername(ctx, params.Username) if err != nil { return res, err } if !accountExists { err := fmt.Errorf("Account with name %s dont exists", params.Username) return res, err } default: err := fmt.Errorf("Empty username and accountId parameter") return res, err } if accountDescr == nil { err := fmt.Errorf("Null account desriptor") return res, err } err = oper.mdb.DeleteAllGrantsForAccountID(ctx, accountDescr.ID) if err != nil { return res, err } err = oper.mdb.DeleteAccountByID(ctx, accountDescr.ID) if err != nil { return res, err } return res, err }