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 }