github.com/lino-network/lino@v0.6.11/x/post/handler.go (about)

     1  package post
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  
     7  	sdk "github.com/cosmos/cosmos-sdk/types"
     8  
     9  	linotypes "github.com/lino-network/lino/types"
    10  	types "github.com/lino-network/lino/x/post/types"
    11  )
    12  
    13  type CreatePostMsg = types.CreatePostMsg
    14  type UpdatePostMsg = types.UpdatePostMsg
    15  type DeletePostMsg = types.DeletePostMsg
    16  type DonateMsg = types.DonateMsg
    17  type IDADonateMsg = types.IDADonateMsg
    18  
    19  // NewHandler - Handle all "post" type messages.
    20  func NewHandler(pm PostKeeper) sdk.Handler {
    21  	return func(ctx sdk.Context, msg sdk.Msg) sdk.Result {
    22  		switch msg := msg.(type) {
    23  		case CreatePostMsg:
    24  			return handleCreatePostMsg(ctx, msg, pm)
    25  		case UpdatePostMsg:
    26  			return handleUpdatePostMsg(ctx, msg, pm)
    27  		case DeletePostMsg:
    28  			return handleDeletePostMsg(ctx, msg, pm)
    29  		case DonateMsg:
    30  			return handleDonateMsg(ctx, msg, pm)
    31  		case IDADonateMsg:
    32  			return handleIDADonateMsg(ctx, msg, pm)
    33  		default:
    34  			errMsg := fmt.Sprintf("Unrecognized post msg type: %v", reflect.TypeOf(msg).Name())
    35  			return sdk.ErrUnknownRequest(errMsg).Result()
    36  		}
    37  	}
    38  }
    39  
    40  // Handle createPostMsg
    41  func handleCreatePostMsg(ctx sdk.Context, msg CreatePostMsg, pm PostKeeper) sdk.Result {
    42  	err := pm.CreatePost(ctx, msg.Author, msg.PostID, msg.CreatedBy, msg.Content, msg.Title)
    43  	if err != nil {
    44  		return err.Result()
    45  	}
    46  	return sdk.Result{}
    47  }
    48  
    49  func handleUpdatePostMsg(ctx sdk.Context, msg UpdatePostMsg, pm PostKeeper) sdk.Result {
    50  	err := pm.UpdatePost(ctx, msg.Author, msg.PostID, msg.Title, msg.Content)
    51  	if err != nil {
    52  		return err.Result()
    53  	}
    54  	return sdk.Result{}
    55  }
    56  
    57  func handleDeletePostMsg(ctx sdk.Context, msg DeletePostMsg, pm PostKeeper) sdk.Result {
    58  	err := pm.DeletePost(ctx, linotypes.GetPermlink(msg.Author, msg.PostID))
    59  	if err != nil {
    60  		return err.Result()
    61  	}
    62  	return sdk.Result{}
    63  }
    64  
    65  // Handle DonateMsg
    66  func handleDonateMsg(ctx sdk.Context, msg DonateMsg, pm PostKeeper) sdk.Result {
    67  	amount, err := linotypes.LinoToCoin(msg.Amount)
    68  	if err != nil {
    69  		return err.Result()
    70  	}
    71  	err = pm.LinoDonate(ctx, msg.Username, amount, msg.Author, msg.PostID, msg.FromApp)
    72  	if err != nil {
    73  		return err.Result()
    74  	}
    75  	return sdk.Result{}
    76  }
    77  
    78  func handleIDADonateMsg(ctx sdk.Context, msg IDADonateMsg, pm PostKeeper) sdk.Result {
    79  	// amount must be an positive integer.
    80  	amount, err := msg.Amount.ToMiniIDA()
    81  	if err != nil {
    82  		return err.Result()
    83  	}
    84  	err = pm.IDADonate(ctx, msg.Username, amount, msg.Author, msg.PostID, msg.App, msg.Signer)
    85  	if err != nil {
    86  		return err.Result()
    87  	}
    88  	return sdk.Result{}
    89  }