Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package controller
- import (
- "challenge-goapi/model"
- "challenge-goapi/usecase"
- "net/http"
- "github.com/gin-gonic/gin"
- )
- type TransactionController struct {
- useCase usecase.TransactionUseCase
- rg *gin.RouterGroup
- }
- func (t *TransactionController) createNewTransaction(g *gin.Context) {
- var payloadBillDetail model.BillDetail
- var payloadBillDetails model.BillDetails
- if err := g.ShouldBindJSON(&payloadBillDetail); err != nil {
- g.JSON(http.StatusBadRequest, gin.H{"err": err.Error()})
- return
- }
- if err := g.ShouldBindJSON(&payloadBillDetails); err != nil {
- g.JSON(http.StatusBadRequest, gin.H{"err": err.Error()})
- return
- }
- transaction, _, err := t.useCase.CreateNewTransaction(payloadBillDetail, payloadBillDetails)
- if err != nil {
- g.JSON(http.StatusInternalServerError, gin.H{"err": "Failed to create new transaction"})
- return
- }
- g.JSON(http.StatusCreated, model.Transaction{Message: "New Transaction has been added to database successfully", Data: transaction})
- }
- func (t *TransactionController) getAllTransaction(g *gin.Context) {
- transactions, err := t.useCase.FindAllTransaction()
- if err != nil {
- g.JSON(http.StatusInternalServerError, gin.H{"err": "Failed to retrieve data transactions"})
- return
- }
- if len(transactions) > 0 {
- g.JSON(http.StatusOK, model.AllTransaction{Message: "List of Transactions", Data: transactions})
- return
- }
- g.JSON(http.StatusOK, gin.H{"message": "List transactions empty"})
- }
- func (t *TransactionController) getTransactionById(g *gin.Context) {
- id := g.Param("id")
- transaction, err := t.useCase.FindTransactionById(id)
- if err != nil {
- g.JSON(http.StatusInternalServerError, gin.H{"err": "Failed to get transaction by ID"})
- return
- }
- g.JSON(http.StatusOK, model.Transaction{Message: "Detail of Transaction", Data: transaction})
- }
- func (t *TransactionController) Route() {
- t.rg.POST("/transactions", t.createNewTransaction)
- t.rg.GET("/transactions", t.getAllTransaction)
- t.rg.GET("/transactions/:id", t.getTransactionById)
- }
- func NewTransactionController(useCase usecase.TransactionUseCase, rg *gin.RouterGroup) *TransactionController {
- return &TransactionController{useCase: useCase, rg: rg}
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement